diff --git a/frontend/package.json b/frontend/package.json index d2b52ac7..22420783 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,6 +32,7 @@ "lodash.isempty": "^4.4.0", "lodash.template": "^4.4.0", "lodash.uniq": "^4.5.0", + "moment": "^2.17.1", "param-case": "^2.1.0", "querystring": "^0.2.0", "react": "^15.4.2", @@ -52,6 +53,7 @@ "redux-promise-middleware": "^4.2.0", "redux-thunk": "^2.2.0", "reselect": "^2.5.4", + "simple-statistics": "^2.5.0", "styled-components": "^1.4.4", "understood": "^1.0.1" }, diff --git a/frontend/src/state/selectors.js b/frontend/src/state/selectors.js index b8bd6370..7e12c128 100644 --- a/frontend/src/state/selectors.js +++ b/frontend/src/state/selectors.js @@ -1,7 +1,11 @@ +const IS_TEST = process.env.NODE_ENV === 'test'; + import find from 'lodash.find'; import forceArray from 'force-array'; import get from 'lodash.get'; import { createSelector } from 'reselect'; +import statistics from 'simple-statistics'; +import moment from 'moment'; const account = (state) => get(state, 'account.data', {}); const accountUi = (state) => get(state, 'account.ui', {}); @@ -225,6 +229,146 @@ const peopleByProjectId = (projectId) => createSelector( } ); +const metricByInterval = (data = [], { + duration = '1 hour', + interval = '5 minutes' +}) => { + const getDurationArgs = (value) => { + const [durationNumber, durationType] = value.split(/\s/); + return [Number(durationNumber), durationType]; + }; + + const _duration = moment.duration(...getDurationArgs(duration)); + const _interval = moment.duration(...getDurationArgs(interval)); + + const roundUpDate = (date) => { + const mod = date.valueOf() % _interval.valueOf(); + const diff = moment.duration(_interval.valueOf() - mod); + return moment(date).add(diff); + }; + + const roundDownDate = (date) => { + const mod = date.valueOf() % _interval.valueOf(); + return moment(date).subtract(mod); + }; + + const lastDate = roundUpDate(moment(data[data.length - 1][0], 'X')); + const firstDate = moment(data[0][0], 'X'); + + const getStart = () => { + const hardStart = moment(lastDate).subtract(_duration); + + return hardStart.isBefore(firstDate) + ? roundDownDate(firstDate) + : roundUpDate(hardStart); + }; + + const _start = getStart(); + + const genSample = (start) => ({ + start: start, + end: moment(start).add(_interval), + values: [] + }); + + const genStats = (sample) => { + const data = sample.values.map((r) => r.v); + + return { + firstQuartile: statistics.quantile(data, 0.25), + median: statistics.median(data), + thirdQuartile: statistics.quantile(data, 0.75), + max: statistics.max(data), + min: statistics.min(data), + stddev: statistics.sampleStandardDeviation(data) + } + }; + + const intervals = data.reduce((samples, value, i) => { + const sample = samples[samples.length - 1]; + const previousSample = samples[samples.length - 2]; + + const record = { + v: Number(value[1]), + t: moment(value[0], 'X') + }; + + if (record.t.isBefore(_start)) { + return samples; + } + + const split = () => { + const stats = genStats(sample); + + const nextSample = { + ...genSample(sample.end), + values: [record] + }; + + samples[samples.length - 1] = { + ...sample, + stats + }; + + return [ + ...samples, + nextSample + ]; + }; + + const append = (sample) => { + samples[samples.length - 1] = { + ...sample, + values: [...sample.values, record] + }; + + return samples; + }; + + const isWithin = ( + record.t.isSameOrAfter(sample.start) && + record.t.isSameOrBefore(sample.end) + ); + + const isBefore = record.t.isBefore(sample.start); + const isAfter = record.t.isAfter(sample.end); + let newSamples = samples; + + if (isWithin) { + newSamples = append(sample); + } + + if (isBefore) { + newSamples = append(previousSample); + } + + if (isAfter) { + newSamples = split(); + } + + if ((i + 1) >= data.length) { + const thisSample = newSamples[newSamples.length - 1]; + const lastStats = genStats(thisSample); + + newSamples[newSamples.length - 1] = { + ...thisSample, + stats: lastStats + } + } + + return newSamples; + }, [ + genSample(_start) + ]); + + return { + start: _start.valueOf(), + end: lastDate.valueOf(), + values: intervals.map((sample) => sample.stats), + __intervals: IS_TEST ? intervals : [] + }; +}; + export { account as accountSelector, accountUi as accountUISelector, @@ -251,5 +395,6 @@ export { peopleByProjectId as peopleByProjectIdSelector, projectsUI as projectUISelector, projectIndexById as projectIndexByIdSelect, - serviceUiTooltip as serviceUiTooltipSelector + serviceUiTooltip as serviceUiTooltipSelector, + metricByInterval as metricByIntervalSelector }; diff --git a/frontend/test/selectors/index.js b/frontend/test/selectors/index.js index 2473da93..43894211 100644 --- a/frontend/test/selectors/index.js +++ b/frontend/test/selectors/index.js @@ -1,10 +1,12 @@ const test = require('ava'); const selectors = require('@state/selectors'); +const flatten = require('lodash.flatten'); +const moment = require('moment'); const { accountSelector, - orgByIdSelector + orgByIdSelector, // orgsSelector, // orgSectionsSelector, // projectsByOrgIdSelector diff --git a/frontend/test/selectors/metric-by-Interval-selector.js b/frontend/test/selectors/metric-by-Interval-selector.js new file mode 100644 index 00000000..ad7ac54d --- /dev/null +++ b/frontend/test/selectors/metric-by-Interval-selector.js @@ -0,0 +1,130 @@ +const flatten = require('lodash.flatten'); +const { metricByIntervalSelector } = require('@state/selectors'); +const moment = require('moment'); +const test = require('ava'); + +const data = require('./metric-by-Interval-selector.json'); + +test('should ouput the right properties', (t) => { + const stats = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + t.truthy(stats.start); + t.truthy(stats.end); + + t.deepEqual(typeof stats.start, 'number'); + t.deepEqual(typeof stats.end, 'number'); + + t.truthy(stats.end > stats.start); + + t.truthy(Array.isArray(stats.values)); + t.truthy(stats.values.every((value) => [ + 'firstQuartile', + 'median', + 'thirdQuartile', + 'max', + 'min' + ].every((key) => value[key]))); +}); + +test('should respect order of records', (t) => { + const stats = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + const valuesFromSource = data.map((record) => Number(record[1])); + const valuesFromStats = flatten(stats.__intervals.map((sample) => { + return sample.values.map(r => r.v) + })); + + t.deepEqual(valuesFromStats, valuesFromSource); +}); + +test('should respect the intervals', (t) => { + const stats = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + t.truthy(stats.__intervals.every((sample, i, intervals) => { + const previous = i > 0 + ? intervals[i - 1] + : null; + + const isAfterPrevious = previous + ? moment(previous.end).isSame(moment(sample.start)) + : true; + + const interval = moment(sample.end).diff(moment(sample.start), 'seconds'); + + return ( + (interval === 30) && + isAfterPrevious + ); + })); +}); + +test('should respect the intervals', (t) => { + const stats = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + t.truthy(stats.__intervals.every((sample, i, intervals) => { + const previous = i > 0 + ? intervals[i - 1] + : null; + + const isAfterPrevious = previous + ? moment(previous.end).isSame(moment(sample.start)) + : true; + + const interval = moment(sample.end).diff(moment(sample.start), 'seconds'); + + return ( + (interval === 30) && + isAfterPrevious + ); + })); +}); + +test('records should be within intervals', (t) => { + const stats = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + t.truthy(stats.__intervals.every((sample) => { + return sample.values.every((record) => ( + record.t.isSameOrAfter(sample.start) && + record.t.isSameOrBefore(sample.end) + )) + })); +}); + +test('different data chunks should produce almost the same stats', (t) => { + const halfData = data.slice(Math.floor(data.length / 2), data.length); + + const stats1 = metricByIntervalSelector(data, { + duration: '10 minutes', + interval: '30 seconds' + }); + + const stats2 = metricByIntervalSelector(halfData, { + duration: '10 minutes', + interval: '30 seconds' + }); + + const matches = stats2.values.reduceRight((matches, value, i) => { + const x = stats1.values.length - (stats2.values.length - i); + const otherValue = stats1.values[x]; + + const isEqual = Object.keys(value).every((k) => otherValue[k] === value[k]); + return isEqual ? matches + 1 : matches + }, 0); + + t.truthy(matches >= (stats2.values.length - 2)); +}); diff --git a/frontend/test/selectors/metric-by-Interval-selector.json b/frontend/test/selectors/metric-by-Interval-selector.json new file mode 100644 index 00000000..84aacbcf --- /dev/null +++ b/frontend/test/selectors/metric-by-Interval-selector.json @@ -0,0 +1,506 @@ +[ + [ + 1488969918, + "39251968" + ], + [ + 1488969918, + "40300544" + ], + [ + 1488969933, + "27193344" + ], + [ + 1488969933, + "41349120" + ], + [ + 1488969933, + "39776256" + ], + [ + 1488969933, + "40300544" + ], + [ + 1488969948, + "60747776" + ], + [ + 1488969948, + "25620480" + ], + [ + 1488969948, + "27717632" + ], + [ + 1488969948, + "40300544" + ], + [ + 1488969963, + "26669056" + ], + [ + 1488969963, + "27717632" + ], + [ + 1488969963, + "40300544" + ], + [ + 1488969963, + "62320640" + ], + [ + 1488969978, + "26669056" + ], + [ + 1488969978, + "27717632" + ], + [ + 1488969978, + "63893504" + ], + [ + 1488969978, + "29290496" + ], + [ + 1488969993, + "65466368" + ], + [ + 1488969993, + "28241920" + ], + [ + 1488969993, + "26669056" + ], + [ + 1488969993, + "29814784" + ], + [ + 1488970008, + "28766208" + ], + [ + 1488970008, + "30339072" + ], + [ + 1488970008, + "26669056" + ], + [ + 1488970008, + "68087808" + ], + [ + 1488970023, + "70709248" + ], + [ + 1488970023, + "27193344" + ], + [ + 1488970023, + "30863360" + ], + [ + 1488970023, + "29290496" + ], + [ + 1488970038, + "31911936" + ], + [ + 1488970038, + "27193344" + ], + [ + 1488970038, + "29814784" + ], + [ + 1488970038, + "31911936" + ], + [ + 1488970053, + "31387648" + ], + [ + 1488970053, + "40300544" + ], + [ + 1488970053, + "26669056" + ], + [ + 1488970053, + "32436224" + ], + [ + 1488970068, + "34009088" + ], + [ + 1488970068, + "49737728" + ], + [ + 1488970068, + "31911936" + ], + [ + 1488970068, + "26669056" + ], + [ + 1488970083, + "26669056" + ], + [ + 1488970083, + "34009088" + ], + [ + 1488970083, + "34533376" + ], + [ + 1488970083, + "32436224" + ], + [ + 1488970098, + "26669056" + ], + [ + 1488970098, + "23523328" + ], + [ + 1488970098, + "40300544" + ], + [ + 1488970098, + "32960512" + ], + [ + 1488970113, + "23523328" + ], + [ + 1488970113, + "50786304" + ], + [ + 1488970113, + "26669056" + ], + [ + 1488970113, + "24047616" + ], + [ + 1488970128, + "24047616" + ], + [ + 1488970128, + "27193344" + ], + [ + 1488970128, + "39251968" + ], + [ + 1488970128, + "25096192" + ], + [ + 1488970143, + "25096192" + ], + [ + 1488970143, + "54456320" + ], + [ + 1488970143, + "27193344" + ], + [ + 1488970143, + "24571904" + ], + [ + 1488970158, + "43446272" + ], + [ + 1488970158, + "25620480" + ], + [ + 1488970158, + "25096192" + ], + [ + 1488970158, + "27717632" + ], + [ + 1488970173, + "25096192" + ], + [ + 1488970173, + "25620480" + ], + [ + 1488970173, + "26669056" + ], + [ + 1488970173, + "49737728" + ], + [ + 1488970188, + "26144768" + ], + [ + 1488970188, + "27193344" + ], + [ + 1488970188, + "25096192" + ], + [ + 1488970188, + "45019136" + ], + [ + 1488970203, + "54456320" + ], + [ + 1488970203, + "27717632" + ], + [ + 1488970203, + "25096192" + ], + [ + 1488970203, + "26669056" + ], + [ + 1488970218, + "29290496" + ], + [ + 1488970218, + "66514944" + ], + [ + 1488970218, + "25096192" + ], + [ + 1488970218, + "27193344" + ], + [ + 1488970233, + "25096192" + ], + [ + 1488970233, + "28241920" + ], + [ + 1488970233, + "66514944" + ], + [ + 1488970233, + "29814784" + ], + [ + 1488970248, + "66514944" + ], + [ + 1488970248, + "25096192" + ], + [ + 1488970248, + "30339072" + ], + [ + 1488970248, + "28766208" + ], + [ + 1488970263, + "25096192" + ], + [ + 1488970263, + "30863360" + ], + [ + 1488970263, + "66514944" + ], + [ + 1488970263, + "29814784" + ], + [ + 1488970278, + "30339072" + ], + [ + 1488970278, + "24047616" + ], + [ + 1488970278, + "66514944" + ], + [ + 1488970278, + "25096192" + ], + [ + 1488970293, + "30863360" + ], + [ + 1488970293, + "25620480" + ], + [ + 1488970293, + "66514944" + ], + [ + 1488970293, + "24047616" + ], + [ + 1488970308, + "23523328" + ], + [ + 1488970308, + "25620480" + ], + [ + 1488970308, + "66514944" + ], + [ + 1488970308, + "25096192" + ], + [ + 1488970323, + "24047616" + ], + [ + 1488970323, + "25620480" + ], + [ + 1488970323, + "25620480" + ], + [ + 1488970323, + "66514944" + ], + [ + 1488970338, + "24571904" + ], + [ + 1488970338, + "25620480" + ], + [ + 1488970338, + "26144768" + ], + [ + 1488970338, + "66514944" + ], + [ + 1488970353, + "66514944" + ], + [ + 1488970353, + "25096192" + ], + [ + 1488970353, + "26669056" + ], + [ + 1488970353, + "25620480" + ], + [ + 1488970368, + "66514944" + ], + [ + 1488970368, + "27193344" + ], + [ + 1488970368, + "25620480" + ], + [ + 1488970368, + "25620480" + ], + [ + 1488970383, + "28241920" + ], + [ + 1488970383, + "66514944" + ], + [ + 1488970383, + "26144768" + ], + [ + 1488970383, + "25620480" + ] +] diff --git a/frontend/yarn.lock b/frontend/yarn.lock index b7dbf735..1f1fd060 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1,7 +1,5 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 - - "@ava/babel-preset-stage-4@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.0.0.tgz#a613b5e152f529305422546b072d47facfb26291" @@ -67,13 +65,6 @@ transform-props-with "^2.1.0" traverse "^0.6.6" -JSONStream@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd" - dependencies: - jsonparse "0.0.5" - through ">=2.2.7 <3" - abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -118,10 +109,6 @@ 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: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -130,6 +117,10 @@ acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" +acorn@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" + ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -1590,7 +1581,15 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3, chalk@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1600,14 +1599,6 @@ chalk@1.1.3, 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@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - chart.js@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-2.5.0.tgz#fe6e751a893769f56e72bee5ad91207e1c592957" @@ -1857,21 +1848,21 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@0.5.x: - version "0.5.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" - colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" -commander@2, commander@^2.8.1: +commander@^2.8.1, commander@2: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -2228,7 +2219,7 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +"cssom@>= 0.3.2 < 0.4.0", cssom@0.3.x: version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -2244,6 +2235,12 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + d3-array@1, d3-array@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.1.0.tgz#bfea66b89d46f9aedf77296d3aad6307b50771cc" @@ -2454,12 +2451,6 @@ d3@^4.7.0: d3-voronoi "1.1.1" d3-zoom "1.1.2" -d@^0.1.1, d@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" - dependencies: - es5-ext "~0.10.2" - damerau-levenshtein@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" @@ -2482,18 +2473,18 @@ 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, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - -debug@2.6.1, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0: +debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" +debug@~2.2.0, debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2555,7 +2546,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0, depd@~1.1.0: +depd@~1.1.0, depd@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -2592,7 +2583,7 @@ discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" -doctrine@1.5.0, doctrine@^1.2.2: +doctrine@^1.2.2, doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -2616,7 +2607,7 @@ doiuse@^2.4.1: through2 "^0.6.3" yargs "^3.5.4" -dom-serializer@0, dom-serializer@~0.1.0: +dom-serializer@~0.1.0, dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -2627,7 +2618,7 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1, domelementtype@^1.3.0: +domelementtype@^1.3.0, domelementtype@1: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -2641,7 +2632,7 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domutils@1.5.1, domutils@^1.5.1: +domutils@^1.5.1, domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: @@ -2660,11 +2651,9 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" +duplexer@^0.1.1, duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexer2@^0.1.4: version "0.1.4" @@ -2672,9 +2661,11 @@ duplexer2@^0.1.4: dependencies: readable-stream "^2.0.2" -duplexer@^0.1.1, duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" ecc-jsbn@~0.1.1: version "0.1.1" @@ -2836,7 +2827,7 @@ es6-set@~0.1.3: es6-symbol "3" event-emitter "~0.3.4" -es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: +es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3: version "3.1.0" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" dependencies: @@ -2856,7 +2847,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5, 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" @@ -3066,7 +3057,7 @@ events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -eventsource@0.1.6, eventsource@^0.1.3: +eventsource@^0.1.3, eventsource@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" dependencies: @@ -3712,7 +3703,7 @@ html-encoding-sniffer@^1.0.1: dependencies: whatwg-encoding "^1.0.1" -html-entities@1.2.0, html-entities@^1.2.0: +html-entities@^1.2.0, html-entities@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" @@ -3784,7 +3775,7 @@ hyphenate-style-name@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" -iconv-lite@0.4, iconv-lite@0.4.13, iconv-lite@~0.4.13: +iconv-lite@~0.4.13, iconv-lite@0.4, iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -3848,7 +3839,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@2, inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -3897,7 +3888,7 @@ intl-messageformat-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.2.0.tgz#5906b7f953ab7470e0dc8549097b648b991892ff" -intl-messageformat@1.3.0, intl-messageformat@^1.3.0: +intl-messageformat@^1.3.0, intl-messageformat@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-1.3.0.tgz#f7d926aded7a3ab19b2dc601efd54e99a4bd4eae" dependencies: @@ -4180,14 +4171,14 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - isemail@2.x.x: version "2.2.1" resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" @@ -4441,6 +4432,13 @@ jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" +JSONStream@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd" + dependencies: + jsonparse "0.0.5" + through ">=2.2.7 <3" + jsprim@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" @@ -4691,14 +4689,14 @@ lodash.uniq@^4.3.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.1.0, lodash@^4.10.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - lodash@^3.5.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.10.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1, "lodash@>=3.5 <5": + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -4730,7 +4728,7 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@4.0.x, lru-cache@^4.0.1: +lru-cache@^4.0.1, lru-cache@4.0.x: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: @@ -4851,7 +4849,7 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.x.x, "mime-db@>= 1.24.0 < 2", mime-db@~1.26.0: +"mime-db@>= 1.24.0 < 2", mime-db@~1.26.0, mime-db@1.x.x: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" @@ -4861,7 +4859,7 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: dependencies: mime-db "~1.26.0" -mime@1.3.4, mime@1.3.x, mime@^1.3.4: +mime@^1.3.4, mime@1.3.4, mime@1.3.x: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" @@ -4884,38 +4882,38 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@3.0.3, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" -minimist@0.0.8, minimist@~0.0.1: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +minimist@~0.0.1, minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -moment@^2.10.6, moment@^2.17.1: +moment, moment@^2.10.6, moment@^2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" +ms@^0.7.1, ms@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" -ms@0.7.2, ms@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - multimatch@^2.0.0, multimatch@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" @@ -5411,16 +5409,16 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - path-to-regexp@^1.5.3: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" dependencies: isarray "0.0.1" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -5898,26 +5896,26 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + q@^1.1.2: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" +qs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + query-string@^4.1.0: version "4.3.2" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" @@ -5929,7 +5927,7 @@ querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" -querystring@0.2.0, querystring@^0.2.0: +querystring@^0.2.0, querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -6072,7 +6070,7 @@ react-router-dom@4.0.0-beta.6: history "^4.5.1" react-router "^4.0.0-beta.6" -react-router@4.0.0-beta.6, react-router@^4.0.0-beta.4, react-router@^4.0.0-beta.6: +react-router@^4.0.0-beta.4, react-router@^4.0.0-beta.6, react-router@4.0.0-beta.6: version "4.0.0-beta.6" resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.0.0-beta.6.tgz#561ac0bf1929960813bf201319ff85d821d5547b" dependencies: @@ -6139,15 +6137,6 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@^1.0.33, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -6169,6 +6158,15 @@ readable-stream@^2, readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", string_decoder "~0.10.x" util-deprecate "~1.0.1" +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@~2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" @@ -6476,7 +6474,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.5.4: +rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.0, rimraf@^2.5.4, rimraf@2: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -6520,7 +6518,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 || 5": version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -6626,6 +6624,10 @@ simple-mock@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/simple-mock/-/simple-mock-0.7.3.tgz#461c9e6f1c339cc49a7871b390676cd064388036" +simple-statistics: + version "2.5.0" + resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-2.5.0.tgz#7cd77b04288402f17fe21fd2b63c5e1a51ef3f51" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -6845,6 +6847,10 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string_decoder@^0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -6860,15 +6866,11 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" -string_decoder@^0.10.25, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: @@ -7145,6 +7147,10 @@ thenify@^3.2.1: dependencies: any-promise "^1.0.0" +through@^2.3.6, "through@>=2.2.7 <3", through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + through2@^0.6.1, through2@^0.6.3, through2@~0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" @@ -7159,10 +7165,6 @@ through2@^2.0.0, through2@~2.0.0: readable-stream "^2.1.5" xtend "~4.0.1" -"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - time-require@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98" @@ -7364,16 +7366,16 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" +url-parse@^1.0.1, url-parse@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" dependencies: querystringify "0.0.x" requires-port "1.0.x" -url-parse@^1.0.1, url-parse@^1.1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.8.tgz#7a65b3a8d57a1e86af6b4e2276e34774167c0156" +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" dependencies: querystringify "0.0.x" requires-port "1.0.x" @@ -7399,7 +7401,7 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util@0.10.3, util@^0.10.3: +util@^0.10.3, util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: @@ -7597,7 +7599,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1.2.x, which@^1.2.4, which@^1.2.9: +which@^1.2.4, which@^1.2.9, which@1.2.x: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -7615,15 +7617,15 @@ widest-line@^1.0.0: dependencies: string-width "^1.0.1" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - window-size@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" -wordwrap@0.0.2, wordwrap@~0.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" + +wordwrap@~0.0.2, wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -7704,7 +7706,7 @@ xmlhttprequest@1: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, "xtend@>=4.0.0 <4.1.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" @@ -7764,3 +7766,4 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" +