From 61621b4c6e4a3f49e6994f31aff1703a880c14d9 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Wed, 13 Sep 2017 17:27:42 +0200 Subject: [PATCH 01/28] chore: configure circle --- circle.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/circle.yml b/circle.yml index 39ea679..1ddb868 100644 --- a/circle.yml +++ b/circle.yml @@ -32,6 +32,13 @@ test: - yarn run test:coverage deployment: + gamma: + branch: gamma + commands: + - yarn run release:git-config + - yarn run release:npm-token + - yarn run release:beta + - npm publish --tag gamma staging: branch: devel commands: @@ -53,3 +60,4 @@ experimental: only: - master - devel + - gamma From 0ca563bf035dbdddc60b1911ef59e8bee868f482 Mon Sep 17 00:00:00 2001 From: syncano Date: Wed, 13 Sep 2017 15:29:58 +0000 Subject: [PATCH 02/28] chore(package.json): bump to 0.8.2-1 [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f20f22d..cf2670c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-0", + "version": "0.8.2-1", "description": "A library to intereact with the Syncano API on a server side", "main": "lib/index.js", "author": "Syncano Inc.", From 880ec67b1c458a6aa7ce9a9917f05f408a015116 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 15:50:38 +0200 Subject: [PATCH 03/28] feat: refactor code to use ctx --- .vscode/settings.json | 13 +++ package.json | 26 +----- src/account.js | 8 +- src/channel.js | 12 +-- src/class.js | 19 ++-- src/collection.js | 2 +- src/data.js | 208 +++++++++++++++++++++-------------------- src/errors.js | 8 +- src/event.js | 17 ++-- src/index.js | 13 --- src/instance.js | 22 ++--- src/logger.js | 35 ++++--- src/query-builder.js | 43 ++++++--- src/response.js | 69 +++++++------- src/server.js | 60 ++++-------- src/settings.js | 35 ++----- src/socket.js | 14 +-- src/users.js | 5 +- src/utils.js | 19 +--- tests/e2e/class.js | 9 +- tests/e2e/data.js | 106 ++++++++++----------- tests/unit/data.js | 90 +++++++++++------- tests/unit/errors.js | 10 +- tests/unit/response.js | 10 +- 24 files changed, 414 insertions(+), 439 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..762a622 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "files.exclude": { + "**/lib": true, + "**/.vscode": true, + "**/.nyc_output": true, + "**/docs": true, + "**/coverage": true, + "**/e2e-tests": true + }, + "standard.options": { + "env": ["mocha"] + } +} diff --git a/package.json b/package.json index f20f22d..92ef834 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "build": "npm-run-all build:*", "build:lib": "babel src --out-dir lib", - "build:docs": "jsdoc -c ./conf.json -t ./node_modules/ink-docstrap/template -R README.md -d ./docs -r ./src -u ./tutorials", + "build:docs": "jsdoc -c ./conf.json -t ./node_modules/ink-docstrap/template -R README.md -d ./docs -r ./src", "clean": "npm-run-all clean:*", "clean:lib": "rimraf ./lib", "clean:docs": "rimraf ./docs", @@ -75,28 +75,8 @@ "should": "^8.2.2", "xo": "^0.18.0" }, - "xo": { - "semicolon": false, - "space": true, - "esnext": true, - "envs": [ - "node", - "mocha" - ], - "globals": [ - "CONFIG", - "META" - ], - "overrides": [ - { - "files": "tests/**/*.js", - "rules": { - "prefer-arrow-callback": [ - "off" - ] - } - } - ] + "standard": { + "env": [ "mocha" ] }, "config": { "commitizen": { diff --git a/src/account.js b/src/account.js index 62a37c0..f14b29d 100644 --- a/src/account.js +++ b/src/account.js @@ -1,13 +1,12 @@ import QueryBuilder from './query-builder' -import {buildSyncanoURL} from './utils' /** * Syncano account query builder * @property {Function} */ class Account extends QueryBuilder { - url() { - return `${buildSyncanoURL()}/account/` + url () { + return `${this._getSyncanoURL()}/account/` } /** @@ -18,12 +17,13 @@ class Account extends QueryBuilder { * @example {@lang javascript} * const account = await account.get('0aad29dd0be2bcebb741525b9c5901e55cf43e98') */ - get(authKey) { + get (authKey) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { const headers = { 'X-API-KEY': authKey } + fetch(this.url(), {}, headers) .then(res => resolve(res)) .catch(err => reject(err)) diff --git a/src/channel.js b/src/channel.js index c43541e..8137817 100644 --- a/src/channel.js +++ b/src/channel.js @@ -1,14 +1,14 @@ import QueryBuilder from './query-builder' -import {buildInstanceURL} from './utils' /** * Syncano account query builder * @property {Function} */ class Channel extends QueryBuilder { - url() { + url () { const {instanceName} = this.instance - return `${buildInstanceURL(instanceName)}/channels/default/publish/` + + return `${this._getInstanceURL(instanceName)}/channels/default/publish/` } /** @@ -19,7 +19,7 @@ class Channel extends QueryBuilder { * @example {@lang javascript} * const instance = await channel.publish('room_name', payload={}) */ - publish(room, payload) { + publish (room, payload) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { @@ -27,9 +27,7 @@ class Channel extends QueryBuilder { method: 'POST', body: JSON.stringify({room, payload}) } - fetch(this.url(), options) - .then(resolve) - .catch(reject) + fetch(this.url(), options).then(resolve).catch(reject) }) } } diff --git a/src/class.js b/src/class.js index e5f34a0..ffc0657 100644 --- a/src/class.js +++ b/src/class.js @@ -1,14 +1,13 @@ import QueryBuilder from './query-builder' -import {buildInstanceURL} from './utils' /** * Syncano account query builder * @property {Function} */ class Class extends QueryBuilder { - url(className) { + url (className) { const {instanceName} = this.instance - const baseUrl = `${buildInstanceURL(instanceName)}/classes/` + const baseUrl = `${this._getInstanceURL(instanceName)}/classes/` return className ? `${baseUrl}${className}/` : baseUrl } @@ -21,7 +20,7 @@ class Class extends QueryBuilder { * @example {@lang javascript} * const instance = await class.create({name: 'class_name'}) */ - create(params) { + create (params) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { @@ -29,9 +28,8 @@ class Class extends QueryBuilder { method: 'POST', body: JSON.stringify(params) } - fetch(this.url(), options) - .then(resolve) - .catch(reject) + + fetch(this.url(), options).then(resolve).catch(reject) }) } @@ -43,16 +41,15 @@ class Class extends QueryBuilder { * @example {@lang javascript} * await syncanoClass.delete('class_name') */ - delete(className) { + delete (className) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { const options = { method: 'DELETE' } - fetch(this.url(className), options) - .then(resolve) - .catch(reject) + + fetch(this.url(className), options).then(resolve).catch(reject) }) } } diff --git a/src/collection.js b/src/collection.js index 618f4e1..1b48122 100644 --- a/src/collection.js +++ b/src/collection.js @@ -3,7 +3,7 @@ * @link https://laravel.com/docs/5.3/collections */ export default class Collection { - constructor(data) { + constructor (data) { this.data = data } } diff --git a/src/data.js b/src/data.js index 80dbf51..1bc2a76 100644 --- a/src/data.js +++ b/src/data.js @@ -5,15 +5,15 @@ import get from 'lodash.get' import merge from 'lodash.merge' import QueryBuilder from './query-builder' import {NotFoundError} from './errors' -import {buildInstanceURL} from './utils' + /** * Syncano server * @property {Function} query Instance of syncano DataObject */ class Data extends QueryBuilder { - url(id) { + url (id) { const {instanceName, className} = this.instance - let url = `${buildInstanceURL(instanceName)}/classes/${className}/objects/${id ? id + '/' : ''}` + let url = `${this._getInstanceURL(instanceName)}/classes/${className}/objects/${id ? id + '/' : ''}` if (this._url !== undefined) { url = this._url @@ -24,38 +24,41 @@ class Data extends QueryBuilder { return query ? `${url}?${query}` : url } - _batchBodyBuilder(body) { + _batchBodyBuilder (body) { const {instanceName, className, apiVersion} = this.instance const path = `/${apiVersion}/instances/${instanceName}/classes/${className}/objects/` - return body.reduce((data, item) => { - const singleRequest = { - method: 'POST', - path - } + return body.reduce( + (data, item) => { + const singleRequest = { + method: 'POST', + path + } - if (Array.isArray(item)) { - singleRequest.method = 'PATCH' - singleRequest.path = `${path}${item[0]}/` - singleRequest.body = JSON.stringify(item[1]) - } else if (isNaN(item) === false) { - singleRequest.method = 'DELETE' - singleRequest.path = `${path}${item}/` - } else { - singleRequest.body = JSON.stringify(item) - } + if (Array.isArray(item)) { + singleRequest.method = 'PATCH' + singleRequest.path = `${path}${item[0]}/` + singleRequest.body = JSON.stringify(item[1]) + } else if (isNaN(item) === false) { + singleRequest.method = 'DELETE' + singleRequest.path = `${path}${item}/` + } else { + singleRequest.body = JSON.stringify(item) + } - data.requests.push(singleRequest) + data.requests.push(singleRequest) - return data - }, {requests: []}) + return data + }, + {requests: []} + ) } - _batchFetchObject(body) { + _batchFetchObject (body) { const {instanceName} = this.instance return { - url: `${buildInstanceURL(instanceName)}/batch/`, + url: `${this._getInstanceURL(instanceName)}/batch/`, method: 'POST', body: JSON.stringify(this._batchBodyBuilder(body)) } @@ -73,7 +76,7 @@ class Data extends QueryBuilder { * // Get 10 posts * const posts = await data.posts.take(10).list() */ - list() { + list () { let result = [] const self = this const {baseUrl, relationships, instance, mappedFields, _mapFields} = this @@ -83,7 +86,7 @@ class Data extends QueryBuilder { return new Promise((resolve, reject) => { request(this.url()) - function request(url) { + function request (url) { fetch(url) .then(saveToResult) .then(loadNextPage) @@ -94,13 +97,13 @@ class Data extends QueryBuilder { .catch(err => reject(err)) } - function saveToResult(response) { + function saveToResult (response) { result = result.concat(response.objects) return response } - function loadNextPage(response) { + function loadNextPage (response) { const hasNextPageMeta = response.next const hasNotEnoughResults = pageSize === 0 || pageSize > result.length @@ -111,7 +114,7 @@ class Data extends QueryBuilder { } } - function resolveRelatedModels(shouldResolve) { + function resolveRelatedModels (shouldResolve) { if (shouldResolve === false) { return } @@ -155,15 +158,19 @@ class Data extends QueryBuilder { ids = Array.isArray(ids[0]) ? ids[0] : ids if (target === 'user') { - load._url = `${buildInstanceURL(instance.instanceName)}/users/` + load._url = `${this._getInstanceURL(instance.instanceName)}/users/` } load.instance = self.instance load.instance.className = target - load.where('id', 'in', ids).list().then(items => { - resolve({target: reference, items}) - }).catch(reject) + load + .where('id', 'in', ids) + .list() + .then(items => { + resolve({target: reference, items}) + }) + .catch(reject) }) }) @@ -185,7 +192,7 @@ class Data extends QueryBuilder { }) } - function replaceCustomTypesWithValue(shouldResolve) { + function replaceCustomTypesWithValue (shouldResolve) { if (shouldResolve === false) { return } @@ -209,7 +216,7 @@ class Data extends QueryBuilder { return true } - function mapResultFields(shouldResolve) { + function mapResultFields (shouldResolve) { if (shouldResolve === false) { return } @@ -219,7 +226,7 @@ class Data extends QueryBuilder { return true } - function resolveIfFinished(shouldResolve) { + function resolveIfFinished (shouldResolve) { if (shouldResolve) { if (pageSize !== 0) { result = result.slice(0, pageSize) @@ -231,15 +238,18 @@ class Data extends QueryBuilder { }) } - _mapFields(items, fields) { - return fields.length === 0 ? items : items.map(item => - Object.keys(fields).reduce((all, key) => - set(all, fields[key] || key, get(item, key)) - , {}) - ) + _mapFields (items, fields) { + return fields.length === 0 + ? items + : items.map(item => + Object.keys(fields).reduce( + (all, key) => set(all, fields[key] || key, get(item, key)), + {} + ) + ) } - _getRelatedObjects(reference, items) { + _getRelatedObjects (reference, items) { if (!reference) { return null } @@ -259,7 +269,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('status', 'published').first() */ - first() { + first () { return this.take(1).list().then(response => response[0] || null) } @@ -269,11 +279,12 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('status', 'published').firstOrFail() */ - firstOrFail() { + firstOrFail () { return new Promise((resolve, reject) => { - this - .first() - .then(object => object ? resolve(object) : reject(new NotFoundError())) + this.first() + .then( + object => (object ? resolve(object) : reject(new NotFoundError())) + ) .catch(() => { reject(new NotFoundError()) }) @@ -287,11 +298,10 @@ class Data extends QueryBuilder { * const post = await data.posts * .updateOrCreate({name: 'value to match'}, {content: 'value to update'}) */ - firstOrCreate(attributes, values = {}) { + firstOrCreate (attributes, values = {}) { const query = this._toWhereArray(attributes) - return this - .where(query) + return this.where(query) .firstOrFail() .catch(() => this.create(merge(attributes, values))) } @@ -303,17 +313,16 @@ class Data extends QueryBuilder { * const post = await data.posts * .updateOrCreate({name: 'value to match'}, {content: 'value to update'}) */ - updateOrCreate(attributes, values = {}) { + updateOrCreate (attributes, values = {}) { const query = this._toWhereArray(attributes) - return this - .where(query) + return this.where(query) .firstOrFail() .then(res => this.update(res.id, values)) .catch(() => this.create(merge(attributes, values))) } - _toWhereArray(attributes) { + _toWhereArray (attributes) { return Object.keys(attributes).map(key => [key, 'eq', attributes[key]]) } @@ -327,7 +336,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.find([20, 99, 125]) */ - find(ids) { + find (ids) { if (Array.isArray(ids)) { return this.where('id', 'in', ids).list() } @@ -348,12 +357,13 @@ class Data extends QueryBuilder { * // Will throw error if at lest one of records was not found * const posts = await data.posts.findOrFail([20, 99, 125], true) */ - findOrFail(ids) { + findOrFail (ids) { return new Promise((resolve, reject) => { - this - .find(ids) + this.find(ids) .then(response => { - const shouldThrow = Array.isArray(ids) ? response.length !== ids.length : response === null + const shouldThrow = Array.isArray(ids) + ? response.length !== ids.length + : response === null return shouldThrow ? reject(new NotFoundError()) : resolve(response) }) @@ -371,7 +381,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.take(500).list() */ - take(count) { + take (count) { return this.withQuery({page_size: count}) // eslint-disable-line camelcase } @@ -383,7 +393,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.orderBy('created_at', 'DESC').list() */ - orderBy(column, direction = 'asc') { + orderBy (column, direction = 'asc') { direction = direction.toLowerCase() direction = direction === 'desc' ? '-' : '' @@ -408,7 +418,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('user.full_name', 'contains', 'John').list() */ - where(column, operator, value) { + where (column, operator, value) { if (Array.isArray(column)) { column.map(([itemColumn, itemOperator, itemValue]) => this.where(itemColumn, itemOperator, itemValue) @@ -423,21 +433,25 @@ class Data extends QueryBuilder { const currentQuery = JSON.parse(this.query.query || '{}') - const nextQuery = column.split('.').reverse() - .reduce((child, item) => ({ - [item]: child === null ? { - [whereOperator]: whereValue - } : { - _is: child - } - }), null) + const nextQuery = column.split('.').reverse().reduce( + (child, item) => ({ + [item]: child === null + ? { + [whereOperator]: whereValue + } + : { + _is: child + } + }), + null + ) const query = merge({}, currentQuery, nextQuery) return this.withQuery({query: JSON.stringify(query)}) } - _normalizeWhereOperator(operator) { + _normalizeWhereOperator (operator) { const operators = { '<': 'lt', '<=': 'lte', @@ -459,17 +473,16 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.users.fields('name', 'email as username')->list() */ - fields(...fields) { + fields (...fields) { if (Array.isArray(fields[0])) { fields = fields[0] } - const fieldsToMap = fields - .map(field => { - const [, from,, to] = field.match(/([\w_\-.]*)(\sas\s)?(.*)?/) + const fieldsToMap = fields.map(field => { + const [, from, , to] = field.match(/([\w_\-.]*)(\sas\s)?(.*)?/) - return {[from]: to} - }) + return {[from]: to} + }) this.withMappedFields(fieldsToMap) @@ -486,7 +499,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.with(['author', 'last_editor']).list() */ - with(...models) { + with (...models) { const relationships = Array.isArray(models[0]) ? models[0] : models return this.withRelationships(relationships) @@ -500,7 +513,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.where('id', 10).pluck('title') */ - pluck(column) { + pluck (column) { return this.list().then(items => items.map(item => item[column])) } @@ -512,7 +525,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.where('id', 10).value('title') */ - value(column) { + value (column) { return this.first().then(item => item[column]) } @@ -531,7 +544,7 @@ class Data extends QueryBuilder { * { content: 'More lorem ipsum!' } * ]) */ - create(body) { + create (body) { let headers = null let fetchObject = { url: this.url(), @@ -566,8 +579,9 @@ class Data extends QueryBuilder { * .where('destination', 'Warsaw') * .update({delayed: 1}) */ - update(id, body) { - const isQueryUpdate = typeof id === 'object' && id !== null && !Array.isArray(id) + update (id, body) { + const isQueryUpdate = + typeof id === 'object' && id !== null && !Array.isArray(id) let fetchObject = { url: this.url(id), method: 'PATCH', @@ -575,15 +589,13 @@ class Data extends QueryBuilder { } if (isQueryUpdate) { - return this - .list() - .then(items => { - const ids = items.map(item => [item.id, id]) + return this.list().then(items => { + const ids = items.map(item => [item.id, id]) - fetchObject = this._batchFetchObject(ids) + fetchObject = this._batchFetchObject(ids) - return this.fetch(fetchObject.url, fetchObject) - }) + return this.fetch(fetchObject.url, fetchObject) + }) } if (Array.isArray(id)) { @@ -604,7 +616,7 @@ class Data extends QueryBuilder { * data.posts.delete() * data.posts.where('draft', 1).delete() */ - delete(id) { + delete (id) { const isQueryDelete = id === undefined let fetchObject = { url: this.url(id), @@ -612,15 +624,13 @@ class Data extends QueryBuilder { } if (isQueryDelete) { - return this - .list() - .then(items => { - const ids = items.map(item => item.id) + return this.list().then(items => { + const ids = items.map(item => item.id) - fetchObject = this._batchFetchObject(ids) + fetchObject = this._batchFetchObject(ids) - return this.fetch(fetchObject.url, fetchObject) - }) + return this.fetch(fetchObject.url, fetchObject) + }) } if (Array.isArray(id)) { diff --git a/src/errors.js b/src/errors.js index b8fb05d..b55167c 100644 --- a/src/errors.js +++ b/src/errors.js @@ -1,16 +1,16 @@ -export function SyncanoError(message) { +export function SyncanoError (message) { this.name = 'SyncanoError' this.message = message || '' - this.stack = (new Error()).stack + this.stack = new Error().stack } SyncanoError.prototype = Object.create(Error.prototype) SyncanoError.prototype.constructor = SyncanoError -export function NotFoundError(message = 'No results for given query.') { +export function NotFoundError (message = 'No results for given query.') { this.name = 'NotFoundError' this.message = message - this.stack = (new Error()).stack + this.stack = new Error().stack } NotFoundError.prototype = Object.create(SyncanoError.prototype) diff --git a/src/event.js b/src/event.js index 60866ed..2cca3dc 100644 --- a/src/event.js +++ b/src/event.js @@ -1,14 +1,14 @@ import QueryBuilder from './query-builder' -import {buildInstanceURL} from './utils' /** * Syncano account query builder * @property {Function} */ class Event extends QueryBuilder { - url() { + url () { const {instanceName} = this.instance - return `${buildInstanceURL(instanceName)}/triggers/emit/` + + return `${this._getInstanceURL(instanceName)}/triggers/emit/` } /** @@ -19,7 +19,7 @@ class Event extends QueryBuilder { * @example {@lang javascript} * const instance = await event.emit('signal_name', payload={}) */ - emit(signalString, payload) { + emit (signalString, payload) { const fetch = this.fetch.bind(this) const {socket, signal} = Event._splitSignal(signalString) @@ -28,7 +28,7 @@ class Event extends QueryBuilder { if (socket) { signalParams.push(socket) } else { - signalParams.push(META.socket) + signalParams.push(this.instance.meta.socket) } signalParams.push('.') @@ -43,13 +43,11 @@ class Event extends QueryBuilder { }) } - fetch(this.url(), options) - .then(resolve) - .catch(reject) + fetch(this.url(), options).then(resolve).catch(reject) }) } - static _splitSignal(signalString) { + static _splitSignal (signalString) { const splited = signalString.split('.') if (splited.length === 1) { return {signal: splited[0]} @@ -59,7 +57,6 @@ class Event extends QueryBuilder { signal: splited[1] } } - } export default Event diff --git a/src/index.js b/src/index.js index 5321fd9..93baaef 100644 --- a/src/index.js +++ b/src/index.js @@ -1,16 +1,3 @@ import Server from './server' -export const { - users, - account, - instance, - channel, - event, - socket, - logger, - response, - data, - _class -} = new Server() - export default Server diff --git a/src/instance.js b/src/instance.js index f03634a..fb19f59 100644 --- a/src/instance.js +++ b/src/instance.js @@ -1,18 +1,12 @@ import QueryBuilder from './query-builder' -import {buildSyncanoURL} from './utils' /** * Syncano account query builder * @property {Function} */ class Instance extends QueryBuilder { - constructor(options) { - super() - this.accountKey = options.accountKey - } - - url(instanceName) { - const baseUrl = `${buildSyncanoURL()}/instances/` + url (instanceName) { + const baseUrl = `${this._getSyncanoURL()}/instances/` return instanceName ? `${baseUrl}${instanceName}/` : baseUrl } @@ -25,20 +19,18 @@ class Instance extends QueryBuilder { * @example {@lang javascript} * const instance = await instance.create({name: 'new-instance', description: 'description'}) */ - create(params) { + create (params) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { const headers = { - 'X-API-KEY': this.accountKey + 'X-API-KEY': this.instance.accountKey } const options = { method: 'POST', body: JSON.stringify(params) } - fetch(this.url(), options, headers) - .then(resolve) - .catch(reject) + fetch(this.url(), options, headers).then(resolve).catch(reject) }) } @@ -50,12 +42,12 @@ class Instance extends QueryBuilder { * @example {@lang javascript} * await instance.delete('new-instance') */ - delete(instanceName) { + delete (instanceName) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { const headers = { - 'X-API-KEY': this.accountKey + 'X-API-KEY': this.instance.accountKey } const options = { method: 'DELETE' diff --git a/src/logger.js b/src/logger.js index d92d845..f146b05 100644 --- a/src/logger.js +++ b/src/logger.js @@ -8,7 +8,7 @@ const LEVELS = ['error', 'warn', 'info', 'debug'] class Logger { - constructor({scope, callback, levels}) { + constructor ({scope, callback, levels}) { this._start = null this._scope = scope this._callback = callback @@ -18,7 +18,7 @@ class Logger { }) } - _makePrinter(...args) { + _makePrinter (...args) { this._start = this._start || this._getNow() this._level = args.shift() @@ -31,11 +31,13 @@ class Logger { this._level = null } - _pad(width, string, padding) { - return (width <= string.length) ? string : this._pad(width, padding + string, padding) + _pad (width, string, padding) { + return width <= string.length + ? string + : this._pad(width, padding + string, padding) } - _print(...args) { + _print (...args) { // Time const now = this._getNow() const diff = `+${this._calculateDiff(this._start, now)}` @@ -50,7 +52,7 @@ class Logger { return now } - _shouldLog(scope) { + _shouldLog (scope) { if (ARGS && ARGS.DEBUG) { if (typeof ARGS.DEBUG === 'boolean') { return ARGS.DEBUG @@ -71,27 +73,30 @@ class Logger { return false } - _parseArg(arg) { - const isObject = arg !== null && typeof (arg) === 'object' + _parseArg (arg) { + const isObject = arg !== null && typeof arg === 'object' if (isObject) { - return `\n\n ${JSON.stringify(arg, null, 2).split('\n').join('\n ')}\n\n` + return `\n\n ${JSON.stringify(arg, null, 2) + .split('\n') + .join('\n ')}\n\n` } return arg } - _getNow() { + _getNow () { return new Date() } - _getNowString(date) { - return date.toISOString() - .replace(/T/, ' ') // Replace T with a space - .replace(/\..+/, '') // Delete the dot and everything after + _getNowString (date) { + return date + .toISOString() + .replace(/T/, ' ') // Replace T with a space + .replace(/\..+/, '') // Delete the dot and everything after } - _calculateDiff(t1, t2) { + _calculateDiff (t1, t2) { return (t2.getTime() - t1.getTime()) / 1000 } } diff --git a/src/query-builder.js b/src/query-builder.js index dbbbb07..bbf2984 100644 --- a/src/query-builder.js +++ b/src/query-builder.js @@ -1,17 +1,30 @@ import nodeFetch from 'node-fetch' import {checkStatus, parseJSON} from './utils' -import {getHost} from './settings' export default class QueryBuilder { - constructor() { - this.baseUrl = `https://${getHost()}` + constructor (instance) { + this.instance = instance + this.baseUrl = `https://${instance.host}` } - fetch(url, options, headers = {}) { - const headersToSend = Object.assign({ - 'content-type': 'application/json', - 'x-api-key': this.instance.token - }, headers) + _getSyncanoURL () { + const {apiVersion, host} = this.instance + + return `https://${host}/${apiVersion}` + } + + _getInstanceURL (instanceName) { + return `${this._getSyncanoURL()}/instances/${instanceName}` + } + + fetch (url, options, headers = {}) { + const headersToSend = Object.assign( + { + 'content-type': 'application/json', + 'x-api-key': this.instance.token + }, + headers + ) return nodeFetch(url, { headers: headersToSend, @@ -21,7 +34,7 @@ export default class QueryBuilder { .then(checkStatus) } - nonInstanceFetch(url, options, headers) { + nonInstanceFetch (url, options, headers) { return nodeFetch(url, { headers: { 'content-type': 'application/json', @@ -33,31 +46,31 @@ export default class QueryBuilder { .then(checkStatus) } - get query() { + get query () { return this._query || {} } - get relationships() { + get relationships () { return this._relationships || [] } - get mappedFields() { + get mappedFields () { return this._mappedFields || [] } - withQuery(query) { + withQuery (query) { this._query = Object.assign({}, this.query, query) return this } - withRelationships(relationships) { + withRelationships (relationships) { this._relationships = this.relationships.concat(relationships) return this } - withMappedFields(fields) { + withMappedFields (fields) { this._mappedFields = Object.assign({}, this.mappedFields, ...fields) return this diff --git a/src/response.js b/src/response.js index 73ac749..0f71e52 100644 --- a/src/response.js +++ b/src/response.js @@ -4,52 +4,57 @@ */ class Response { - constructor(content = null, status = 200, mimetype = 'text/plain', headers = {}) { + constructor ( + instance, + content = null, + status = 200, + mimetype = 'text/plain', + headers = {} + ) { this._content = content this._status = status this._mimetype = mimetype this._headers = headers - if (content) { - this._make() - } - } + let setResponse = instance.setResponse || global.setResponse + let HttpResponse = instance.HttpResponse || global.HttpResponse - _make() { - const isLocal = !global.setResponse || !global.HttpResponse - const args = [this._status, this._content, this._mimetype, this._headers] + if (this._content) { + const args = [this._status, this._content, this._mimetype, this._headers] - if (isLocal) { - console.log(args) - return args - } + if (setResponse === undefined) { + return + } - global.setResponse(new global.HttpResponse(...args)) + setResponse(new HttpResponse(...args)) - process.exit(0) // eslint-disable-line unicorn/no-process-exit + process.exit(0) // eslint-disable-line unicorn/no-process-exit + } } } -const response = (content, status, mimetype, headers) => { - return new Response(content, status, mimetype, headers) -} +export default config => { + const response = (content, status, mimetype, headers) => + new Response(config, content, status, mimetype, headers) + + response.header = (key, value) => { + response._headers = { + ...response._headers, + [key]: value + } -response.header = (key, value) => { - response._headers = { - ...response._headers, - [key]: value + return response } - return response -} + response.json = (content, status = 200) => { + return new Response( + config, + JSON.stringify(content), + status, + 'application/json', + response._headers + ) + } -response.json = (content, status = 200) => { - return new Response( - JSON.stringify(content), - status, - 'application/json', - response._headers - ) + return response } - -export default response diff --git a/src/server.js b/src/server.js index 5760f12..33b83f4 100644 --- a/src/server.js +++ b/src/server.js @@ -8,59 +8,35 @@ import Response from './response' import Logger from './logger' import Channel from './channel' import Class from './class' -import { - getToken, - getInstanceName, - getHost, - getSpaceHost, - SYNCANO_API_VERSION -} from './settings' +import Settings from './settings' -const server = (options = {}) => { - const genInstanceConfig = className => { - const config = Object.assign({}, { - token: getToken(), - instanceName: getInstanceName(), - host: getHost(), - spaceHost: getSpaceHost(), - apiVersion: SYNCANO_API_VERSION, - className - }, options) +const server = (ctx = {}) => { + const settings = new Settings(ctx) + const getConfig = className => Object.assign({className}, settings) + const config = getConfig() - return config - } - - const instanceConfig = genInstanceConfig() - - const users = new Users() - users.instance = instanceConfig - const event = new Event() - event.instance = instanceConfig - const channel = new Channel() - channel.instance = instanceConfig - const socket = new Socket() - socket.instance = instanceConfig - const _class = new Class() - _class.instance = instanceConfig - - const account = new Account({accountKey: options.accountKey}) - const instance = new Instance({accountKey: options.accountKey}) + const _class = new Class(config) + const users = new Users(config) + const event = new Event(config) + const channel = new Channel(config) + const socket = new Socket(config) + const response = new Response(config) + const account = new Account({accountKey: ctx.accountKey}) + const instance = new Instance({accountKey: ctx.accountKey}) return { + _class, users, account, instance, event, channel, socket, - _class, + response, logger: Logger, - response: Response, - data: new Proxy(new Data(), { - get(target, className) { - const data = new Data() - data.instance = genInstanceConfig(className) - return data + data: new Proxy(new Data(settings), { + get (target, className) { + return new Data(getConfig(className)) } }) } diff --git a/src/settings.js b/src/settings.js index 8c40d59..09073e9 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,25 +1,10 @@ -function getMeta(envVar, metaVar, fallback = null) { - if (process.env[envVar]) { - return process.env[envVar] - } - - try { - return META[metaVar] || fallback - } catch (err) { - return fallback - } -} - -export const getHost = () => - getMeta('SYNCANO_HOST', 'api_host', 'api.syncano.io') - -export const getSpaceHost = () => - getMeta('SYNCANO_SPACE_HOST', 'space_host', 'syncano.space') - -export const getInstanceName = () => - getMeta('SYNCANO_INSTANCE_NAME', 'instance') - -export const getToken = () => - getMeta('SYNCANO_API_KEY', 'token') - -export const SYNCANO_API_VERSION = 'v2' +export default ({meta = {}, token, instanceName, setResponse, HttpResponse}) => ({ + token: process.env.TOKEN || meta.TOKEN || token, + instanceName: process.env.INSTANCE_NAME || meta.INSTANCE_NAME || instanceName, + host: process.env.HOST || meta.HOST || 'api.syncano.io', + spaceHost: process.env.SPACE_HOST || meta.SPACE_HOST || 'syncano.space', + apiVersion: 'v2', + meta, + setResponse, + HttpResponse +}) diff --git a/src/socket.js b/src/socket.js index 26d0e86..6e4f20b 100644 --- a/src/socket.js +++ b/src/socket.js @@ -8,7 +8,7 @@ import QueryBuilder from './query-builder' * const createdTag = await socket.post('tags/create', { name: 'nature' }) */ export default class Socket extends QueryBuilder { - post(endpoint, body = {}, options = {}) { + post (endpoint, body = {}, options = {}) { const fetch = this.fetch.bind(this) return fetch(this._url(endpoint), { @@ -18,29 +18,29 @@ export default class Socket extends QueryBuilder { }) } - get(endpoint, data = {}, options = {}) { + get (endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'GET'}, options) } - delete(endpoint, data = {}, options = {}) { + delete (endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'DELETE'}, options) } - put(endpoint, data = {}, options = {}) { + put (endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'PUT'}, options) } - patch(endpoint, data = {}, options = {}) { + patch (endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'PATCH'}, options) } - _url(endpoint) { + _url (endpoint) { const {instanceName, spaceHost} = this.instance return `https://${instanceName}.${spaceHost}/${endpoint}/` } - _parseBody(body) { + _parseBody (body) { const isBodyAnObject = typeof body === 'object' return isBodyAnObject ? JSON.stringify({...body}) : body diff --git a/src/users.js b/src/users.js index 4d09b39..3a746ba 100644 --- a/src/users.js +++ b/src/users.js @@ -1,15 +1,14 @@ import querystring from 'querystring' import Data from './data' -import {buildInstanceURL} from './utils' /** * Syncano users query builder * @property {Function} */ class Users extends Data { - url(id) { + url (id) { const {instanceName} = this.instance - const url = `${buildInstanceURL(instanceName)}/users/${id ? id + '/' : ''}` + const url = `${this._getInstanceURL(instanceName)}/users/${id ? id + '/' : ''}` const query = querystring.stringify(this.query) return query ? `${url}?${query}` : url diff --git a/src/utils.js b/src/utils.js index b3c0d9a..698ab19 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,6 +1,4 @@ -import {getHost, SYNCANO_API_VERSION} from './settings' - -export function checkStatus(response) { +export function checkStatus (response) { if (response.status >= 200 && response.status < 300) { return response.data } @@ -24,7 +22,7 @@ export function checkStatus(response) { throw error } -export function parseJSON(response) { +export function parseJSON (response) { const mimetype = response.headers.get('Content-Type') if (response.status === 204 || mimetype === null) { @@ -35,10 +33,7 @@ export function parseJSON(response) { } // Parse JSON - if ( - /^.*\/.*\+json/.test(mimetype) || - /^application\/json/.test(mimetype) - ) { + if (/^.*\/.*\+json/.test(mimetype) || /^application\/json/.test(mimetype)) { return response.json().then(res => ({ data: res, ...response @@ -59,11 +54,3 @@ export function parseJSON(response) { return response.arraybuffer() } - -export function buildSyncanoURL() { - return `https://${getHost()}/${SYNCANO_API_VERSION}` -} - -export function buildInstanceURL(instanceName) { - return `${buildSyncanoURL()}/instances/${instanceName}` -} diff --git a/tests/e2e/class.js b/tests/e2e/class.js index 0909e44..0629ca6 100644 --- a/tests/e2e/class.js +++ b/tests/e2e/class.js @@ -38,7 +38,11 @@ describe('Class', function () { }) it('can create a class', function (done) { - _class.create({name: testClassName, schema: [{"type": "string", "name": "parameter_name"}]}) + _class + .create({ + name: testClassName, + schema: [{type: 'string', name: 'parameter_name'}] + }) .then(res => { expect(res.name).to.be.equal(testClassName) done() @@ -50,7 +54,8 @@ describe('Class', function () { }) it('can delete a class', function (done) { - _class.delete(testClassName) + _class + .delete(testClassName) .then(classObj => { expect(classObj).to.be.empty done() diff --git a/tests/e2e/data.js b/tests/e2e/data.js index e0df03d..6b8e94a 100644 --- a/tests/e2e/data.js +++ b/tests/e2e/data.js @@ -1,11 +1,11 @@ /* eslint-disable no-unused-expressions */ import fs from 'fs' -import nodeFetch from 'node-fetch' +import {join} from 'path' import FormData from 'form-data' import {expect} from 'chai' import Server from '../../src' -import {getRandomString, createTestInstance, deleteTestInstance, checkStatus, buildInstanceURL} from '../utils' +import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' global.META = { socket: 'test-socket' @@ -15,7 +15,6 @@ describe('Data object', function () { let data = null let dummyStringFieldValue = getRandomString() const testClassName = getRandomString() - const testSocketName = getRandomString() const instanceName = getRandomString() before(function (done) { @@ -26,7 +25,12 @@ describe('Data object', function () { return new Server()._class.create({ name: testClassName, schema: [ - {type: 'string', name: 'field_string', filter_index: true, order_index: true}, + { + type: 'string', + name: 'field_string', + filter_index: true, + order_index: true + }, {type: 'text', name: 'field_text'}, {type: 'integer', name: 'field_integer'}, {type: 'float', name: 'field_float'}, @@ -41,11 +45,10 @@ describe('Data object', function () { }) .catch(err => { console.log(err) - err.response.text() - .then(text => { - console.log(text) - done(err) - }) + err.response.text().then(text => { + console.log(text) + done(err) + }) }) }) @@ -61,8 +64,11 @@ describe('Data object', function () { it('can create single object', function (done) { data[testClassName] - .create( - {test: 'single', test2: 'secret', 'field_string': dummyStringFieldValue}) + .create({ + test: 'single', + test2: 'secret', + field_string: dummyStringFieldValue + }) .then(() => done()) .catch(err => { console.log('ERROR: ', err) @@ -134,23 +140,17 @@ describe('Data object', function () { }) it('can delete single object', function (done) { - data[testClassName] - .delete(1) - .then(() => done()) - .catch(err => { - console.log('ERROR: ', err) - done(err) - }) + data[testClassName].delete(1).then(() => done()).catch(err => { + console.log('ERROR: ', err) + done(err) + }) }) it('can delete multiple objects', function (done) { - data[testClassName] - .delete([2, 3]) - .then(() => done()) - .catch(err => { - console.log('ERROR: ', err) - done(err) - }) + data[testClassName].delete([2, 3]).then(() => done()).catch(err => { + console.log('ERROR: ', err) + done(err) + }) }) it('can delete multiple objects by query', function (done) { @@ -165,31 +165,22 @@ describe('Data object', function () { }) it('can be sorted', function (done) { - let firstObject = null - let secondObject = null - // Create objects Promise.all([ data[testClassName].create({field_string: 'abcdef'}), data[testClassName].create({field_string: 'cdefgh'}), data[testClassName].create({field_string: 'bcdefg'}) ]) - .then(objects => { - [firstObject, secondObject] = objects - - return data[testClassName] - .orderBy('field_string') - .list() - }) - .then((sortedObjects) => { - expect(sortedObjects[0]['field_string']).to.be.equal('abcdef') - expect(sortedObjects[1]['field_string']).to.be.equal('bcdefg') - expect(sortedObjects[2]['field_string']).to.be.equal('cdefgh') - done() - }) - .catch(err => { - done(err) - }) + .then(objects => data[testClassName].orderBy('field_string').list()) + .then(sortedObjects => { + expect(sortedObjects[0]['field_string']).to.be.equal('abcdef') + expect(sortedObjects[1]['field_string']).to.be.equal('bcdefg') + expect(sortedObjects[2]['field_string']).to.be.equal('cdefgh') + done() + }) + .catch(err => { + done(err) + }) }) it.skip('can be updated', function (done) {}) @@ -200,22 +191,25 @@ describe('Data object', function () { it.skip('can be created with reference', function (done) {}) it.skip('can be created with reference', function (done) {}) it('can be created with file field', function (done) { - const form = new FormData(); - form.append('field_file', fs.createReadStream(__dirname + '/assets/test.jpg')); + const form = new FormData() + form.append( + 'field_file', + fs.createReadStream(join(__dirname, '/assets/test.jpg')) + ) - data[testClassName].create(form) - .then((res) => { - expect(res['field_file']['type']).to.be.equal('file') - done() - }) - .catch(err => { - console.log(err) - err.response.text() - .then(text => { + data[testClassName] + .create(form) + .then(res => { + expect(res['field_file']['type']).to.be.equal('file') + done() + }) + .catch(err => { + console.log(err) + err.response.text().then(text => { console.log(text) done(err) }) - }) + }) }) it.skip('can be listed with one filter', function (done) {}) diff --git a/tests/unit/data.js b/tests/unit/data.js index f3152a4..ca8c44e 100644 --- a/tests/unit/data.js +++ b/tests/unit/data.js @@ -29,7 +29,8 @@ describe('Data', () => { }) it('should be able to fetch objects list', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 10}) // eslint-disable-line camelcase .reply(200, { objects: [{name: 'John Doe', id: 3}], @@ -44,7 +45,8 @@ describe('Data', () => { }) it('should return [] when no objects were not found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 5}) // eslint-disable-line camelcase .reply(200, {objects: [], next: null}) @@ -60,7 +62,8 @@ describe('Data', () => { }) it('should be able to fetch single object', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 1}) // eslint-disable-line camelcase .reply(200, {objects: [{name: 'John Doe', id: 3}]}) @@ -72,7 +75,8 @@ describe('Data', () => { }) it('should return null when object was not found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 1}) // eslint-disable-line camelcase .reply(200, {objects: []}) @@ -86,7 +90,8 @@ describe('Data', () => { }) it('should be able to fetch single object', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 1}) // eslint-disable-line camelcase .reply(200, {objects: [{name: 'John Doe', id: 3}]}) @@ -98,7 +103,8 @@ describe('Data', () => { }) it('should throw error when object was not found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({page_size: 1}) // eslint-disable-line camelcase .reply(404) @@ -130,7 +136,8 @@ describe('Data', () => { }) it('should be able to fetch single object', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_eq: 7}}), page_size: 1 // eslint-disable-line camelcase @@ -145,14 +152,15 @@ describe('Data', () => { }) it('should be able to fetch objects list', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_in: [7, 8]}}) }) - .reply(200, {objects: [ - {name: 'John Doe', id: 7}, - {name: 'Jane Doe', id: 8} - ], next: null}) + .reply(200, { + objects: [{name: 'John Doe', id: 7}, {name: 'Jane Doe', id: 8}], + next: null + }) data.users.find([7, 8]).then(objects => { should(objects).be.Array().length(2) @@ -164,7 +172,8 @@ describe('Data', () => { }) it('should return null when object was not found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_eq: 5}}), page_size: 1 // eslint-disable-line camelcase @@ -175,13 +184,16 @@ describe('Data', () => { }) it('should return [] when no objects were found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_in: [7, 8]}}) }) .reply(200, {objects: [], next: null}) - data.users.find([7, 8]).then(objects => should(objects).be.Array().empty()) + data.users + .find([7, 8]) + .then(objects => should(objects).be.Array().empty()) }) }) @@ -191,7 +203,8 @@ describe('Data', () => { }) it('should be able to fetch single object', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_eq: 7}}), page_size: 1 // eslint-disable-line camelcase @@ -206,14 +219,15 @@ describe('Data', () => { }) it('should be able to fetch objects list', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ query: JSON.stringify({id: {_in: [7, 8]}}) }) - .reply(200, {objects: [ - {name: 'John Doe', id: 7}, - {name: 'Jane Doe', id: 8} - ], next: null}) + .reply(200, { + objects: [{name: 'John Doe', id: 7}, {name: 'Jane Doe', id: 8}], + next: null + }) data.users.find([7, 8]).then(objects => { should(objects).be.Array().length(2) @@ -225,7 +239,8 @@ describe('Data', () => { }) it('should throw error when object was not found', () => { - api.get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .get(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query({ page_size: 1, // eslint-disable-line camelcase query: JSON.stringify({id: {_eq: 5}}) @@ -292,7 +307,8 @@ describe('Data', () => { it('should be able to create object', () => { const user = {name: 'John'} - api.post(`/v2/instances/${instanceName}/classes/users/objects/`, '*') + api + .post(`/v2/instances/${instanceName}/classes/users/objects/`, '*') .query(user) .reply(200, user) @@ -314,17 +330,23 @@ describe('Data', () => { const id = 9900 const firstName = 'Jane' - api.patch(`/v2/instances/${instanceName}/classes/users/objects/${id}/`, '*') + api + .patch( + `/v2/instances/${instanceName}/classes/users/objects/${id}/`, + '*' + ) .query({id}) .reply(200, {id, first_name: firstName}) // eslint-disable-line camelcase - data.users.update(id, { - first_name: 'Jane' // eslint-disable-line camelcase - }).then(object => { - should(object).be.Object() - should(object).have.property('id').equal(id) - should(object).have.property('first_name').equal(firstName) - }) + data.users + .update(id, { + first_name: 'Jane' // eslint-disable-line camelcase + }) + .then(object => { + should(object).be.Object() + should(object).have.property('id').equal(id) + should(object).have.property('first_name').equal(firstName) + }) }) it.skip('should be able to update multiple objects') @@ -339,7 +361,11 @@ describe('Data', () => { it('should be able to delete object by id', () => { const id = 9900 - api.delete(`/v2/instances/${instanceName}/classes/users/objects/${id}/`, '*') + api + .delete( + `/v2/instances/${instanceName}/classes/users/objects/${id}/`, + '*' + ) .query({id}) .reply(200, {id}) diff --git a/tests/unit/errors.js b/tests/unit/errors.js index 3e2b27e..c45a108 100644 --- a/tests/unit/errors.js +++ b/tests/unit/errors.js @@ -25,7 +25,10 @@ describe('SyncanoError', () => { }) it('has defaults', () => { - should(new SyncanoError()).have.property('message').which.is.String().equal('') + should(new SyncanoError()).have + .property('message') + .which.is.String() + .equal('') }) }) @@ -53,6 +56,9 @@ describe('NotFoundError', () => { }) it('has defaults', () => { - should(new NotFoundError()).have.property('message').which.is.String().equal('No results for given query.') + should(new NotFoundError()).have + .property('message') + .which.is.String() + .equal('No results for given query.') }) }) diff --git a/tests/unit/response.js b/tests/unit/response.js index c1fabd0..1f779f4 100644 --- a/tests/unit/response.js +++ b/tests/unit/response.js @@ -33,11 +33,11 @@ describe('Response', () => { should(res).have.property('_headers').which.is.Object() }) - describe('#_make()', () => { - it('should be a method of the model', () => { - should(res).have.property('_make').which.is.Function() - }) - }) + // describe('#_make()', () => { + // it('should be a method of the model', () => { + // should(res).have.property('_make').which.is.Function() + // }) + // }) describe('#header()', () => { it('should be a method of the model', () => { From 8513c0d5e1791ff1157f65f95a74708633043881 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 15:53:09 +0200 Subject: [PATCH 04/28] chore: remove lint --- circle.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/circle.yml b/circle.yml index 1ddb868..4d32997 100644 --- a/circle.yml +++ b/circle.yml @@ -26,7 +26,6 @@ general: test: override: - - yarn run lint - yarn run test post: - yarn run test:coverage From 22c397c1613546d5f962c19a28fc363b724c0456 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 15:55:08 +0200 Subject: [PATCH 05/28] fix: invalid env var --- src/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.js b/src/settings.js index 09073e9..099d5c8 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,7 +1,7 @@ export default ({meta = {}, token, instanceName, setResponse, HttpResponse}) => ({ token: process.env.TOKEN || meta.TOKEN || token, instanceName: process.env.INSTANCE_NAME || meta.INSTANCE_NAME || instanceName, - host: process.env.HOST || meta.HOST || 'api.syncano.io', + host: process.env.SYNCANO_HOST || meta.HOST || 'api.syncano.io', spaceHost: process.env.SPACE_HOST || meta.SPACE_HOST || 'syncano.space', apiVersion: 'v2', meta, From 0b637b4f6a72ebdeba5c8c91f4e100fd341406ec Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 17:11:50 +0200 Subject: [PATCH 06/28] fix: e2e tests --- src/server.js | 4 ++-- src/settings.js | 8 ++++---- tests/e2e/account.js | 11 ++++++----- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/server.js b/src/server.js index 33b83f4..2497e71 100644 --- a/src/server.js +++ b/src/server.js @@ -21,8 +21,8 @@ const server = (ctx = {}) => { const channel = new Channel(config) const socket = new Socket(config) const response = new Response(config) - const account = new Account({accountKey: ctx.accountKey}) - const instance = new Instance({accountKey: ctx.accountKey}) + const account = new Account(config) + const instance = new Instance(config) return { _class, diff --git a/src/settings.js b/src/settings.js index 099d5c8..8a4be5c 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,8 +1,8 @@ export default ({meta = {}, token, instanceName, setResponse, HttpResponse}) => ({ - token: process.env.TOKEN || meta.TOKEN || token, - instanceName: process.env.INSTANCE_NAME || meta.INSTANCE_NAME || instanceName, - host: process.env.SYNCANO_HOST || meta.HOST || 'api.syncano.io', - spaceHost: process.env.SPACE_HOST || meta.SPACE_HOST || 'syncano.space', + token: process.env.TOKEN || meta.token || token, + instanceName: process.env.INSTANCE_NAME || meta.instance || instanceName, + host: process.env.SYNCANO_HOST || meta.api_host || 'api.syncano.io', + spaceHost: process.env.SPACE_HOST || meta.space_host || 'syncano.space', apiVersion: 'v2', meta, setResponse, diff --git a/tests/e2e/account.js b/tests/e2e/account.js index fe008b7..0bd1116 100644 --- a/tests/e2e/account.js +++ b/tests/e2e/account.js @@ -1,5 +1,4 @@ import {expect} from 'chai' - import Server from '../../src' describe('Account', function () { @@ -9,10 +8,11 @@ describe('Account', function () { account = new Server().account }) - it('can\'t get account with dummy key', function (done) { - account.get('dummy key') + it("can't get account with dummy key", function (done) { + account + .get('dummy key') .then(() => { - done(new Error('Surprise! I\'m in!')) + done(new Error("Surprise! I'm in!")) }) .catch(err => { expect(err.response.status).to.be.equal(403) @@ -21,7 +21,8 @@ describe('Account', function () { }) it('can get account details with valid key', function (done) { - account.get(process.env.E2E_ACCOUNT_KEY) + account + .get(process.env.E2E_ACCOUNT_KEY) .then(account => { expect(account.id).to.be.a('number') done() From 25a8f59fcb3af54375cfc7ebe80e341c1b85e1e4 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 17:27:12 +0200 Subject: [PATCH 07/28] fix: pass all settings --- src/settings.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/settings.js b/src/settings.js index 8a4be5c..c0286a3 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,4 +1,4 @@ -export default ({meta = {}, token, instanceName, setResponse, HttpResponse}) => ({ +export default ({meta = {}, token, instanceName, setResponse, HttpResponse, ...props}) => ({ token: process.env.TOKEN || meta.token || token, instanceName: process.env.INSTANCE_NAME || meta.instance || instanceName, host: process.env.SYNCANO_HOST || meta.api_host || 'api.syncano.io', @@ -6,5 +6,6 @@ export default ({meta = {}, token, instanceName, setResponse, HttpResponse}) => apiVersion: 'v2', meta, setResponse, - HttpResponse + HttpResponse, + ...props }) From 1771b7319ad8030435b0c787c1178d36893b9bab Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 17:33:55 +0200 Subject: [PATCH 08/28] fix: handle global META --- src/settings.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/settings.js b/src/settings.js index c0286a3..a0ca8f4 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,8 +1,26 @@ -export default ({meta = {}, token, instanceName, setResponse, HttpResponse, ...props}) => ({ - token: process.env.TOKEN || meta.token || token, - instanceName: process.env.INSTANCE_NAME || meta.instance || instanceName, - host: process.env.SYNCANO_HOST || meta.api_host || 'api.syncano.io', - spaceHost: process.env.SPACE_HOST || meta.space_host || 'syncano.space', +global.META = global.META || {} + +export default ({ + meta = {}, + token, + instanceName, + setResponse, + HttpResponse, + ...props +}) => ({ + token: process.env.TOKEN || global.META.token || meta.token || token, + instanceName: process.env.INSTANCE_NAME || + global.META.instance || + meta.instance || + instanceName, + host: process.env.SYNCANO_HOST || + global.META.api_host || + meta.api_host || + 'api.syncano.io', + spaceHost: process.env.SPACE_HOST || + global.META.space_host || + meta.space_host || + 'syncano.space', apiVersion: 'v2', meta, setResponse, From 8083eb8dbfea146f013cc867e30c0b2d5eadcb6b Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 17:53:27 +0200 Subject: [PATCH 09/28] fix: define global before use and fix instance name global --- src/settings.js | 2 +- tests/e2e/class.js | 9 ++++----- tests/e2e/data.js | 9 ++++----- tests/e2e/event.js | 9 ++++----- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/settings.js b/src/settings.js index a0ca8f4..2fe77c8 100644 --- a/src/settings.js +++ b/src/settings.js @@ -9,7 +9,7 @@ export default ({ ...props }) => ({ token: process.env.TOKEN || global.META.token || meta.token || token, - instanceName: process.env.INSTANCE_NAME || + instanceName: process.env.SYNCANO_INSTANCE_NAME || global.META.instance || meta.instance || instanceName, diff --git a/tests/e2e/class.js b/tests/e2e/class.js index 0629ca6..26f2b69 100644 --- a/tests/e2e/class.js +++ b/tests/e2e/class.js @@ -1,13 +1,12 @@ /* eslint-disable no-unused-expressions */ -import {expect} from 'chai' - -import Server from '../../src' -import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' - global.META = { socket: 'test-socket' } +import {expect} from 'chai' +import Server from '../../src' +import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' + describe('Class', function () { let _class = null const testClassName = getRandomString() diff --git a/tests/e2e/data.js b/tests/e2e/data.js index 6b8e94a..5bdf4de 100644 --- a/tests/e2e/data.js +++ b/tests/e2e/data.js @@ -1,16 +1,15 @@ /* eslint-disable no-unused-expressions */ +global.META = { + socket: 'test-socket' +} + import fs from 'fs' import {join} from 'path' import FormData from 'form-data' import {expect} from 'chai' - import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' -global.META = { - socket: 'test-socket' -} - describe('Data object', function () { let data = null let dummyStringFieldValue = getRandomString() diff --git a/tests/e2e/event.js b/tests/e2e/event.js index abc3684..930f439 100644 --- a/tests/e2e/event.js +++ b/tests/e2e/event.js @@ -1,13 +1,12 @@ /* eslint-disable no-unused-expressions */ -import {expect} from 'chai' - -import Server from '../../src' -import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' - global.META = { socket: 'test-socket' } +import {expect} from 'chai' +import Server from '../../src' +import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' + describe('Event', function () { let event = null const testEventName = getRandomString() From 8f8cd27f2e649c86bf92cac01a2baf57df554656 Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 18:01:39 +0200 Subject: [PATCH 10/28] fix: token global var name --- src/settings.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/settings.js b/src/settings.js index 2fe77c8..31fbaf2 100644 --- a/src/settings.js +++ b/src/settings.js @@ -8,7 +8,10 @@ export default ({ HttpResponse, ...props }) => ({ - token: process.env.TOKEN || global.META.token || meta.token || token, + token: process.env.SYNCANO_API_KEY || + global.META.token || + meta.token || + token, instanceName: process.env.SYNCANO_INSTANCE_NAME || global.META.instance || meta.instance || From afb49df18acc8aa887615a946635a2a4d27e2b2e Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 18:16:00 +0200 Subject: [PATCH 11/28] fix: socket setting --- src/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings.js b/src/settings.js index 31fbaf2..122e536 100644 --- a/src/settings.js +++ b/src/settings.js @@ -25,6 +25,7 @@ export default ({ meta.space_host || 'syncano.space', apiVersion: 'v2', + socket: global.META.socket || meta.socket, meta, setResponse, HttpResponse, From 79663f114d25b2c4360c789597f13894077bb86e Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Fri, 15 Sep 2017 18:21:37 +0200 Subject: [PATCH 12/28] fix: socket name --- src/event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/event.js b/src/event.js index 2cca3dc..1221aaf 100644 --- a/src/event.js +++ b/src/event.js @@ -28,7 +28,7 @@ class Event extends QueryBuilder { if (socket) { signalParams.push(socket) } else { - signalParams.push(this.instance.meta.socket) + signalParams.push(this.instance.socket) } signalParams.push('.') From 38d4c87999e9fdd13bb1fa744478f12a0a4bffda Mon Sep 17 00:00:00 2001 From: syncano Date: Fri, 15 Sep 2017 16:23:51 +0000 Subject: [PATCH 13/28] chore(package.json): bump to 0.8.2-2 [ci skip] --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b316c38..7ad4fa9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-1", + "version": "0.8.2-2", "description": "A library to intereact with the Syncano API on a server side", "main": "lib/index.js", "author": "Syncano Inc.", @@ -76,7 +76,9 @@ "xo": "^0.18.0" }, "standard": { - "env": [ "mocha" ] + "env": [ + "mocha" + ] }, "config": { "commitizen": { From fff899e8022617d94fb31a5abece26bce3128c23 Mon Sep 17 00:00:00 2001 From: mkucharz Date: Thu, 21 Sep 2017 16:49:02 +0200 Subject: [PATCH 14/28] fix(query): recursive queries --- src/data.js | 4 ++-- src/logger.js | 18 ++++++++++++------ src/server.js | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/data.js b/src/data.js index 1bc2a76..8207f03 100644 --- a/src/data.js +++ b/src/data.js @@ -152,13 +152,13 @@ class Data extends QueryBuilder { } const {target} = references[0] - const load = new Data() + const load = new Data(self.instance) let ids = references.map(item => item.value) ids = Array.isArray(ids[0]) ? ids[0] : ids if (target === 'user') { - load._url = `${this._getInstanceURL(instance.instanceName)}/users/` + load._url = `${self._getInstanceURL(instance.instanceName)}/users/` } load.instance = self.instance diff --git a/src/logger.js b/src/logger.js index f146b05..0352e40 100644 --- a/src/logger.js +++ b/src/logger.js @@ -8,11 +8,13 @@ const LEVELS = ['error', 'warn', 'info', 'debug'] class Logger { - constructor ({scope, callback, levels}) { + constructor ({scope, callback, levels, config}) { this._start = null this._scope = scope this._callback = callback + this.config = config + levels.forEach(level => { this[level] = this._makePrinter.bind(this, level) }) @@ -47,18 +49,21 @@ class Logger { const level = this._pad(5, `${this._level}`, ' ') args = args.map(this._parseArg).join(' ') - console.log(`${level}:`, time, this._scope, args, diff, 'ms') + if (this.config !== false) { + console.log(`${level}:`, time, this._scope, args, diff, 'ms') + } return now } + // TODO: this is not used anyhow right now _shouldLog (scope) { - if (ARGS && ARGS.DEBUG) { - if (typeof ARGS.DEBUG === 'boolean') { - return ARGS.DEBUG + if (this.config) { + if (typeof this.config === 'boolean') { + return this.config } - const vars = ARGS.DEBUG.split(',') + const vars = this.config.split(',') const excluded = vars .filter(item => item.startsWith('-')) .map(item => item.replace(/^-/, '')) @@ -104,6 +109,7 @@ class Logger { const logger = function (scope) { return new Logger({ scope, + config: logger.config, callback: logger._callback, levels: logger._levels || LEVELS }) diff --git a/src/server.js b/src/server.js index 2497e71..c1a3d62 100644 --- a/src/server.js +++ b/src/server.js @@ -24,6 +24,8 @@ const server = (ctx = {}) => { const account = new Account(config) const instance = new Instance(config) + Logger.config = ctx.meta.debug + return { _class, users, From e0e6444a1b7cf5a35ae3dad00b16620e205acac4 Mon Sep 17 00:00:00 2001 From: mkucharz Date: Thu, 21 Sep 2017 20:43:21 +0200 Subject: [PATCH 15/28] fix(init): when there is no meta --- src/server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server.js b/src/server.js index c1a3d62..c4e2537 100644 --- a/src/server.js +++ b/src/server.js @@ -24,7 +24,7 @@ const server = (ctx = {}) => { const account = new Account(config) const instance = new Instance(config) - Logger.config = ctx.meta.debug + Logger.config = ctx.meta ? ctx.meta.debug : '' return { _class, From f00275475feeb6809e6cf89d956009a673aafe02 Mon Sep 17 00:00:00 2001 From: syncano Date: Thu, 21 Sep 2017 18:46:07 +0000 Subject: [PATCH 16/28] chore(package.json): bump to 0.8.2-3 [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ad4fa9..1b2ab14 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-2", + "version": "0.8.2-3", "description": "A library to intereact with the Syncano API on a server side", "main": "lib/index.js", "author": "Syncano Inc.", From 29433a8d596c61fe4bb6daa7f763fd13e075b14f Mon Sep 17 00:00:00 2001 From: mkucharz Date: Sun, 24 Sep 2017 21:53:05 +0200 Subject: [PATCH 17/28] chore(response): removing `process.exit` --- src/response.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/response.js b/src/response.js index 0f71e52..4e365e1 100644 --- a/src/response.js +++ b/src/response.js @@ -27,8 +27,6 @@ class Response { } setResponse(new HttpResponse(...args)) - - process.exit(0) // eslint-disable-line unicorn/no-process-exit } } } From e83f264b7fc2886712b6998e0c5748d7f493ad89 Mon Sep 17 00:00:00 2001 From: syncano Date: Sun, 24 Sep 2017 19:58:47 +0000 Subject: [PATCH 18/28] chore(package.json): bump to 0.8.2-4 [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b2ab14..1350ae4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-3", + "version": "0.8.2-4", "description": "A library to intereact with the Syncano API on a server side", "main": "lib/index.js", "author": "Syncano Inc.", From df0cdb6296d842f6a3fc53af6e5ed8568455a2e4 Mon Sep 17 00:00:00 2001 From: syncano Date: Wed, 27 Sep 2017 17:08:33 +0200 Subject: [PATCH 19/28] fix(data): conflicts --- src/data.js | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/data.js b/src/data.js index e6c66eb..21c4d12 100644 --- a/src/data.js +++ b/src/data.js @@ -5,12 +5,9 @@ import get from 'lodash.get' import merge from 'lodash.merge' import QueryBuilder from './query-builder' import {NotFoundError} from './errors' -<<<<<<< HEAD -======= import {buildInstanceURL} from './utils' const MAX_BATCH_SIZE = 50 ->>>>>>> devel /** * Syncano server @@ -245,17 +242,10 @@ class Data extends QueryBuilder { }) } -<<<<<<< HEAD - _mapFields (items, fields) { - return fields.length === 0 - ? items - : items.map(item => -======= _mapFields(items, fields) { return fields.length === 0 ? items : items.map(item => ->>>>>>> devel Object.keys(fields).reduce( (all, key) => set(all, fields[key] || key, get(item, key)), {} @@ -375,15 +365,9 @@ class Data extends QueryBuilder { return new Promise((resolve, reject) => { this.find(ids) .then(response => { -<<<<<<< HEAD - const shouldThrow = Array.isArray(ids) - ? response.length !== ids.length - : response === null -======= const shouldThrow = Array.isArray(ids) ? response.length !== ids.length : response === null ->>>>>>> devel return shouldThrow ? reject(new NotFoundError()) : resolve(response) }) @@ -455,15 +439,6 @@ class Data extends QueryBuilder { const nextQuery = column.split('.').reverse().reduce( (child, item) => ({ -<<<<<<< HEAD - [item]: child === null - ? { - [whereOperator]: whereValue - } - : { - _is: child - } -======= [item]: child === null ? { [whereOperator]: whereValue @@ -471,7 +446,6 @@ class Data extends QueryBuilder { { _is: child } ->>>>>>> devel }), null ) From 5f06d873aa878374967120c2f33bfa3694bbc77b Mon Sep 17 00:00:00 2001 From: syncano Date: Wed, 27 Sep 2017 15:11:30 +0000 Subject: [PATCH 20/28] chore(package.json): bump to 0.8.2-5 [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1350ae4..e29f59a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-4", + "version": "0.8.2-5", "description": "A library to intereact with the Syncano API on a server side", "main": "lib/index.js", "author": "Syncano Inc.", From ba7b4a8aa4e84493e576931603e0ad5e229c786e Mon Sep 17 00:00:00 2001 From: Kasper Mikiewicz Date: Wed, 27 Sep 2017 17:14:55 +0200 Subject: [PATCH 21/28] chore: cleanup library (#75) * chore: update dependencies * chore: remove docs * chore: cleanup tests and package.json * chore: add lint-staged as precommit hook * chore: remove standard config * fix: separate coverages * feat: configure linter * chore: run prettier * fix: test, logger initialization * chore: remove .vscode * chore: ignore vscode * chore: cleanup gitignore --- .gitignore | 2 - .npmignore | 3 - .vscode/settings.json | 13 - circle.yml | 8 +- codecov.yml | 2 + conf.json | 28 - package.json | 104 +- src/account.js | 4 +- src/channel.js | 8 +- src/class.js | 14 +- src/collection.js | 2 +- src/data.js | 105 +- src/errors.js | 4 +- src/event.js | 10 +- src/instance.js | 10 +- src/logger.js | 82 +- src/query-builder.js | 22 +- src/response.js | 2 +- src/server.js | 7 +- src/settings.js | 22 +- src/socket.js | 14 +- src/users.js | 6 +- src/utils.js | 4 +- {tests => test}/e2e/account.js | 8 +- {tests => test}/e2e/assets/test.jpg | Bin {tests => test}/e2e/class.js | 21 +- {tests => test}/e2e/data.js | 81 +- {tests => test}/e2e/event.js | 38 +- {tests => test}/e2e/instance.js | 16 +- {tests => test}/e2e/socket.js | 22 +- {tests => test}/unit/data.js | 214 +- {tests => test}/unit/errors.js | 36 +- {tests => test}/unit/event.js | 2 +- {tests => test}/unit/logger.js | 32 +- {tests => test}/unit/response.js | 38 +- {tests => test}/utils.js | 5 +- tutorials/01. Quick start.md | 1 - yarn.lock | 2993 +++++++++++++-------------- 38 files changed, 1938 insertions(+), 2045 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 conf.json rename {tests => test}/e2e/account.js (74%) rename {tests => test}/e2e/assets/test.jpg (100%) rename {tests => test}/e2e/class.js (77%) rename {tests => test}/e2e/data.js (72%) rename {tests => test}/e2e/event.js (59%) rename {tests => test}/e2e/instance.js (69%) rename {tests => test}/e2e/socket.js (73%) rename {tests => test}/unit/data.js (67%) rename {tests => test}/unit/errors.js (59%) rename {tests => test}/unit/event.js (95%) rename {tests => test}/unit/logger.js (67%) rename {tests => test}/unit/response.js (61%) rename {tests => test}/utils.js (80%) delete mode 100644 tutorials/01. Quick start.md diff --git a/.gitignore b/.gitignore index d61ebef..f8c6031 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,4 @@ docs coverage.lcov .nyc_output .envrc -e2e-tests -.envrc .vscode \ No newline at end of file diff --git a/.npmignore b/.npmignore index 337665c..515a8e3 100644 --- a/.npmignore +++ b/.npmignore @@ -1,9 +1,6 @@ node_modules example coverage -docs -tutorials -manual test .DS_Store .idea diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 762a622..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "files.exclude": { - "**/lib": true, - "**/.vscode": true, - "**/.nyc_output": true, - "**/docs": true, - "**/coverage": true, - "**/e2e-tests": true - }, - "standard.options": { - "env": ["mocha"] - } -} diff --git a/circle.yml b/circle.yml index 4d32997..ba536ff 100644 --- a/circle.yml +++ b/circle.yml @@ -18,16 +18,14 @@ dependencies: - yarn install general: - branches: - ignore: - - gh-pages artifacts: - "coverage/" test: override: - - yarn run test - post: + - yarn run test:unit + - yarn run test:coverage + - yarn run test:e2e - yarn run test:coverage deployment: diff --git a/codecov.yml b/codecov.yml index fd93c04..448910c 100644 --- a/codecov.yml +++ b/codecov.yml @@ -24,3 +24,5 @@ parsers: method: false javascript: enable_partials: false +ignore: + - "test" diff --git a/conf.json b/conf.json deleted file mode 100644 index b30562a..0000000 --- a/conf.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "tags": { - "allowUnknownTags": true - }, - "plugins": ["plugins/markdown"], - "templates": { - "logoFile": "", - "cleverLinks": false, - "monospaceLinks": false, - "dateFormat": "ddd MMM Do YYYY", - "outputSourceFiles": true, - "outputSourcePath": true, - "systemName": "Syncano server", - "footer": "", - "copyright": "Syncano", - "navType": "vertical", - "theme": "cosmo", - "linenums": true, - "collapseSymbols": false, - "inverseNav": true, - "protocol": "html://", - "methodHeadingReturns": false - }, - "markdown": { - "parser": "gfm", - "hardwrap": true - } -} diff --git a/package.json b/package.json index e29f59a..e2f71bd 100644 --- a/package.json +++ b/package.json @@ -1,88 +1,68 @@ { "name": "syncano-server", - "version": "0.8.2-5", - "description": "A library to intereact with the Syncano API on a server side", + "version": "0.8.2-3", + "description": "A library to intereact with the Syncano API on a server side.", "main": "lib/index.js", "author": "Syncano Inc.", - "contributors": [], "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/Syncano/syncano-server-js.git" + }, "scripts": { - "build": "npm-run-all build:*", - "build:lib": "babel src --out-dir lib", - "build:docs": "jsdoc -c ./conf.json -t ./node_modules/ink-docstrap/template -R README.md -d ./docs -r ./src", - "clean": "npm-run-all clean:*", - "clean:lib": "rimraf ./lib", - "clean:docs": "rimraf ./docs", - "clean:gh-pages": "rimraf ./node_modules/gh-pages/.cache", - "commit": "git-cz", "prepublish": "npm run build", - "prebuild": "npm run clean", - "unit": "cross-env NODE_ENV=test mocha tests/unit/**/*.js --reporter spec --require babel-register", - "test": "npm-run-all --parallel test:unit test:e2e", - "test:unit": "cross-env NODE_ENV=test nyc yarn run unit", - "test:e2e": "cross-env NODE_ENV=test nyc yarn run e2e", + "prebuild": "rimraf ./lib", + "precommit": "lint-staged", + "build": "babel src --out-dir lib", + "test": "npm run test:unit && npm run test:e2e", + "test:base": "cross-env NODE_ENV=test nyc mocha --reporter spec --require babel-register", + "test:unit": "npm run test:base -- test/unit/**/*.js", + "test:e2e": "npm run test:base -- --timeout 30000 --slow 8000 test/e2e/*.js", "test:coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov", - "lint": "xo src/**/*.js test/**/*.js", - "lint:fix": "xo --fix src/**/*.js test/**/*.js", - "e2e": "mkdir e2e-tests || true && cross-env NODE_ENV=test mocha tests/e2e/*.js --reporter spec --require babel-register --timeout 30000 --slow 8000", - "e2e:single": "mkdir e2e-tests || true && cross-env NODE_ENV=test mocha --reporter spec --require babel-register --timeout 30000 --slow 8000", - "watch": "npm-run-all --parallel watch:*", - "watch:lib": "npm run build:lib -- --watch", - "watch:lib:test": "mocha --watch tests/unit/**/*.js --compilers js:babel-register", - "release:docs": "gh-pages -d docs -m \"Docs v${npm_package_version} [ci skip]\"", - "release:reset": "git reset --hard $CIRCLE_SHA1", + "test:watch": "mocha --watch test/**/*.js --compilers js:babel-register", + "lint": "standard --fix --env mocha --parser babel-eslint", + "format": "prettier --write --single-quote --no-semi --no-bracket-spacing *.js {src,test}/**/*.js", "release:git-config": "git config --global user.email $GITHUB_EMAIL && git config --global user.name $GITHUB_NAME", "release:npm-token": "echo \"//registry.npmjs.org/:_authToken=${NPM_TOKEN}\nprogress=false\" > ~/.npmrc", "release:beta": "npm version prerelease -m \"chore(package.json): bump to %s [ci skip]\" && git push origin $CIRCLE_BRANCH", "release": "npm version patch -m \"chore(package.json): bump to %s [ci skip]\" && git push origin $CIRCLE_BRANCH" }, - "repository": { - "type": "git", - "url": "https://github.com/Syncano/syncano-server-js.git" + "lint-staged": { + "*.js": [ + "npm run lint", + "npm run format", + "git add" + ] }, "dependencies": { - "form-data": "^2.1.4", + "form-data": "^2.3.1", "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", "lodash.merge": "^4.6.0", - "node-fetch": "2.0.0-alpha.3" + "lodash.set": "^4.3.2", + "node-fetch": "2.0.0-alpha.3", + "prettier": "^1.7.0", + "standard": "^10.0.3" }, "devDependencies": { - "babel-cli": "^6.5.1", + "babel-cli": "^6.26.0", + "babel-eslint": "^8.0.0", "babel-plugin-add-module-exports": "^0.2.1", - "babel-plugin-transform-class-properties": "^6.22.0", + "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-export-extensions": "^6.22.0", - "babel-plugin-transform-inline-environment-variables": "^6.5.0", - "babel-plugin-transform-object-rest-spread": "^6.22.0", - "babel-plugin-transform-strict-mode": "^6.5.0", - "babel-preset-env": "^1.1.4", - "babel-register": "^6.5.1", - "chai": "^3.5.0", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-preset-env": "^1.6.0", + "babel-register": "^6.26.0", + "chai": "^4.1.2", "codecov": "^1.0.1", - "cross-env": "^3.1.4", - "cz-conventional-changelog": "^2.0.0", - "eslint": "^3.18.0", - "eslint-plugin-react": "^6.10.3", - "gh-pages": "^0.11.0", - "ink-docstrap": "^1.1.1", + "cross-env": "^5.0.5", + "husky": "^0.14.3", "isparta": "^4.0.0", - "jsdoc": "^3.4.0", - "mocha": "^2.4.5", - "nock": "^8.0.0", - "npm-run-all": "^2.0.0", - "nyc": "^10.1.2", + "lint-staged": "^4.2.2", + "mocha": "^3.5.3", + "nock": "^9.0.18", + "nyc": "^11.2.1", "rimraf": "^2.5.1", - "should": "^8.2.2", - "xo": "^0.18.0" - }, - "standard": { - "env": [ - "mocha" - ] - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } + "should": "^13.1.0" } } diff --git a/src/account.js b/src/account.js index f14b29d..aa80f83 100644 --- a/src/account.js +++ b/src/account.js @@ -5,7 +5,7 @@ import QueryBuilder from './query-builder' * @property {Function} */ class Account extends QueryBuilder { - url () { + url() { return `${this._getSyncanoURL()}/account/` } @@ -17,7 +17,7 @@ class Account extends QueryBuilder { * @example {@lang javascript} * const account = await account.get('0aad29dd0be2bcebb741525b9c5901e55cf43e98') */ - get (authKey) { + get(authKey) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { const headers = { diff --git a/src/channel.js b/src/channel.js index 8137817..08aa7f7 100644 --- a/src/channel.js +++ b/src/channel.js @@ -5,7 +5,7 @@ import QueryBuilder from './query-builder' * @property {Function} */ class Channel extends QueryBuilder { - url () { + url() { const {instanceName} = this.instance return `${this._getInstanceURL(instanceName)}/channels/default/publish/` @@ -19,7 +19,7 @@ class Channel extends QueryBuilder { * @example {@lang javascript} * const instance = await channel.publish('room_name', payload={}) */ - publish (room, payload) { + publish(room, payload) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { @@ -27,7 +27,9 @@ class Channel extends QueryBuilder { method: 'POST', body: JSON.stringify({room, payload}) } - fetch(this.url(), options).then(resolve).catch(reject) + fetch(this.url(), options) + .then(resolve) + .catch(reject) }) } } diff --git a/src/class.js b/src/class.js index ffc0657..0842136 100644 --- a/src/class.js +++ b/src/class.js @@ -5,7 +5,7 @@ import QueryBuilder from './query-builder' * @property {Function} */ class Class extends QueryBuilder { - url (className) { + url(className) { const {instanceName} = this.instance const baseUrl = `${this._getInstanceURL(instanceName)}/classes/` @@ -20,7 +20,7 @@ class Class extends QueryBuilder { * @example {@lang javascript} * const instance = await class.create({name: 'class_name'}) */ - create (params) { + create(params) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { @@ -29,7 +29,9 @@ class Class extends QueryBuilder { body: JSON.stringify(params) } - fetch(this.url(), options).then(resolve).catch(reject) + fetch(this.url(), options) + .then(resolve) + .catch(reject) }) } @@ -41,7 +43,7 @@ class Class extends QueryBuilder { * @example {@lang javascript} * await syncanoClass.delete('class_name') */ - delete (className) { + delete(className) { const fetch = this.fetch.bind(this) return new Promise((resolve, reject) => { @@ -49,7 +51,9 @@ class Class extends QueryBuilder { method: 'DELETE' } - fetch(this.url(className), options).then(resolve).catch(reject) + fetch(this.url(className), options) + .then(resolve) + .catch(reject) }) } } diff --git a/src/collection.js b/src/collection.js index 1b48122..618f4e1 100644 --- a/src/collection.js +++ b/src/collection.js @@ -3,7 +3,7 @@ * @link https://laravel.com/docs/5.3/collections */ export default class Collection { - constructor (data) { + constructor(data) { this.data = data } } diff --git a/src/data.js b/src/data.js index 21c4d12..ecafa18 100644 --- a/src/data.js +++ b/src/data.js @@ -14,9 +14,11 @@ const MAX_BATCH_SIZE = 50 * @property {Function} query Instance of syncano DataObject */ class Data extends QueryBuilder { - url (id) { + url(id) { const {instanceName, className} = this.instance - let url = `${this._getInstanceURL(instanceName)}/classes/${className}/objects/${id ? id + '/' : ''}` + let url = `${this._getInstanceURL( + instanceName + )}/classes/${className}/objects/${id ? id + '/' : ''}` if (this._url !== undefined) { url = this._url @@ -27,7 +29,7 @@ class Data extends QueryBuilder { return query ? `${url}?${query}` : url } - _batchBodyBuilder (body) { + _batchBodyBuilder(body) { const {instanceName, className, apiVersion} = this.instance const path = `/${apiVersion}/instances/${instanceName}/classes/${className}/objects/` @@ -57,7 +59,7 @@ class Data extends QueryBuilder { ) } - _batchFetchObject (body) { + _batchFetchObject(body) { const {instanceName} = this.instance return { @@ -79,7 +81,7 @@ class Data extends QueryBuilder { * // Get 10 posts * const posts = await data.posts.take(10).list() */ - list () { + list() { let result = [] const self = this const {baseUrl, relationships, instance, mappedFields, _mapFields} = this @@ -89,7 +91,7 @@ class Data extends QueryBuilder { return new Promise((resolve, reject) => { request(this.url()) - function request (url) { + function request(url) { fetch(url) .then(saveToResult) .then(loadNextPage) @@ -100,13 +102,13 @@ class Data extends QueryBuilder { .catch(err => reject(err)) } - function saveToResult (response) { + function saveToResult(response) { result = result.concat(response.objects) return response } - function loadNextPage (response) { + function loadNextPage(response) { const hasNextPageMeta = response.next const hasNotEnoughResults = pageSize === 0 || pageSize > result.length @@ -118,7 +120,7 @@ class Data extends QueryBuilder { return true } - function resolveRelatedModels (shouldResolve) { + function resolveRelatedModels(shouldResolve) { if (shouldResolve === false) { return false } @@ -162,7 +164,9 @@ class Data extends QueryBuilder { ids = Array.isArray(ids[0]) ? ids[0] : ids if (target === 'user') { - load._url = `${self._getInstanceURL(instance.instanceName)}/users/` + load._url = `${self._getInstanceURL( + instance.instanceName + )}/users/` } load.instance = self.instance @@ -196,7 +200,7 @@ class Data extends QueryBuilder { }) } - function replaceCustomTypesWithValue (shouldResolve) { + function replaceCustomTypesWithValue(shouldResolve) { if (shouldResolve === false) { return false } @@ -220,7 +224,7 @@ class Data extends QueryBuilder { return true } - function mapResultFields (shouldResolve) { + function mapResultFields(shouldResolve) { if (shouldResolve === false) { return false } @@ -230,7 +234,7 @@ class Data extends QueryBuilder { return true } - function resolveIfFinished (shouldResolve) { + function resolveIfFinished(shouldResolve) { if (shouldResolve) { if (pageSize !== 0) { result = result.slice(0, pageSize) @@ -243,9 +247,9 @@ class Data extends QueryBuilder { } _mapFields(items, fields) { - return fields.length === 0 ? - items : - items.map(item => + return fields.length === 0 + ? items + : items.map(item => Object.keys(fields).reduce( (all, key) => set(all, fields[key] || key, get(item, key)), {} @@ -253,7 +257,7 @@ class Data extends QueryBuilder { ) } - _getRelatedObjects (reference, items) { + _getRelatedObjects(reference, items) { if (!reference) { return null } @@ -273,8 +277,10 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('status', 'published').first() */ - first () { - return this.take(1).list().then(response => response[0] || null) + first() { + return this.take(1) + .list() + .then(response => response[0] || null) } /** @@ -283,7 +289,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('status', 'published').firstOrFail() */ - firstOrFail () { + firstOrFail() { return new Promise((resolve, reject) => { this.first() .then( @@ -302,7 +308,7 @@ class Data extends QueryBuilder { * const post = await data.posts * .updateOrCreate({name: 'value to match'}, {content: 'value to update'}) */ - firstOrCreate (attributes, values = {}) { + firstOrCreate(attributes, values = {}) { const query = this._toWhereArray(attributes) return this.where(query) @@ -317,7 +323,7 @@ class Data extends QueryBuilder { * const post = await data.posts * .updateOrCreate({name: 'value to match'}, {content: 'value to update'}) */ - updateOrCreate (attributes, values = {}) { + updateOrCreate(attributes, values = {}) { const query = this._toWhereArray(attributes) return this.where(query) @@ -326,7 +332,7 @@ class Data extends QueryBuilder { .catch(() => this.create(merge(attributes, values))) } - _toWhereArray (attributes) { + _toWhereArray(attributes) { return Object.keys(attributes).map(key => [key, 'eq', attributes[key]]) } @@ -340,7 +346,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.find([20, 99, 125]) */ - find (ids) { + find(ids) { if (Array.isArray(ids)) { return this.where('id', 'in', ids).list() } @@ -361,7 +367,7 @@ class Data extends QueryBuilder { * // Will throw error if at lest one of records was not found * const posts = await data.posts.findOrFail([20, 99, 125], true) */ - findOrFail (ids) { + findOrFail(ids) { return new Promise((resolve, reject) => { this.find(ids) .then(response => { @@ -385,7 +391,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.take(500).list() */ - take (count) { + take(count) { return this.withQuery({page_size: count}) // eslint-disable-line camelcase } @@ -397,7 +403,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.orderBy('created_at', 'DESC').list() */ - orderBy (column, direction = 'asc') { + orderBy(column, direction = 'asc') { direction = direction.toLowerCase() direction = direction === 'desc' ? '-' : '' @@ -422,7 +428,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.posts.where('user.full_name', 'contains', 'John').list() */ - where (column, operator, value) { + where(column, operator, value) { if (Array.isArray(column)) { column.map(([itemColumn, itemOperator, itemValue]) => this.where(itemColumn, itemOperator, itemValue) @@ -437,25 +443,28 @@ class Data extends QueryBuilder { const currentQuery = JSON.parse(this.query.query || '{}') - const nextQuery = column.split('.').reverse().reduce( - (child, item) => ({ - [item]: child === null ? - { - [whereOperator]: whereValue - } : - { - _is: child - } - }), - null - ) - + const nextQuery = column + .split('.') + .reverse() + .reduce( + (child, item) => ({ + [item]: + child === null + ? { + [whereOperator]: whereValue + } + : { + _is: child + } + }), + null + ) const query = merge({}, currentQuery, nextQuery) return this.withQuery({query: JSON.stringify(query)}) } - _normalizeWhereOperator (operator) { + _normalizeWhereOperator(operator) { const operators = { '<': 'lt', '<=': 'lte', @@ -477,7 +486,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * const posts = await data.users.fields('name', 'email as username')->list() */ - fields (...fields) { + fields(...fields) { if (Array.isArray(fields[0])) { fields = fields[0] } @@ -503,7 +512,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.with(['author', 'last_editor']).list() */ - with (...models) { + with(...models) { const relationships = Array.isArray(models[0]) ? models[0] : models return this.withRelationships(relationships) @@ -517,7 +526,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.where('id', 10).pluck('title') */ - pluck (column) { + pluck(column) { return this.list().then(items => items.map(item => item[column])) } @@ -529,7 +538,7 @@ class Data extends QueryBuilder { * @example {@lang javascript} * data.posts.where('id', 10).value('title') */ - value (column) { + value(column) { return this.first().then(item => item[column]) } @@ -588,7 +597,7 @@ class Data extends QueryBuilder { * { content: 'More lorem ipsum!' } * ]) */ - create (body) { + create(body) { let headers = null const fetchObject = { url: this.url(), @@ -662,7 +671,7 @@ class Data extends QueryBuilder { * data.posts.delete() * data.posts.where('draft', 1).delete() */ - delete (id) { + delete(id) { const isQueryDelete = id === undefined const fetchObject = { url: this.url(id), diff --git a/src/errors.js b/src/errors.js index b55167c..58dd816 100644 --- a/src/errors.js +++ b/src/errors.js @@ -1,4 +1,4 @@ -export function SyncanoError (message) { +export function SyncanoError(message) { this.name = 'SyncanoError' this.message = message || '' this.stack = new Error().stack @@ -7,7 +7,7 @@ export function SyncanoError (message) { SyncanoError.prototype = Object.create(Error.prototype) SyncanoError.prototype.constructor = SyncanoError -export function NotFoundError (message = 'No results for given query.') { +export function NotFoundError(message = 'No results for given query.') { this.name = 'NotFoundError' this.message = message this.stack = new Error().stack diff --git a/src/event.js b/src/event.js index 1221aaf..6eb944c 100644 --- a/src/event.js +++ b/src/event.js @@ -5,7 +5,7 @@ import QueryBuilder from './query-builder' * @property {Function} */ class Event extends QueryBuilder { - url () { + url() { const {instanceName} = this.instance return `${this._getInstanceURL(instanceName)}/triggers/emit/` @@ -19,7 +19,7 @@ class Event extends QueryBuilder { * @example {@lang javascript} * const instance = await event.emit('signal_name', payload={}) */ - emit (signalString, payload) { + emit(signalString, payload) { const fetch = this.fetch.bind(this) const {socket, signal} = Event._splitSignal(signalString) @@ -43,11 +43,13 @@ class Event extends QueryBuilder { }) } - fetch(this.url(), options).then(resolve).catch(reject) + fetch(this.url(), options) + .then(resolve) + .catch(reject) }) } - static _splitSignal (signalString) { + static _splitSignal(signalString) { const splited = signalString.split('.') if (splited.length === 1) { return {signal: splited[0]} diff --git a/src/instance.js b/src/instance.js index fb19f59..e91a4c5 100644 --- a/src/instance.js +++ b/src/instance.js @@ -5,7 +5,7 @@ import QueryBuilder from './query-builder' * @property {Function} */ class Instance extends QueryBuilder { - url (instanceName) { + url(instanceName) { const baseUrl = `${this._getSyncanoURL()}/instances/` return instanceName ? `${baseUrl}${instanceName}/` : baseUrl @@ -19,7 +19,7 @@ class Instance extends QueryBuilder { * @example {@lang javascript} * const instance = await instance.create({name: 'new-instance', description: 'description'}) */ - create (params) { + create(params) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { @@ -30,7 +30,9 @@ class Instance extends QueryBuilder { method: 'POST', body: JSON.stringify(params) } - fetch(this.url(), options, headers).then(resolve).catch(reject) + fetch(this.url(), options, headers) + .then(resolve) + .catch(reject) }) } @@ -42,7 +44,7 @@ class Instance extends QueryBuilder { * @example {@lang javascript} * await instance.delete('new-instance') */ - delete (instanceName) { + delete(instanceName) { const fetch = this.nonInstanceFetch.bind(this) return new Promise((resolve, reject) => { diff --git a/src/logger.js b/src/logger.js index 0352e40..c6f1c0b 100644 --- a/src/logger.js +++ b/src/logger.js @@ -3,24 +3,21 @@ * @property {Function} */ -/* global ARGS */ - const LEVELS = ['error', 'warn', 'info', 'debug'] class Logger { - constructor ({scope, callback, levels, config}) { + constructor(instance, {scope, callback, levels, config}) { this._start = null this._scope = scope this._callback = callback - - this.config = config + this.config = instance.meta.debug levels.forEach(level => { this[level] = this._makePrinter.bind(this, level) }) } - _makePrinter (...args) { + _makePrinter(...args) { this._start = this._start || this._getNow() this._level = args.shift() @@ -33,13 +30,13 @@ class Logger { this._level = null } - _pad (width, string, padding) { + _pad(width, string, padding) { return width <= string.length ? string : this._pad(width, padding + string, padding) } - _print (...args) { + _print(...args) { // Time const now = this._getNow() const diff = `+${this._calculateDiff(this._start, now)}` @@ -56,29 +53,7 @@ class Logger { return now } - // TODO: this is not used anyhow right now - _shouldLog (scope) { - if (this.config) { - if (typeof this.config === 'boolean') { - return this.config - } - - const vars = this.config.split(',') - const excluded = vars - .filter(item => item.startsWith('-')) - .map(item => item.replace(/^-/, '')) - - const matchAll = vars.filter(item => item === '*').length - const isWhitelisted = vars.indexOf(scope) >= 0 - const isExcluded = excluded.indexOf(scope) >= 0 - - return (matchAll || isWhitelisted) && !isExcluded - } - - return false - } - - _parseArg (arg) { + _parseArg(arg) { const isObject = arg !== null && typeof arg === 'object' if (isObject) { @@ -90,45 +65,46 @@ class Logger { return arg } - _getNow () { + _getNow() { return new Date() } - _getNowString (date) { + _getNowString(date) { return date .toISOString() .replace(/T/, ' ') // Replace T with a space .replace(/\..+/, '') // Delete the dot and everything after } - _calculateDiff (t1, t2) { + _calculateDiff(t1, t2) { return (t2.getTime() - t1.getTime()) / 1000 } } -const logger = function (scope) { - return new Logger({ - scope, - config: logger.config, - callback: logger._callback, - levels: logger._levels || LEVELS - }) -} +export default instance => { + const logger = function(scope) { + return new Logger(instance, { + scope, + callback: logger._callback, + levels: logger._levels || LEVELS + }) + } + + logger.levels = function(levels) { + if (!Array.isArray(levels)) { + throw new TypeError('Levels must be array of strings.') + } -logger.levels = function (levels) { - if (!Array.isArray(levels)) { - throw new TypeError('Levels must be array of strings.') + logger._levels = levels } - logger._levels = levels -} + logger.listen = function(callback) { + if (typeof callback !== 'function') { + throw new TypeError('Callback must be a function.') + } -logger.listen = function (callback) { - if (typeof callback !== 'function') { - throw new TypeError('Callback must be a function.') + logger._callback = callback } - logger._callback = callback + return logger } - -export default logger diff --git a/src/query-builder.js b/src/query-builder.js index bbf2984..7e1b76d 100644 --- a/src/query-builder.js +++ b/src/query-builder.js @@ -2,22 +2,22 @@ import nodeFetch from 'node-fetch' import {checkStatus, parseJSON} from './utils' export default class QueryBuilder { - constructor (instance) { + constructor(instance) { this.instance = instance this.baseUrl = `https://${instance.host}` } - _getSyncanoURL () { + _getSyncanoURL() { const {apiVersion, host} = this.instance return `https://${host}/${apiVersion}` } - _getInstanceURL (instanceName) { + _getInstanceURL(instanceName) { return `${this._getSyncanoURL()}/instances/${instanceName}` } - fetch (url, options, headers = {}) { + fetch(url, options, headers = {}) { const headersToSend = Object.assign( { 'content-type': 'application/json', @@ -34,7 +34,7 @@ export default class QueryBuilder { .then(checkStatus) } - nonInstanceFetch (url, options, headers) { + nonInstanceFetch(url, options, headers) { return nodeFetch(url, { headers: { 'content-type': 'application/json', @@ -46,31 +46,31 @@ export default class QueryBuilder { .then(checkStatus) } - get query () { + get query() { return this._query || {} } - get relationships () { + get relationships() { return this._relationships || [] } - get mappedFields () { + get mappedFields() { return this._mappedFields || [] } - withQuery (query) { + withQuery(query) { this._query = Object.assign({}, this.query, query) return this } - withRelationships (relationships) { + withRelationships(relationships) { this._relationships = this.relationships.concat(relationships) return this } - withMappedFields (fields) { + withMappedFields(fields) { this._mappedFields = Object.assign({}, this.mappedFields, ...fields) return this diff --git a/src/response.js b/src/response.js index 4e365e1..a626dc3 100644 --- a/src/response.js +++ b/src/response.js @@ -4,7 +4,7 @@ */ class Response { - constructor ( + constructor( instance, content = null, status = 200, diff --git a/src/server.js b/src/server.js index c4e2537..a9e48e7 100644 --- a/src/server.js +++ b/src/server.js @@ -23,8 +23,7 @@ const server = (ctx = {}) => { const response = new Response(config) const account = new Account(config) const instance = new Instance(config) - - Logger.config = ctx.meta ? ctx.meta.debug : '' + const logger = new Logger(config) return { _class, @@ -35,9 +34,9 @@ const server = (ctx = {}) => { channel, socket, response, - logger: Logger, + logger, data: new Proxy(new Data(settings), { - get (target, className) { + get(target, className) { return new Data(getConfig(className)) } }) diff --git a/src/settings.js b/src/settings.js index 122e536..6b2adb6 100644 --- a/src/settings.js +++ b/src/settings.js @@ -3,29 +3,31 @@ global.META = global.META || {} export default ({ meta = {}, token, + socket, instanceName, setResponse, HttpResponse, ...props }) => ({ - token: process.env.SYNCANO_API_KEY || - global.META.token || - meta.token || - token, - instanceName: process.env.SYNCANO_INSTANCE_NAME || + token: + token || process.env.SYNCANO_API_KEY || global.META.token || meta.token, + instanceName: + instanceName || + process.env.SYNCANO_INSTANCE_NAME || global.META.instance || - meta.instance || - instanceName, - host: process.env.SYNCANO_HOST || + meta.instance, + host: + process.env.SYNCANO_HOST || global.META.api_host || meta.api_host || 'api.syncano.io', - spaceHost: process.env.SPACE_HOST || + spaceHost: + process.env.SPACE_HOST || global.META.space_host || meta.space_host || 'syncano.space', apiVersion: 'v2', - socket: global.META.socket || meta.socket, + socket: socket || global.META.socket || meta.socket, meta, setResponse, HttpResponse, diff --git a/src/socket.js b/src/socket.js index 6e4f20b..26d0e86 100644 --- a/src/socket.js +++ b/src/socket.js @@ -8,7 +8,7 @@ import QueryBuilder from './query-builder' * const createdTag = await socket.post('tags/create', { name: 'nature' }) */ export default class Socket extends QueryBuilder { - post (endpoint, body = {}, options = {}) { + post(endpoint, body = {}, options = {}) { const fetch = this.fetch.bind(this) return fetch(this._url(endpoint), { @@ -18,29 +18,29 @@ export default class Socket extends QueryBuilder { }) } - get (endpoint, data = {}, options = {}) { + get(endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'GET'}, options) } - delete (endpoint, data = {}, options = {}) { + delete(endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'DELETE'}, options) } - put (endpoint, data = {}, options = {}) { + put(endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'PUT'}, options) } - patch (endpoint, data = {}, options = {}) { + patch(endpoint, data = {}, options = {}) { return this.post(endpoint, {...data, _method: 'PATCH'}, options) } - _url (endpoint) { + _url(endpoint) { const {instanceName, spaceHost} = this.instance return `https://${instanceName}.${spaceHost}/${endpoint}/` } - _parseBody (body) { + _parseBody(body) { const isBodyAnObject = typeof body === 'object' return isBodyAnObject ? JSON.stringify({...body}) : body diff --git a/src/users.js b/src/users.js index 3a746ba..2af2f93 100644 --- a/src/users.js +++ b/src/users.js @@ -6,9 +6,11 @@ import Data from './data' * @property {Function} */ class Users extends Data { - url (id) { + url(id) { const {instanceName} = this.instance - const url = `${this._getInstanceURL(instanceName)}/users/${id ? id + '/' : ''}` + const url = `${this._getInstanceURL(instanceName)}/users/${id + ? id + '/' + : ''}` const query = querystring.stringify(this.query) return query ? `${url}?${query}` : url diff --git a/src/utils.js b/src/utils.js index 698ab19..5b07de3 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,4 +1,4 @@ -export function checkStatus (response) { +export function checkStatus(response) { if (response.status >= 200 && response.status < 300) { return response.data } @@ -22,7 +22,7 @@ export function checkStatus (response) { throw error } -export function parseJSON (response) { +export function parseJSON(response) { const mimetype = response.headers.get('Content-Type') if (response.status === 204 || mimetype === null) { diff --git a/tests/e2e/account.js b/test/e2e/account.js similarity index 74% rename from tests/e2e/account.js rename to test/e2e/account.js index 0bd1116..1615d56 100644 --- a/tests/e2e/account.js +++ b/test/e2e/account.js @@ -1,14 +1,14 @@ import {expect} from 'chai' import Server from '../../src' -describe('Account', function () { +describe('Account', function() { let account = null - before(function () { + before(function() { account = new Server().account }) - it("can't get account with dummy key", function (done) { + it("can't get account with dummy key", function(done) { account .get('dummy key') .then(() => { @@ -20,7 +20,7 @@ describe('Account', function () { }) }) - it('can get account details with valid key', function (done) { + it('can get account details with valid key', function(done) { account .get(process.env.E2E_ACCOUNT_KEY) .then(account => { diff --git a/tests/e2e/assets/test.jpg b/test/e2e/assets/test.jpg similarity index 100% rename from tests/e2e/assets/test.jpg rename to test/e2e/assets/test.jpg diff --git a/tests/e2e/class.js b/test/e2e/class.js similarity index 77% rename from tests/e2e/class.js rename to test/e2e/class.js index 26f2b69..0ee7065 100644 --- a/tests/e2e/class.js +++ b/test/e2e/class.js @@ -1,23 +1,20 @@ -/* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import {expect} from 'chai' import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' -describe('Class', function () { +describe('Class', function() { let _class = null const testClassName = getRandomString() const instanceName = getRandomString() - before(function (done) { + before(function(done) { createTestInstance(instanceName) .then(instanceObj => { process.env.SYNCANO_INSTANCE_NAME = instanceObj.name process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - _class = new Server()._class + _class = new Server({ + socket: 'test-socket' + })._class done() }) .catch(err => { @@ -26,7 +23,7 @@ describe('Class', function () { }) }) - after(function (done) { + after(function(done) { deleteTestInstance(instanceName) .then(() => { done() @@ -36,7 +33,7 @@ describe('Class', function () { }) }) - it('can create a class', function (done) { + it('can create a class', function(done) { _class .create({ name: testClassName, @@ -52,11 +49,11 @@ describe('Class', function () { }) }) - it('can delete a class', function (done) { + it('can delete a class', function(done) { _class .delete(testClassName) .then(classObj => { - expect(classObj).to.be.empty + expect(classObj).to.be.an('undefined') done() }) .catch(err => { diff --git a/tests/e2e/data.js b/test/e2e/data.js similarity index 72% rename from tests/e2e/data.js rename to test/e2e/data.js index 5bdf4de..aed7f9b 100644 --- a/tests/e2e/data.js +++ b/test/e2e/data.js @@ -1,8 +1,3 @@ -/* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import fs from 'fs' import {join} from 'path' import FormData from 'form-data' @@ -10,18 +5,20 @@ import {expect} from 'chai' import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' -describe('Data object', function () { +describe('Data object', function() { let data = null let dummyStringFieldValue = getRandomString() const testClassName = getRandomString() const instanceName = getRandomString() - before(function (done) { + before(function(done) { createTestInstance(instanceName) .then(instanceObj => { process.env.SYNCANO_INSTANCE_NAME = instanceObj.name process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - return new Server()._class.create({ + return new Server({ + socket: 'test-socket' + })._class.create({ name: testClassName, schema: [ { @@ -51,7 +48,7 @@ describe('Data object', function () { }) }) - after(function (done) { + after(function(done) { deleteTestInstance(instanceName) .then(() => { done() @@ -61,7 +58,7 @@ describe('Data object', function () { }) }) - it('can create single object', function (done) { + it('can create single object', function(done) { data[testClassName] .create({ test: 'single', @@ -75,7 +72,7 @@ describe('Data object', function () { }) }) - it('can create multiple objects', function (done) { + it('can create multiple objects', function(done) { data[testClassName] .create([ {test: 'batch1', test2: 'secret'}, @@ -89,12 +86,12 @@ describe('Data object', function () { }) }) - it('can be listed', function (done) { + it('can be listed', function(done) { data[testClassName] .where('field_string', dummyStringFieldValue) .first() .then(dataObj => { - expect(dataObj).to.not.be.empty + expect(dataObj).to.not.be.an('undefined') done() }) .catch(err => { @@ -102,7 +99,7 @@ describe('Data object', function () { }) }) - it('can update single object', function (done) { + it('can update single object', function(done) { data[testClassName] .update(1, {test: 'Updated', test2: 'secret'}) .then(() => done()) @@ -112,7 +109,7 @@ describe('Data object', function () { }) }) - it('can update multiple objects', function (done) { + it('can update multiple objects', function(done) { data[testClassName] .update([ [2, {test: 'Updated1', test2: 'secret'}], @@ -127,7 +124,7 @@ describe('Data object', function () { }) }) - it('can update multiple objects by query', function (done) { + it('can update multiple objects by query', function(done) { data[testClassName] .where('id', 'gte', 4) .update({test: 'Query update', test2: 'secret query update'}) @@ -138,21 +135,27 @@ describe('Data object', function () { }) }) - it('can delete single object', function (done) { - data[testClassName].delete(1).then(() => done()).catch(err => { - console.log('ERROR: ', err) - done(err) - }) + it('can delete single object', function(done) { + data[testClassName] + .delete(1) + .then(() => done()) + .catch(err => { + console.log('ERROR: ', err) + done(err) + }) }) - it('can delete multiple objects', function (done) { - data[testClassName].delete([2, 3]).then(() => done()).catch(err => { - console.log('ERROR: ', err) - done(err) - }) + it('can delete multiple objects', function(done) { + data[testClassName] + .delete([2, 3]) + .then(() => done()) + .catch(err => { + console.log('ERROR: ', err) + done(err) + }) }) - it('can delete multiple objects by query', function (done) { + it('can delete multiple objects by query', function(done) { data[testClassName] .where('id', 'gte', 4) .delete() @@ -163,7 +166,7 @@ describe('Data object', function () { }) }) - it('can be sorted', function (done) { + it('can be sorted', function(done) { // Create objects Promise.all([ data[testClassName].create({field_string: 'abcdef'}), @@ -182,14 +185,14 @@ describe('Data object', function () { }) }) - it.skip('can be updated', function (done) {}) - it.skip('can be deleted', function (done) {}) - it.skip('can be updated by adding to array field', function (done) {}) - it.skip('can be updated by deleting from array field', function (done) {}) - it.skip('can be created with relation', function (done) {}) - it.skip('can be created with reference', function (done) {}) - it.skip('can be created with reference', function (done) {}) - it('can be created with file field', function (done) { + it.skip('can be updated', function(done) {}) + it.skip('can be deleted', function(done) {}) + it.skip('can be updated by adding to array field', function(done) {}) + it.skip('can be updated by deleting from array field', function(done) {}) + it.skip('can be created with relation', function(done) {}) + it.skip('can be created with reference', function(done) {}) + it.skip('can be created with reference', function(done) {}) + it('can be created with file field', function(done) { const form = new FormData() form.append( 'field_file', @@ -211,7 +214,7 @@ describe('Data object', function () { }) }) - it.skip('can be listed with one filter', function (done) {}) - it.skip('can be listed with two filters', function (done) {}) - it.skip('can be listed with order', function (done) {}) + it.skip('can be listed with one filter', function(done) {}) + it.skip('can be listed with two filters', function(done) {}) + it.skip('can be listed with order', function(done) {}) }) diff --git a/tests/e2e/event.js b/test/e2e/event.js similarity index 59% rename from tests/e2e/event.js rename to test/e2e/event.js index 930f439..c9457cd 100644 --- a/tests/e2e/event.js +++ b/test/e2e/event.js @@ -1,37 +1,33 @@ -/* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import {expect} from 'chai' import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' -describe('Event', function () { +describe('Event', function() { let event = null const testEventName = getRandomString() const testSocketName = getRandomString() const instanceName = getRandomString() - before(function (done) { + before(function(done) { createTestInstance(instanceName) .then(instanceObj => { process.env.SYNCANO_INSTANCE_NAME = instanceObj.name process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - event = new Server().event + event = new Server({ + socket: 'test-socket' + }).event done() }) .catch(err => { console.log(err) - err.response.text() - .then(text => { - console.log(text) - done(err) - }) + err.response.text().then(text => { + console.log(text) + done(err) + }) }) }) - after(function (done) { + after(function(done) { deleteTestInstance(instanceName) .then(() => { done() @@ -41,10 +37,11 @@ describe('Event', function () { }) }) - it('can emit event with socket name', function (done) { - event.emit(`${testSocketName}.${testEventName}`, {dummyKey: 'dummy_value'}) + it('can emit event with socket name', function(done) { + event + .emit(`${testSocketName}.${testEventName}`, {dummyKey: 'dummy_value'}) .then(event => { - expect(event).to.be.empty + expect(event).to.be.an('undefined') done() }) .catch(err => { @@ -53,10 +50,11 @@ describe('Event', function () { }) }) - it('can emit event without socket', function (done) { - event.emit(testEventName, {dummyKey: 'dummy_value'}) + it('can emit event without socket', function(done) { + event + .emit(testEventName, {dummyKey: 'dummy_value'}) .then(event => { - expect(event).to.be.empty + expect(event).to.be.an('undefined') done() }) .catch(err => { diff --git a/tests/e2e/instance.js b/test/e2e/instance.js similarity index 69% rename from tests/e2e/instance.js rename to test/e2e/instance.js index 0235951..6402280 100644 --- a/tests/e2e/instance.js +++ b/test/e2e/instance.js @@ -4,18 +4,19 @@ import {expect} from 'chai' import Server from '../../src' import {getRandomString} from '../utils' -describe('Instance', function () { +describe('Instance', function() { let instance = null const testInstanceName = getRandomString() this.timeout(5000) - before(function () { + before(function() { instance = new Server({accountKey: process.env.E2E_ACCOUNT_KEY}).instance }) - it('can create instance', function (done) { - instance.create({name: testInstanceName}) + it('can create instance', function(done) { + instance + .create({name: testInstanceName}) .then(instance => { expect(instance.name).to.be.equal(testInstanceName) done() @@ -26,10 +27,11 @@ describe('Instance', function () { }) }) - it('can delete instance', function (done) { - instance.delete(testInstanceName) + it('can delete instance', function(done) { + instance + .delete(testInstanceName) .then(res => { - expect(res).to.be.empty + expect(res).to.be.undefined done() }) .catch(err => { diff --git a/tests/e2e/socket.js b/test/e2e/socket.js similarity index 73% rename from tests/e2e/socket.js rename to test/e2e/socket.js index 4951ee2..6cb4064 100644 --- a/tests/e2e/socket.js +++ b/test/e2e/socket.js @@ -1,9 +1,9 @@ import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' -describe('Socket', function () { +describe('Socket', function() { const instanceName = getRandomString() - before(function (done) { + before(function(done) { createTestInstance(instanceName) .then(instanceObj => { if (!global.CONFIG) { @@ -15,19 +15,17 @@ describe('Socket', function () { }) .catch(err => { console.log(err) - err.response.text() - .then(text => { - console.log(text) - done(err) - }) + err.response.text().then(text => { + console.log(text) + done(err) + }) }) }) - after(function (done) { - deleteTestInstance(instanceName) - .then(() => { - done() - }) + after(function(done) { + deleteTestInstance(instanceName).then(() => { + done() + }) }) // it('can call event', function (done) { diff --git a/tests/unit/data.js b/test/unit/data.js similarity index 67% rename from tests/unit/data.js rename to test/unit/data.js index ca8c44e..44132d0 100644 --- a/tests/unit/data.js +++ b/test/unit/data.js @@ -20,12 +20,16 @@ describe('Data', () => { }) it('has #_query property', () => { - should(data.tag).have.property('query').which.is.Object() + should(data.tag) + .have.property('query') + .which.is.Object() }) describe('#list()', () => { it('should be a method of the model', () => { - should(data.users).have.property('list').which.is.Function() + should(data.users) + .have.property('list') + .which.is.Function() }) it('should be able to fetch objects list', () => { @@ -37,11 +41,20 @@ describe('Data', () => { next: null }) - data.users.take(10).list().then(objects => { - should(objects).be.Array().length(1) - should(objects).have.propertyByPath(0, 'name').which.is.String() - should(objects).have.propertyByPath(0, 'id').which.is.Number() - }) + data.users + .take(10) + .list() + .then(objects => { + should(objects) + .be.Array() + .length(1) + should(objects) + .have.propertyByPath(0, 'name') + .which.is.String() + should(objects) + .have.propertyByPath(0, 'id') + .which.is.Number() + }) }) it('should return [] when no objects were not found', () => { @@ -50,15 +63,22 @@ describe('Data', () => { .query({page_size: 5}) // eslint-disable-line camelcase .reply(200, {objects: [], next: null}) - data.users.take(5).list().then(objects => { - should(objects).be.Array().empty() - }) + data.users + .take(5) + .list() + .then(objects => { + should(objects) + .be.Array() + .empty() + }) }) }) describe('#first()', () => { it('should be a method of the model', () => { - should(data.users).have.property('first').which.is.Function() + should(data.users) + .have.property('first') + .which.is.Function() }) it('should be able to fetch single object', () => { @@ -69,8 +89,12 @@ describe('Data', () => { data.users.first().then(object => { should(object).be.Object() - should(object).have.property('name').which.is.String() - should(object).have.property('id').which.is.Number() + should(object) + .have.property('name') + .which.is.String() + should(object) + .have.property('id') + .which.is.Number() }) }) @@ -86,7 +110,9 @@ describe('Data', () => { describe('#firstOrFail()', () => { it('should be a method of the model', () => { - should(data.users).have.property('firstOrFail').which.is.Function() + should(data.users) + .have.property('firstOrFail') + .which.is.Function() }) it('should be able to fetch single object', () => { @@ -97,8 +123,12 @@ describe('Data', () => { data.users.firstOrFail().then(object => { should(object).be.Object() - should(object).have.property('name').which.is.String() - should(object).have.property('id').which.is.Number() + should(object) + .have.property('name') + .which.is.String() + should(object) + .have.property('id') + .which.is.Number() }) }) @@ -114,7 +144,9 @@ describe('Data', () => { describe('#firstOrCreate()', () => { it('should be a method of the model', () => { - should(data.users).have.property('firstOrCreate').which.is.Function() + should(data.users) + .have.property('firstOrCreate') + .which.is.Function() }) it.skip('should be able to fetch single existing object') @@ -123,7 +155,9 @@ describe('Data', () => { describe('#updateOrCreate()', () => { it('should be a method of the model', () => { - should(data.users).have.property('updateOrCreate').which.is.Function() + should(data.users) + .have.property('updateOrCreate') + .which.is.Function() }) it.skip('should be able to update existing object') @@ -132,7 +166,9 @@ describe('Data', () => { describe('#find()', () => { it('should be a method of the model', () => { - should(data.users).have.property('find').which.is.Function() + should(data.users) + .have.property('find') + .which.is.Function() }) it('should be able to fetch single object', () => { @@ -146,8 +182,12 @@ describe('Data', () => { data.users.find(7).then(object => { should(object).be.Object() - should(object).have.property('name').which.is.String() - should(object).have.property('id').which.is.Number() + should(object) + .have.property('name') + .which.is.String() + should(object) + .have.property('id') + .which.is.Number() }) }) @@ -163,11 +203,21 @@ describe('Data', () => { }) data.users.find([7, 8]).then(objects => { - should(objects).be.Array().length(2) - should(objects).have.propertyByPath(0, 'name').which.is.String() - should(objects).have.propertyByPath(0, 'id').which.is.Number() - should(objects).have.propertyByPath(1, 'name').which.is.String() - should(objects).have.propertyByPath(1, 'id').which.is.Number() + should(objects) + .be.Array() + .length(2) + should(objects) + .have.propertyByPath(0, 'name') + .which.is.String() + should(objects) + .have.propertyByPath(0, 'id') + .which.is.Number() + should(objects) + .have.propertyByPath(1, 'name') + .which.is.String() + should(objects) + .have.propertyByPath(1, 'id') + .which.is.Number() }) }) @@ -191,15 +241,19 @@ describe('Data', () => { }) .reply(200, {objects: [], next: null}) - data.users - .find([7, 8]) - .then(objects => should(objects).be.Array().empty()) + data.users.find([7, 8]).then(objects => + should(objects) + .be.Array() + .empty() + ) }) }) describe('#findOrFail()', () => { it('should be a method of the model', () => { - should(data.users).have.property('findOrFail').which.is.Function() + should(data.users) + .have.property('findOrFail') + .which.is.Function() }) it('should be able to fetch single object', () => { @@ -213,8 +267,12 @@ describe('Data', () => { data.users.find(7).then(object => { should(object).be.Object() - should(object).have.property('name').which.is.String() - should(object).have.property('id').which.is.Number() + should(object) + .have.property('name') + .which.is.String() + should(object) + .have.property('id') + .which.is.Number() }) }) @@ -230,11 +288,21 @@ describe('Data', () => { }) data.users.find([7, 8]).then(objects => { - should(objects).be.Array().length(2) - should(objects).have.propertyByPath(0, 'name').which.is.String() - should(objects).have.propertyByPath(0, 'id').which.is.Number() - should(objects).have.propertyByPath(1, 'name').which.is.String() - should(objects).have.propertyByPath(1, 'id').which.is.Number() + should(objects) + .be.Array() + .length(2) + should(objects) + .have.propertyByPath(0, 'name') + .which.is.String() + should(objects) + .have.propertyByPath(0, 'id') + .which.is.Number() + should(objects) + .have.propertyByPath(1, 'name') + .which.is.String() + should(objects) + .have.propertyByPath(1, 'id') + .which.is.Number() }) }) @@ -253,55 +321,73 @@ describe('Data', () => { describe('#take()', () => { it('should be a method of the model', () => { - should(data.users).have.property('take').which.is.Function() + should(data.users) + .have.property('take') + .which.is.Function() }) it('should add page_size parameter to the query', () => { const query = data.users.take(7) - should(query).have.propertyByPath('query', 'page_size').which.is.equal(7) + should(query) + .have.propertyByPath('query', 'page_size') + .which.is.equal(7) }) }) describe('#orderBy()', () => { it('should be a method of the model', () => { - should(data.users).have.property('orderBy').which.is.Function() + should(data.users) + .have.property('orderBy') + .which.is.Function() }) it('should add order_by parameter to the query', () => { const query = data.users.orderBy('name', 'DESC') - should(query).have.propertyByPath('_query', 'order_by').equal('-name') + should(query) + .have.propertyByPath('_query', 'order_by') + .equal('-name') }) }) describe('#where()', () => { it('should be a method of the model', () => { - should(data.users).have.property('where').which.is.Function() + should(data.users) + .have.property('where') + .which.is.Function() }) it('should add query parameter to the query', () => { const query = data.users.where('name', 'John') - should(query).have.propertyByPath('_query', 'query').which.is.String() + should(query) + .have.propertyByPath('_query', 'query') + .which.is.String() }) }) describe('#with()', () => { it('should be a method of the model', () => { - should(data.users).have.property('with').which.is.Function() + should(data.users) + .have.property('with') + .which.is.Function() }) it('should add query parameter to the query', () => { const query = data.users.with('posts') - should(query).have.propertyByPath('_relationships', 0).which.is.String() + should(query) + .have.propertyByPath('_relationships', 0) + .which.is.String() }) }) describe('#create()', () => { it('should be a method of the model', () => { - should(data.users).have.property('create').which.is.Function() + should(data.users) + .have.property('create') + .which.is.Function() }) it('should be able to create object', () => { @@ -314,7 +400,9 @@ describe('Data', () => { data.users.create(user).then(object => { should(object).be.Object() - should(object).have.property('name').equal('John') + should(object) + .have.property('name') + .equal('John') }) }) @@ -323,7 +411,9 @@ describe('Data', () => { describe('#update()', () => { it('should be a method of the model', () => { - should(data.users).have.property('update').which.is.Function() + should(data.users) + .have.property('update') + .which.is.Function() }) it('should be able to update object by id', () => { @@ -344,8 +434,12 @@ describe('Data', () => { }) .then(object => { should(object).be.Object() - should(object).have.property('id').equal(id) - should(object).have.property('first_name').equal(firstName) + should(object) + .have.property('id') + .equal(id) + should(object) + .have.property('first_name') + .equal(firstName) }) }) @@ -355,7 +449,9 @@ describe('Data', () => { describe('#delete()', () => { it('should be a method of the model', () => { - should(data.users).have.property('delete').which.is.Function() + should(data.users) + .have.property('delete') + .which.is.Function() }) it('should be able to delete object by id', () => { @@ -371,7 +467,9 @@ describe('Data', () => { data.users.delete(id).then(object => { should(object).be.Object() - should(object).have.property('id').equal(id) + should(object) + .have.property('id') + .equal(id) }) }) @@ -381,7 +479,9 @@ describe('Data', () => { describe('#fields()', () => { it('should be a method of the model', () => { - should(data.users).have.property('fields').which.is.Function() + should(data.users) + .have.property('fields') + .which.is.Function() }) it.skip('should be able to whitelist fields') @@ -390,7 +490,9 @@ describe('Data', () => { describe('#pluck()', () => { it('should be a method of the model', () => { - should(data.users).have.property('pluck').which.is.Function() + should(data.users) + .have.property('pluck') + .which.is.Function() }) it.skip('should be able to take column values') @@ -398,7 +500,9 @@ describe('Data', () => { describe('#value()', () => { it('should be a method of the model', () => { - should(data.users).have.property('value').which.is.Function() + should(data.users) + .have.property('value') + .which.is.Function() }) it.skip('should be able to take column value of single record') diff --git a/tests/unit/errors.js b/test/unit/errors.js similarity index 59% rename from tests/unit/errors.js rename to test/unit/errors.js index c45a108..9ee2a3a 100644 --- a/tests/unit/errors.js +++ b/test/unit/errors.js @@ -13,20 +13,28 @@ describe('SyncanoError', () => { }) it('has a proper name attribute', () => { - should(error).have.property('name').which.is.String().equal('SyncanoError') + should(error) + .have.property('name') + .which.is.String() + .equal('SyncanoError') }) it('has a proper message attribute', () => { - should(error).have.property('message').which.is.String().equal('dummy') + should(error) + .have.property('message') + .which.is.String() + .equal('dummy') }) it('has a proper stack attribute', () => { - should(error).have.property('stack').which.is.String() + should(error) + .have.property('stack') + .which.is.String() }) it('has defaults', () => { - should(new SyncanoError()).have - .property('message') + should(new SyncanoError()) + .have.property('message') .which.is.String() .equal('') }) @@ -44,20 +52,28 @@ describe('NotFoundError', () => { }) it('has a proper name attribute', () => { - should(error).have.property('name').which.is.String().equal('NotFoundError') + should(error) + .have.property('name') + .which.is.String() + .equal('NotFoundError') }) it('has a proper message attribute', () => { - should(error).have.property('message').which.is.String().equal('dummy') + should(error) + .have.property('message') + .which.is.String() + .equal('dummy') }) it('has a proper stack attribute', () => { - should(error).have.property('stack').which.is.String() + should(error) + .have.property('stack') + .which.is.String() }) it('has defaults', () => { - should(new NotFoundError()).have - .property('message') + should(new NotFoundError()) + .have.property('message') .which.is.String() .equal('No results for given query.') }) diff --git a/tests/unit/event.js b/test/unit/event.js similarity index 95% rename from tests/unit/event.js rename to test/unit/event.js index 578ea50..59f994a 100644 --- a/tests/unit/event.js +++ b/test/unit/event.js @@ -14,7 +14,7 @@ describe('Event', () => { it('_splitSignal properly spliting signalString without socket', () => { const {socket, signal} = Event._splitSignal(`${signalName}`) - should(socket).be.undefined + should(socket).be.undefined() should(signal).be.equal(signalName) }) }) diff --git a/tests/unit/logger.js b/test/unit/logger.js similarity index 67% rename from tests/unit/logger.js rename to test/unit/logger.js index f00110a..a9bc045 100644 --- a/tests/unit/logger.js +++ b/test/unit/logger.js @@ -20,16 +20,18 @@ describe('Logger', () => { }) it('has _start property set to Date', () => { - should(log).have.property('_start').which.is.null() + should(log).have.property('_start', null) }) it('has _callback property set to undefined', () => { - should(log).have.property('_callback').which.is.undefined() + should(log).have.property('_callback', undefined) }) describe('#listen()', () => { it('should be a method of the model', () => { - should(logger).have.property('listen').which.is.Function() + should(logger) + .have.property('listen') + .which.is.Function() }) it('should throw when callback was not passed', () => { @@ -39,13 +41,17 @@ describe('Logger', () => { it('should save callback', () => { logger.listen(() => {}) - should(logger).have.property('_callback').which.is.Function() + should(logger) + .have.property('_callback') + .which.is.Function() }) }) describe('#levels()', () => { it('should be a method of the model', () => { - should(logger).have.property('levels').which.is.Function() + should(logger) + .have.property('levels') + .which.is.Function() }) it('should throw when array was not passed', () => { @@ -55,25 +61,33 @@ describe('Logger', () => { describe('#debug()', () => { it('should be a method of the model', () => { - should(log).have.property('debug').which.is.Function() + should(log) + .have.property('debug') + .which.is.Function() }) }) describe('#error()', () => { it('should be a method of the model', () => { - should(log).have.property('error').which.is.Function() + should(log) + .have.property('error') + .which.is.Function() }) }) describe('#info()', () => { it('should be a method of the model', () => { - should(log).have.property('info').which.is.Function() + should(log) + .have.property('info') + .which.is.Function() }) }) describe('#warn()', () => { it('should be a method of the model', () => { - should(log).have.property('warn').which.is.Function() + should(log) + .have.property('warn') + .which.is.Function() }) }) }) diff --git a/tests/unit/response.js b/test/unit/response.js similarity index 61% rename from tests/unit/response.js rename to test/unit/response.js index 1f779f4..561f7fd 100644 --- a/tests/unit/response.js +++ b/test/unit/response.js @@ -18,19 +18,27 @@ describe('Response', () => { }) it('has _content property set to null', () => { - should(res).have.property('_content').which.is.null() + should(res) + .have.property('_content') + .which.is.null() }) it('has _status property set to 200', () => { - should(res).have.property('_status').which.is.equal(200) + should(res) + .have.property('_status') + .which.is.equal(200) }) it('has _mimetype property set to text/plain', () => { - should(res).have.property('_mimetype').which.is.equal('text/plain') + should(res) + .have.property('_mimetype') + .which.is.equal('text/plain') }) it('has _headers property set to {}', () => { - should(res).have.property('_headers').which.is.Object() + should(res) + .have.property('_headers') + .which.is.Object() }) // describe('#_make()', () => { @@ -41,31 +49,39 @@ describe('Response', () => { describe('#header()', () => { it('should be a method of the model', () => { - should(response).have.property('header').which.is.Function() + should(response) + .have.property('header') + .which.is.Function() }) it('should add X-TEST to _headers', () => { response.header('X-TEST', 'Hello World') - should(response).have.property('_headers').which.is.deepEqual({ - 'X-TEST': 'Hello World' - }) + should(response) + .have.property('_headers') + .which.is.deepEqual({ + 'X-TEST': 'Hello World' + }) }) }) describe('#json()', () => { it('should be a method of the model', () => { - should(response).have.property('json').which.is.Function() + should(response) + .have.property('json') + .which.is.Function() }) it('should change mimetype to application/json', () => { should(response.json()) - .have.property('_mimetype').which.is.equal('application/json') + .have.property('_mimetype') + .which.is.equal('application/json') }) it('should parse content to json', () => { should(response.json({hello: 'World'})) - .have.property('_content').which.is.equal('{"hello":"World"}') + .have.property('_content') + .which.is.equal('{"hello":"World"}') }) }) }) diff --git a/tests/utils.js b/test/utils.js similarity index 80% rename from tests/utils.js rename to test/utils.js index 7630e77..ebee312 100644 --- a/tests/utils.js +++ b/test/utils.js @@ -3,7 +3,10 @@ import Server from '../src' const accountConnection = new Server({accountKey: process.env.E2E_ACCOUNT_KEY}) export const getRandomString = () => { - return Math.random().toString(36).replace(/[^a-z]/g, '').substring(2, 12) + return Math.random() + .toString(36) + .replace(/[^a-z]/g, '') + .substring(2, 12) } export const createTestInstance = instanceName => { diff --git a/tutorials/01. Quick start.md b/tutorials/01. Quick start.md deleted file mode 100644 index 7694226..0000000 --- a/tutorials/01. Quick start.md +++ /dev/null @@ -1 +0,0 @@ -# Syncano-server diff --git a/yarn.lock b/yarn.lock index a1a5bca..47d26e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,11 @@ # yarn lockfile v1 -abbrev@1, abbrev@1.0.x: +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -12,23 +16,32 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - -acorn@^3.0.4, acorn@^3.3.0: +acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" + 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, ajv@^4.9.1: - version "4.11.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" dependencies: co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: @@ -43,13 +56,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" - dependencies: - string-width "^1.0.1" - -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -57,20 +64,34 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: - arrify "^1.0.0" micromatch "^2.1.5" + normalize-path "^2.0.0" + +app-root-path@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" append-transform@^0.4.0: version "0.4.0" @@ -79,19 +100,19 @@ append-transform@^0.4.0: default-require-extensions "^1.0.0" aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" dependencies: delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.9" @@ -110,28 +131,8 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-union@^1.0.1: version "1.0.2" @@ -148,8 +149,8 @@ array-unique@^0.2.1: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" array.prototype.find@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.3.tgz#08c3ec33e32ec4bab362a2958e686ae92f59271d" + 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" @@ -178,7 +179,7 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@1.5.2, async@1.x, async@^1.4.0, async@^1.4.2: +async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -190,176 +191,216 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-cli@^6.5.1: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.0.tgz#a05ffd210dca0c288a26d5319c5ac8669a265ad0" +babel-cli@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" dependencies: - babel-core "^6.24.0" - babel-polyfill "^6.23.0" - babel-register "^6.24.0" - babel-runtime "^6.22.0" - commander "^2.8.1" - convert-source-map "^1.1.0" + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" fs-readdir-recursive "^1.0.0" - glob "^7.0.0" - lodash "^4.2.0" - output-file-sync "^1.1.0" - path-is-absolute "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" slash "^1.0.0" - source-map "^0.5.0" - v8flags "^2.0.10" + source-map "^0.5.6" + v8flags "^2.1.1" optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" +babel-code-frame@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.0.tgz#418a7b5f3f7dc9a4670e61b1158b4c5661bec98d" dependencies: - chalk "^1.1.0" + chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.1.4, babel-core@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" +babel-code-frame@^6.16.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.24.0" - babel-helpers "^6.23.0" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.1.4, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" babel-messages "^6.23.0" - babel-register "^6.24.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" slash "^1.0.0" - source-map "^0.5.0" + source-map "^0.5.6" -babel-generator@^6.18.0, babel-generator@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" +babel-eslint@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.0.tgz#ce06f385bdfb5b6d7e603f06222f891abd14c240" + dependencies: + babel-code-frame "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + lodash "^4.17.4" + source-map "^0.5.6" trim-right "^1.0.1" -babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" dependencies: - babel-helper-explode-assignable-expression "^6.22.0" + babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-define-map@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: - babel-helper-function-name "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" - lodash "^4.2.0" + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-helper-explode-assignable-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" +babel-helper-function-name@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.0.tgz#d1b6779b647e5c5c31ebeb05e13b998e4d352d56" dependencies: - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-helper-get-function-arity "7.0.0-beta.0" + babel-template "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" +babel-helper-get-function-arity@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.0.tgz#9d1ab7213bb5efe1ef1638a8ea1489969b5a8b6e" + dependencies: + babel-types "7.0.0-beta.0" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" dependencies: babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-types "^6.24.1" -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-types "^6.24.1" -babel-helper-remap-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" dependencies: - babel-helper-optimise-call-expression "^6.23.0" + babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helpers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" + +babel-messages@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-7.0.0-beta.0.tgz#6df01296e49fc8fbd0637394326a167f36da817b" babel-messages@^6.23.0: version "6.23.0" @@ -402,21 +443,21 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" babel-plugin-transform-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: - babel-helper-remap-async-to-generator "^6.22.0" + babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-class-properties@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" dependencies: - babel-helper-function-name "^6.23.0" + babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" @@ -431,35 +472,35 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" babel-plugin-transform-es2015-classes@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: - babel-helper-define-map "^6.23.0" - babel-helper-function-name "^6.23.0" - babel-helper-optimise-call-expression "^6.23.0" - babel-helper-replace-supers "^6.23.0" + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" @@ -468,11 +509,11 @@ babel-plugin-transform-es2015-destructuring@^6.23.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" @@ -481,12 +522,12 @@ babel-plugin-transform-es2015-for-of@^6.23.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" @@ -494,63 +535,63 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: - babel-plugin-transform-strict-mode "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-types "^6.23.0" + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: - babel-helper-replace-supers "^6.22.0" + babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: - babel-helper-call-delegate "^6.22.0" - babel-helper-get-function-arity "^6.22.0" + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" @@ -559,12 +600,12 @@ babel-plugin-transform-es2015-spread@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" @@ -579,18 +620,18 @@ babel-plugin-transform-es2015-typeof-symbol@^6.23.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" regexpu-core "^2.0.0" babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" @@ -601,43 +642,37 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-inline-environment-variables@^6.5.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-environment-variables/-/babel-plugin-transform-inline-environment-variables-6.8.0.tgz#fc91dd08127dc6c2abdfd1721b11e9602a69ba10" - dependencies: - babel-runtime "^6.0.0" - -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.22.0" + babel-runtime "^6.26.0" babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: - regenerator-transform "0.9.8" + regenerator-transform "^0.10.0" -babel-plugin-transform-strict-mode@^6.22.0, babel-plugin-transform-strict-mode@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-polyfill@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" -babel-preset-env@^1.1.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.2.2.tgz#1dbc4d7f8a575691d301f45fa9b2f9698b1e3b92" +babel-preset-env@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -666,69 +701,104 @@ babel-preset-env@^1.1.4: babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" - browserslist "^1.4.0" - electron-to-chromium "^1.2.6" + browserslist "^2.1.2" invariant "^2.2.2" + semver "^5.3.0" -babel-register@^6.24.0, babel-register@^6.5.1: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - babel-core "^6.24.0" - babel-runtime "^6.22.0" - core-js "^2.4.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" home-or-tmp "^2.0.0" - lodash "^4.2.0" + lodash "^4.17.4" mkdirp "^0.5.1" - source-map-support "^0.4.2" + source-map-support "^0.4.15" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" +babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" - regenerator-runtime "^0.10.0" + regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" +babel-template@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.0.tgz#85083cf9e4395d5e48bf5154d7a8d6991cafecfb" dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" - babylon "^6.11.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" lodash "^4.2.0" -babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: - version "6.23.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.23.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.0.tgz#da14be9b762f62a2f060db464eaafdd8cd072a41" + dependencies: + babel-code-frame "7.0.0-beta.0" + babel-helper-function-name "7.0.0-beta.0" + babel-messages "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + debug "^3.0.1" + globals "^10.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.0.tgz#eb8b6e556470e6dcc4aef982d79ad229469b5169" dependencies: - babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" - to-fast-properties "^1.0.1" + to-fast-properties "^2.0.0" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +babylon@7.0.0-beta.22: + version "7.0.0-beta.22" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" bcrypt-pbkdf@^1.0.0: version "1.0.1" @@ -737,8 +807,8 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + version "1.10.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" block-stream@*: version "0.0.9" @@ -746,33 +816,29 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@~3.4.6: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" -boxen@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" dependencies: - ansi-align "^1.1.0" - camelcase "^4.0.0" - chalk "^1.1.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^0.1.0" - widest-line "^1.0.0" + hoek "4.x.x" -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: @@ -783,20 +849,16 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browserslist@^1.4.0: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - -buf-compare@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +browserslist@^2.1.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" + dependencies: + caniuse-lite "^1.0.30000718" + electron-to-chromium "^1.3.18" buffer-to-arraybuffer@0.0.4: version "0.0.4" @@ -824,47 +886,26 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -camelcase@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" - -caniuse-db@^1.0.30000639: - version "1.0.30000640" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000640.tgz#7b7fd3cf13c0d9d41f8754b577b202113e2be7ca" +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" +caniuse-lite@^1.0.30000718: + version "1.0.30000735" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000735.tgz#aab44016ef243e215ef43fd1343efd22930842f8" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -catharsis@~0.8.8: - version "0.8.8" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.8.tgz#693479f43aac549d806bd73e924cd0d944951a06" - dependencies: - underscore-contrib "~0.3.0" - center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -872,7 +913,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -"chai@>=1.9.2 <4.0.0", chai@^3.5.0: +"chai@>=1.9.2 <4.0.0": version "3.5.0" resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" dependencies: @@ -880,7 +921,18 @@ center-align@^0.1.1: deep-eql "^0.1.3" type-detect "^1.0.0" -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chai@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + dependencies: + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" + +chalk@^1.0.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: @@ -890,6 +942,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -898,9 +958,13 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" +check-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + chokidar@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -913,23 +977,34 @@ chokidar@^1.6.1: optionalDependencies: fsevents "^1.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" +ci-info@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: 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-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^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" + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^2.1.0: version "2.1.0" @@ -964,11 +1039,15 @@ codecov@^1.0.1: request ">=2.42.0" urlgrey ">=0.4.0" -collections@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/collections/-/collections-0.2.2.tgz#1f23026b2ef36f927eecc901e99c5f0d48fa334e" +color-convert@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: - weak-map "1.0.0" + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" @@ -976,20 +1055,16 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - -commander@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" - -commander@2.9.0, commander@^2.8.1: +commander@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" +commander@^2.11.0, commander@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1006,17 +1081,6 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -configstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - unique-string "^1.0.0" - write-file-atomic "^1.1.2" - xdg-basedir "^3.0.0" - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1025,57 +1089,46 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -conventional-commit-types@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.1.0.tgz#45d860386c9a2e6537ee91d8a1b61bd0411b3d04" - -convert-source-map@^1.1.0, convert-source-map@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" - -core-assert@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" - dependencies: - buf-compare "^1.0.0" - is-error "^2.2.0" +convert-source-map@^1.3.0, convert-source-map@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" -core-js@^2.0.0, core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" +cosmiconfig@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" dependencies: - capture-stack-trace "^1.0.0" + graceful-fs "^4.1.2" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.0.1" + os-homedir "^1.0.1" + parse-json "^2.2.0" + pinkie-promise "^2.0.0" + require-from-string "^1.1.0" -cross-env@^3.1.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" +cross-env@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.0.5.tgz#4383d364d9660873dd185b398af3bfef5efffef3" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" -cross-spawn-async@^2.1.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" - dependencies: - lru-cache "^4.0.0" - which "^1.2.8" - -cross-spawn@^4, cross-spawn@^4.0.0: +cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" dependencies: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.1.0: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -1089,26 +1142,11 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cz-conventional-changelog@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-2.0.0.tgz#55a979afdfe95e7024879d2a0f5924630170b533" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" dependencies: - conventional-commit-types "^2.0.0" - lodash.map "^4.5.1" - longest "^1.0.1" - pad-right "^0.2.2" - right-pad "^1.0.1" - word-wrap "^1.0.3" + boom "5.x.x" d@1: version "1.0.0" @@ -1122,56 +1160,60 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug-log@^1.0.1: +date-fns@^1.27.2: + version "1.28.5" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" + +debug-log@^1.0.0, debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: - ms "0.7.1" + ms "2.0.0" -debug@^2.1.1, debug@^2.2.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" +debug@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" dependencies: - ms "0.7.2" + ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-assign@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-1.0.0.tgz#b092743be8427dc621ea0067cdec7e70dd19f37b" - dependencies: - is-obj "^1.0.0" - deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" dependencies: type-detect "0.1.1" +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + dependencies: + type-detect "^4.0.0" + deep-equal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deep-strict-equal@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4" - dependencies: - core-assert "^0.2.0" - default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" @@ -1185,6 +1227,17 @@ define-properties@^1.1.2: 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" @@ -1211,9 +1264,9 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" doctrine@1.5.0, doctrine@^1.2.2: version "1.5.0" @@ -1229,57 +1282,19 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + jsbn "~0.1.0" -domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" +electron-to-chromium@^1.3.18: + version "1.3.21" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - dependencies: - domelementtype "1" - -domutils@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" - dependencies: - is-obj "^1.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -electron-to-chromium@^1.2.6, electron-to-chromium@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.8.tgz#22c2e6200d350da27d6050db7e3f6f85d18cf4ed" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" encoding@^0.1.11: version "0.1.12" @@ -1287,30 +1302,21 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -enhance-visitors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a" - dependencies: - lodash "^4.13.1" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - 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" -es-abstract@^1.4.3, es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" +es-abstract@^1.7.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" + has "^1.0.1" is-callable "^1.1.3" - is-regex "^1.0.3" + is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" @@ -1321,8 +1327,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + version "0.10.30" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1372,15 +1378,11 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -escape-string-regexp@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: +escape-string-regexp@1.0.5, 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" -escodegen@1.8.x, escodegen@^1.6.1: +escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -1391,6 +1393,17 @@ escodegen@1.8.x, escodegen@^1.6.1: optionalDependencies: source-map "~0.2.0" +escodegen@^1.6.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" @@ -1400,19 +1413,13 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-xo@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.18.1.tgz#f3bc873b33b2c82513d881eacb2ee3428407ad33" +eslint-config-standard-jsx@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1" -eslint-formatter-pretty@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-formatter-pretty/-/eslint-formatter-pretty-1.1.0.tgz#ab4d06da02fed8c13ae9f0dc540a433ef7ed6f5e" - dependencies: - ansi-escapes "^1.4.0" - chalk "^1.1.3" - log-symbols "^1.0.2" - plur "^2.1.2" - string-width "^2.0.0" +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" @@ -1423,26 +1430,13 @@ eslint-import-resolver-node@^0.2.0: 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" + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" dependencies: - debug "2.2.0" + debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-ava@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-4.2.0.tgz#12e4664659c1fae7895fa3f346c313ceb8907c77" - dependencies: - arrify "^1.0.1" - deep-strict-equal "^0.2.0" - enhance-visitors "^1.0.0" - espree "^3.1.3" - espurify "^1.5.0" - multimatch "^2.1.0" - pkg-up "^1.0.0" - req-all "^1.0.0" - -eslint-plugin-import@^2.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: @@ -1457,20 +1451,21 @@ eslint-plugin-import@^2.0.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-no-use-extend-native@^0.3.2: - version "0.3.12" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.3.12.tgz#3ad9a00c2df23b5d7f7f6be91550985a4ab701ea" +eslint-plugin-node@~4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz#c04390ab8dbcbb6887174023d6f3a72769e63b97" dependencies: - is-get-set-prop "^1.0.0" - is-js-type "^2.0.0" - is-obj-prop "^1.0.0" - is-proto-prop "^1.0.0" + 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.4.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.3: +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: @@ -1480,19 +1475,13 @@ eslint-plugin-react@^6.10.3: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint-plugin-unicorn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-2.1.0.tgz#2974cabdce874d9afe54ae8f1b851e8921ccbf94" - dependencies: - lodash.camelcase "^4.1.1" - lodash.kebabcase "^4.0.1" - lodash.snakecase "^4.0.1" - lodash.upperfirst "^4.2.0" - req-all "^1.0.0" +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.18.0: - version "3.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" +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" @@ -1530,33 +1519,24 @@ eslint@^3.18.0: text-table "~0.2.0" user-home "^2.0.0" -espree@^3.1.3, espree@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" +espree@^3.4.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" dependencies: - acorn "4.0.4" - acorn-jsx "^3.0.0" - -espree@~3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.7.tgz#fd5deec76a97a5120a9cd3a7cb1177a0923b11d2" - dependencies: - acorn "^3.3.0" + acorn "^5.1.1" acorn-jsx "^3.0.0" esprima@2.7.x, esprima@^2.1.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.1: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" -espurify@^1.5.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" - dependencies: - core-js "^2.0.0" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" esquery@^1.0.0: version "1.0.0" @@ -1565,24 +1545,20 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: - estraverse "~4.1.0" + estraverse "^4.1.0" object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.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" @@ -1594,41 +1570,30 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -event-stream@~3.3.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - execSync@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/execSync/-/execSync-1.0.2.tgz#1f42eda582225180053224ecdd3fd1960fdb3139" dependencies: temp "~0.5.1" -execa@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: - cross-spawn-async "^2.1.1" + cross-spawn "^5.0.1" + get-stream "^3.0.0" is-stream "^1.1.0" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.0.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" dependencies: - cross-spawn "^4.0.0" - get-stream "^2.2.0" + cross-spawn "^5.0.1" + get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" @@ -1651,9 +1616,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" extglob@^0.3.1: version "0.3.2" @@ -1661,15 +1626,19 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 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: +figures@^1.3.5, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: @@ -1684,8 +1653,8 @@ file-entry-cache@^2.0.0: object-assign "^4.0.1" filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fill-range@^2.1.0: version "2.2.3" @@ -1705,14 +1674,18 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-up@^1.0.0, find-up@^1.1.2: +find-root@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + +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: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -1741,7 +1714,7 @@ foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" -foreground-child@^1.3.3, foreground-child@^1.5.3: +foreground-child@^1.5.3, foreground-child@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" dependencies: @@ -1752,7 +1725,15 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@^2.1.4, form-data@~2.1.1: +form-data@^2.3.1, form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: @@ -1760,10 +1741,6 @@ form-data@^2.1.4, form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - fs-readdir-recursive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" @@ -1773,11 +1750,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.29" + node-pre-gyp "^0.6.36" fstream-ignore@^1.0.5: version "1.0.5" @@ -1796,13 +1773,13 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -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" +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -gauge@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -1827,47 +1804,28 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-set-props@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3" +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-own-enumerable-property-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-1.0.1.tgz#f1d4e3ad1402e039898e56d1e9b9aa924c26e484" -get-stdin@^5.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" -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" -gh-pages@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-0.11.0.tgz#93313c6dcbfc74d426bc89a29ebff6420acc3c1b" - dependencies: - async "1.5.2" - commander "2.9.0" - globby "^4.0.0" - graceful-fs "4.1.2" - q "1.4.1" - q-io "1.13.2" - wrench "1.5.8" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -1881,26 +1839,20 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - dependencies: - inherits "2" - minimatch "0.3" - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +glob@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: inflight "^1.0.4" inherits "2" @@ -1908,31 +1860,24 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.2: + 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.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0, globals@^9.14.0: - version "9.16.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" +globals@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.1.0.tgz#4425a1881be0d336b4a823a82a7be725d5dd987c" -globby@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^6.0.1" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" +globals@^9.14.0, globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -1945,37 +1890,7 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.2.tgz#fe2239b7574972e67e41f808823f9bfa4a991e37" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1992,8 +1907,8 @@ growl@1.9.2: resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" handlebars@^4.0.1, handlebars@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -2005,6 +1920,10 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -2012,6 +1931,13 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -2040,7 +1966,7 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -2049,10 +1975,27 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -2061,19 +2004,8 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" hosted-git-info@^2.1.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" - -htmlparser2@^3.9.0: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" http-signature@~1.1.0: version "1.1.1" @@ -2083,13 +2015,29 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -ignore@^3.2.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" +ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0: + version "3.3.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" imurmurhash@^0.1.4: version "0.1.4" @@ -2101,6 +2049,10 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2108,7 +2060,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2116,13 +2068,6 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -ink-docstrap@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ink-docstrap/-/ink-docstrap-1.3.0.tgz#e9005e5bb9025cc9a9be8e44ad87f8ad5888c81d" - dependencies: - moment "^2.14.1" - sanitize-html "^1.13.0" - inquirer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" @@ -2142,8 +2087,8 @@ inquirer@^0.12.0: through "^2.3.6" interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + version "1.0.4" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" @@ -2155,10 +2100,6 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -irregular-plurals@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -2169,7 +2110,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: +is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -2183,13 +2124,19 @@ 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-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + 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-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -2197,10 +2144,6 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-error@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c" - is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -2209,6 +2152,10 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -2225,52 +2172,40 @@ 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-get-set-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz#2731877e4d78a6a69edcce6bb9d68b0779e76312" - dependencies: - get-set-props "^0.1.0" - lowercase-keys "^1.0.0" - is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" -is-js-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-js-type/-/is-js-type-2.0.0.tgz#73617006d659b4eb4729bba747d28782df0f7e22" +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" dependencies: - js-types "^1.0.0" + is-extglob "^2.1.1" 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" + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" jsonpointer "^4.0.0" xtend "^4.0.0" -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" -is-obj-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-obj-prop/-/is-obj-prop-1.0.0.tgz#b34de79c450b8d7c73ab2cdf67dc875adb85f80e" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: - lowercase-keys "^1.0.0" - obj-props "^1.0.0" + kind-of "^3.0.2" -is-obj@^1.0.0: +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -2290,10 +2225,6 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -2302,38 +2233,31 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-proto-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-proto-prop/-/is-proto-prop-1.0.0.tgz#b3951f95c089924fb5d4fcda6542ab3e83e2b220" - dependencies: - lowercase-keys "^1.0.0" - proto-props "^0.2.0" - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - -is-regex@^1.0.3: +is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: has "^1.0.1" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + 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-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2350,8 +2274,8 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" is-windows@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.0.tgz#c61d61020c3ebe99261b781bd3d1622395f547f8" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" @@ -2385,51 +2309,50 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0, istanbul-lib-coverage@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -istanbul-lib-hook@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.4.tgz#1919debbc195807880041971caf9c7e2be2144d6" +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.6.2.tgz#dac644f358f51efd6113536d7070959a0111f73b" +istanbul-lib-instrument@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz#66f6c9421cc9ec4704f76f2db084ba9078a2b532" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.0.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" semver "^5.3.0" -istanbul-lib-report@^1.0.0-alpha.3: - version "1.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" dependencies: - async "^1.4.2" - istanbul-lib-coverage "^1.0.0-alpha" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" - rimraf "^2.4.3" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" +istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" dependencies: - istanbul-lib-coverage "^1.0.0-alpha.0" + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" - rimraf "^2.4.4" + rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.1.tgz#9a17176bc4a6cbebdae52b2f15961d52fa623fbc" +istanbul-reports@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.2.tgz#0fb2e3f6aa9922bd3ce45d05d8ab4d5e8e07bd4f" dependencies: handlebars "^4.0.3" @@ -2452,59 +2375,34 @@ istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" -jade@0.26.3: - version "0.26.3" - resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" - dependencies: - commander "0.6.1" - mkdirp "0.3.0" +jest-get-type@^21.0.2: + version "21.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.0.2.tgz#304e6b816dd33cd1f47aba0597bcad258a509fc6" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" +jest-validate@^21.1.0: + version "21.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.1.0.tgz#39d01115544a758bce49f221a5fcbb24ebdecc65" dependencies: - jsbn "~0.1.0" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + chalk "^2.0.1" + jest-get-type "^21.0.2" + leven "^2.1.0" + pretty-format "^21.1.0" -js-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03" +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@3.x, js-yaml@^3.5.1: - version "3.8.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" +js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" - esprima "^3.1.1" - -js2xmlparser@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-1.0.0.tgz#5a170f2e8d6476ce45405e04823242513782fe30" + esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdoc@^3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.4.3.tgz#e5740d6145c681f6679e6c17783a88dbdd97ccd3" - dependencies: - bluebird "~3.4.6" - catharsis "~0.8.8" - escape-string-regexp "~1.0.5" - espree "~3.1.7" - js2xmlparser "~1.0.0" - klaw "~1.3.0" - marked "~0.3.6" - mkdirp "~0.5.1" - requizzle "~0.2.1" - strip-json-comments "~2.0.1" - taffydb "2.6.2" - underscore "~1.8.3" - jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -2513,6 +2411,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2527,7 +2429,11 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -2540,52 +2446,44 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" - extsprintf "1.0.2" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" jsx-ast-utils@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" - dependencies: - object-assign "^4.1.0" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: - is-buffer "^1.0.2" - -klaw@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" + is-buffer "^1.1.5" -latest-version@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: - package-json "^3.0.0" + is-buffer "^1.1.5" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-req@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" dependencies: invert-kv "^1.0.0" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -2593,6 +2491,72 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lint-staged@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.2.2.tgz#a308ceb3f1031b78c832fbe4570744b3c7fd5a4e" + dependencies: + app-root-path "^2.0.0" + chalk "^2.1.0" + cosmiconfig "^1.1.0" + execa "^0.8.0" + is-glob "^4.0.0" + jest-validate "^21.1.0" + listr "^0.12.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + p-map "^1.1.1" + staged-git-files "0.0.4" + stringify-object "^3.2.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2619,60 +2583,92 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.camelcase@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" -lodash.isequal@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - -lodash.kebabcase@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" lodash.merge@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" -lodash.snakecase@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - -lodash.upperfirst@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.2.0, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.2: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@~4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" dependencies: chalk "^1.0.0" +log-symbols@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.0.0.tgz#595e63be4d5c8cbf294a9e09e0d5629f5913fc0c" + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -2683,39 +2679,12 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -lru-cache@^4.0.0, lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - -marked@~0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + pseudomap "^1.0.2" + yallist "^2.1.2" md5-hex@^1.2.0: version "1.3.0" @@ -2727,26 +2696,17 @@ md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" -meow@^3.4.2: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" + mimic-fn "^1.0.0" merge-source-map@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.3.tgz#da1415f2722a5119db07b14c4f973410863a2abf" + version "1.0.4" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" @@ -2766,115 +2726,90 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: - mime-db "~1.27.0" + mime-db "~1.30.0" -mime@^1.2.11: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -mimeparse@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/mimeparse/-/mimeparse-0.1.4.tgz#dafb02752370fd226093ae3152c271af01ac254a" - -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" +"minimatch@2 || 3", minimatch@^3.0.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.0.0" + brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", 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" -mocha@^2.4.5: - version "2.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" +mocha@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" dependencies: - commander "2.3.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.2" - glob "3.2.11" + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" growl "1.9.2" - jade "0.26.3" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" mkdirp "0.5.1" - supports-color "1.2.0" - to-iso-string "0.0.2" - -moment@^2.14.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + supports-color "3.1.2" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" nan@^2.3.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -nock@^8.0.0: - version "8.2.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-8.2.1.tgz#64cc65e1bdd3893f58cba7e1abfdc38f40f0364a" +nock@^9.0.18: + version "9.0.18" + resolved "https://registry.yarnpkg.com/nock/-/nock-9.0.18.tgz#814b6af376b8399d1bbcbaa17f1a458c653a719b" dependencies: chai ">=1.9.2 <4.0.0" debug "^2.2.0" deep-equal "^1.0.0" json-stringify-safe "^5.0.1" - lodash "~4.9.0" + lodash "~4.17.2" mkdirp "^0.5.0" propagate "0.4.0" qs "^6.0.2" + semver "^5.3.0" node-fetch@2.0.0-alpha.3: version "2.0.0-alpha.3" @@ -2885,15 +2820,16 @@ node-fetch@2.0.0-alpha.3: encoding "^0.1.11" is-stream "^1.0.1" -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" +node-pre-gyp@^0.6.36: + version "0.6.38" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" dependencies: + hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" - request "^2.81.0" + request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" tar "^2.2.1" @@ -2919,39 +2855,30 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.6" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -npm-run-all@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-2.3.0.tgz#da9a3b9c60942bf78a739e1e35c7f2dbec6d3571" +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: - chalk "^1.1.3" - cross-spawn "^4.0.0" - minimatch "^3.0.2" - object-assign "^4.0.1" - pinkie-promise "^2.0.1" - ps-tree "^1.0.1" - read-pkg "^1.1.0" - read-pkg-up "^1.0.1" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" + remove-trailing-separator "^1.0.1" -npm-run-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" +npm-path@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" dependencies: - path-key "^1.0.0" + which "^1.2.10" npm-run-path@^2.0.0: version "2.0.2" @@ -2959,22 +2886,30 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.7.1" + gauge "~2.7.3" set-blocking "~2.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -nyc@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-10.1.2.tgz#ea7acaa20a235210101604f4e7d56d28453b0274" +nyc@^11.2.1: + version "11.2.1" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.2.1.tgz#ad850afe9dbad7f4970728b4b2e47fed1c38721c" dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -2983,15 +2918,15 @@ nyc@^10.1.2: debug-log "^1.0.1" default-require-extensions "^1.0.0" find-cache-dir "^0.1.1" - find-up "^1.1.2" + find-up "^2.1.0" foreground-child "^1.5.3" glob "^7.0.6" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-hook "^1.0.0" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.1.0" - istanbul-reports "^1.0.0" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" md5-hex "^1.2.0" merge-source-map "^1.0.2" micromatch "^2.3.11" @@ -2999,19 +2934,15 @@ nyc@^10.1.2: resolve-from "^2.0.0" rimraf "^2.5.4" signal-exit "^3.0.1" - spawn-wrap "1.2.4" - test-exclude "^3.3.0" - yargs "^6.6.0" - yargs-parser "^4.0.2" + spawn-wrap "^1.3.8" + test-exclude "^4.1.1" + yargs "^8.0.1" + yargs-parser "^5.0.0" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -obj-props@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/obj-props/-/obj-props-1.1.0.tgz#626313faa442befd4a44e9a02c3cb6bde937b511" - 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" @@ -3063,15 +2994,26 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: + execa "^0.7.0" lcid "^1.0.0" + mem "^1.1.0" os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" @@ -3084,7 +3026,7 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^1.1.0: +output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" dependencies: @@ -3106,27 +3048,9 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -package-json@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pad-right@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" - dependencies: - repeat-string "^1.5.2" - -parse-gitignore@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/parse-gitignore/-/parse-gitignore-0.3.1.tgz#09adda265a4a5be2ce5e905b95a02f7f0e0044fa" - dependencies: - array-unique "^0.2.1" - is-glob "^2.0.1" +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" parse-glob@^3.0.4: version "3.0.4" @@ -3153,7 +3077,7 @@ 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.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -3161,10 +3085,6 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" - path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -3187,21 +3107,23 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" -pinkie-promise@^2.0.0, pinkie-promise@^2.0.1: +pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: @@ -3218,6 +3140,14 @@ pkg-conf@^2.0.0: 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" @@ -3230,12 +3160,6 @@ pkg-up@^1.0.0: dependencies: find-up "^1.0.0" -plur@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" - dependencies: - irregular-plurals "^1.0.0" - pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -3244,15 +3168,22 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -private@^0.1.6: +prettier@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.0.tgz#47481588f41f7c90f63938feb202ac82554e7150" + +pretty-format@^21.1.0: + version "21.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.1.0.tgz#557428254323832ee8b7c971cb613442bea67f61" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6, private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -3268,17 +3199,7 @@ propagate@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/propagate/-/propagate-0.4.0.tgz#f3fcca0a6fe06736a7ba572966069617c130b481" -proto-props@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/proto-props/-/proto-props-0.2.1.tgz#5e01dc2675a0de9abfa76e799dfa334d6f483f4b" - -ps-tree@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" - dependencies: - event-stream "~3.3.0" - -pseudomap@^1.0.1: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3286,39 +3207,24 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -q-io@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/q-io/-/q-io-1.13.2.tgz#eea130d481ddb5e1aa1bc5a66855f7391d06f003" - dependencies: - collections "^0.2.0" - mime "^1.2.11" - mimeparse "^0.1.4" - q "^1.0.1" - qs "^1.2.1" - url2 "^0.0.0" - -q@1.4.1, q@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -qs@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" +qs@^6.0.2, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@^6.0.2, qs@~6.4.0: +qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" +rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -3339,7 +3245,7 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0, read-pkg@^1.1.0: +read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: @@ -3355,16 +3261,16 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.4, readable-stream@^2.2.2: - version "2.2.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: - buffer-shims "^1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" readdirp@^2.0.0: @@ -3390,39 +3296,31 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" -regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" private "^0.1.6" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -regexp-quote@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/regexp-quote/-/regexp-quote-0.0.0.tgz#1e0f4650c862dcbfed54fd42b148e9bb1721fcf2" regexpu-core@^2.0.0: version "2.0.0" @@ -3432,18 +3330,6 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -registry-auth-token@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" - dependencies: - rc "^1.1.6" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -3454,6 +3340,10 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -3468,11 +3358,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -req-all@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/req-all/-/req-all-1.0.0.tgz#d128569451c340b432409c656cf166260cd2628d" - -request@>=2.42.0, request@^2.81.0: +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -3499,10 +3385,41 @@ request@>=2.42.0, request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@>=2.42.0: + version "2.82.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.82.0.tgz#2ba8a92cd7ac45660ea2b10a53ae67cd247516ea" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.2" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -3514,18 +3431,6 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" -requizzle@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" - dependencies: - underscore "~1.6.0" - -resolve-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f" - dependencies: - resolve-from "^2.0.0" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -3534,10 +3439,16 @@ resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" -resolve@1.1.x, resolve@^1.1.6: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.1.6, resolve@^1.1.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + 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" @@ -3551,13 +3462,9 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -right-pad@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" @@ -3573,29 +3480,29 @@ run-async@^0.1.0: 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" - -sanitize-html@^1.13.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.1.tgz#730ffa2249bdf18333effe45b286173c9c5ad0b8" +rxjs@^5.0.0-beta.11: + version "5.4.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.3.tgz#0758cddee6033d68e0fd53676f0f3596ce3d483f" dependencies: - htmlparser2 "^3.9.0" - regexp-quote "0.0.0" - xtend "^4.0.0" + symbol-observable "^1.0.1" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -3617,56 +3524,53 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" -should-equal@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-0.8.0.tgz#a3f05732ff45bac1b7ba412f8408856819641299" +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" dependencies: - should-type "0.2.0" + should-type "^1.4.0" -should-format@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/should-format/-/should-format-0.3.2.tgz#a59831e01a2ddee149911bc7148be5c80319e1ff" +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" dependencies: - should-type "0.2.0" - -should-type@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/should-type/-/should-type-0.2.0.tgz#6707ef95529d989dcc098fe0753ab1f9136bb7f6" + should-type "^1.3.0" + should-type-adaptors "^1.0.1" -should@^8.2.2: - version "8.4.0" - resolved "https://registry.yarnpkg.com/should/-/should-8.4.0.tgz#5e60889d3e644bbdd397a30cd34fad28fcf90bc0" +should-type-adaptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" dependencies: - should-equal "0.8.0" - should-format "0.3.2" - should-type "0.2.0" + should-type "^1.3.0" + should-util "^1.0.0" -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" -signal-exit@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-2.1.2.tgz#375879b1f92ebc3b334480d038dc546a6d558564" +should-util@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" + +should@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/should/-/should-13.1.0.tgz#0b7be3abf5ebf7c7e116935753918a40660de51e" + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" -signal-exit@^3.0.0, signal-exit@^3.0.1: +signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -3688,15 +3592,15 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -sort-keys@^1.1.1, sort-keys@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" +sntp@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" dependencies: - is-plain-obj "^1.0.0" + hoek "4.x.x" -source-map-support@^0.4.2: - version "0.4.14" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" @@ -3706,9 +3610,9 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" source-map@~0.2.0: version "0.2.0" @@ -3716,15 +3620,15 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -spawn-wrap@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.2.4.tgz#920eb211a769c093eebfbd5b0e7a5d2e68ab2e40" +spawn-wrap@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.3.8.tgz#fa2a79b990cbb0bb0018dca6748d88367b19ec31" dependencies: - foreground-child "^1.3.3" + foreground-child "^1.5.6" mkdirp "^0.5.0" os-homedir "^1.0.1" rimraf "^2.3.3" - signal-exit "^2.0.0" + signal-exit "^3.0.2" which "^1.2.4" spdx-correct@~1.0.0: @@ -3741,19 +3645,13 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -3762,15 +3660,39 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" -stream-combiner@~0.0.4: +staged-git-files@0.0.4: version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + +standard-engine@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690" dependencies: - duplexer "~0.1.1" + deglob "^2.1.0" + get-stdin "^5.0.1" + minimist "^1.1.0" + pkg-conf "^2.0.0" + +standard@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.3.tgz#7869bcbf422bdeeaab689a1ffb1fea9677dd50ea" + dependencies: + eslint "~3.19.0" + eslint-config-standard "10.2.1" + eslint-config-standard-jsx "4.0.2" + 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" + +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" @@ -3781,25 +3703,27 @@ string-width@^1.0.1, string-width@^1.0.2: 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" + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + strip-ansi "^4.0.0" -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" + safe-buffer "~5.1.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +stringify-object@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.0.tgz#94370a135e41bc048358813bf99481f1315c6aa6" + dependencies: + get-own-enumerable-property-symbols "^1.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -3809,6 +3733,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -3827,19 +3757,19 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 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@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" supports-color@^2.0.0: version "2.0.0" @@ -3851,6 +3781,16 @@ supports-color@^3.1.0, supports-color@^3.1.2: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + +symbol-observable@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -3862,10 +3802,6 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" -taffydb@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" - tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" @@ -3893,15 +3829,9 @@ temp@~0.5.1: dependencies: rimraf "~2.1.4" -term-size@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" - dependencies: - execa "^0.4.0" - -test-exclude@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-3.3.0.tgz#7a17ca1239988c98367b0621456dbb7d4bc38977" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -3913,36 +3843,24 @@ text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -the-argv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522" - -through@2, through@^2.3.6, through@~2.3, through@~2.3.1: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - -to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -to-iso-string@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +tough-cookie@~2.3.0, tough-cookie@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -3975,13 +3893,17 @@ type-detect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +type-detect@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" uglify-js@^2.6: - version "2.8.16" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -3996,52 +3918,13 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -underscore-contrib@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" - dependencies: - underscore "1.6.0" - -underscore@1.6.0, underscore@~1.6.0: +underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" -underscore@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - -update-notifier@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" - dependencies: - boxen "^1.0.0" - chalk "^1.0.0" - configstore "^3.0.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - lazy-req "^2.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - -url2@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/url2/-/url2-0.0.0.tgz#4eaabd1d5c3ac90d62ab4485c998422865a04b1a" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" urlgrey@>=0.4.0: version "0.4.4" @@ -4061,13 +3944,13 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -v8flags@^2.0.10: - version "2.0.11" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" dependencies: user-home "^1.1.1" @@ -4078,46 +3961,34 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: - extsprintf "1.0.2" - -weak-map@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.0.tgz#b66e56a9df0bd25a76bbf1b514db129080614a37" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.0.9, which@^1.1.1, which@^1.2.4, which@^1.2.8, which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" +which@^1.0.9, which@^1.1.1, which@^1.2.10, which@^1.2.4, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" - dependencies: - string-width "^1.0.1" - -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -word-wrap@^1.0.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.1.tgz#248f459b465d179a17bc407c854d3151d07e45d8" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -4141,87 +4012,21 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -wrench@1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.8.tgz#7a31c97f7869246d76c5cf2f5c977a1c4c8e5ab5" - -write-file-atomic@^1.1.2, write-file-atomic@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" +write-file-atomic@^1.1.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" slide "^1.1.5" -write-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.0.0.tgz#0eaec981fcf9288dbc2806cbd26e06ab9bdca4ed" - dependencies: - graceful-fs "^4.1.2" - mkdirp "^0.5.1" - pify "^2.0.0" - sort-keys "^1.1.1" - write-file-atomic "^1.1.2" - -write-pkg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-2.1.0.tgz#353aa44c39c48c21440f5c08ce6abd46141c9c08" - dependencies: - sort-keys "^1.1.2" - write-json-file "^2.0.0" - 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" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - -xo-init@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xo-init/-/xo-init-0.5.0.tgz#8e28dec79676cc5e042fde5fd8f710e2646b0e36" - dependencies: - arrify "^1.0.0" - execa "^0.5.0" - minimist "^1.1.3" - path-exists "^3.0.0" - read-pkg-up "^2.0.0" - the-argv "^1.0.0" - write-pkg "^2.0.0" - -xo@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/xo/-/xo-0.18.0.tgz#7c9e7932259a9cd2b1b8b602cbc7ee84bb5f858d" - dependencies: - arrify "^1.0.0" - debug "^2.2.0" - deep-assign "^1.0.0" - eslint "^3.18.0" - eslint-config-xo "^0.18.0" - eslint-formatter-pretty "^1.0.0" - eslint-plugin-ava "^4.2.0" - eslint-plugin-import "^2.0.0" - eslint-plugin-no-use-extend-native "^0.3.2" - eslint-plugin-promise "^3.4.0" - eslint-plugin-unicorn "^2.1.0" - get-stdin "^5.0.0" - globby "^6.0.0" - has-flag "^2.0.0" - lodash.isequal "^4.4.0" - meow "^3.4.2" - multimatch "^2.1.0" - parse-gitignore "^0.3.1" - path-exists "^3.0.0" - pkg-conf "^2.0.0" - resolve-cwd "^1.0.0" - resolve-from "^2.0.0" - update-notifier "^2.1.0" - xo-init "^0.5.0" - -xtend@^4.0.0: +xtend@^4.0.0, xtend@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -4229,33 +4034,39 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^4.0.2, yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" dependencies: camelcase "^3.0.0" -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" + +yargs@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" cliui "^3.2.0" decamelize "^1.1.1" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^7.0.0" yargs@~3.10.0: version "3.10.0" From 8e509fdddb9f78f568d4a25926212e39f50694e7 Mon Sep 17 00:00:00 2001 From: syncano Date: Wed, 27 Sep 2017 15:17:56 +0000 Subject: [PATCH 22/28] chore(package.json): bump to 0.8.2-4 [ci skip] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2f71bd..7af9e0e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "syncano-server", - "version": "0.8.2-3", + "version": "0.8.2-4", "description": "A library to intereact with the Syncano API on a server side.", "main": "lib/index.js", "author": "Syncano Inc.", From 49e1d7dc4d7ed382d3b5fbc9da82d2fc3bf08e5f Mon Sep 17 00:00:00 2001 From: syncano Date: Thu, 28 Sep 2017 10:12:15 +0200 Subject: [PATCH 23/28] fix(tests): geting data from the context --- tests/e2e/data.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/e2e/data.js b/tests/e2e/data.js index 5bdf4de..39cb0b0 100644 --- a/tests/e2e/data.js +++ b/tests/e2e/data.js @@ -1,8 +1,4 @@ /* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import fs from 'fs' import {join} from 'path' import FormData from 'form-data' @@ -17,11 +13,17 @@ describe('Data object', function () { const instanceName = getRandomString() before(function (done) { + const ctx = { + meta: { + socket: 'test-socket', + token: process.env.E2E_ACCOUNT_KEY + } + } createTestInstance(instanceName) .then(instanceObj => { - process.env.SYNCANO_INSTANCE_NAME = instanceObj.name - process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - return new Server()._class.create({ + ctx.meta.instance = instanceObj.name + + return new Server(ctx)._class.create({ name: testClassName, schema: [ { @@ -39,7 +41,7 @@ describe('Data object', function () { }) }) .then(classObj => { - data = new Server().data + data = new Server(ctx).data done() }) .catch(err => { From e9c1d332bc3721319a2a33c9970e2e0aca59e0f8 Mon Sep 17 00:00:00 2001 From: syncano Date: Thu, 28 Sep 2017 10:18:31 +0200 Subject: [PATCH 24/28] fix(style) --- src/data.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/data.js b/src/data.js index 21c4d12..e5bfc27 100644 --- a/src/data.js +++ b/src/data.js @@ -5,7 +5,6 @@ import get from 'lodash.get' import merge from 'lodash.merge' import QueryBuilder from './query-builder' import {NotFoundError} from './errors' -import {buildInstanceURL} from './utils' const MAX_BATCH_SIZE = 50 @@ -242,7 +241,7 @@ class Data extends QueryBuilder { }) } - _mapFields(items, fields) { + _mapFields (items, fields) { return fields.length === 0 ? items : items.map(item => @@ -365,9 +364,9 @@ class Data extends QueryBuilder { return new Promise((resolve, reject) => { this.find(ids) .then(response => { - const shouldThrow = Array.isArray(ids) ? - response.length !== ids.length : - response === null + const shouldThrow = Array.isArray(ids) + ? response.length !== ids.length + : response === null return shouldThrow ? reject(new NotFoundError()) : resolve(response) }) @@ -533,7 +532,7 @@ class Data extends QueryBuilder { return this.first().then(item => item[column]) } - _chunk(items, size) { + _chunk (items, size) { const chunks = [] while (items.length > 0) { @@ -543,7 +542,7 @@ class Data extends QueryBuilder { return chunks } - _batch(body, headers) { + _batch (body, headers) { const requests = this._chunk(body, MAX_BATCH_SIZE).map(chunk => () => { const fetchObject = this._batchFetchObject(chunk) @@ -553,7 +552,7 @@ class Data extends QueryBuilder { return new Promise((resolve, reject) => { const resolves = [] let i = 0 - ;(function next() { + ;(function next () { const request = requests[i++] if (request) { @@ -623,7 +622,7 @@ class Data extends QueryBuilder { * .where('destination', 'Warsaw') * .update({delayed: 1}) */ - update(id, body) { + update (id, body) { let headers = null const isQueryUpdate = typeof id === 'object' && id !== null && !Array.isArray(id) From f7818d9b9e8d7ee743ad5efa3af9757c1fcfb86b Mon Sep 17 00:00:00 2001 From: syncano Date: Thu, 28 Sep 2017 10:45:04 +0200 Subject: [PATCH 25/28] fix(test): taking things from the ctx --- tests/e2e/class.js | 15 ++++++++------- tests/e2e/event.js | 16 +++++++++------- tests/e2e/socket.js | 17 +---------------- 3 files changed, 18 insertions(+), 30 deletions(-) diff --git a/tests/e2e/class.js b/tests/e2e/class.js index 26f2b69..bd9b9d4 100644 --- a/tests/e2e/class.js +++ b/tests/e2e/class.js @@ -1,8 +1,4 @@ /* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import {expect} from 'chai' import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' @@ -13,11 +9,16 @@ describe('Class', function () { const instanceName = getRandomString() before(function (done) { + const ctx = { + meta: { + socket: 'test-socket', + token: process.env.E2E_ACCOUNT_KEY + } + } createTestInstance(instanceName) .then(instanceObj => { - process.env.SYNCANO_INSTANCE_NAME = instanceObj.name - process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - _class = new Server()._class + ctx.meta.instance = instanceObj.name + _class = new Server(ctx)._class done() }) .catch(err => { diff --git a/tests/e2e/event.js b/tests/e2e/event.js index 930f439..73d40b3 100644 --- a/tests/e2e/event.js +++ b/tests/e2e/event.js @@ -1,8 +1,4 @@ /* eslint-disable no-unused-expressions */ -global.META = { - socket: 'test-socket' -} - import {expect} from 'chai' import Server from '../../src' import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' @@ -13,12 +9,18 @@ describe('Event', function () { const testSocketName = getRandomString() const instanceName = getRandomString() + const ctx = { + meta: { + socket: 'test-socket', + token: process.env.E2E_ACCOUNT_KEY + } + } + before(function (done) { createTestInstance(instanceName) .then(instanceObj => { - process.env.SYNCANO_INSTANCE_NAME = instanceObj.name - process.env.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY - event = new Server().event + ctx.meta.instance = instanceObj.name + event = new Server(ctx).event done() }) .catch(err => { diff --git a/tests/e2e/socket.js b/tests/e2e/socket.js index 4951ee2..bf4cb0a 100644 --- a/tests/e2e/socket.js +++ b/tests/e2e/socket.js @@ -6,11 +6,6 @@ describe('Socket', function () { before(function (done) { createTestInstance(instanceName) .then(instanceObj => { - if (!global.CONFIG) { - global.CONFIG = {} - } - global.CONFIG.SYNCANO_INSTANCE_NAME = instanceObj.name - global.CONFIG.SYNCANO_API_KEY = process.env.E2E_ACCOUNT_KEY done() }) .catch(err => { @@ -30,15 +25,5 @@ describe('Socket', function () { }) }) - // it('can call event', function (done) { - // socket.post('openweathermap/get-three-hours-forecast', {city: 'bergen'}) - // .then(resp => resp.json()) - // .then(data => { - // done() - // }) - // .catch(err => { - // console.log(err) - // done(err) - // }) - // }) + // TODO: add tests! }) From 4d38287d0e4cba8300bffc3648bb3ba604e3da2f Mon Sep 17 00:00:00 2001 From: mkucharz Date: Tue, 3 Oct 2017 18:17:22 +0200 Subject: [PATCH 26/28] test(users) --- test/e2e/users.js | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/e2e/users.js diff --git a/test/e2e/users.js b/test/e2e/users.js new file mode 100644 index 0000000..99b8dd0 --- /dev/null +++ b/test/e2e/users.js @@ -0,0 +1,49 @@ +import Server from '../../src' +import {getRandomString, createTestInstance, deleteTestInstance} from '../utils' + +describe('Users', function() { + let users = null + const instanceName = getRandomString() + + before(function (done) { + const ctx = { + meta: { + socket: 'test-socket', + token: process.env.E2E_ACCOUNT_KEY + } + } + createTestInstance(instanceName) + .then(instanceObj => { + ctx.meta.instance = instanceObj.name + users = new Server(ctx).users + done() + }) + .catch(err => { + console.log(err) + err.response.text().then(text => { + console.log(text) + done(err) + }) + }) + }) + + after(function(done) { + deleteTestInstance(instanceName) + .then(() => { + done() + }) + .catch(() => { + done() + }) + }) + + it('list', function(done) { + users + .list() + .then(() => done()) + .catch(err => { + console.log('ERROR: ', err) + done(err) + }) + }) +}) From df3de98c1b9fbf44c1fe26f46718b703642e3436 Mon Sep 17 00:00:00 2001 From: mkucharz Date: Tue, 3 Oct 2017 18:38:40 +0200 Subject: [PATCH 27/28] fix(merge) --- package.json | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/package.json b/package.json index 2197905..647958b 100644 --- a/package.json +++ b/package.json @@ -40,20 +40,12 @@ "lodash.merge": "^4.6.0", "lodash.set": "^4.3.2", "node-fetch": "2.0.0-alpha.3", -<<<<<<< HEAD - "prettier": "^1.7.0", -======= "prettier": "^1.7.2", ->>>>>>> ce398e301faa92d08461d138a685836ffc22b4af "standard": "^10.0.3" }, "devDependencies": { "babel-cli": "^6.26.0", -<<<<<<< HEAD - "babel-eslint": "^8.0.0", -======= "babel-eslint": "^8.0.1", ->>>>>>> ce398e301faa92d08461d138a685836ffc22b4af "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-export-extensions": "^6.22.0", @@ -62,17 +54,6 @@ "babel-preset-env": "^1.6.0", "babel-register": "^6.26.0", "chai": "^4.1.2", -<<<<<<< HEAD - "codecov": "^1.0.1", - "cross-env": "^5.0.5", - "husky": "^0.14.3", - "isparta": "^4.0.0", - "lint-staged": "^4.2.2", - "mocha": "^3.5.3", - "nock": "^9.0.18", - "nyc": "^11.2.1", - "rimraf": "^2.5.1", -======= "codecov": "^2.3.0", "cross-env": "^5.0.5", "husky": "^0.14.3", @@ -82,7 +63,6 @@ "nock": "^9.0.22", "nyc": "^11.2.1", "rimraf": "^2.6.2", ->>>>>>> ce398e301faa92d08461d138a685836ffc22b4af "should": "^13.1.0" } } From 22d7e5ef3265b4ef722c375207e3ff8cbd6d5bf5 Mon Sep 17 00:00:00 2001 From: mkucharz Date: Tue, 3 Oct 2017 18:39:17 +0200 Subject: [PATCH 28/28] chore(circle): remove gamma config --- circle.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/circle.yml b/circle.yml index ba536ff..c19b735 100644 --- a/circle.yml +++ b/circle.yml @@ -29,13 +29,6 @@ test: - yarn run test:coverage deployment: - gamma: - branch: gamma - commands: - - yarn run release:git-config - - yarn run release:npm-token - - yarn run release:beta - - npm publish --tag gamma staging: branch: devel commands: @@ -57,4 +50,3 @@ experimental: only: - master - devel - - gamma