diff --git a/.babelrc b/.babelrc index bcb6ee8..a449227 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,12 @@ { - "presets": ["es2015", "stage-0"] -} \ No newline at end of file + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "esmodules": true + } + } + ] + ] +} diff --git a/.npmignore b/.npmignore index 9993063..7970f12 100644 --- a/.npmignore +++ b/.npmignore @@ -1,8 +1,10 @@ src +!src/index.d.ts test docs website scripts +node_modules/ *-bundle.js *.config.js *.html diff --git a/.travis.yml b/.travis.yml index db95f31..88bf612 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,11 @@ sudo: false language: node_js node_js: - - "5.6.0" + - "10.15.0" notifications: - email: false + email: false before_install: - export TZ=America/Los_Angeles -script: - npm test -- --coverage +script: npm test -- --coverage after_script: - - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js diff --git a/CHANGES.md b/CHANGES.md index 7735adf..c034c56 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ --- +## 0.8.10 +> January 2019 + +* Fixed performance issue with TimeSeries.toJSON() + ## 0.8.8 > November 2017 diff --git a/README.md b/README.md index 5325c0e..e62bc99 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ - # Pond.js --- [![Build status](https://api.travis-ci.org/esnet/pond.png)](https://travis-ci.org/esnet/pond) [![npm version](https://badge.fury.io/js/pondjs.svg)](https://badge.fury.io/js/pondjs) ----- +--- Pond.js is a library built on top of [immutable.js](https://facebook.github.io/immutable-js/) to provide time-based data structures, serialization and processing within our tools. @@ -23,7 +22,7 @@ The result might be as simple as comparing two time ranges: ```js const timerange = timerange1.intersection(timerange2); -timerange.asRelativeString(); // "a few seconds ago to a month ago" +timerange.asRelativeString(); // "a few seconds ago to a month ago" ``` Or simply getting the average value in a timeseries: @@ -36,7 +35,7 @@ Or quickly performing aggregations on a timeseries: ```js const timeseries = new TimeSeries(weatherData); -const dailyAvg = timeseries.fixedWindowRollup("1d", {value: avg}); +const dailyAvg = timeseries.fixedWindowRollup("1d", { value: avg }); ``` Or much higher level batch or stream processing using the Pipeline API: @@ -45,43 +44,47 @@ Or much higher level batch or stream processing using the Pipeline API: const p = Pipeline() .from(timeseries) .take(10) - .groupBy(e => e.value() > 65 ? "high" : "low") + .groupBy(e => (e.value() > 65 ? "high" : "low")) .emitOn("flush") - .to(CollectionOut, (collection, windowKey, groupByKey) => { - result[groupByKey] = collection; - }, true); + .to( + CollectionOut, + (collection, windowKey, groupByKey) => { + result[groupByKey] = collection; + }, + true + ); ``` ## What does it do? Pond has three main goals: - 1. **Data Structures** - Provide a robust set of time-related data structures, built on Immutable.js - 2. **Serialization** - Provide serialization of these structures for transmission across the wire - 3. **Processing** - Provide processing operations to work with those structures +1. **Data Structures** - Provide a robust set of time-related data structures, built on Immutable.js +2. **Serialization** - Provide serialization of these structures for transmission across the wire +3. **Processing** - Provide processing operations to work with those structures Here is a summary of what is provided: -* **TimeRange** - a begin and end time, packaged together -* **Index** - A time range denoted by a string, for example "5m-1234" is a specific 5 minute time range, or "2014-09" is September 2014 -* **TimeEvent** - A timestamp and a data object packaged together -* **IndexedEvents** - An Index and a data object packaged together. e.g. 1hr max value -* **TimeRangeEvents** - A TimeRange and a data object packaged together. e.g. outage event occurred from 9:10am until 10:15am +- **TimeRange** - a begin and end time, packaged together +- **Index** - A time range denoted by a string, for example "5m-1234" is a specific 5 minute time range, or "2014-09" is September 2014 +- **TimeEvent** - A timestamp and a data object packaged together +- **IndexedEvents** - An Index and a data object packaged together. e.g. 1hr max value +- **TimeRangeEvents** - A TimeRange and a data object packaged together. e.g. outage event occurred from 9:10am until 10:15am And forming together collections of events: -* **Collection** - A bag of events, with a helpful set of methods for operating on those events -* **TimeSeries** - An ordered Collection of Events and associated meta data, along with operations to roll-up, aggregate, break apart and recombine TimeSeries. +- **Collection** - A bag of events, with a helpful set of methods for operating on those events +- **TimeSeries** - An ordered Collection of Events and associated meta data, along with operations to roll-up, aggregate, break apart and recombine TimeSeries. And then high level processing via pipelines: -* **Pipeline** - Stream or batch style processing of events to build more complex processing operations, either on fixed TimeSeries or incoming realtime data. Supports windowing, grouping and aggregation. +- **Pipeline** - Stream or batch style processing of events to build more complex processing operations, either on fixed TimeSeries or incoming realtime data. Supports windowing, grouping and aggregation. # Typescript support As of version 0.8.6 Pond ships with Typescript declarations. -In addition, the project is also being rewritten in Typescript, which will probably eventually lead to a v1.0 version as the API will have significant differences. You can track the progress of that work in [Issue #65](https://github.com/esnet/pond/issues/65). +In addition, the project has been rewritten in Typescript, currently v1.0 alpha. This version is not compatible with react-timeseries-charts at this time. # Contributing @@ -91,15 +94,14 @@ The library has a large and growing Jest test suite. To run the tests interactiv npm test - # License This code is distributed under a BSD style license, see the LICENSE file for complete information. # Copyright -ESnet Timeseries Library ("Pond.js"), Copyright (c) 2015-2017, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. - -If you have questions about your rights to use or distribute this software, please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - -NOTICE. This software is owned by the U.S. Department of Energy. As such, the U.S. Government has been granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, and perform publicly and display publicly. Beginning five (5) years after the date permission to assert copyright is obtained from the U.S. Department of Energy, and subject to any subsequent five (5) year renewals, the U.S. Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. +ESnet Timeseries Library ("Pond.js"), Copyright (c) 2015-2018, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. + +If you have questions about your rights to use or distribute this software, please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + +NOTICE. This software is owned by the U.S. Department of Energy. As such, the U.S. Government has been granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, and perform publicly and display publicly. Beginning five (5) years after the date permission to assert copyright is obtained from the U.S. Department of Energy, and subject to any subsequent five (5) year renewals, the U.S. Government is granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, worldwide license in the Software to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. diff --git a/lib/entry.js b/lib/entry.js index 9e819d0..6e100bd 100644 --- a/lib/entry.js +++ b/lib/entry.js @@ -1,153 +1,202 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true +}); +Object.defineProperty(exports, "Event", { + enumerable: true, + get: function get() { + return _event.default; + } +}); +Object.defineProperty(exports, "TimeEvent", { + enumerable: true, + get: function get() { + return _timeevent.default; + } +}); +Object.defineProperty(exports, "TimeRangeEvent", { + enumerable: true, + get: function get() { + return _timerangeevent.default; + } +}); +Object.defineProperty(exports, "IndexedEvent", { + enumerable: true, + get: function get() { + return _indexedevent.default; + } +}); +Object.defineProperty(exports, "Index", { + enumerable: true, + get: function get() { + return _index.default; + } +}); +Object.defineProperty(exports, "TimeRange", { + enumerable: true, + get: function get() { + return _timerange.default; + } +}); +Object.defineProperty(exports, "Collection", { + enumerable: true, + get: function get() { + return _collection.default; + } +}); +Object.defineProperty(exports, "TimeSeries", { + enumerable: true, + get: function get() { + return _timeseries.default; + } }); -exports.filter = exports.percentile = exports.stdev = exports.median = exports.difference = exports.last = exports.first = exports.count = exports.min = exports.max = exports.avg = exports.sum = exports.keep = exports.CollectionOut = exports.EventOut = exports.PipelineOut = exports.Bounded = exports.Stream = exports.Pipeline = exports.TimeSeries = exports.Collection = exports.TimeRange = exports.Index = exports.IndexedEvent = exports.TimeRangeEvent = exports.TimeEvent = exports.Event = undefined; - -var _pipeline = require("./lib/pipeline.js"); - Object.defineProperty(exports, "Pipeline", { - enumerable: true, - get: function get() { - return _pipeline.Pipeline; - } + enumerable: true, + get: function get() { + return _pipeline.Pipeline; + } +}); +Object.defineProperty(exports, "Stream", { + enumerable: true, + get: function get() { + return _stream.default; + } +}); +Object.defineProperty(exports, "Bounded", { + enumerable: true, + get: function get() { + return _bounded.default; + } +}); +Object.defineProperty(exports, "PipelineOut", { + enumerable: true, + get: function get() { + return _pipelineout.default; + } +}); +Object.defineProperty(exports, "EventOut", { + enumerable: true, + get: function get() { + return _eventout.default; + } +}); +Object.defineProperty(exports, "CollectionOut", { + enumerable: true, + get: function get() { + return _collectionout.default; + } }); - -var _functions = require("./lib/base/functions"); - Object.defineProperty(exports, "keep", { - enumerable: true, - get: function get() { - return _functions.keep; - } + enumerable: true, + get: function get() { + return _functions.keep; + } }); Object.defineProperty(exports, "sum", { - enumerable: true, - get: function get() { - return _functions.sum; - } + enumerable: true, + get: function get() { + return _functions.sum; + } }); Object.defineProperty(exports, "avg", { - enumerable: true, - get: function get() { - return _functions.avg; - } + enumerable: true, + get: function get() { + return _functions.avg; + } }); Object.defineProperty(exports, "max", { - enumerable: true, - get: function get() { - return _functions.max; - } + enumerable: true, + get: function get() { + return _functions.max; + } }); Object.defineProperty(exports, "min", { - enumerable: true, - get: function get() { - return _functions.min; - } + enumerable: true, + get: function get() { + return _functions.min; + } }); Object.defineProperty(exports, "count", { - enumerable: true, - get: function get() { - return _functions.count; - } + enumerable: true, + get: function get() { + return _functions.count; + } }); Object.defineProperty(exports, "first", { - enumerable: true, - get: function get() { - return _functions.first; - } + enumerable: true, + get: function get() { + return _functions.first; + } }); Object.defineProperty(exports, "last", { - enumerable: true, - get: function get() { - return _functions.last; - } + enumerable: true, + get: function get() { + return _functions.last; + } }); Object.defineProperty(exports, "difference", { - enumerable: true, - get: function get() { - return _functions.difference; - } + enumerable: true, + get: function get() { + return _functions.difference; + } }); Object.defineProperty(exports, "median", { - enumerable: true, - get: function get() { - return _functions.median; - } + enumerable: true, + get: function get() { + return _functions.median; + } }); Object.defineProperty(exports, "stdev", { - enumerable: true, - get: function get() { - return _functions.stdev; - } + enumerable: true, + get: function get() { + return _functions.stdev; + } }); Object.defineProperty(exports, "percentile", { - enumerable: true, - get: function get() { - return _functions.percentile; - } + enumerable: true, + get: function get() { + return _functions.percentile; + } }); Object.defineProperty(exports, "filter", { - enumerable: true, - get: function get() { - return _functions.filter; - } + enumerable: true, + get: function get() { + return _functions.filter; + } }); -var _event = require("./lib/event"); - -var _event2 = _interopRequireDefault(_event); - -var _timeevent = require("./lib/timeevent"); +var _event = _interopRequireDefault(require("./lib/event")); -var _timeevent2 = _interopRequireDefault(_timeevent); +var _timeevent = _interopRequireDefault(require("./lib/timeevent")); -var _timerangeevent = require("./lib/timerangeevent"); +var _timerangeevent = _interopRequireDefault(require("./lib/timerangeevent")); -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); +var _indexedevent = _interopRequireDefault(require("./lib/indexedevent")); -var _indexedevent = require("./lib/indexedevent"); +var _index = _interopRequireDefault(require("./lib/index.js")); -var _indexedevent2 = _interopRequireDefault(_indexedevent); +var _timerange = _interopRequireDefault(require("./lib/timerange.js")); -var _index = require("./lib/index.js"); +var _collection = _interopRequireDefault(require("./lib/collection.js")); -var _index2 = _interopRequireDefault(_index); +var _timeseries = _interopRequireDefault(require("./lib/timeseries.js")); -var _timerange = require("./lib/timerange.js"); - -var _timerange2 = _interopRequireDefault(_timerange); - -var _collection = require("./lib/collection.js"); - -var _collection2 = _interopRequireDefault(_collection); - -var _timeseries = require("./lib/timeseries.js"); - -var _timeseries2 = _interopRequireDefault(_timeseries); - -var _stream = require("./lib/io/stream"); - -var _stream2 = _interopRequireDefault(_stream); - -var _bounded = require("./lib/io/bounded"); - -var _bounded2 = _interopRequireDefault(_bounded); - -var _pipelineout = require("./lib/io/pipelineout"); +var _pipeline = require("./lib/pipeline.js"); -var _pipelineout2 = _interopRequireDefault(_pipelineout); +var _stream = _interopRequireDefault(require("./lib/io/stream")); -var _eventout = require("./lib/io/eventout"); +var _bounded = _interopRequireDefault(require("./lib/io/bounded")); -var _eventout2 = _interopRequireDefault(_eventout); +var _pipelineout = _interopRequireDefault(require("./lib/io/pipelineout")); -var _collectionout = require("./lib/io/collectionout"); +var _eventout = _interopRequireDefault(require("./lib/io/eventout")); -var _collectionout2 = _interopRequireDefault(_collectionout); +var _collectionout = _interopRequireDefault(require("./lib/io/collectionout")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _functions = require("./lib/base/functions"); /** * Copyright (c) 2016-2017, The Regents of the University of California, @@ -158,33 +207,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ - // Chrome debugging for immutable.js structures var Immutable = require("immutable"); -var installDevTools = require("immutable-devtools"); -if (typeof window !== "undefined") { - installDevTools(Immutable); -} - -// Structures -exports.Event = _event2.default; -exports.TimeEvent = _timeevent2.default; -exports.TimeRangeEvent = _timerangeevent2.default; -exports.IndexedEvent = _indexedevent2.default; -exports.Index = _index2.default; -exports.TimeRange = _timerange2.default; -exports.Collection = _collection2.default; -exports.TimeSeries = _timeseries2.default; -// Pipeline - - -// I/O - -exports.Stream = _stream2.default; -exports.Bounded = _bounded2.default; -exports.PipelineOut = _pipelineout2.default; -exports.EventOut = _eventout2.default; -exports.CollectionOut = _collectionout2.default; +var installDevTools = require("immutable-devtools"); -// Functions \ No newline at end of file +if (typeof window !== "undefined") { + installDevTools(Immutable); +} // Structures \ No newline at end of file diff --git a/lib/lib/__tests__/align.test.js b/lib/lib/__tests__/align.test.js new file mode 100644 index 0000000..2843478 --- /dev/null +++ b/lib/lib/__tests__/align.test.js @@ -0,0 +1,160 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _pipeline = require("../pipeline"); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +/** + * Copyright (c) 2016, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var SIMPLE_GAP_DATA = { + name: "traffic", + columns: ["time", "value"], + points: [[1471824030000, 0.75], // Mon, 22 Aug 2016 00:00:30 GMT + [1471824105000, 2], // Mon, 22 Aug 2016 00:01:45 GMT + [1471824210000, 1], // Mon, 22 Aug 2016 00:03:30 GMT + [1471824390000, 1], // Mon, 22 Aug 2016 00:06:30 GMT + [1471824510000, 3], // Mon, 22 Aug 2016 00:08:30 GMT + //final point in same window, does nothing, for coverage + // Mon, 22 Aug 2016 00:08:45 GMT + [1471824525000, 5]] +}; +var SIMPLE_GAP_DATA_BAD = { + name: "traffic", + columns: ["time", "value"], + points: [[1471824030000, 0.75], // Mon, 22 Aug 2016 00:00:30 GMT + [1471824105000, 2], // Mon, 22 Aug 2016 00:01:45 GMT + [1471824210000, 1], // Mon, 22 Aug 2016 00:03:30 GMT + [1471824390000, 1], // Mon, 22 Aug 2016 00:06:30 GMT + [1471824510000, "bob!"], // Mon, 22 Aug 2016 00:08:30 GMT + // Mon, 22 Aug 2016 00:08:45 GMT + [1471824525000, 5]] +}; +it("can do basic alignment using TimeSeries.align()", done => { + var ts = new _timeseries.default(SIMPLE_GAP_DATA); + var aligned = ts.align({ + fieldSpec: "value", + period: "1m" + }); + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(1.25); + expect(aligned.at(1).get()).toBe(1.8571428571428572); + expect(aligned.at(2).get()).toBe(1.2857142857142856); + expect(aligned.at(3).get()).toBe(1.0); + expect(aligned.at(4).get()).toBe(1.0); + expect(aligned.at(5).get()).toBe(1.0); + expect(aligned.at(6).get()).toBe(1.5); + expect(aligned.at(7).get()).toBe(2.5); + done(); +}); +it("can do basic hold alignment with TimeSeries.align() and method hold", done => { + var ts = new _timeseries.default(SIMPLE_GAP_DATA); + var aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "hold" + }); + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(0.75); + expect(aligned.at(1).get()).toBe(2); + expect(aligned.at(2).get()).toBe(2); + expect(aligned.at(3).get()).toBe(1); + expect(aligned.at(4).get()).toBe(1); + expect(aligned.at(5).get()).toBe(1); + expect(aligned.at(6).get()).toBe(1); + expect(aligned.at(7).get()).toBe(1); + done(); +}); +it("can do alignment with TimeSeries.align() with a limit and hold interpolation", done => { + var ts = new _timeseries.default(SIMPLE_GAP_DATA); + var aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "hold", + limit: 2 + }); + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(0.75); + expect(aligned.at(1).get()).toBe(2); + expect(aligned.at(2).get()).toBe(2); + expect(aligned.at(3).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(4).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(5).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(6).get()).toBe(1); + expect(aligned.at(7).get()).toBe(1); + done(); +}); +it("can do align with a limit and linear interpolation", done => { + var ts = new _timeseries.default(SIMPLE_GAP_DATA); + var aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "linear", + limit: 2 + }); + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(1.25); + expect(aligned.at(1).get()).toBe(1.8571428571428572); + expect(aligned.at(2).get()).toBe(1.2857142857142856); + expect(aligned.at(3).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(4).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(5).get()).toBeNull(); // over limit fill with null + + expect(aligned.at(6).get()).toBe(1.5); + expect(aligned.at(7).get()).toBe(2.5); + done(); +}); +it("can do alignment with TimeSeries.align() on a TimeSeries with invalid points", done => { + var ts = new _timeseries.default(SIMPLE_GAP_DATA_BAD); // console.warn = jest.genMockFn(); + + var aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "linear" + }); // expect(console.warn.mock.calls.length).toBe(2); + + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(1.25); + expect(aligned.at(1).get()).toBe(1.8571428571428572); + expect(aligned.at(2).get()).toBe(1.2857142857142856); + expect(aligned.at(3).get()).toBe(1.0); + expect(aligned.at(4).get()).toBe(1.0); + expect(aligned.at(5).get()).toBe(1.0); + expect(aligned.at(6).get()).toBeNull(); // bad value + + expect(aligned.at(7).get()).toBeNull(); // bad value + + done(); +}); +it("can do alignment on an already aligned timeseries", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "value"], + points: [[1473490770000, 10], [1473490800000, 20], [1473490830000, 30], [1473490860000, 40]] + }); + var result = (0, _pipeline.Pipeline)().from(ts).align("value", "30s", "linear", 10).toKeyedCollections(); + var timeseries = result["all"]; + expect(timeseries.at(0).timestamp().getTime()).toEqual(1473490770000); + expect(timeseries.at(0).value()).toEqual(10); + expect(timeseries.at(1).timestamp().getTime()).toEqual(1473490800000); + expect(timeseries.at(1).value()).toEqual(20); + expect(timeseries.at(2).timestamp().getTime()).toEqual(1473490830000); + expect(timeseries.at(2).value()).toEqual(30); + expect(timeseries.at(3).timestamp().getTime()).toEqual(1473490860000); + expect(timeseries.at(3).value()).toEqual(40); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/collection.test.js b/lib/lib/__tests__/collection.test.js new file mode 100644 index 0000000..0b05bd9 --- /dev/null +++ b/lib/lib/__tests__/collection.test.js @@ -0,0 +1,167 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _collection = _interopRequireDefault(require("../collection")); + +var _event = _interopRequireDefault(require("../event")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var EVENT_LIST = [new _timeevent.default(new Date("2015-04-22T03:30:00Z"), { + in: 1, + out: 2 +}), new _timeevent.default(new Date("2015-04-22T03:31:00Z"), { + in: 3, + out: 4 +}), new _timeevent.default(new Date("2015-04-22T03:32:00Z"), { + in: 5, + out: 6 +})]; +var UNORDERED_EVENT_LIST = [new _timeevent.default(new Date("2015-04-22T03:31:00Z"), { + in: 3, + out: 4 +}), new _timeevent.default(new Date("2015-04-22T03:30:00Z"), { + in: 1, + out: 2 +}), new _timeevent.default(new Date("2015-04-22T03:32:00Z"), { + in: 5, + out: 6 +})]; +var EVENT_LIST_DUP = [new _timeevent.default(new Date("2015-04-22T03:30:00Z"), { + in: 1, + out: 2 +}), new _timeevent.default(new Date("2015-04-22T03:31:00Z"), { + in: 3, + out: 4 +}), new _timeevent.default(new Date("2015-04-22T03:31:00Z"), { + in: 4, + out: 5 +}), new _timeevent.default(new Date("2015-04-22T03:32:00Z"), { + in: 5, + out: 6 +})]; +/** + * Note the Collections are currently moslty tested through either + * the pipeline code or the TimeSeries code. + */ + +it("can create a Collection from an event list", () => { + var collection = new _collection.default(EVENT_LIST); + expect(collection).toBeDefined(); +}); +it("can compare a collection and a reference to a collection as being equal", () => { + var collection = new _collection.default(EVENT_LIST); + var refCollection = collection; + expect(collection).toBe(refCollection); +}); +it("can use the equals() comparator to compare a series and a copy of the series as true", () => { + var collection = new _collection.default(EVENT_LIST); + var copy = new _collection.default(collection); + expect(_collection.default.equal(collection, copy)).toBeTruthy(); +}); +it("can use the equals() comparator to compare a collection and a value equivalent collection as false", () => { + var collection = new _collection.default(EVENT_LIST); + var otherSeries = new _collection.default(EVENT_LIST); + expect(_collection.default.equal(collection, otherSeries)).toBeFalsy(); +}); +it("can use the is() comparator to compare a Collection and a value equivalent Collection as true", () => { + var collection = new _collection.default(EVENT_LIST); + var otherSeries = new _collection.default(EVENT_LIST); + expect(_collection.default.is(collection, otherSeries)).toBeTruthy(); +}); +it("can use size() and at() to get to Collection items", () => { + var collection = new _collection.default(EVENT_LIST); + expect(collection.size()).toBe(3); + expect(_event.default.is(collection.at(0), EVENT_LIST[0])).toBeTruthy(); + expect(_event.default.is(collection.at(1), EVENT_LIST[1])).toBeTruthy(); + expect(_event.default.is(collection.at(2), EVENT_LIST[2])).toBeTruthy(); +}); // +// Collection iteration +// + +it("can loop (for .. of) over a Collection's events", () => { + var collection = new _collection.default(EVENT_LIST); + var events = []; + + for (var e of collection.events()) { + events.push(e); + } + + expect(events.length).toBe(3); + expect(_event.default.is(events[0], EVENT_LIST[0])).toBeTruthy(); + expect(_event.default.is(events[1], EVENT_LIST[1])).toBeTruthy(); + expect(_event.default.is(events[2], EVENT_LIST[2])).toBeTruthy(); +}); // +// Event list mutation +// + +it("can add an event and get a new Collection back", () => { + var collection = new _collection.default(EVENT_LIST); + var event = new _timeevent.default(new Date("2015-04-22T03:32:00Z"), { + in: 1, + out: 2 + }); + var newCollection = collection.addEvent(event); + expect(newCollection.size()).toBe(4); +}); // +// Tests functionality to check order of Collection items +// + +it("can sort the collection by time", () => { + var collection = new _collection.default(UNORDERED_EVENT_LIST); + var sortedCollection = collection.sortByTime(); + expect(sortedCollection.at(1).timestamp().getTime() > sortedCollection.at(0).timestamp().getTime()).toBeTruthy(); +}); +it("can determine if a collection is chronological", () => { + var collection = new _collection.default(UNORDERED_EVENT_LIST); + expect(collection.isChronological()).toBeFalsy(); + var sortedCollection = collection.sortByTime(); + expect(sortedCollection.isChronological()).toBeTruthy(); +}); // +// Getting events out of the Collection +// +// Duplicates with atKey + +it("can find duplicates with atKey", () => { + var collection = new _collection.default(EVENT_LIST_DUP); + var find = collection.atKey(new Date("2015-04-22T03:31:00Z")); + expect(find.length).toBe(2); + expect(find[0].get("in")).toEqual(3); + expect(find[1].get("in")).toEqual(4); +}); +it("can find duplicates with atKey", () => { + var collection = new _collection.default(EVENT_LIST_DUP); + var find = collection.atKey(new Date("2015-05-22T03:32:00Z")); + expect(find.length).toBe(0); +}); // Event list as... + +it("can express the collection events as a map", () => { + var collection = new _collection.default(EVENT_LIST_DUP); + var eventMap = collection.eventListAsMap(); + expect(eventMap["1429673400000"].length).toBe(1); + expect(eventMap["1429673460000"].length).toBe(2); + expect(eventMap["1429673520000"].length).toBe(1); + expect(eventMap["1429673460000"][0].get("in")).toBe(3); + expect(eventMap["1429673460000"][1].get("in")).toBe(4); +}); // Event list as... + +it("can express the collection events as a map", () => { + var collection = new _collection.default(EVENT_LIST_DUP); + var dedup = collection.dedup(); + expect(dedup.size()).toBe(3); + expect(dedup.at(0).get("in")).toBe(1); + expect(dedup.at(1).get("in")).toBe(4); + expect(dedup.at(2).get("in")).toBe(5); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/event.test.js b/lib/lib/__tests__/event.test.js new file mode 100644 index 0000000..fd13630 --- /dev/null +++ b/lib/lib/__tests__/event.test.js @@ -0,0 +1,422 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _immutable = _interopRequireDefault(require("immutable")); + +var _event = _interopRequireDefault(require("../event")); + +var _index = _interopRequireDefault(require("../index")); + +var _indexedevent = _interopRequireDefault(require("../indexedevent")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +var _timerange = _interopRequireDefault(require("../timerange")); + +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); + +var _functions = require("../base/functions"); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var OUTAGE_EVENT_LIST = { + status: "OK", + outage_events: [{ + start_time: "2015-04-22T03:30:00Z", + end_time: "2015-04-22T13:00:00Z", + description: "At 13:33 pacific circuit 06519 went down.", + title: "STAR-CR5 < 100 ge 06519 > ANL - Outage", + completed: true, + external_ticket: "", + esnet_ticket: "ESNET-20150421-013", + organization: "Internet2 / Level 3", + type: "U" + }, { + start_time: "2015-04-22T03:30:00Z", + end_time: "2015-04-22T16:50:00Z", + title: "STAR-CR5 < 100 ge 06519 > ANL - Outage", + description: "The listed circuit was unavailable due to\nbent pins in two clots of the optical node chassis.", + completed: true, + external_ticket: "3576:144", + esnet_ticket: "ESNET-20150421-013", + organization: "Internet2 / Level 3", + type: "U" + }, { + start_time: "2015-03-04T09:00:00Z", + end_time: "2015-03-04T14:00:00Z", + title: "ANL Scheduled Maintenance", + description: "ANL will be switching border routers...", + completed: true, + external_ticket: "", + esnet_ticket: "ESNET-20150302-002", + organization: "ANL", + type: "P" + }] +}; +var DEEP_EVENT_DATA = { + NorthRoute: { + in: 123, + out: 456 + }, + SouthRoute: { + in: 654, + out: 223 + } +}; +var EVENT_LIST = []; +EVENT_LIST.push(new _timeevent.default(1445449170000, { + name: "source1", + in: 2, + out: 11 +})); +EVENT_LIST.push(new _timeevent.default(1445449200000, { + name: "source1", + in: 4, + out: 13 +})); +EVENT_LIST.push(new _timeevent.default(1445449230000, { + name: "source1", + in: 6, + out: 15 +})); +EVENT_LIST.push(new _timeevent.default(1445449260000, { + name: "source1", + in: 8, + out: 18 +})); // +// TimeEvent creation +// + +it("can create a regular TimeEvent, with deep data", () => { + var timestamp = new Date("2015-04-22T03:30:00Z"); + var event = new _timeevent.default(timestamp, DEEP_EVENT_DATA); + expect(event.get("NorthRoute")).toEqual({ + in: 123, + out: 456 + }); + expect(event.get("SouthRoute")).toEqual({ + in: 654, + out: 223 + }); +}); +it("can't make an Event directly", () => { + var timestamp = new Date("2015-04-22T03:30:00Z"); + expect(() => { + var event = new _event.default(timestamp, DEEP_EVENT_DATA); + }).toThrow(); +}); +it("can create an IndexedEvent using a string index and data", () => { + var event = new _indexedevent.default("1d-12355", { + value: 42 + }); + var expected = "[Thu, 30 Oct 2003 00:00:00 GMT, Fri, 31 Oct 2003 00:00:00 GMT]"; + expect(event.timerangeAsUTCString()).toBe(expected); + expect(event.get("value")).toBe(42); +}); +it("can create an IndexedEvent using an existing Index and data", () => { + var index = new _index.default("1d-12355"); + var event = new _indexedevent.default(index, { + value: 42 + }); + var expected = "[Thu, 30 Oct 2003 00:00:00 GMT, Fri, 31 Oct 2003 00:00:00 GMT]"; + expect(event.timerangeAsUTCString()).toBe(expected); + expect(event.get("value")).toBe(42); +}); +it("can create a TimeRangeEvent using a object", () => { + // Pick one event + var sampleEvent = OUTAGE_EVENT_LIST["outage_events"][0]; // Extract the begin and end times + + var beginTime = new Date(sampleEvent.start_time); + var endTime = new Date(sampleEvent.end_time); + var timerange = new _timerange.default(beginTime, endTime); + var event = new _timerangeevent.default(timerange, sampleEvent); + var expected = "{\"timerange\":[1429673400000,1429707600000],\"data\":{\"external_ticket\":\"\",\"start_time\":\"2015-04-22T03:30:00Z\",\"completed\":true,\"end_time\":\"2015-04-22T13:00:00Z\",\"organization\":\"Internet2 / Level 3\",\"title\":\"STAR-CR5 < 100 ge 06519 > ANL - Outage\",\"type\":\"U\",\"esnet_ticket\":\"ESNET-20150421-013\",\"description\":\"At 13:33 pacific circuit 06519 went down.\"}}"; + expect("".concat(event)).toBe(expected); + expect(event.begin().getTime()).toBe(1429673400000); + expect(event.end().getTime()).toBe(1429707600000); + expect(event.humanizeDuration()).toBe("10 hours"); + expect(event.get("title")).toBe("STAR-CR5 < 100 ge 06519 > ANL - Outage"); +}); // +// Event merging +// + +it("can merge multiple events together", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var event1 = new _timeevent.default(t, { + a: 5, + b: 6 + }); + var event2 = new _timeevent.default(t, { + c: 2 + }); + + var merged = _event.default.merge([event1, event2]); + + expect(merged[0].get("a")).toBe(5); + expect(merged[0].get("b")).toBe(6); + expect(merged[0].get("c")).toBe(2); +}); +it("can merge multiple events together using an Immutable.List", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var event1 = new _timeevent.default(t, { + a: 5, + b: 6 + }); + var event2 = new _timeevent.default(t, { + c: 2 + }); + + var merged = _event.default.merge(new _immutable.default.List([event1, event2])); + + expect(merged.get(0).get("a")).toBe(5); + expect(merged.get(0).get("b")).toBe(6); + expect(merged.get(0).get("c")).toBe(2); +}); +it("can merge multiple indexed events together", () => { + var index = "1h-396206"; + var event1 = new _indexedevent.default(index, { + a: 5, + b: 6 + }); + var event2 = new _indexedevent.default(index, { + c: 2 + }); + + var merged = _event.default.merge([event1, event2]); + + expect(merged[0].get("a")).toBe(5); + expect(merged[0].get("b")).toBe(6); + expect(merged[0].get("c")).toBe(2); +}); +it("can merge multiple timerange events together", () => { + var beginTime = new Date("2015-04-22T03:30:00Z"); + var endTime = new Date("2015-04-22T13:00:00Z"); + var timerange = new _timerange.default(beginTime, endTime); + var event1 = new _timerangeevent.default(timerange, { + a: 5, + b: 6 + }); + var event2 = new _timerangeevent.default(timerange, { + c: 2 + }); + + var merged = _event.default.merge([event1, event2]); + + expect(merged[0].get("a")).toBe(5); + expect(merged[0].get("b")).toBe(6); + expect(merged[0].get("c")).toBe(2); +}); +it("can deeply merge multiple events together", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var event1 = new _timeevent.default(t, { + a: 5, + b: { + c: 6 + } + }); + var event2 = new _timeevent.default(t, { + d: 2, + b: { + e: 4 + } + }); + + var merged = _event.default.merge([event1, event2], true); + + expect(merged[0].get("a")).toBe(5); + expect(merged[0].get("b.c")).toBe(6); + expect(merged[0].get("d")).toBe(2); + expect(merged[0].get("b.e")).toBe(4); +}); // +// Event sums +// + +it("can sum multiple events together", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var events = [new _timeevent.default(t, { + a: 5, + b: 6, + c: 7 + }), new _timeevent.default(t, { + a: 2, + b: 3, + c: 4 + }), new _timeevent.default(t, { + a: 1, + b: 2, + c: 3 + })]; + + var result = _event.default.combine(events, (0, _functions.sum)()); + + expect(result[0].get("a")).toBe(8); + expect(result[0].get("b")).toBe(11); + expect(result[0].get("c")).toBe(14); +}); +it("can sum multiple events together using an Immutable.List", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var events = [new _timeevent.default(t, { + a: 5, + b: 6, + c: 7 + }), new _timeevent.default(t, { + a: 2, + b: 3, + c: 4 + }), new _timeevent.default(t, { + a: 1, + b: 2, + c: 3 + })]; + + var result = _event.default.combine(new _immutable.default.List(events), (0, _functions.sum)()); + + expect(result.getIn([0, "a"])).toBe(8); + expect(result.getIn([0, "b"])).toBe(11); + expect(result.getIn([0, "c"])).toBe(14); +}); +it("can pass no events to sum and get back an empty list", () => { + var t = new Date("2015-04-22T03:30:00Z"); + var events = []; + + var result1 = _event.default.combine(events, (0, _functions.sum)()); + + expect(result1.length).toBe(0); + + var result2 = _event.default.combine(new _immutable.default.List(events), (0, _functions.sum)()); + + expect(result2.length).toBe(0); +}); +it("can sum multiple indexed events together", () => { + var events = [new _indexedevent.default("1d-1234", { + a: 5, + b: 6, + c: 7 + }), new _indexedevent.default("1d-1234", { + a: 2, + b: 3, + c: 4 + }), new _indexedevent.default("1d-1235", { + a: 1, + b: 2, + c: 3 + })]; + + var result = _event.default.combine(events, (0, _functions.sum)()); + + expect(result.length).toEqual(2); + expect("".concat(result[0].index())).toBe("1d-1234"); + expect(result[0].get("a")).toBe(7); + expect(result[0].get("b")).toBe(9); + expect(result[0].get("c")).toBe(11); + expect("".concat(result[1].index())).toBe("1d-1235"); + expect(result[1].get("a")).toBe(1); + expect(result[1].get("b")).toBe(2); + expect(result[1].get("c")).toBe(3); +}); +it("can sum multiple events together if they have different timestamps", () => { + var t1 = new Date("2015-04-22T03:30:00Z"); + var t2 = new Date("2015-04-22T04:00:00Z"); + var t3 = new Date("2015-04-22T04:30:00Z"); + var events = [new _timeevent.default(t1, { + a: 5, + b: 6, + c: 7 + }), new _timeevent.default(t1, { + a: 2, + b: 3, + c: 4 + }), new _timeevent.default(t3, { + a: 1, + b: 2, + c: 3 + })]; + + var result = _event.default.combine(events, (0, _functions.sum)()); + + expect(result[0].get("a")).toBe(7); +}); // +// Test duplication +// + +it("can detect duplicated event", () => { + var e1 = new _timeevent.default(1477058455872, { + a: 5, + b: 6, + c: 7 + }); + var e2 = new _timeevent.default(1477058455872, { + a: 5, + b: 6, + c: 7 + }); + var e3 = new _timeevent.default(1477058455872, { + a: 6, + b: 6, + c: 7 + }); // Just check times and type + + expect(_event.default.isDuplicate(e1, e2)).toBeTruthy(); + expect(_event.default.isDuplicate(e1, e3)).toBeTruthy(); // Check times, type and values + + expect(_event.default.isDuplicate(e1, e3, false)).toBeFalsy(); + expect(_event.default.isDuplicate(e1, e2, false)).toBeTruthy(); +}); // +// Deep data +// + +it("can create an event with deep data and then get values back with dot notation", () => { + var timestamp = new Date("2015-04-22T03:30:00Z"); + var event = new _timeevent.default(timestamp, DEEP_EVENT_DATA); + var eventValue; + + for (var i = 0; i < 100000; i++) { + eventValue = event.get(["NorthRoute", "in"]); //1550ms + } + + expect(eventValue).toBe(123); +}); // +// Event map and reduce +// + +it("should generate the correct key values for a string selector", () => { + expect(_event.default.map(EVENT_LIST, "in")).toEqual({ + in: [2, 4, 6, 8] + }); +}); +it("should generate the correct key values for a string selector", () => { + expect(_event.default.map(EVENT_LIST, ["in", "out"])).toEqual({ + in: [2, 4, 6, 8], + out: [11, 13, 15, 18] + }); +}); +it("should generate the correct key values for a string selector", () => { + var result = _event.default.map(EVENT_LIST, event => ({ + sum: event.get("in") + event.get("out") + })); + + expect(result).toEqual({ + sum: [13, 17, 21, 26] + }); + expect(_event.default.reduce(result, (0, _functions.avg)())).toEqual({ + sum: 19.25 + }); +}); +it("should be able to run a simple mapReduce calculation", () => { + var result = _event.default.mapReduce(EVENT_LIST, ["in", "out"], (0, _functions.avg)()); + + expect(result).toEqual({ + in: 5, + out: 14.25 + }); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/functions.test.js b/lib/lib/__tests__/functions.test.js new file mode 100644 index 0000000..b2e248c --- /dev/null +++ b/lib/lib/__tests__/functions.test.js @@ -0,0 +1,83 @@ +"use strict"; + +var _functions = require("../base/functions"); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var goodValues = [1, 2, 3, 4, 5]; +var badValues = [1, 2, null, 4, 5]; +describe("Functions to clean values", () => { + it("can use use the keepMissing function to pass through values ", () => { + expect(_functions.filter.keepMissing(goodValues)).toEqual([1, 2, 3, 4, 5]); + expect(_functions.filter.keepMissing(badValues)).toEqual([1, 2, null, 4, 5]); + }); + it("can use ignoreMissing to filter out missing values ", () => { + expect(_functions.filter.ignoreMissing(goodValues)).toEqual([1, 2, 3, 4, 5]); + expect(_functions.filter.ignoreMissing(badValues)).toEqual([1, 2, 4, 5]); + }); + it("can use zeroMissing to replace missing values with zeros", () => { + expect(_functions.filter.zeroMissing(goodValues)).toEqual([1, 2, 3, 4, 5]); + expect(_functions.filter.zeroMissing(badValues)).toEqual([1, 2, 0, 4, 5]); + }); + it("can use propagateMissing to replace missing values with zeros", () => { + expect(_functions.filter.propagateMissing(goodValues)).toEqual([1, 2, 3, 4, 5]); + expect(_functions.filter.propagateMissing(badValues)).toBeNull(); + }); +}); +describe("Function: sum()", () => { + it("can use use the keepMissing function to pass through values ", () => { + expect((0, _functions.sum)(_functions.filter.keepMissing)(goodValues)).toEqual(15); + expect((0, _functions.sum)(_functions.filter.keepMissing)(badValues)).toEqual(12); + }); + it("can use use the ignoreMissing in sum function", () => { + expect((0, _functions.sum)(_functions.filter.ignoreMissing)(goodValues)).toEqual(15); + expect((0, _functions.sum)(_functions.filter.ignoreMissing)(badValues)).toEqual(12); + }); + it("can use use the zeroMissing in sum function", () => { + expect((0, _functions.sum)(_functions.filter.zeroMissing)(goodValues)).toEqual(15); + expect((0, _functions.sum)(_functions.filter.zeroMissing)(badValues)).toEqual(12); + }); + it("can use use the propagateMissing in sum function", () => { + expect((0, _functions.sum)(_functions.filter.propagateMissing)(goodValues)).toEqual(15); + expect((0, _functions.sum)(_functions.filter.propagateMissing)(badValues)).toBeNull(); + }); +}); +describe("Function: avg()", () => { + it("can use use the keepMissing function to pass through values ", () => { + expect((0, _functions.avg)(_functions.filter.keepMissing)(goodValues)).toEqual(3); + expect((0, _functions.avg)(_functions.filter.keepMissing)(badValues)).toEqual(2.4); + }); + it("can use use the ignoreMissing in avg function", () => { + expect((0, _functions.avg)(_functions.filter.ignoreMissing)(goodValues)).toEqual(3); + expect((0, _functions.avg)(_functions.filter.ignoreMissing)(badValues)).toEqual(3); + }); + it("can use use the zeroMissing in avg function", () => { + expect((0, _functions.avg)(_functions.filter.zeroMissing)(goodValues)).toEqual(3); + expect((0, _functions.avg)(_functions.filter.zeroMissing)(badValues)).toEqual(2.4); + }); + it("can use use the propagateMissing in avg function", () => { + expect((0, _functions.avg)(_functions.filter.propagateMissing)(goodValues)).toEqual(3); + expect((0, _functions.avg)(_functions.filter.propagateMissing)(badValues)).toBeNull(); + }); +}); +describe("Function: percentile()", () => { + it("can use the percentile function", () => { + var values = [1142, 944, 433, 367, 986]; + expect((0, _functions.percentile)(0)(values)).toEqual(367.0); + expect((0, _functions.percentile)(25)(values)).toEqual(433.0); + expect((0, _functions.percentile)(50)(values)).toEqual(944.0); + expect((0, _functions.percentile)(75)(values)).toEqual(986.0); + expect((0, _functions.percentile)(90)(values)).toEqual(1079.6); + expect((0, _functions.percentile)(95)(values)).toEqual(1110.8); + expect((0, _functions.percentile)(100)(values)).toEqual(1142.0); + }); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/index.test.js b/lib/lib/__tests__/index.test.js new file mode 100644 index 0000000..7db5a62 --- /dev/null +++ b/lib/lib/__tests__/index.test.js @@ -0,0 +1,107 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _index = _interopRequireDefault(require("../index")); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +it("can create a daily index", done => { + var index = new _index.default("1d-12355"); + expect(index.asTimerange().toJSON()).toEqual([1067472000000, 1067558400000]); + expect(index.asTimerange().humanizeDuration()).toBe("a day"); + done(); +}); +it("can create a hourly index", done => { + var index = new _index.default("1h-123554"); + var expected = "[Sun, 05 Feb 1984 02:00:00 GMT, Sun, 05 Feb 1984 03:00:00 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("an hour"); + done(); +}); +it("can create a 5 minute index", done => { + var index = new _index.default("5m-4135541"); + var expected = "[Sat, 25 Apr 2009 12:25:00 GMT, Sat, 25 Apr 2009 12:30:00 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("5 minutes"); + done(); +}); +it("can create a 30 second index", done => { + var index = new _index.default("30s-41135541"); + var expected = "[Sun, 08 Feb 2009 04:10:30 GMT, Sun, 08 Feb 2009 04:11:00 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("a few seconds"); + done(); +}); +it("can create a year index", done => { + var index = new _index.default("2014"); + var expected = "[Wed, 01 Jan 2014 00:00:00 GMT, Wed, 31 Dec 2014 23:59:59 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("a year"); + done(); +}); +it("can create a month index", done => { + var index = new _index.default("2014-09"); + var expected = "[Mon, 01 Sep 2014 00:00:00 GMT, Tue, 30 Sep 2014 23:59:59 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("a month"); + done(); +}); +it("can create a day index", done => { + var index = new _index.default("2014-09-17"); + var expected = "[Wed, 17 Sep 2014 00:00:00 GMT, Wed, 17 Sep 2014 23:59:59 GMT]"; + expect(index.asTimerange().toUTCString()).toBe(expected); + expect(index.asTimerange().humanizeDuration()).toBe("a day"); + done(); +}); +it("can create a year index", done => { + var index = new _index.default("2014"); + var expected = "2014"; + expect(index.toNiceString()).toBe(expected); + done(); +}); +it("can create a month index..", done => { + var index = new _index.default("2014-09"); + var expected = "September"; + expect(index.toNiceString()).toBe(expected); + done(); +}); +it("can create a day index", done => { + var index = new _index.default("2014-09-17"); + var expected = "September 17th 2014"; + expect(index.toNiceString()).toBe(expected); + done(); +}); +it("can create a day index", done => { + var index = new _index.default("2014-09-17"); + var expected = "17 Sep 2014"; + expect(index.toNiceString("DD MMM YYYY")).toBe(expected); + done(); +}); +it("can create a day index for a date", done => { + var date = new Date(1429673400000); + var expected = "2015-04-21"; + expect(_index.default.getDailyIndexString(date)).toBe(expected); + done(); +}); +it("can create a month index for a date", done => { + var date = new Date(1429673400000); + var expected = "2015-04"; + expect(_index.default.getMonthlyIndexString(date)).toBe(expected); + done(); +}); +it("can create a year index for a date", done => { + var date = new Date(1429673400000); + var expected = "2015"; + expect(_index.default.getYearlyIndexString(date)).toBe(expected); + done(); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/pipeline.test.js b/lib/lib/__tests__/pipeline.test.js new file mode 100644 index 0000000..ff6722e --- /dev/null +++ b/lib/lib/__tests__/pipeline.test.js @@ -0,0 +1,659 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _collection = _interopRequireDefault(require("../collection")); + +var _collectionout = _interopRequireDefault(require("../io/collectionout")); + +var _eventout = _interopRequireDefault(require("../io/eventout")); + +var _indexedevent = _interopRequireDefault(require("../indexedevent")); + +var _stream = _interopRequireDefault(require("../io/stream")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +var _timerange = _interopRequireDefault(require("../timerange")); + +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +var _pipeline = require("../pipeline"); + +var _functions = require("../base/functions"); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var EVENT_LIST = [new _timeevent.default(new Date("2015-04-22T03:30:00Z"), { + in: 1, + out: 2 +}), new _timeevent.default(new Date("2015-04-22T03:31:00Z"), { + in: 3, + out: 4 +}), new _timeevent.default(new Date("2015-04-22T03:32:00Z"), { + in: 5, + out: 6 +})]; +var TRAFFIC_DATA = { + name: "traffic", + columns: ["time", "value"], + points: [[1409529600000, 80], [1409533200000, 88], [1409536800000, 52], [1409540400000, 80], // < 50 + [1409544000000, 26], //1 + [1409547600000, 37], //2 + [1409551200000, 6], //3 + [1409554800000, 32], //4 + [1409558400000, 69], [1409562000000, 21], //5 + [1409565600000, 6], //6 + [1409569200000, 54], [1409572800000, 88], [1409576400000, 41], //7 + [1409580000000, 35], //8 + [1409583600000, 43], //9 + [1409587200000, 84], [1409590800000, 32], //10 avg= (26 + 37 + 6 + 32 + 21 + 6 + 41 + 35 + 43 + 32)/10 = 27.9 + [1409594400000, 41], [1409598000000, 57], [1409601600000, 27], [1409605200000, 50], [1409608800000, 13], [1409612400000, 63], [1409616000000, 58], [1409619600000, 80], [1409623200000, 59], [1409626800000, 96], [1409630400000, 2], [1409634000000, 20], [1409637600000, 64], [1409641200000, 7], [1409644800000, 50], [1409648400000, 88], [1409652000000, 34], [1409655600000, 31], [1409659200000, 16], [1409662800000, 38], [1409666400000, 94], [1409670000000, 78], [1409673600000, 86], [1409677200000, 13], [1409680800000, 34], [1409684400000, 29], [1409688000000, 48], [1409691600000, 80], [1409695200000, 30], [1409698800000, 15], [1409702400000, 62], [1409706000000, 66], [1409709600000, 44], [1409713200000, 94], [1409716800000, 78], [1409720400000, 29], [1409724000000, 21], [1409727600000, 4], [1409731200000, 83], [1409734800000, 15], [1409738400000, 89], [1409742000000, 53], [1409745600000, 70], [1409749200000, 41], [1409752800000, 47], [1409756400000, 30], [1409760000000, 68], [1409763600000, 89], [1409767200000, 29], [1409770800000, 17], [1409774400000, 38], [1409778000000, 67], [1409781600000, 75], [1409785200000, 89], [1409788800000, 47], [1409792400000, 82], [1409796000000, 33], [1409799600000, 67], [1409803200000, 93], [1409806800000, 86], [1409810400000, 97], [1409814000000, 19], [1409817600000, 19], [1409821200000, 31], [1409824800000, 56], [1409828400000, 19], [1409832000000, 43], [1409835600000, 29], [1409839200000, 72], [1409842800000, 27], [1409846400000, 21], [1409850000000, 88], [1409853600000, 18], [1409857200000, 30], [1409860800000, 46], [1409864400000, 34], [1409868000000, 31], [1409871600000, 20], [1409875200000, 45], [1409878800000, 17], [1409882400000, 24], [1409886000000, 84], [1409889600000, 6], [1409893200000, 91], [1409896800000, 82], [1409900400000, 71], [1409904000000, 97], [1409907600000, 43], [1409911200000, 38], [1409914800000, 1], [1409918400000, 71], [1409922000000, 50], [1409925600000, 19], [1409929200000, 19], [1409932800000, 86], [1409936400000, 65], [1409940000000, 93], [1409943600000, 35]] +}; +var inOutData = { + name: "traffic", + columns: ["time", "in", "out", "perpendicular"], + points: [[1409529600000, 80, 37, 1000], [1409533200000, 88, 22, 1001], [1409536800000, 52, 56, 1002]] +}; +describe("Pipeline", () => { + describe("test processor using offsetBy", () => { + it("can transform process events with an offsetBy chain", () => { + var events = EVENT_LIST; + var collection = new _collection.default(events); + var c1; + var c2; + var p1 = (0, _pipeline.Pipeline)().from(collection).offsetBy(1, "in").offsetBy(2).to(_collectionout.default, c => c1 = c); // --> Specified output, evokes batch op + + var p2 = p1.offsetBy(3, "in").to(_collectionout.default, c => { + // || + c2 = c; + }); // --> Specified output, evokes batch op + + expect(c1.size()).toBe(3); + expect(c1.at(0).get("in")).toBe(4); + expect(c1.at(1).get("in")).toBe(6); + expect(c1.at(2).get("in")).toBe(8); + expect(c2.size()).toBe(3); + expect(c2.at(0).get("in")).toBe(7); + expect(c2.at(1).get("in")).toBe(9); + expect(c2.at(2).get("in")).toBe(11); + }); + it("can stream from an unbounded source directly to output", () => { + var out; + var events = EVENT_LIST; + var stream = new _stream.default(); + var p = (0, _pipeline.Pipeline)().from(stream).to(_collectionout.default, c => out = c); + stream.addEvent(events[0]); + stream.addEvent(events[1]); + expect(out.size()).toBe(2); + }); + it("can stream events with an offsetBy pipeline", () => { + var out; + var events = EVENT_LIST; + var stream = new _stream.default(); + var p = (0, _pipeline.Pipeline)().from(stream).offsetBy(3, "in").to(_collectionout.default, c => out = c); + stream.addEvent(events[0]); + stream.addEvent(events[1]); + expect(out.size()).toBe(2); + expect(out.at(0).get("in")).toBe(4); + expect(out.at(1).get("in")).toBe(6); + }); + it("can stream events with two offsetBy pipelines...", () => { + var out1, out2; + var events = EVENT_LIST; + var stream = new _stream.default(); + var p1 = (0, _pipeline.Pipeline)().from(stream).offsetBy(1, "in").offsetBy(2).to(_collectionout.default, c => out1 = c); + var p2 = p1.offsetBy(3, "in").to(_collectionout.default, c => out2 = c); + stream.addEvent(events[0]); + expect(out1.size()).toBe(1); + expect(out2.size()).toBe(1); + expect(out1.at(0).get("in")).toBe(4); + expect(out2.at(0).get("in")).toBe(7); + }); + }); + describe("TimeSeries pipeline", () => { + var data = { + name: "traffic", + columns: ["time", "value", "status"], + points: [[1400425947000, 52, "ok"], [1400425948000, 18, "ok"], [1400425949000, 26, "fail"], [1400425950000, 93, "offline"]] + }; + it("can transform process events with an offsetBy chain", () => { + var out; + var timeseries = new _timeseries.default(data); + var p1 = (0, _pipeline.Pipeline)().from(timeseries.collection()).offsetBy(1, "value").offsetBy(2).to(_collectionout.default, c => out = c); + expect(out.at(0).get()).toBe(55); + expect(out.at(1).get()).toBe(21); + expect(out.at(2).get()).toBe(29); + expect(out.at(3).get()).toBe(96); + }); + it("can transform events with an offsetBy chain straight from a TimeSeries", () => { + var out; + var timeseries = new _timeseries.default(data); + timeseries.pipeline().offsetBy(1, "value").offsetBy(2).to(_collectionout.default, c => out = c); + expect(out.at(0).get()).toBe(55); + expect(out.at(1).get()).toBe(21); + expect(out.at(2).get()).toBe(29); + expect(out.at(3).get()).toBe(96); + }); + it("should be able to batch a TimeSeries with an offset", () => { + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var outputEvents = []; + (0, _pipeline.Pipeline)().from(timeseries).offsetBy(1, "value").offsetBy(2).to(_eventout.default, c => outputEvents.push(c)); + expect(outputEvents.length).toBe(timeseries.size()); + }); + it("should be able to batch a TimeSeries with no processing nodes", () => { + var stream = new _timeseries.default(TRAFFIC_DATA); + var outputEvents = []; + (0, _pipeline.Pipeline)().from(stream).to(_eventout.default, c => outputEvents.push(c)); + expect(outputEvents.length).toBe(stream.size()); + }); + }); + describe("aggregation", () => { + it("can aggregate events into by windowed avg", () => { + var eventsIn = []; + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 57, 0), { + in: 3, + out: 1 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 58, 0), { + in: 9, + out: 2 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 59, 0), { + in: 6, + out: 6 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 8, 0, 0), { + in: 4, + out: 7 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 8, 1, 0), { + in: 5, + out: 9 + })); + var stream = new _stream.default(); + var result = {}; + var p = (0, _pipeline.Pipeline)().from(stream).windowBy("1h").emitOn("eachEvent").aggregate({ + in_avg: { + in: (0, _functions.avg)() + }, + out_avg: { + out: (0, _functions.avg)() + } + }).to(_eventout.default, event => { + result["".concat(event.index())] = event; + }); + eventsIn.forEach(event => stream.addEvent(event)); + expect(result["1h-396199"].get("in_avg")).toBe(6); + expect(result["1h-396199"].get("out_avg")).toBe(3); + expect(result["1h-396200"].get("in_avg")).toBe(4.5); + expect(result["1h-396200"].get("out_avg")).toBe(8); + }); + it("an collect together events and aggregate", () => { + var eventsIn = []; + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 57, 0), { + type: "a", + in: 3, + out: 1 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 58, 0), { + type: "a", + in: 9, + out: 2 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 7, 59, 0), { + type: "b", + in: 6, + out: 6 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 8, 0, 0), { + type: "a", + in: 4, + out: 7 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 8, 1, 0), { + type: "b", + in: 5, + out: 9 + })); + var stream = new _stream.default(); + var result = {}; + var p = (0, _pipeline.Pipeline)().from(stream).groupBy("type").windowBy("1h").emitOn("eachEvent").aggregate({ + type: { + type: (0, _functions.keep)() + }, + // keep the type + in_avg: { + in: (0, _functions.avg)() + }, + // avg in -> in_avg + // avg out -> out_avg + out_avg: { + out: (0, _functions.avg)() + } + }).to(_eventout.default, event => result["".concat(event.index(), ":").concat(event.get("type"))] = event); + eventsIn.forEach(event => stream.addEvent(event)); + expect(result["1h-396199:a"].get("in_avg")).toBe(6); + expect(result["1h-396199:a"].get("out_avg")).toBe(1.5); + expect(result["1h-396199:b"].get("in_avg")).toBe(6); + expect(result["1h-396199:b"].get("out_avg")).toBe(6); + expect(result["1h-396200:a"].get("in_avg")).toBe(4); + expect(result["1h-396200:a"].get("out_avg")).toBe(7); + expect(result["1h-396200:b"].get("in_avg")).toBe(5); + expect(result["1h-396200:b"].get("out_avg")).toBe(9); + }); + it("can aggregate events by windowed avg and convert them to TimeEvents", () => { + var eventsIn = []; + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 57, 0), { + in: 3, + out: 1 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 58, 0), { + in: 9, + out: 2 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 59, 0), { + in: 6, + out: 6 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 2, 0, 0), { + in: 4, + out: 7 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 2, 1, 0), { + in: 5, + out: 9 + })); + var stream = new _stream.default(); + var result = {}; + (0, _pipeline.Pipeline)().from(stream).windowBy("1h").emitOn("eachEvent").aggregate({ + in_avg: { + in: (0, _functions.avg)() + }, + out_avg: { + out: (0, _functions.avg)() + } + }).asTimeRangeEvents({ + alignment: "lag" + }).to(_eventout.default, event => { + result["".concat(+event.timestamp())] = event; + }); + eventsIn.forEach(event => stream.addEvent(event)); + expect(result["1426294800000"].get("in_avg")).toBe(6); + expect(result["1426294800000"].get("out_avg")).toBe(3); + expect(result["1426298400000"].get("in_avg")).toBe(4.5); + expect(result["1426298400000"].get("out_avg")).toBe(8); + }); + it("can aggregate events to get percentiles", () => { + var eventsIn = []; + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 57, 0), { + in: 3, + out: 1 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 58, 0), { + in: 9, + out: 2 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 1, 59, 0), { + in: 6, + out: 6 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 2, 0, 0), { + in: 4, + out: 7 + })); + eventsIn.push(new _timeevent.default(Date.UTC(2015, 2, 14, 2, 1, 0), { + in: 5, + out: 9 + })); + var stream = new _stream.default(); + var result = {}; + (0, _pipeline.Pipeline)().from(stream).windowBy("1h").emitOn("eachEvent").aggregate({ + in_low: { + in: (0, _functions.min)() + }, + in_25th: { + in: (0, _functions.percentile)(25) + }, + in_median: { + in: (0, _functions.median)() + }, + in_75th: { + in: (0, _functions.percentile)(75) + }, + in_high: { + in: (0, _functions.max)() + } + }).asTimeEvents().to(_eventout.default, event => { + result["".concat(+event.timestamp())] = event; + }); + eventsIn.forEach(event => stream.addEvent(event)); + expect(result["1426296600000"].get("in_low")).toBe(3); + expect(result["1426296600000"].get("in_25th")).toBe(4.5); + expect(result["1426296600000"].get("in_median")).toBe(6); + expect(result["1426296600000"].get("in_75th")).toBe(7.5); + expect(result["1426296600000"].get("in_high")).toBe(9); + }); + }); + describe("Pipeline event conversion", () => { + var timestamp = new Date(1426316400000); + var e = new _timeevent.default(timestamp, 3); + it("should be able to convert from an TimeEvent to an TimeRangeEvent, using a duration, in front of the event", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeRangeEvents({ + alignment: "front", + duration: "1h" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"timerange\":[1426316400000,1426320000000],\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(e); + }); + it("should be able to convert from an TimeEvent to an TimeRangeEvent, using a duration, surrounding the event", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeRangeEvents({ + alignment: "center", + duration: "1h" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"timerange\":[1426314600000,1426318200000],\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(e); + }); + it("should be able to convert from an TimeEvent to an TimeRangeEvent, using a duration, in behind of the event", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeRangeEvents({ + alignment: "behind", + duration: "1h" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"timerange\":[1426312800000,1426316400000],\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(e); + }); + it("should be able to convert from an TimeEvent to an IndexedEvent", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asIndexedEvents({ + duration: "1h" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"index\":\"1h-396199\",\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(e); + }); + it("should be able to convert from an TimeEvent to an TimeEvent as a noop", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents().to(_eventout.default, event => { + expect(event).toBe(e); + done(); + }); + stream.addEvent(e); + }); + }); + describe("TimeRangeEvent conversion", () => { + var timeRange = new _timerange.default([1426316400000, 1426320000000]); + var timeRangeEvent = new _timerangeevent.default(timeRange, 3); + it("should be able to convert from an TimeRangeEvent to an TimeEvent, using the center of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "center" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426318200000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(timeRangeEvent); + }); + it("should be able to convert from an TimeRangeEvent to an TimeEvent, using beginning of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "lag" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426316400000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(timeRangeEvent); + }); + it("should be able to convert from an TimeRangeEvent to an TimeEvent, using the end of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "lead" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426320000000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(timeRangeEvent); + }); + it("should be able to convert from an TimeRangeEvent to an TimeRangeEvent as a noop", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeRangeEvents().to(_eventout.default, event => { + expect(event).toBe(timeRangeEvent); + done(); + }); + stream.addEvent(timeRangeEvent); + }); + }); + describe("IndexedEvent conversion", () => { + var indexedEvent = new _indexedevent.default("1h-396199", 3); + it("should be able to convert from an IndexedEvent to an TimeEvent, using the center of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "center" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426318200000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(indexedEvent); + }); + it("should be able to convert from an IndexedEvent to an TimeEvent, using beginning of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "lag" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426316400000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(indexedEvent); + }); + it("should be able to convert from an IndexedEvent to an TimeEvent, using the end of the range", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeEvents({ + alignment: "lead" + }).to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"time\":1426320000000,\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(indexedEvent); + }); + it("should be able to convert from an IndexedEvent to an TimeRangeEvent", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asTimeRangeEvents().to(_eventout.default, event => { + expect("".concat(event)).toBe("{\"timerange\":[1426316400000,1426320000000],\"data\":{\"value\":3}}"); + done(); + }); + stream.addEvent(indexedEvent); + }); + it("should be able to convert from an IndexedEvent to an IndexedEvent as a noop", done => { + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).asIndexedEvents().to(_eventout.default, event => { + expect(event).toBe(indexedEvent); + done(); + }); + stream.addEvent(indexedEvent); + }); + }); + describe("Filtering events in batch", () => { + it("should be able to filter a TimeSeries", () => { + var outputEvents = []; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + (0, _pipeline.Pipeline)().from(timeseries).filter(e => e.value() > 65).to(_eventout.default, c => outputEvents.push(c)); + expect(outputEvents.length).toBe(39); + }); + }); + describe("Selecting subset of columns from a TimeSeries in batch", () => { + it("should be able select a single column", () => { + var result; + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).select("in").to(_collectionout.default, c => result = new _timeseries.default({ + name: "newTimeseries", + collection: c + })); + expect(result.columns()).toEqual(["in"]); + }); + it("should be able select a subset of columns", () => { + var result; + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).select(["out", "perpendicular"]).to(_collectionout.default, c => result = new _timeseries.default({ + name: "subset", + collection: c + })); + expect(result.columns()).toEqual(["out", "perpendicular"]); + }); + }); + describe("Collapsing in batch", () => { + it("should be able collapse a subset of columns", done => { + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).collapse(["in", "out"], "in_out_sum", (0, _functions.sum)()).emitOn("flush").to(_collectionout.default, c => { + var ts = new _timeseries.default({ + name: "subset", + collection: c + }); + expect(ts.at(0).get("in_out_sum")).toBe(117); + expect(ts.at(1).get("in_out_sum")).toBe(110); + expect(ts.at(2).get("in_out_sum")).toBe(108); + done(); + }, + /*flush=*/ + true); + }); + it("should be able chain collapse operations together", done => { + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).collapse(["in", "out"], "in_out_sum", (0, _functions.sum)(), true).collapse(["in", "out"], "in_out_max", (0, _functions.max)(), true).emitOn("flush").to(_collectionout.default, c => { + var ts = new _timeseries.default({ + name: "subset", + collection: c + }); + expect(ts.at(0).get("in_out_sum")).toBe(117); + expect(ts.at(1).get("in_out_sum")).toBe(110); + expect(ts.at(2).get("in_out_sum")).toBe(108); + expect(ts.at(0).get("in_out_max")).toBe(80); + expect(ts.at(1).get("in_out_max")).toBe(88); + expect(ts.at(2).get("in_out_max")).toBe(56); + done(); + }, + /*flush=*/ + true); + }); + it("should be able sum element-wise and then find the max", done => { + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).collapse(["in", "out"], "total", (0, _functions.sum)()).emitOn("flush").aggregate({ + max_total: { + total: (0, _functions.max)() + } + }).to(_eventout.default, e => { + expect(e.get("max_total")).toBe(117); + done(); + }, + /*flush=*/ + true); + }); + }); + describe("Batch pipeline with return value", () => { + it("should be able to collect first 10 events over 65 and under 65", () => { + var result = {}; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var collections = (0, _pipeline.Pipeline)().from(timeseries).emitOn("flush").groupBy(e => e.value() > 65 ? "high" : "low").take(10).toKeyedCollections(); //expect(result["low"].size()).toBe(10); + //expect(result["high"].size()).toBe(10); + }); + }); + describe("Mapping in batch", () => { + it("should be able map one event to a modified event", done => { + var timeseries = new _timeseries.default(inOutData); + (0, _pipeline.Pipeline)().from(timeseries).map(e => e.setData({ + in: e.get("out"), + out: e.get("in") + })).emitOn("flush").to(_collectionout.default, c => { + var ts = new _timeseries.default({ + name: "subset", + collection: c + }); + expect(ts.at(0).get("in")).toBe(37); + expect(ts.at(0).get("out")).toBe(80); + expect(ts.size()).toBe(3); + done(); + }, + /*flush=*/ + true); + }); + }); + describe("Take n events in batch", () => { + it("should be able to take 10 events from a TimeSeries", () => { + var result; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + (0, _pipeline.Pipeline)().from(timeseries).take(10).to(_collectionout.default, c => result = new _timeseries.default({ + name: "result", + collection: c + })); + expect(result.size()).toBe(10); + }); + it("should be able to aggregate in batch global window", () => { + var result; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var p = (0, _pipeline.Pipeline)().from(timeseries).filter(e => e.value() < 50).take(10).aggregate({ + value: { + value: (0, _functions.avg)() + } + }).to(_eventout.default, event => { + result = event; + }, true); + expect(result.timerange().toString()).toBe("[1409544000000,1409590800000]"); + expect(result.value()).toBe(27.9); + }); + it("should be able to collect first 10 events over 65", () => { + var result; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var p = (0, _pipeline.Pipeline)().from(timeseries).filter(e => e.value() > 65).take(10).to(_collectionout.default, collection => { + result = collection; + }, true); + expect(result.size()).toBe(10); + expect(result.at(0).value()).toBe(80); + expect(result.at(1).value()).toBe(88); + expect(result.at(5).value()).toBe(84); + }); + it("should be able to collect first 10 events over 65 and under 65", () => { + var result = {}; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var p = (0, _pipeline.Pipeline)().from(timeseries).groupBy(e => e.value() > 65 ? "high" : "low").take(10).to(_collectionout.default, (collection, windowKey, groupByKey) => { + result[groupByKey] = collection; + }, true); + expect(result["low"].size()).toBe(10); + expect(result["high"].size()).toBe(10); + }); + it("should be able to take the first 10 events, then split over 65 and under 65 into two collections", () => { + var result = {}; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var p = (0, _pipeline.Pipeline)().from(timeseries).take(10).groupBy(e => e.value() > 65 ? "high" : "low").to(_collectionout.default, (collection, windowKey, groupByKey) => { + result[groupByKey] = collection; + }, true); + expect(result["high"].size()).toBe(4); + expect(result["low"].size()).toBe(6); + }); + it("should be able to count() the split over 65 and under 65", () => { + var result = {}; + var timeseries = new _timeseries.default(TRAFFIC_DATA); + var p = (0, _pipeline.Pipeline)().from(timeseries).take(10).groupBy(e => e.value() > 65 ? "high" : "low").emitOn("flush").count((count, windowKey, groupByKey) => result[groupByKey] = count); + expect(result["high"]).toBe(4); + expect(result["low"]).toBe(6); + }); + }); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/rate.test.js b/lib/lib/__tests__/rate.test.js new file mode 100644 index 0000000..bb90763 --- /dev/null +++ b/lib/lib/__tests__/rate.test.js @@ -0,0 +1,87 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var RATE = { + name: "traffic", + columns: ["time", "in"], + points: [[0, 1], [30000, 3], [60000, 10], [90000, 40], [120000, 70], [150000, 130], [180000, 190], [210000, 220], [240000, 300], [270000, 390], [300000, 510]] +}; +it("can calculate the rate using TimeSeries.rate()", () => { + var ts = new _timeseries.default(RATE); + var rate = ts.rate({ + fieldSpec: "in" + }); // one less than source + + expect(rate.size()).toEqual(RATE["points"].length - 1); + expect(rate.at(2).get("in_rate")).toEqual(1); + expect(rate.at(3).get("in_rate")).toEqual(1); + expect(rate.at(4).get("in_rate")).toEqual(2); + expect(rate.at(8).get("in_rate")).toEqual(3); + expect(rate.at(9).get("in_rate")).toEqual(4); +}); +/* + | 100 | | | | 200 | v + | | | | | | | | + 60 89 90 120 150 180 181 210 t -> + | | | | | | + |<- ? --------->|<- 1.08/s --->|<- 1.08/s --->|<- 1.08/s --->|<- ? ------->| result + */ + +it("can replicate basic esmond alignment and rate", done => { + var RAW_RATES = { + name: "traffic", + columns: ["time", "value"], + points: [[89000, 100], [181000, 200]] + }; + var ts = new _timeseries.default(RAW_RATES); + var rates = ts.align({ + fieldSpec: "value", + period: "30s" + }).rate(); + expect(rates.size()).toEqual(3); + expect(rates.at(0).get("value_rate")).toEqual(1.0869565217391313); + expect(rates.at(1).get("value_rate")).toEqual(1.0869565217391293); + expect(rates.at(2).get("value_rate")).toEqual(1.0869565217391313); + done(); +}); +it("can output nulls for negative values", done => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "value"], + points: [[89000, 100], [181000, 50]] + }); + var rates1 = ts.align({ + fieldSpec: "value", + period: "30s" + }).rate(); //lower counter will produce negative derivatives + + expect(rates1.size()).toEqual(3); + expect(rates1.at(0).get("value_rate")).toEqual(-0.5434782608695656); + expect(rates1.at(1).get("value_rate")).toEqual(-0.5434782608695646); + expect(rates1.at(2).get("value_rate")).toEqual(-0.5434782608695653); + var rates2 = ts.align({ + fieldSpec: "value", + period: "30s" + }).rate({ + allowNegative: false + }); + expect(rates2.size()).toEqual(3); + expect(rates2.at(0).get("value_rate")).toBeNull(); + expect(rates2.at(1).get("value_rate")).toBeNull(); + expect(rates2.at(2).get("value_rate")).toBeNull(); + done(); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/timerange.test.js b/lib/lib/__tests__/timerange.test.js new file mode 100644 index 0000000..14e73ca --- /dev/null +++ b/lib/lib/__tests__/timerange.test.js @@ -0,0 +1,234 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _moment = _interopRequireDefault(require("moment")); + +var _timerange = _interopRequireDefault(require("../timerange.js")); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var fmt = "YYYY-MM-DD HH:mm"; +var fmt2 = "YYYY-MM-DD HH:mm:ss"; // +// Creation +// + +it("can create a new range with a begin and end time", () => { + var beginTime = (0, _moment.default)("2012-01-11 11:11", fmt).toDate(); + var endTime = (0, _moment.default)("2012-02-22 12:12", fmt).toDate(); + var range = new _timerange.default(beginTime, endTime); + expect(range.begin().getTime()).toBe(beginTime.getTime()); + expect(range.end().getTime()).toBe(endTime.getTime()); +}); +it("can create a new range with two UNIX epoch times in an array", () => { + var range = new _timerange.default([1326309060000, 1329941520000]); + expect(range.toJSON()).toEqual([1326309060000, 1329941520000]); +}); +it("can be used to give a new range", () => { + var beginTime = (0, _moment.default)("2012-01-11 1:11", fmt).toDate(); + var endTime = (0, _moment.default)("2012-02-12 2:12", fmt).toDate(); + var rangeOrig = new _timerange.default(beginTime, endTime); + var rangeCopy = new _timerange.default(rangeOrig); // We expect the copy to not equal the original, but for the dates + // within the copy to be the same + + expect(rangeCopy).not.toBe(rangeOrig); + expect(rangeCopy.begin().getTime()).toBe(beginTime.getTime()); + expect(rangeCopy.end().getTime()).toBe(endTime.getTime()); +}); // +// Serialization +// + +it("can output JSON in the correct format", () => { + var beginTime = _moment.default.utc("2012-01-11 11:11", fmt).toDate(); + + var endTime = _moment.default.utc("2012-02-22 12:12", fmt).toDate(); + + var range = new _timerange.default(beginTime, endTime); + expect(range.toJSON()).toEqual([1326280260000, 1329912720000]); +}); +it("can output a string representation", () => { + var beginTime = _moment.default.utc("2012-01-11 11:11", fmt).toDate(); + + var endTime = _moment.default.utc("2012-02-22 12:12", fmt).toDate(); + + var range = new _timerange.default(beginTime, endTime); + expect(range.toString()).toBe("[1326280260000,1329912720000]"); +}); // +// Display +// + +it("can display a range as a human friendly string", () => { + var beginTime = (0, _moment.default)("2014-08-01 05:19:59", fmt2).toDate(); + var endTime = (0, _moment.default)("2014-08-01 07:41:06", fmt2).toDate(); + var range = new _timerange.default(beginTime, endTime); + var expected = "Aug 1, 2014 05:19:59 am to Aug 1, 2014 07:41:06 am"; + expect(range.humanize()).toBe(expected); +}); +it("can display last day as a human friendly string", () => { + var range = _timerange.default.lastDay(); + + var expected = "a day ago to a few seconds ago"; + expect(range.relativeString()).toBe(expected); +}); +it("can display last 7 days as a human friendly string", () => { + var range = _timerange.default.lastSevenDays(); + + var expected = "7 days ago to a few seconds ago"; + expect(range.relativeString()).toBe(expected); +}); +it("can display last 30 days as a human friendly string", () => { + var range = _timerange.default.lastThirtyDays(); + + var expected = "a month ago to a few seconds ago"; + expect(range.relativeString()).toBe(expected); +}); +it("can display last month as a human friendly string", () => { + var range = _timerange.default.lastMonth(); + + var expected = "a month ago to a few seconds ago"; + expect(range.relativeString()).toBe(expected); +}); +it("can display last 90 days as a human friendly string", () => { + var range = _timerange.default.lastNinetyDays(); + + var expected = "3 months ago to a few seconds ago"; + expect(range.relativeString()).toBe(expected); +}); // +// Mutation +// + +it("can be mutatated to form a new range", () => { + var beginTime = (0, _moment.default)("2012-01-11 1:11", fmt).toDate(); + var endTime = (0, _moment.default)("2012-02-12 2:12", fmt).toDate(); + var newTime = (0, _moment.default)("2012-03-13 3:13", fmt).toDate(); + var range = new _timerange.default(beginTime, endTime); + var mutatedTimeRange = range.setEnd(newTime); // Expect the range to be difference and the end time to be different + + expect(mutatedTimeRange).not.toBe(range); + expect(mutatedTimeRange.end().getTime()).toBe(newTime.getTime()); +}); // +// Compare +// + +it("can be compared to see if they are equal", () => { + var ta = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-02-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var tc = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var td = (0, _moment.default)("2010-02-01 12:00", fmt).toDate(); + var range2 = new _timerange.default(tc, td); + var te = (0, _moment.default)("2012-03-01 12:00", fmt).toDate(); + var tf = (0, _moment.default)("2012-04-02 12:00", fmt).toDate(); + var range3 = new _timerange.default(te, tf); + expect(range1.equals(range2)).toBeTruthy(); + expect(range1.equals(range3)).toBeFalsy(); +}); +it("can be compared for overlap to a non-overlapping range", () => { + var ta = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-02-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var tc = (0, _moment.default)("2010-03-15 12:00", fmt).toDate(); + var td = (0, _moment.default)("2010-04-15 12:00", fmt).toDate(); + var range2 = new _timerange.default(tc, td); + expect(range1.overlaps(range2)).toBeFalsy(); + expect(range2.overlaps(range1)).toBeFalsy(); +}); +it("can be compared for overlap to an overlapping range", () => { + var ta = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-09-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var td = (0, _moment.default)("2010-08-15 12:00", fmt).toDate(); + var te = (0, _moment.default)("2010-11-15 12:00", fmt).toDate(); + var range2 = new _timerange.default(td, te); + expect(range1.overlaps(range2)).toBeTruthy(); + expect(range2.overlaps(range1)).toBeTruthy(); +}); +it("can be compared for containment to an range contained within it completely", () => { + var ta = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-09-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var td = (0, _moment.default)("2010-03-15 12:00", fmt).toDate(); + var te = (0, _moment.default)("2010-06-15 12:00", fmt).toDate(); + var range2 = new _timerange.default(td, te); + expect(range1.contains(range2)).toBeTruthy(); +}); +it("can be compared for containment to an overlapping range", () => { + var ta = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-09-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var td = (0, _moment.default)("2010-06-15 12:00", fmt).toDate(); + var te = (0, _moment.default)("2010-12-15 12:00", fmt).toDate(); + var range2 = new _timerange.default(td, te); + expect(range1.contains(range2)).toBeFalsy(); +}); // +// Compare TimeRanges relative to each other +// + +it("can be compared to a time before the range", () => { + var ta = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-08-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var before = (0, _moment.default)("2010-01-15 12:00", fmt).toDate(); + expect(range1.contains(before)).toBeFalsy(); +}); +it("can be compared to a time during the range", () => { + var ta = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-08-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var during = (0, _moment.default)("2010-07-15 12:00", fmt).toDate(); + expect(range1.contains(during)).toBeTruthy(); +}); +it("can be compared to a time after the range", () => { + var ta = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var tb = (0, _moment.default)("2010-08-01 12:00", fmt).toDate(); + var range1 = new _timerange.default(ta, tb); + var after = (0, _moment.default)("2010-12-15 12:00", fmt).toDate(); + expect(range1.contains(after)).toBeFalsy(); +}); +it("can be undefined if the ranges don't intersect", () => { + // Two non-overlapping ranges: intersect() returns undefined + var beginTime = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var endTime = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var range = new _timerange.default(beginTime, endTime); + var beginTimeOutside = (0, _moment.default)("2010-07-15 12:00", fmt).toDate(); + var endTimeOutside = (0, _moment.default)("2010-08-15 12:00", fmt).toDate(); + var rangeOutside = new _timerange.default(beginTimeOutside, endTimeOutside); + expect(range.intersection(rangeOutside)).toBeUndefined(); +}); +it("can be a new range if the ranges intersect", () => { + // Two overlapping ranges: intersect() returns + // 01 -------06 range + // 05-----07 rangeOverlap + // 05-06 intersection + var beginTime = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var endTime = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var range = new _timerange.default(beginTime, endTime); + var beginTimeOverlap = (0, _moment.default)("2010-05-01 12:00", fmt).toDate(); + var endTimeOverlap = (0, _moment.default)("2010-07-01 12:00", fmt).toDate(); + var rangeOverlap = new _timerange.default(beginTimeOverlap, endTimeOverlap); + var expected = new _timerange.default(beginTimeOverlap, endTime); + expect(range.intersection(rangeOverlap).toString()).toBe(expected.toString()); +}); +it("can be a new range (the smaller range) if one range surrounds another", () => { + // One range fully inside the other intersect() returns the smaller range + // 01 -------06 range + // 02--04 rangeInside + // 02--04 intersection + var beginTime = (0, _moment.default)("2010-01-01 12:00", fmt).toDate(); + var endTime = (0, _moment.default)("2010-06-01 12:00", fmt).toDate(); + var range = new _timerange.default(beginTime, endTime); + var beginTimeInside = (0, _moment.default)("2010-02-01 12:00", fmt).toDate(); + var endTimeInside = (0, _moment.default)("2010-04-01 12:00", fmt).toDate(); + var rangeInside = new _timerange.default(beginTimeInside, endTimeInside); + expect(range.intersection(rangeInside).toString()).toBe(rangeInside.toString()); + expect(rangeInside.intersection(range).toString()).toBe(rangeInside.toString()); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/timeseries.fill.test.js b/lib/lib/__tests__/timeseries.fill.test.js new file mode 100644 index 0000000..c7ac64a --- /dev/null +++ b/lib/lib/__tests__/timeseries.fill.test.js @@ -0,0 +1,579 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _collection = _interopRequireDefault(require("../collection")); + +var _collectionout = _interopRequireDefault(require("../io/collectionout")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +var _stream = _interopRequireDefault(require("../io/stream")); + +var _pipeline = require("../pipeline"); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var EVENT_LIST = [new _timeevent.default(1429673400000, { + in: 1, + out: 2 +}), new _timeevent.default(1429673460000, { + in: 3, + out: 4 +}), new _timeevent.default(1429673520000, { + in: 5, + out: 6 +})]; +var TICKET_RANGE = { + name: "outages", + columns: ["timerange", "title", "esnet_ticket"], + points: [[[1429673400000, 1429707600000], "BOOM", "ESNET-20080101-001"], [[1429673400000, 1429707600000], "BAM!", "ESNET-20080101-002"]] +}; +var AVAILABILITY_DATA = { + name: "availability", + columns: ["index", "uptime"], + points: [["2014-07", "100%"], ["2014-08", "88%"], ["2014-09", "95%"], ["2014-10", "99%"], ["2014-11", "91%"], ["2014-12", "99%"], ["2015-01", "100%"], ["2015-02", "92%"], ["2015-03", "99%"], ["2015-04", "87%"], ["2015-05", "92%"], ["2015-06", "100%"]] +}; +it("can use the TimeSeries.fill() to fill missing values with zero", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: 1, + out: null + }], [1400425948000, { + in: null, + out: 4 + }], [1400425949000, { + in: 5, + out: null + }], [1400425950000, { + in: null, + out: 8 + }], [1400425960000, { + in: 9, + out: null + }], [1400425970000, { + in: null, + out: 12 + }]] + }); // + // fill all columns, limit to 3 + // + + var newTS = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "zero", + limit: 3 + }); + expect(newTS.size()).toBe(6); + expect(newTS.at(0).get("direction.out")).toBe(0); + expect(newTS.at(2).get("direction.out")).toBe(0); + expect(newTS.at(1).get("direction.in")).toBe(0); // + // fill one column, limit to 4 in result set + // + + var newTS2 = ts.fill({ + fieldSpec: "direction.in", + method: "zero", + limit: 4 + }); + expect(newTS2.at(1).get("direction.in")).toEqual(0); + expect(newTS2.at(3).get("direction.in")).toEqual(0); + expect(newTS2.at(0).get("direction.out")).toBeNull(); + expect(newTS2.at(2).get("direction.out")).toBeNull(); +}); +it("can use TimeSeries.fill() on a more complex example with nested paths", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: { + tcp: 1, + udp: 3 + }, + out: { + tcp: 2, + udp: 3 + } + }], [1400425948000, { + in: { + tcp: 3, + udp: null + }, + out: { + tcp: 4, + udp: 3 + } + }], [1400425949000, { + in: { + tcp: 5, + udp: null + }, + out: { + tcp: null, + udp: 3 + } + }], [1400425950000, { + in: { + tcp: 7, + udp: null + }, + out: { + tcp: null, + udp: 3 + } + }], [1400425960000, { + in: { + tcp: 9, + udp: 4 + }, + out: { + tcp: 6, + udp: 3 + } + }], [1400425970000, { + in: { + tcp: 11, + udp: 5 + }, + out: { + tcp: 8, + udp: 3 + } + }]] + }); + var newTS = ts.fill({ + fieldSpec: ["direction.out.tcp", "direction.in.udp"] + }); + expect(newTS.at(0).get("direction.in.udp")).toBe(3); + expect(newTS.at(1).get("direction.in.udp")).toBe(0); // fill + + expect(newTS.at(2).get("direction.in.udp")).toBe(0); // fill + + expect(newTS.at(3).get("direction.in.udp")).toBe(0); // fill + + expect(newTS.at(4).get("direction.in.udp")).toBe(4); + expect(newTS.at(5).get("direction.in.udp")).toBe(5); + expect(newTS.at(0).get("direction.out.tcp")).toBe(2); + expect(newTS.at(1).get("direction.out.tcp")).toBe(4); + expect(newTS.at(2).get("direction.out.tcp")).toBe(0); // fill + + expect(newTS.at(3).get("direction.out.tcp")).toBe(0); // fill + + expect(newTS.at(4).get("direction.out.tcp")).toBe(6); + expect(newTS.at(5).get("direction.out.tcp")).toBe(8); // + // do it again, but only fill the out.tcp + // + + var newTS2 = ts.fill({ + fieldSpec: ["direction.out.tcp"] + }); + expect(newTS2.at(0).get("direction.out.tcp")).toBe(2); + expect(newTS2.at(1).get("direction.out.tcp")).toBe(4); + expect(newTS2.at(2).get("direction.out.tcp")).toBe(0); // fill + + expect(newTS2.at(3).get("direction.out.tcp")).toBe(0); // fill + + expect(newTS2.at(4).get("direction.out.tcp")).toBe(6); + expect(newTS2.at(5).get("direction.out.tcp")).toBe(8); + expect(newTS2.at(0).get("direction.in.udp")).toBe(3); + expect(newTS2.at(1).get("direction.in.udp")).toBeNull(); // no fill + + expect(newTS2.at(2).get("direction.in.udp")).toBeNull(); // no fill + + expect(newTS2.at(3).get("direction.in.udp")).toBeNull(); // no fill + + expect(newTS2.at(4).get("direction.in.udp")).toBe(4); + expect(newTS2.at(5).get("direction.in.udp")).toBe(5); +}); +it("can use TimeSeries.fill() with limit pad and zero filling", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: 1, + out: null + }], [1400425948000, { + in: null, + out: null + }], [1400425949000, { + in: null, + out: null + }], [1400425950000, { + in: 3, + out: 8 + }], [1400425960000, { + in: null, + out: null + }], [1400425970000, { + in: null, + out: 12 + }], [1400425980000, { + in: null, + out: 13 + }], [1400425990000, { + in: 7, + out: null + }], [1400426000000, { + in: 8, + out: null + }], [1400426010000, { + in: 9, + out: null + }], [1400426020000, { + in: 10, + out: null + }]] + }); //verify fill limit for zero fill + + var zeroTS = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "zero", + limit: 2 + }); + expect(zeroTS.at(0).get("direction.in")).toBe(1); + expect(zeroTS.at(1).get("direction.in")).toBe(0); // fill + + expect(zeroTS.at(2).get("direction.in")).toBe(0); // fill + + expect(zeroTS.at(3).get("direction.in")).toBe(3); + expect(zeroTS.at(4).get("direction.in")).toBe(0); // fill + + expect(zeroTS.at(5).get("direction.in")).toBe(0); // fill + + expect(zeroTS.at(6).get("direction.in")).toBeNull(); // over limit skip + + expect(zeroTS.at(7).get("direction.in")).toBe(7); + expect(zeroTS.at(8).get("direction.in")).toBe(8); + expect(zeroTS.at(9).get("direction.in")).toBe(9); + expect(zeroTS.at(10).get("direction.in")).toBe(10); + expect(zeroTS.at(0).get("direction.out")).toBe(0); // fill + + expect(zeroTS.at(1).get("direction.out")).toBe(0); // fill + + expect(zeroTS.at(2).get("direction.out")).toBeNull(); // over limit skip + + expect(zeroTS.at(3).get("direction.out")).toBe(8); + expect(zeroTS.at(4).get("direction.out")).toBe(0); // fill + + expect(zeroTS.at(5).get("direction.out")).toBe(12); + expect(zeroTS.at(6).get("direction.out")).toBe(13); + expect(zeroTS.at(7).get("direction.out")).toBe(0); // fill + + expect(zeroTS.at(8).get("direction.out")).toBe(0); // fill + + expect(zeroTS.at(9).get("direction.out")).toBeNull(); // over limit skip + + expect(zeroTS.at(10).get("direction.out")).toBeNull(); // over limit skip + // verify fill limit for pad fill + + var padTS = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "pad", + limit: 2 + }); + expect(padTS.at(0).get("direction.in")).toBe(1); + expect(padTS.at(1).get("direction.in")).toBe(1); // fill + + expect(padTS.at(2).get("direction.in")).toBe(1); // fill + + expect(padTS.at(3).get("direction.in")).toBe(3); + expect(padTS.at(4).get("direction.in")).toBe(3); // fill + + expect(padTS.at(5).get("direction.in")).toBe(3); // fill + + expect(padTS.at(6).get("direction.in")).toBeNull(); // over limit skip + + expect(padTS.at(7).get("direction.in")).toBe(7); + expect(padTS.at(8).get("direction.in")).toBe(8); + expect(padTS.at(9).get("direction.in")).toBe(9); + expect(padTS.at(10).get("direction.in")).toBe(10); + expect(padTS.at(0).get("direction.out")).toBeNull(); // no fill start + + expect(padTS.at(1).get("direction.out")).toBeNull(); // no fill start + + expect(padTS.at(2).get("direction.out")).toBeNull(); // no fill start + + expect(padTS.at(3).get("direction.out")).toBe(8); + expect(padTS.at(4).get("direction.out")).toBe(8); // fill + + expect(padTS.at(5).get("direction.out")).toBe(12); + expect(padTS.at(6).get("direction.out")).toBe(13); + expect(padTS.at(7).get("direction.out")).toBe(13); // fill + + expect(padTS.at(8).get("direction.out")).toBe(13); // fill + + expect(padTS.at(9).get("direction.out")).toBeNull(); // over limit skip + + expect(padTS.at(10).get("direction.out")).toBeNull(); // over limit skip +}); +it("can do linear interpolation fill (test_linear)", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: 1, + out: 2 + }], [1400425948000, { + in: null, + out: null + }], [1400425949000, { + in: null, + out: null + }], [1400425950000, { + in: 3, + out: null + }], [1400425960000, { + in: null, + out: null + }], [1400425970000, { + in: 5, + out: 12 + }], [1400425980000, { + in: 6, + out: 13 + }]] + }); + var result = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "linear" + }); + expect(result.size()).toBe(7); + expect(result.at(0).get("direction.in")).toBe(1); + expect(result.at(1).get("direction.in")).toBe(1.6666666666666665); // filled + + expect(result.at(2).get("direction.in")).toBe(2.333333333333333); // filled + + expect(result.at(3).get("direction.in")).toBe(3); + expect(result.at(4).get("direction.in")).toBe(4.0); // filled + + expect(result.at(5).get("direction.in")).toBe(5); + expect(result.at(0).get("direction.out")).toBe(2); + expect(result.at(1).get("direction.out")).toBe(2.4347826086956523); // filled + + expect(result.at(2).get("direction.out")).toBe(2.869565217391304); // filled + + expect(result.at(3).get("direction.out")).toBe(3.3043478260869565); // filled + + expect(result.at(4).get("direction.out")).toBe(7.652173913043478); // filled + + expect(result.at(5).get("direction.out")).toBe(12); +}); +it("can do linear interpolation fill with a pipeline (test_linear_list)", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: 1, + out: 2 + }], [1400425948000, { + in: null, + out: null + }], [1400425949000, { + in: null, + out: null + }], [1400425950000, { + in: 3, + out: null + }], [1400425960000, { + in: null, + out: null + }], [1400425970000, { + in: 5, + out: 12 + }], [1400425980000, { + in: 6, + out: 13 + }]] + }); + var result = (0, _pipeline.Pipeline)().from(ts).fill({ + fieldSpec: "direction.in", + method: "linear" + }).fill({ + fieldSpec: "direction.out", + method: "linear" + }).toEventList(); + expect(result.length).toBe(7); + expect(result[0].get("direction.in")).toBe(1); + expect(result[1].get("direction.in")).toBe(1.6666666666666665); // filled + + expect(result[2].get("direction.in")).toBe(2.333333333333333); // filled + + expect(result[3].get("direction.in")).toBe(3); + expect(result[4].get("direction.in")).toBe(4.0); // filled + + expect(result[5].get("direction.in")).toBe(5); + expect(result[0].get("direction.out")).toBe(2); + expect(result[1].get("direction.out")).toBe(2.4347826086956523); // filled + + expect(result[2].get("direction.out")).toBe(2.869565217391304); // filled + + expect(result[3].get("direction.out")).toBe(3.3043478260869565); // filled + + expect(result[4].get("direction.out")).toBe(7.652173913043478); // filled + + expect(result[5].get("direction.out")).toBe(12); +}); +it("can do assymetric linear interpolation (test_assymetric_linear_fill)", () => { + var ts = new _timeseries.default({ + name: "traffic", + columns: ["time", "direction"], + points: [[1400425947000, { + in: 1, + out: null + }], [1400425948000, { + in: null, + out: null + }], [1400425949000, { + in: null, + out: null + }], [1400425950000, { + in: 3, + out: 8 + }], [1400425960000, { + in: null, + out: null + }], [1400425970000, { + in: 5, + out: 12 + }], [1400425980000, { + in: 6, + out: 13 + }]] + }); + var result = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "linear" + }); + expect(result.at(0).get("direction.in")).toBe(1); + expect(result.at(1).get("direction.in")).toBe(1.6666666666666665); // filled + + expect(result.at(2).get("direction.in")).toBe(2.333333333333333); // filled + + expect(result.at(3).get("direction.in")).toBe(3); + expect(result.at(4).get("direction.in")).toBe(4.0); // filled + + expect(result.at(5).get("direction.in")).toBe(5); + expect(result.at(0).get("direction.out")).toBeNull(); + expect(result.at(1).get("direction.out")).toBeNull(); + expect(result.at(2).get("direction.out")).toBeNull(); + expect(result.at(3).get("direction.out")).toBe(8); + expect(result.at(4).get("direction.out")).toBe(10); // filled + + expect(result.at(5).get("direction.out")).toBe(12); +}); +it("can do streaming fill (test_linear_stream)", done => { + var events = [new _timeevent.default(1400425947000, 1), new _timeevent.default(1400425948000, 2), new _timeevent.default(1400425949000, { + value: null + }), new _timeevent.default(1400425950000, { + value: null + }), new _timeevent.default(1400425951000, { + value: null + }), new _timeevent.default(1400425952000, 5), new _timeevent.default(1400425953000, 6), new _timeevent.default(1400425954000, 7)]; + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).emitOn("flush").fill({ + method: "linear", + fieldSpec: "value" + }).to(_collectionout.default, c => { + expect(c.at(0).value()).toBe(1); + expect(c.at(1).value()).toBe(2); + expect(c.at(2).value()).toBe(2.75); // fill + + expect(c.at(3).value()).toBe(3.5); // fill + + expect(c.at(4).value()).toBe(4.25); // fill + + expect(c.at(5).value()).toBe(5); + expect(c.at(6).value()).toBe(6); + expect(c.at(7).value()).toBe(7); + done(); + }); + events.forEach(e => stream.addEvent(e)); + stream.stop(); +}); +it("can do streaming fill with limit (test_linear_stream_limit/1)", () => { + var results; + var events = [new _timeevent.default(1400425947000, 1), new _timeevent.default(1400425948000, 2), new _timeevent.default(1400425949000, { + value: null + }), new _timeevent.default(1400425950000, 3), new _timeevent.default(1400425951000, { + value: null + }), new _timeevent.default(1400425952000, { + value: null + }), new _timeevent.default(1400425953000, { + value: null + }), new _timeevent.default(1400425954000, { + value: null + })]; + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).fill({ + method: "linear", + fieldSpec: "value" + }).to(_collectionout.default, collection => { + results = collection; + }); + events.forEach(e => stream.addEvent(e)); // should be blocked after 4 events waiting for a good next value + + expect(results.size()).toBe(4); // stop the stream + + stream.stop(); // should flush the last events anyway + + expect(results.size()).toBe(8); +}); +it("can do streaming fill with limit (test_linear_stream_limit/2)", () => { + var results; + var events = [new _timeevent.default(1400425947000, 1), new _timeevent.default(1400425948000, 2), new _timeevent.default(1400425949000, { + value: null + }), new _timeevent.default(1400425950000, 3), new _timeevent.default(1400425951000, { + value: null + }), new _timeevent.default(1400425952000, { + value: null + }), new _timeevent.default(1400425953000, { + value: null + }), new _timeevent.default(1400425954000, { + value: null + })]; + var stream = new _stream.default(); + (0, _pipeline.Pipeline)().from(stream).fill({ + method: "linear", + fieldSpec: "value", + limit: 3 + }).to(_collectionout.default, collection => { + results = collection; + }); + events.forEach(e => stream.addEvent(e)); // Because of the limit, all events should be captured in the collection + + expect(results.size()).toBe(8); +}); //TODO + +/* +it("can throw on bad args", () => { + const ts = new TimeSeries({ + name: "traffic", + columns: ["time", "direction"], + points: [ + [1400425947000, {"in": 1, "out": null, "drop": null}], + [1400425948000, {"in": null, "out": 4, "drop": null}], + [1400425949000, {"in": null, "out": null, "drop": 13}], + [1400425950000, {"in": null, "out": null, "drop": 14}], + [1400425960000, {"in": 9, "out": 8, "drop": null}], + [1400425970000, {"in": 11, "out": 10, "drop": 16}] + ] + }); + + //expect(Event.sum.bind(this, events)).to.throw("sum() expects all events to have the same timestamp"); + + done(); +}); +*/ \ No newline at end of file diff --git a/lib/lib/__tests__/timeseries.rename.test.js b/lib/lib/__tests__/timeseries.rename.test.js new file mode 100644 index 0000000..792c0b3 --- /dev/null +++ b/lib/lib/__tests__/timeseries.rename.test.js @@ -0,0 +1,100 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _collection = _interopRequireDefault(require("../collection")); + +var _collectionout = _interopRequireDefault(require("../io/collectionout")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +var _stream = _interopRequireDefault(require("../io/stream")); + +var _pipeline = require("../pipeline"); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var EVENT_LIST = [new _timeevent.default(1429673400000, { + in: 1, + out: 2 +}), new _timeevent.default(1429673460000, { + in: 3, + out: 4 +}), new _timeevent.default(1429673520000, { + in: 5, + out: 6 +})]; +var TICKET_RANGE = { + name: "outages", + columns: ["timerange", "title", "esnet_ticket"], + points: [[[1429673400000, 1429707600000], "BOOM", "ESNET-20080101-001"], [[1429673400000, 1429707600000], "BAM!", "ESNET-20080101-002"]] +}; +var AVAILABILITY_DATA = { + name: "availability", + columns: ["index", "uptime"], + points: [["2014-07", "100%"], ["2014-08", "88%"], ["2014-09", "95%"], ["2014-10", "99%"], ["2014-11", "91%"], ["2014-12", "99%"], ["2015-01", "100%"], ["2015-02", "92%"], ["2015-03", "99%"], ["2015-04", "87%"], ["2015-05", "92%"], ["2015-06", "100%"]] +}; +it("can rename columns on an Event series", done => { + var name = "collection"; + var collection = new _collection.default(EVENT_LIST); + var ts = new _timeseries.default({ + name, + collection + }); + var renamed = ts.renameColumns({ + renameMap: { + in: "new_in", + out: "new_out" + } + }); + expect(renamed.at(0).get("new_in")).toEqual(ts.at(0).get("in")); + expect(renamed.at(0).get("new_out")).toEqual(ts.at(0).get("out")); + expect(renamed.at(1).get("new_in")).toEqual(ts.at(1).get("in")); + expect(renamed.at(1).get("new_out")).toEqual(ts.at(1).get("out")); + expect(renamed.at(0).timestamp().getTime()).toEqual(ts.at(0).timestamp().getTime()); + expect(renamed.at(1).timestamp().getTime()).toEqual(ts.at(1).timestamp().getTime()); + done(); +}); +it("can rename a columns on a TimeRangeEvent series", done => { + var ts = new _timeseries.default(TICKET_RANGE); + var renamed = ts.renameColumns({ + renameMap: { + title: "event", + esnet_ticket: "ticket" + } + }); + expect(renamed.at(0).get("event")).toEqual(ts.at(0).get("title")); + expect(renamed.at(0).get("ticket")).toEqual(ts.at(0).get("esnet_ticket")); + expect(renamed.at(1).get("event")).toEqual(ts.at(1).get("title")); + expect(renamed.at(1).get("ticket")).toEqual(ts.at(1).get("esnet_ticket")); + expect(renamed.at(0).timestamp().getTime()).toEqual(ts.at(0).timestamp().getTime()); + expect(renamed.at(1).timestamp().getTime()).toEqual(ts.at(1).timestamp().getTime()); + done(); +}); +it("can rename a columns on a IndexedEvent series", done => { + var ts = new _timeseries.default(AVAILABILITY_DATA); + var renamed = ts.renameColumns({ + renameMap: { + uptime: "available" + } + }); + expect(renamed.at(0).get("available")).toEqual(ts.at(0).get("uptime")); + expect(renamed.at(2).get("available")).toEqual(ts.at(2).get("uptime")); + expect(renamed.at(4).get("available")).toEqual(ts.at(4).get("uptime")); + expect(renamed.at(6).get("available")).toEqual(ts.at(6).get("uptime")); + expect(renamed.at(0).timestamp()).toEqual(ts.at(0).timestamp()); + expect(renamed.at(1).timestamp()).toEqual(ts.at(1).timestamp()); + expect(renamed.at(2).timestamp()).toEqual(ts.at(2).timestamp()); + done(); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/timeseries.stats.test.js b/lib/lib/__tests__/timeseries.stats.test.js new file mode 100644 index 0000000..3d6daf7 --- /dev/null +++ b/lib/lib/__tests__/timeseries.stats.test.js @@ -0,0 +1,426 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var TIMESERIES_DATA = { + name: "traffic", + columns: ["time", "value", "status"], + points: [[1400425947000, 52, "ok"], [1400425948000, 18, "ok"], [1400425949000, 26, "fail"], [1400425950000, 93, "offline"]] +}; +var STATS_DATA = { + name: "stats", + columns: ["time", "value"], + points: [[1400425941000, 13], [1400425942000, 18], [1400425943000, 13], [1400425944000, 14], [1400425945000, 13], [1400425946000, 16], [1400425947000, 14], [1400425948000, 21], [1400425948000, 13]] +}; +var STATS_DATA2 = { + name: "stats", + columns: ["time", "value"], + points: [[1400425941000, 26], [1400425942000, 33], [1400425943000, 65], [1400425944000, 28], [1400425945000, 34], [1400425946000, 55], [1400425947000, 25], [1400425948000, 44], [1400425949000, 50], [1400425950000, 36], [1400425951000, 26], [1400425952000, 37], [1400425953000, 43], [1400425954000, 62], [1400425955000, 35], [1400425956000, 38], [1400425957000, 45], [1400425958000, 32], [1400425959000, 28], [1400425960000, 34]] +}; +var INTERFACE_DATA = { + name: "star-cr5:to_anl_ip-a_v4", + description: "star-cr5->anl(as683):100ge:site-ex:show:intercloud", + device: "star-cr5", + id: 169, + interface: "to_anl_ip-a_v4", + is_ipv6: false, + is_oscars: false, + oscars_id: null, + resource_uri: "", + site: "anl", + site_device: "noni", + site_interface: "et-1/0/0", + stats_type: "Standard", + title: null, + columns: ["time", "in", "out"], + points: [[1400425947000, 52, 34], [1400425948000, 18, 13], [1400425949000, 26, 67], [1400425950000, 93, 91]] +}; +var MISSING_DATA_TIMESERIES = new _timeseries.default({ + name: "series", + columns: ["time", "in", "out"], + points: [[1400425951000, 100, null], [1400425952000, 300, undefined], [1400425953000, null, 500], [1400425954000, 200, 400]] +}); +var NULL_DATA_TIMESERIES = new _timeseries.default({ + name: "series", + columns: ["time", "in", "out"], + points: [[1400425951000, null, null], [1400425952000, null, null], [1400425953000, null, null], [1400425954000, null, null]] +}); +var NO_DATA_TIMESERIES = new _timeseries.default({ + name: "series", + columns: ["time", "in", "out"], + points: [] +}); +var availabilitySeries = { + name: "availability", + columns: ["index", "uptime", "notes", "outages"], + points: [["2014-07", 100, "", 2], ["2014-08", 88, "", 17], ["2014-09", 95, "", 6], ["2014-10", 99, "", 3], ["2014-11", 91, "", 14], ["2014-12", 99, "", 3], ["2015-01", 100, "", 0], ["2015-02", 92, "", 12], ["2015-03", 99, "Minor outage March 2", 4], ["2015-04", 87, "Planned downtime in April", 82], ["2015-05", 92, "Router failure June 12", 26], ["2015-06", 100, "", 0]] +}; // +// Reducing functions +// + +it("can sum the series", () => { + var series = new _timeseries.default(TIMESERIES_DATA); + expect(series.sum("value")).toBe(189); +}); +it("can sum a series with deep data", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 300, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 400, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.sum("NASA_north.in")).toBe(1000); +}); +it("can sum a series with missing data", () => { + var inSeries = MISSING_DATA_TIMESERIES.clean("in"); + var outSeries = MISSING_DATA_TIMESERIES.clean("out"); + expect(inSeries.sum("in")).toBe(600); + expect(outSeries.sum("out")).toBe(900); + expect(inSeries.sizeValid("in")).toBe(3); + expect(outSeries.sizeValid("out")).toBe(2); +}); +it("can sum the series with no column name specified", () => { + var series = new _timeseries.default(TIMESERIES_DATA); + expect(series.sum()).toBe(189); +}); +it("can find the max of the series", () => { + var series = new _timeseries.default(TIMESERIES_DATA); + expect(series.max()).toBe(93); +}); +it("can find the max of the series with missing data", () => { + var series = new _timeseries.default(MISSING_DATA_TIMESERIES); + expect(series.max("in")).toBe(300); + expect(series.max("out")).toBe(500); +}); +it("can find the max of the series with no data", () => { + var series = new _timeseries.default(NO_DATA_TIMESERIES); + expect(series.max()).toBeUndefined(); +}); +it("can find the max of the series with null data", () => { + var series = new _timeseries.default(NULL_DATA_TIMESERIES); + expect(series.max()).toBeUndefined(); +}); +it("can find the max of a series with deep data", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 182 + }], [1400425953000, { + in: 300, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 400, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.max("NASA_south.out")).toBe(182); +}); +it("can find the min of the series", () => { + var series = new _timeseries.default(TIMESERIES_DATA); + expect(series.min()).toBe(18); +}); +it("can find the min of the series with missing data", () => { + var series = new _timeseries.default(MISSING_DATA_TIMESERIES); + var inSeries = series.clean("in"); + var outSeries = series.clean("out"); + expect(inSeries.min("in")).toBe(100); + expect(outSeries.min("out")).toBe(400); +}); +it("can find the min of a series with deep data", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 182 + }], [1400425953000, { + in: 300, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 400, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.min("NASA_south.out")).toBe(135); +}); // +// Getting statistics on a TimeSeries +// + +it("can avg the series", () => { + var series = new _timeseries.default(STATS_DATA); + expect(series.avg()).toBe(15); +}); +it("can avg series with deep data", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 300, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 400, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.avg("NASA_north.in")).toBe(250); +}); +it("can avg series with deep data", () => { + var series = new _timeseries.default(availabilitySeries); + expect(series.avg("uptime")).toBe(95.16666666666667); +}); +it("can find the max of the series with no data", () => { + var series = new _timeseries.default(NO_DATA_TIMESERIES); + expect(series.avg()).toBeUndefined(); +}); +it("can mean of the series (the avg)", () => { + var series = new _timeseries.default(STATS_DATA); + expect(series.mean()).toBe(15); +}); +it("can find the median of the series", () => { + var series = new _timeseries.default(STATS_DATA); + expect(series.median()).toBe(14); +}); +it("can find the median of a series with deep data and even number of events", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 400, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 800, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.median("NASA_north.in")).toBe(300); +}); +it("can find the median of a series with deep data and odd number of events", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 400, + out: 600 + }, { + in: 147, + out: 158 + }]] + }); + expect(series.median("NASA_north.out")).toBe(400); +}); +it("can find the standard deviation of the series", () => { + var series = new _timeseries.default(STATS_DATA); + expect(series.stdev()).toBe(2.6666666666666665); +}); +it("can find the standard deviation and mean of another series", () => { + var series = new _timeseries.default(STATS_DATA2); + expect(Math.round(series.mean() * 10) / 10).toBe(38.8); + expect(Math.round(series.stdev() * 10) / 10).toBe(11.4); +}); +it("can find the standard deviation of a series with deep data", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 400, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 800, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.stdev("NASA_south.out")).toBe(15.435349040433131); +}); +it("can find the quantiles of a TimeSeries", () => { + var series = new _timeseries.default({ + name: "Sensor values", + columns: ["time", "temperature"], + points: [[1400425951000, 22.3], [1400425952000, 32.4], [1400425953000, 12.1], [1400425955000, 76.8], [1400425956000, 87.3], [1400425957000, 54.6], [1400425958000, 45.5], [1400425959000, 87.9]] + }); + expect(series.quantile(4, "temperature")).toEqual([29.875, 50.05, 79.425]); + expect(series.quantile(4, "temperature", "linear")).toEqual([29.875, 50.05, 79.425]); + expect(series.quantile(4, "temperature", "lower")).toEqual([22.3, 45.5, 76.8]); + expect(series.quantile(4, "temperature", "higher")).toEqual([32.4, 54.6, 87.3]); + expect(series.quantile(4, "temperature", "nearest")).toEqual([32.4, 54.6, 76.8]); + expect(series.quantile(4, "temperature", "midpoint")).toEqual([27.35, 50.05, 82.05]); + expect(series.quantile(1, "temperature", "linear")).toEqual([]); +}); +it("can find the percentiles of a TimeSeries", () => { + var series = new _timeseries.default({ + name: "Sensor values", + columns: ["time", "temperature"], + points: [[1400425951000, 22.3], [1400425952000, 32.4], [1400425953000, 12.1], [1400425955000, 76.8], [1400425956000, 87.3], [1400425957000, 54.6], [1400425958000, 45.5], [1400425959000, 87.9]] + }); + expect(series.percentile(50, "temperature")).toBe(50.05); + expect(series.percentile(95, "temperature")).toBeCloseTo(87.690, 3); + expect(series.percentile(99, "temperature")).toBeCloseTo(87.858, 3); + expect(series.percentile(99, "temperature", "lower")).toBe(87.3); + expect(series.percentile(99, "temperature", "higher")).toBe(87.9); + expect(series.percentile(99, "temperature", "nearest")).toBe(87.9); + expect(series.percentile(99, "temperature", "midpoint")).toBe(87.6); + expect(series.percentile(0, "temperature")).toBe(12.1); + expect(series.percentile(100, "temperature")).toBe(87.9); +}); +it("can find the percentiles of an empty TimeSeries", () => { + var series = new _timeseries.default({ + name: "Sensor values", + columns: ["time", "temperature"], + points: [] + }); + expect(series.percentile(0, "temperature")).toBeUndefined(); + expect(series.percentile(100, "temperature")).toBeUndefined(); +}); +it("can find the percentiles of a TimeSeries with one point", () => { + var series = new _timeseries.default({ + name: "Sensor values", + columns: ["time", "temperature"], + points: [[1400425951000, 22.3]] + }); + expect(series.percentile(0, "temperature")).toBe(22.3); + expect(series.percentile(50, "temperature")).toBe(22.3); + expect(series.percentile(100, "temperature")).toBe(22.3); +}); +it("can find the percentiles of a TimeSeries with two points", () => { + var series = new _timeseries.default({ + name: "Sensor values", + columns: ["time", "temperature"], + points: [[1400425951000, 4], [1400425952000, 5]] + }); + expect(series.percentile(0, "temperature")).toBe(4); + expect(series.percentile(50, "temperature")).toBe(4.5); + expect(series.percentile(100, "temperature")).toBe(5); +}); \ No newline at end of file diff --git a/lib/lib/__tests__/timeseries.test.js b/lib/lib/__tests__/timeseries.test.js new file mode 100644 index 0000000..f0dd492 --- /dev/null +++ b/lib/lib/__tests__/timeseries.test.js @@ -0,0 +1,744 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); + +var _moment = _interopRequireDefault(require("moment")); + +var _collection = _interopRequireDefault(require("../collection")); + +var _timeevent = _interopRequireDefault(require("../timeevent")); + +var _timerange = _interopRequireDefault(require("../timerange")); + +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); + +var _timeseries = _interopRequireDefault(require("../timeseries")); + +var _functions = require("../base/functions"); + +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/* eslint-disable */ +var TIMESERIES_TEST_DATA = { + name: "traffic", + columns: ["time", "value", "status"], + points: [[1400425947000, 52, "ok"], [1400425948000, 18, "ok"], [1400425949000, 26, "fail"], [1400425950000, 93, "offline"]] +}; +var INDEXED_DATA = { + index: "1d-625", + name: "traffic", + columns: ["time", "value", "status"], + points: [[1400425947000, 52, "ok"], [1400425948000, 18, "ok"], [1400425949000, 26, "fail"], [1400425950000, 93, "offline"]] +}; +var AVAILABILITY_DATA = { + name: "availability", + columns: ["index", "uptime"], + points: [["2014-07", "100%"], ["2014-08", "88%"], ["2014-09", "95%"], ["2014-10", "99%"], ["2014-11", "91%"], ["2014-12", "99%"], ["2015-01", "100%"], ["2015-02", "92%"], ["2015-03", "99%"], ["2015-04", "87%"], ["2015-05", "92%"], ["2015-06", "100%"]] +}; +var AVAILABILITY_DATA_2 = { + name: "availability", + columns: ["index", "uptime", "notes", "outages"], + points: [["2014-07", 100, "", 2], ["2014-08", 88, "", 17], ["2014-09", 95, "", 6], ["2014-10", 99, "", 3], ["2014-11", 91, "", 14], ["2014-12", 99, "", 3], ["2015-01", 100, "", 0], ["2015-02", 92, "", 12], ["2015-03", 99, "Minor outage March 2", 4], ["2015-04", 87, "Planned downtime in April", 82], ["2015-05", 92, "Router failure June 12", 26], ["2015-06", 100, "", 0]] +}; +var INTERFACE_TEST_DATA = { + name: "star-cr5:to_anl_ip-a_v4", + description: "star-cr5->anl(as683):100ge:site-ex:show:intercloud", + device: "star-cr5", + id: 169, + interface: "to_anl_ip-a_v4", + is_ipv6: false, + is_oscars: false, + oscars_id: null, + resource_uri: "", + site: "anl", + site_device: "noni", + site_interface: "et-1/0/0", + stats_type: "Standard", + title: null, + columns: ["time", "in", "out"], + points: [[1400425947000, 52, 34], [1400425948000, 18, 13], [1400425949000, 26, 67], [1400425950000, 93, 91]] +}; +var TRAFFIC_BNL_TO_NEWY = { + name: "BNL to NEWY", + columns: ["time", "in"], + points: [[1441051950000, 2998846524.2666664], [1441051980000, 2682032885.3333335], [1441052010000, 2753537586.9333334]] +}; +var TRAFFIC_NEWY_TO_BNL = { + name: "NEWY to BNL", + columns: ["time", "out"], + points: [[1441051950000, 22034579982.4], [1441051980000, 24783871443.2], [1441052010000, 26907368572.800003]] +}; +var fmt = "YYYY-MM-DD HH:mm"; +var BISECT_TEST_DATA = { + name: "test", + columns: ["time", "value"], + points: [[(0, _moment.default)("2012-01-11 01:00", fmt).valueOf(), 22], [(0, _moment.default)("2012-01-11 02:00", fmt).valueOf(), 33], [(0, _moment.default)("2012-01-11 03:00", fmt).valueOf(), 44], [(0, _moment.default)("2012-01-11 04:00", fmt).valueOf(), 55], [(0, _moment.default)("2012-01-11 05:00", fmt).valueOf(), 66], [(0, _moment.default)("2012-01-11 06:00", fmt).valueOf(), 77], [(0, _moment.default)("2012-01-11 07:00", fmt).valueOf(), 88]] +}; +var TRAFFIC_DATA_IN = { + name: "star-cr5:to_anl_ip-a_v4", + columns: ["time", "in"], + points: [[1400425947000, 52], [1400425948000, 18], [1400425949000, 26], [1400425950000, 93]] +}; +var TRAFFIC_DATA_OUT = { + name: "star-cr5:to_anl_ip-a_v4", + columns: ["time", "out"], + points: [[1400425947000, 34], [1400425948000, 13], [1400425949000, 67], [1400425950000, 91]] +}; +var PARTIAL_TRAFFIC_PART_A = { + name: "star-cr5:to_anl_ip-a_v4", + columns: ["time", "value"], + points: [[1400425947000, 34], [1400425948000, 13], [1400425949000, 67], [1400425950000, 91]] +}; +var PARTIAL_TRAFFIC_PART_B = { + name: "star-cr5:to_anl_ip-a_v4", + columns: ["time", "value"], + points: [[1400425951000, 65], [1400425952000, 86], [1400425953000, 27], [1400425954000, 72]] +}; +var OUTAGE_EVENT_LIST = [{ + startTime: "2015-03-04T09:00:00Z", + endTime: "2015-03-04T14:00:00Z", + title: "ANL Scheduled Maintenance", + description: "ANL will be switching border routers...", + completed: true, + external_ticket: "", + esnet_ticket: "ESNET-20150302-002", + organization: "ANL", + type: "Planned" +}, { + startTime: "2015-04-22T03:30:00Z", + endTime: "2015-04-22T13:00:00Z", + description: "At 13:33 pacific circuit 06519 went down.", + title: "STAR-CR5 < 100 ge 06519 > ANL - Outage", + completed: true, + external_ticket: "", + esnet_ticket: "ESNET-20150421-013", + organization: "Internet2 / Level 3", + type: "Unplanned" +}, { + startTime: "2015-04-22T03:35:00Z", + endTime: "2015-04-22T16:50:00Z", + title: "STAR-CR5 < 100 ge 06519 > ANL - Outage", + description: "The listed circuit was unavailable due to bent pins.", + completed: true, + external_ticket: "3576:144", + esnet_ticket: "ESNET-20150421-013", + organization: "Internet2 / Level 3", + type: "Unplanned" +}]; +var sumPart1 = { + name: "part1", + columns: ["time", "in", "out"], + points: [[1400425951000, 1, 6], [1400425952000, 2, 7], [1400425953000, 3, 8], [1400425954000, 4, 9]] +}; +var sumPart2 = { + name: "part2", + columns: ["time", "in", "out"], + points: [[1400425951000, 9, 1], [1400425952000, 7, 2], [1400425953000, 5, 3], [1400425954000, 3, 4]] +}; +var sept2014Data = { + utc: false, + name: "traffic", + columns: ["time", "value"], + points: [[1409529600000, 80], [1409533200000, 88], [1409536800000, 52], [1409540400000, 80], [1409544000000, 26], [1409547600000, 37], [1409551200000, 6], [1409554800000, 32], [1409558400000, 69], [1409562000000, 21], [1409565600000, 6], [1409569200000, 54], [1409572800000, 88], [1409576400000, 41], [1409580000000, 35], [1409583600000, 43], [1409587200000, 84], [1409590800000, 32], [1409594400000, 41], [1409598000000, 57], [1409601600000, 27], [1409605200000, 50], [1409608800000, 13], [1409612400000, 63], [1409616000000, 58], [1409619600000, 80], [1409623200000, 59], [1409626800000, 96], [1409630400000, 2], [1409634000000, 20], [1409637600000, 64], [1409641200000, 7], [1409644800000, 50], [1409648400000, 88], [1409652000000, 34], [1409655600000, 31], [1409659200000, 16], [1409662800000, 38], [1409666400000, 94], [1409670000000, 78], [1409673600000, 86], [1409677200000, 13], [1409680800000, 34], [1409684400000, 29], [1409688000000, 48], [1409691600000, 80], [1409695200000, 30], [1409698800000, 15], [1409702400000, 62], [1409706000000, 66], [1409709600000, 44], [1409713200000, 94], [1409716800000, 78], [1409720400000, 29], [1409724000000, 21], [1409727600000, 4], [1409731200000, 83], [1409734800000, 15], [1409738400000, 89], [1409742000000, 53], [1409745600000, 70], [1409749200000, 41], [1409752800000, 47], [1409756400000, 30], [1409760000000, 68], [1409763600000, 89], [1409767200000, 29], [1409770800000, 17], [1409774400000, 38], [1409778000000, 67], [1409781600000, 75], [1409785200000, 89], [1409788800000, 47], [1409792400000, 82], [1409796000000, 33], [1409799600000, 67], [1409803200000, 93], [1409806800000, 86], [1409810400000, 97], [1409814000000, 19], [1409817600000, 19], [1409821200000, 31], [1409824800000, 56], [1409828400000, 19], [1409832000000, 43], [1409835600000, 29], [1409839200000, 72], [1409842800000, 27], [1409846400000, 21], [1409850000000, 88], [1409853600000, 18], [1409857200000, 30], [1409860800000, 46], [1409864400000, 34], [1409868000000, 31], [1409871600000, 20], [1409875200000, 45], [1409878800000, 17], [1409882400000, 24], [1409886000000, 84], [1409889600000, 6], [1409893200000, 91], [1409896800000, 82], [1409900400000, 71], [1409904000000, 97], [1409907600000, 43], [1409911200000, 38], [1409914800000, 1], [1409918400000, 71], [1409922000000, 50], [1409925600000, 19], [1409929200000, 19], [1409932800000, 86], [1409936400000, 65], [1409940000000, 93], [1409943600000, 35]] +}; +var TIMERANGE_EVENT_LIST = OUTAGE_EVENT_LIST.map(event => { + var { + startTime, + endTime + } = event, + other = (0, _objectWithoutProperties2.default)(event, ["startTime", "endTime"]); //eslint-disable-line + + var b = new Date(startTime); + var e = new Date(endTime); + return new _timerangeevent.default(new _timerange.default(b, e), other); +}); // +// TESTS +// + +it("can create an series with our wire format", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + expect(series).toBeDefined(); +}); +it("can create an series with a list of Events", () => { + var events = []; + events.push(new _timeevent.default(new Date(2015, 7, 1), { + value: 27 + })); + events.push(new _timeevent.default(new Date(2015, 8, 1), { + value: 14 + })); + var series = new _timeseries.default({ + name: "events", + events + }); + expect(series.size()).toBe(2); +}); +it("can create an series with no events", () => { + var events = []; + var series = new _timeseries.default({ + name: "events", + events + }); + expect(series.size()).toBe(0); +}); // +// Basic Query API +// + +it("can return the size of the series", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + expect(series.size()).toBe(4); +}); +it("can return an item in the series as an event", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var event = series.at(1); + expect(event instanceof _timeevent.default).toBeTruthy(); +}); +it("can return an item in the series with the correct data", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var event = series.at(1); + expect(JSON.stringify(event.data())).toBe("{\"value\":18,\"status\":\"ok\"}"); + expect(event.timestamp().getTime()).toBe(1400425948000); +}); +it("can serialize to a string", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var expectedString = "{\"name\":\"traffic\",\"utc\":true,\"columns\":[\"time\",\"value\",\"status\"],\"points\":[[1400425947000,52,\"ok\"],[1400425948000,18,\"ok\"],[1400425949000,26,\"fail\"],[1400425950000,93,\"offline\"]]}"; + expect(series.toString()).toBe(expectedString); +}); +it("can return the time range of the series", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var expectedString = "[Sun, 18 May 2014 15:12:27 GMT, Sun, 18 May 2014 15:12:30 GMT]"; + expect(series.timerange().toUTCString()).toBe(expectedString); +}); // +// Meta data +// + +it("can create a series with meta data and get that data back", () => { + var series = new _timeseries.default(INTERFACE_TEST_DATA); + var expected = "{\"site_interface\":\"et-1/0/0\",\"utc\":true,\"site\":\"anl\",\"name\":\"star-cr5:to_anl_ip-a_v4\",\"site_device\":\"noni\",\"device\":\"star-cr5\",\"oscars_id\":null,\"title\":null,\"is_oscars\":false,\"interface\":\"to_anl_ip-a_v4\",\"stats_type\":\"Standard\",\"id\":169,\"resource_uri\":\"\",\"is_ipv6\":false,\"description\":\"star-cr5->anl(as683):100ge:site-ex:show:intercloud\",\"columns\":[\"time\",\"in\",\"out\"],\"points\":[[1400425947000,52,34],[1400425948000,18,13],[1400425949000,26,67],[1400425950000,93,91]]}"; + expect(series.toString()).toBe(expected); + expect(series.meta("interface")).toBe("to_anl_ip-a_v4"); +}); +it("can create a series and set a new name", () => { + var series = new _timeseries.default(INTERFACE_TEST_DATA); + expect(series.name()).toBe("star-cr5:to_anl_ip-a_v4"); + var newSeries = series.setName("bob"); + expect(newSeries.name()).toBe("bob"); +}); +it("can create a series with meta data and get that data back", () => { + var series = new _timeseries.default(INTERFACE_TEST_DATA); + expect(series.meta("site_interface")).toBe("et-1/0/0"); + var newSeries = series.setMeta("site_interface", "bob"); + expect(newSeries.meta("site_interface")).toBe("bob"); + expect(newSeries.at(0).get("in")).toBe(52); + expect(newSeries.meta("site")).toBe("anl"); +}); // +// Deep event data +// + +it("can create a series with a nested object", () => { + var series = new _timeseries.default({ + name: "Map Traffic", + columns: ["time", "NASA_north", "NASA_south"], + points: [[1400425951000, { + in: 100, + out: 200 + }, { + in: 145, + out: 135 + }], [1400425952000, { + in: 200, + out: 400 + }, { + in: 146, + out: 142 + }], [1400425953000, { + in: 300, + out: 600 + }, { + in: 147, + out: 158 + }], [1400425954000, { + in: 400, + out: 800 + }, { + in: 155, + out: 175 + }]] + }); + expect(series.at(0).get("NASA_north").in).toBe(100); + expect(series.at(0).get("NASA_north").out).toBe(200); +}); +it("can create a series with nested events", () => { + var events = []; + events.push(new _timeevent.default(new Date(2015, 6, 1), { + NASA_north: { + in: 100, + out: 200 + }, + NASA_south: { + in: 145, + out: 135 + } + })); + events.push(new _timeevent.default(new Date(2015, 7, 1), { + NASA_north: { + in: 200, + out: 400 + }, + NASA_south: { + in: 146, + out: 142 + } + })); + events.push(new _timeevent.default(new Date(2015, 8, 1), { + NASA_north: { + in: 300, + out: 600 + }, + NASA_south: { + in: 147, + out: 158 + } + })); + events.push(new _timeevent.default(new Date(2015, 9, 1), { + NASA_north: { + in: 400, + out: 800 + }, + NASA_south: { + in: 155, + out: 175 + } + })); + var series = new _timeseries.default({ + name: "Map traffic", + events + }); + expect(series.at(0).get("NASA_north").in).toBe(100); + expect(series.at(3).get("NASA_south").out).toBe(175); + expect(series.size()).toBe(4); +}); // +// Comparing TimeSeries with each other +// + +it("can compare a series and a reference to a series as being equal", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var refSeries = series; + expect(series).toBe(refSeries); +}); +it("can use the equals() comparator to compare a series and a copy of the series as true", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var copyOfSeries = new _timeseries.default(series); + expect(_timeseries.default.equal(series, copyOfSeries)).toBeTruthy; +}); +it("can use the equals() comparator to compare a series and a value equivalent series as false", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var otherSeries = new _timeseries.default(TIMESERIES_TEST_DATA); + expect(_timeseries.default.equal(series, otherSeries)).toBeFalsy; +}); +it("can use the is() comparator to compare a series and a value equivalent series as true", () => { + var series = new _timeseries.default(TIMESERIES_TEST_DATA); + var otherSeries = new _timeseries.default(TIMESERIES_TEST_DATA); + expect(_timeseries.default.is(series, otherSeries)).toBeTruthy; +}); // +// Bisect +// + +it("can find the bisect starting from 0", () => { + var series = new _timeseries.default(BISECT_TEST_DATA); + expect(series.bisect((0, _moment.default)("2012-01-11 00:30", fmt).toDate())).toBe(0); + expect(series.bisect((0, _moment.default)("2012-01-11 03:00", fmt).toDate())).toBe(2); + expect(series.bisect((0, _moment.default)("2012-01-11 03:30", fmt).toDate())).toBe(2); + expect(series.bisect((0, _moment.default)("2012-01-11 08:00", fmt).toDate())).toBe(6); +}); +it("can find the bisect starting from an begin index", () => { + var series = new _timeseries.default(BISECT_TEST_DATA); + expect(series.bisect((0, _moment.default)("2012-01-11 03:00", fmt).toDate(), 2)).toBe(2); + expect(series.bisect((0, _moment.default)("2012-01-11 03:30", fmt).toDate(), 3)).toBe(2); + expect(series.bisect((0, _moment.default)("2012-01-11 03:30", fmt).toDate(), 4)).toBe(3); + var first = series.bisect((0, _moment.default)("2012-01-11 03:30", fmt).toDate()); + var second = series.bisect((0, _moment.default)("2012-01-11 04:30", fmt).toDate(), first); + expect(series.at(first).get()).toBe(44); + expect(series.at(second).get()).toBe(55); +}); // +// TimeRangeEvents +// + +it("can make a timeseries with the right timerange", () => { + var series = new _timeseries.default({ + name: "outages", + events: TIMERANGE_EVENT_LIST + }); + expect(series.range().toString()).toBe("[1425459600000,1429721400000]"); +}); +it("can make a timeseries that can be serialized to a string", () => { + var series = new _timeseries.default({ + name: "outages", + events: TIMERANGE_EVENT_LIST + }); + var expected = "{\"name\":\"outages\",\"utc\":true,\"columns\":[\"timerange\",\"title\",\"description\",\"completed\",\"external_ticket\",\"esnet_ticket\",\"organization\",\"type\"],\"points\":[[[1425459600000,1425477600000],\"ANL Scheduled Maintenance\",\"ANL will be switching border routers...\",true,\"\",\"ESNET-20150302-002\",\"ANL\",\"Planned\"],[[1429673400000,1429707600000],\"STAR-CR5 < 100 ge 06519 > ANL - Outage\",\"At 13:33 pacific circuit 06519 went down.\",true,\"\",\"ESNET-20150421-013\",\"Internet2 / Level 3\",\"Unplanned\"],[[1429673700000,1429721400000],\"STAR-CR5 < 100 ge 06519 > ANL - Outage\",\"The listed circuit was unavailable due to bent pins.\",true,\"3576:144\",\"ESNET-20150421-013\",\"Internet2 / Level 3\",\"Unplanned\"]]}"; + expect(series.toString()).toBe(expected); +}); +it("can make a timeseries that can be serialized to JSON and then used to construct a TimeSeries again", () => { + var series = new _timeseries.default({ + name: "outages", + events: TIMERANGE_EVENT_LIST + }); + var newSeries = new _timeseries.default(series.toJSON()); + expect(series.toString()).toBe(newSeries.toString()); +}); // +// IndexedEvents +// + +it("can serialize to a string", () => { + var series = new _timeseries.default(INDEXED_DATA); + var expectedString = "{\"index\":\"1d-625\",\"name\":\"traffic\",\"utc\":true,\"columns\":[\"time\",\"value\",\"status\"],\"points\":[[1400425947000,52,\"ok\"],[1400425948000,18,\"ok\"],[1400425949000,26,\"fail\"],[1400425950000,93,\"offline\"]]}"; + expect(series.toString()).toBe(expectedString); +}); +it("can return the time range of the series", () => { + var series = new _timeseries.default(INDEXED_DATA); + var expectedString = "[Sat, 18 Sep 1971 00:00:00 GMT, Sun, 19 Sep 1971 00:00:00 GMT]"; + expect(series.indexAsRange().toUTCString()).toBe(expectedString); +}); +it("can create an series with indexed data (in UTC time)", () => { + var series = new _timeseries.default(AVAILABILITY_DATA); + var event = series.at(2); + expect(event.timerangeAsUTCString()).toBe("[Mon, 01 Sep 2014 00:00:00 GMT, Tue, 30 Sep 2014 23:59:59 GMT]"); + expect(series.range().begin().getTime()).toBe(1404172800000); + expect(series.range().end().getTime()).toBe(1435708799999); +}); // +// Slicing a TimeSeries +// + +it("can create a slice of a series", () => { + var series = new _timeseries.default(AVAILABILITY_DATA); + var expectedLastTwo = "{\"name\":\"availability\",\"utc\":true,\"columns\":[\"index\",\"uptime\"],\"points\":[[\"2015-05\",\"92%\"],[\"2015-06\",\"100%\"]]}"; + var lastTwo = series.slice(-2); + expect(lastTwo.toString()).toBe(expectedLastTwo); + var expectedFirstThree = "{\"name\":\"availability\",\"utc\":true,\"columns\":[\"index\",\"uptime\"],\"points\":[[\"2014-07\",\"100%\"],[\"2014-08\",\"88%\"],[\"2014-09\",\"95%\"]]}"; + var firstThree = series.slice(0, 3); + expect(firstThree.toString()).toBe(expectedFirstThree); + var expectedAll = "{\"name\":\"availability\",\"utc\":true,\"columns\":[\"index\",\"uptime\"],\"points\":[[\"2014-07\",\"100%\"],[\"2014-08\",\"88%\"],[\"2014-09\",\"95%\"],[\"2014-10\",\"99%\"],[\"2014-11\",\"91%\"],[\"2014-12\",\"99%\"],[\"2015-01\",\"100%\"],[\"2015-02\",\"92%\"],[\"2015-03\",\"99%\"],[\"2015-04\",\"87%\"],[\"2015-05\",\"92%\"],[\"2015-06\",\"100%\"]]}"; + var sliceAll = series.slice(); + expect(sliceAll.toString()).toBe(expectedAll); +}); // +// Cropping a TimeSeries +// + +it("can create crop a series", () => { + var series = new _timeseries.default({ + name: 'exact timestamps', + columns: ['time', 'value'], + points: [[1504014065240, 1], [1504014065243, 2], [1504014065244, 3], [1504014065245, 4], [1504014065249, 5]] + }); + var ts1 = series.crop(new _timerange.default([1504014065243, 1504014065245])); + expect(ts1.size()).toBe(3); + var ts2 = series.crop(new _timerange.default([1504014065242, 1504014065245])); + expect(ts2.size()).toBe(3); + var ts3 = series.crop(new _timerange.default([1504014065243, 1504014065247])); + expect(ts3.size()).toBe(3); + var ts4 = series.crop(new _timerange.default([1504014065242, 1504014065247])); + expect(ts4.size()).toBe(3); +}); // +// Merging two TimeSeries together +// + +it("can merge two timeseries columns together using merge", () => { + var inTraffic = new _timeseries.default(TRAFFIC_DATA_IN); + var outTraffic = new _timeseries.default(TRAFFIC_DATA_OUT); + + var trafficSeries = _timeseries.default.timeSeriesListMerge({ + name: "traffic", + seriesList: [inTraffic, outTraffic] + }); + + expect(trafficSeries.at(2).get("in")).toBe(26); + expect(trafficSeries.at(2).get("out")).toBe(67); +}); +it("can append two timeseries together using merge", () => { + var tile1 = new _timeseries.default(PARTIAL_TRAFFIC_PART_A); + var tile2 = new _timeseries.default(PARTIAL_TRAFFIC_PART_B); + + var trafficSeries = _timeseries.default.timeSeriesListMerge({ + name: "traffic", + source: "router", + seriesList: [tile1, tile2] + }); + + expect(trafficSeries.size()).toBe(8); + expect(trafficSeries.at(0).get()).toBe(34); + expect(trafficSeries.at(1).get()).toBe(13); + expect(trafficSeries.at(2).get()).toBe(67); + expect(trafficSeries.at(3).get()).toBe(91); + expect(trafficSeries.at(4).get()).toBe(65); + expect(trafficSeries.at(5).get()).toBe(86); + expect(trafficSeries.at(6).get()).toBe(27); + expect(trafficSeries.at(7).get()).toBe(72); + expect(trafficSeries.name()).toBe("traffic"); + expect(trafficSeries.meta("source")).toBe("router"); +}); +it("can merge two series and preserve the correct time format", () => { + var inTraffic = new _timeseries.default(TRAFFIC_BNL_TO_NEWY); + var outTraffic = new _timeseries.default(TRAFFIC_NEWY_TO_BNL); + + var trafficSeries = _timeseries.default.timeSeriesListMerge({ + name: "traffic", + seriesList: [inTraffic, outTraffic] + }); + + expect(trafficSeries.at(0).timestampAsUTCString()).toBe("Mon, 31 Aug 2015 20:12:30 GMT"); + expect(trafficSeries.at(1).timestampAsUTCString()).toBe("Mon, 31 Aug 2015 20:13:00 GMT"); + expect(trafficSeries.at(2).timestampAsUTCString()).toBe("Mon, 31 Aug 2015 20:13:30 GMT"); +}); +it("can merge two irregular time series together", () => { + var A = { + name: "a", + columns: ["time", "valueA"], + points: [[1400425947000, 34], [1400425948000, 13], [1400425949000, 67], [1400425950000, 91]] + }; + var B = { + name: "b", + columns: ["time", "valueB"], + points: [[1400425951000, 65], [1400425952000, 86], [1400425953000, 27], [1400425954000, 72]] + }; + var tile1 = new _timeseries.default(A); + var tile2 = new _timeseries.default(B); + + var series = _timeseries.default.timeSeriesListMerge({ + name: "traffic", + seriesList: [tile1, tile2] + }); + + var expected = "{\"name\":\"traffic\",\"utc\":true,\"columns\":[\"time\",\"valueA\",\"valueB\"],\"points\":[[1400425947000,34,null],[1400425948000,13,null],[1400425949000,67,null],[1400425950000,91,null],[1400425951000,null,65],[1400425952000,null,86],[1400425953000,null,27],[1400425954000,null,72]]}"; + expect(series.toString()).toBe(expected); +}); // +// Summing two TimeSeries together +// + +it("can merge two timeseries into a new timeseries that is the sum", () => { + var part1 = new _timeseries.default(sumPart1); + var part2 = new _timeseries.default(sumPart2); + + var result = _timeseries.default.timeSeriesListReduce({ + name: "sum", + seriesList: [part1, part2], + reducer: (0, _functions.sum)(), + fieldSpec: ["in", "out"] + }); //10, 9, 8, 7 + + + expect(result.at(0).get("in")).toBe(10); + expect(result.at(1).get("in")).toBe(9); + expect(result.at(2).get("in")).toBe(8); + expect(result.at(3).get("in")).toBe(7); //7, 9, 11, 13 + + expect(result.at(0).get("out")).toBe(7); + expect(result.at(1).get("out")).toBe(9); + expect(result.at(2).get("out")).toBe(11); + expect(result.at(3).get("out")).toBe(13); +}); // +// Avergage two timeseries together +// + +it("can merge two timeseries into a new timeseries that is the sum", () => { + var part1 = new _timeseries.default({ + name: "part1", + columns: ["time", "in", "out"], + points: [[1400425951000, 1, 6], [1400425952000, 2, 7], [1400425953000, 3, 8], [1400425954000, 4, 9]] + }); + var part2 = new _timeseries.default({ + name: "part2", + columns: ["time", "in", "out"], + points: [[1400425951000, 9, 1], [1400425952000, 7, 2], [1400425953000, 5, 3], [1400425954000, 3, 4]] + }); + + var avgSeries = _timeseries.default.timeSeriesListReduce({ + name: "avg", + seriesList: [part1, part2], + fieldSpec: ["in", "out"], + reducer: (0, _functions.avg)() + }); + + expect(avgSeries.at(0).get("in")).toBe(5); + expect(avgSeries.at(1).get("in")).toBe(4.5); + expect(avgSeries.at(2).get("in")).toBe(4); + expect(avgSeries.at(3).get("in")).toBe(3.5); + expect(avgSeries.at(0).get("out")).toBe(3.5); + expect(avgSeries.at(1).get("out")).toBe(4.5); + expect(avgSeries.at(2).get("out")).toBe(5.5); + expect(avgSeries.at(3).get("out")).toBe(6.5); + + var avgSeries2 = _timeseries.default.timeSeriesListReduce({ + name: "avg", + seriesList: [part1, part2], + reducer: (0, _functions.avg)(), + fieldSpec: ["in", "out"] + }); + + expect(avgSeries2.at(0).get("in")).toBe(5); + expect(avgSeries2.at(1).get("in")).toBe(4.5); + expect(avgSeries2.at(2).get("in")).toBe(4); + expect(avgSeries2.at(3).get("in")).toBe(3.5); +}); // +// Collapse down columns in a TimeSeries +// + +it("can collapse a timeseries into a new timeseries that is the sum of two columns", () => { + var ts = new _timeseries.default(sumPart1); + var sums = ts.collapse({ + name: "sum", + fieldSpecList: ["in", "out"], + reducer: (0, _functions.sum)(), + append: false + }); + expect(sums.at(0).get("sum")).toBe(7); + expect(sums.at(1).get("sum")).toBe(9); + expect(sums.at(2).get("sum")).toBe(11); + expect(sums.at(3).get("sum")).toBe(13); +}); +it("can collapse a timeseries into a new timeseries that is the max of two columns", () => { + var timeseries = new _timeseries.default(sumPart2); + var c = timeseries.collapse({ + name: "max_in_out", + fieldSpecList: ["in", "out"], + reducer: (0, _functions.max)(), + append: true + }); + expect(c.at(0).get("max_in_out")).toBe(9); + expect(c.at(1).get("max_in_out")).toBe(7); + expect(c.at(2).get("max_in_out")).toBe(5); + expect(c.at(3).get("max_in_out")).toBe(4); +}); +it("can collapse a timeseries into a new timeseries that is the sum of two columns, then find the max", () => { + var ts = new _timeseries.default(sumPart1); + var sums = ts.collapse({ + name: "value", + fieldSpecList: ["in", "out"], + reducer: (0, _functions.sum)(), + append: false + }); + expect(sums.max()).toBe(13); +}); // +// Select specific columns in a TimeSeries +// + +it("can select a single column from a TimeSeries", () => { + var timeseries = new _timeseries.default(INTERFACE_TEST_DATA); + expect(timeseries.columns()).toEqual(["in", "out"]); + var ts = timeseries.select({ + fieldSpec: "in" + }); + expect(ts.columns()).toEqual(["in"]); + expect(ts.name()).toBe("star-cr5:to_anl_ip-a_v4"); +}); +it("can select multiple columns from a TimeSeries", () => { + var timeseries = new _timeseries.default(AVAILABILITY_DATA_2); + expect(timeseries.columns()).toEqual(["uptime", "notes", "outages"]); + var ts = timeseries.select({ + fieldSpec: ["uptime", "notes"] + }); + expect(ts.columns()).toEqual(["uptime", "notes"]); + expect(ts.name()).toBe("availability"); +}); // +// Remapping Events in a TimeSeries +// + +it("can use re-mapping to reverse the values in a TimeSeries", () => { + var timeseries = new _timeseries.default(INTERFACE_TEST_DATA); + expect(timeseries.columns()).toEqual(["in", "out"]); + var ts = timeseries.map(e => e.setData({ + in: e.get("out"), + out: e.get("in") + })); + expect(ts.at(0).get("in")).toBe(34); + expect(ts.at(0).get("out")).toBe(52); + expect(ts.size()).toBe(timeseries.size()); +}); // +// Rollups +// + +it("can generate 1 day fixed window averages over a TimeSeries", () => { + var timeseries = new _timeseries.default(sept2014Data); + var dailyAvg = timeseries.fixedWindowRollup({ + windowSize: "1d", + aggregation: { + value: { + value: (0, _functions.avg)() + } + } + }); + expect(dailyAvg.size()).toBe(5); + expect(dailyAvg.at(0).value()).toBe(46.875); + expect(dailyAvg.at(2).value()).toBe(54.083333333333336); + expect(dailyAvg.at(4).value()).toBe(51.85); +}); +it("can make Collections for each day in the TimeSeries", () => { + var timeseries = new _timeseries.default(sept2014Data); + var collections = timeseries.collectByFixedWindow({ + windowSize: "1d" + }); + expect(collections["1d-16314"].size()).toBe(24); + expect(collections["1d-16318"].size()).toBe(20); +}); +it("can correctly use atTime()", () => { + var t = new Date(1476803711641); + var collection = new _collection.default(); + collection = collection.addEvent(new _timeevent.default(t, 2)); // Test bisect to get element 0 + + var ts = new _timeseries.default({ + collection + }); + var bisect = ts.bisect(t); + expect(bisect).toEqual(0); + expect(ts.at(bisect).value()).toEqual(2); // Test atTime to get element 0 + + expect(ts.atTime(t).value()).toEqual(2); +}); + +class StatusEvent extends _timeevent.default { + constructor(arg1, arg2) { + super(arg1, arg2); + } + + static dataSchema() { + return { + type: "record", + fields: [{ + name: "value", + type: "long" + }, { + name: "status", + type: "string" + }] + }; + } + +} + +class StatusSeries extends _timeseries.default { + constructor(arg) { + super(arg); + } + + metaSchema() { + return [{ + name: "name", + type: "string" + }]; + } + + static event(key) { + return StatusEvent; + } + +} \ No newline at end of file diff --git a/lib/lib/base/functions.js b/lib/lib/base/functions.js index 3c1ce17..c379b8d 100644 --- a/lib/lib/base/functions.js +++ b/lib/lib/base/functions.js @@ -1,9 +1,10 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); -exports.filter = undefined; exports.keep = keep; exports.sum = sum; exports.avg = avg; @@ -16,25 +17,10 @@ exports.difference = difference; exports.median = median; exports.stdev = stdev; exports.percentile = percentile; +exports.filter = void 0; -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function isValid(v) { - return !(_underscore2.default.isUndefined(v) || _underscore2.default.isNaN(v) || _underscore2.default.isNull(v)); -} - -// -// Functions to process missing values out of a value list -// +var _underscore = _interopRequireDefault(require("underscore")); -/** - * Default filter, so default it does nothing at all to the values passed to it - * e.g. max(1, 2, null, 4) would be max(1, 2, null, 4) - */ /** * Copyright (c) 2015-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -44,56 +30,58 @@ function isValid(v) { * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ +function isValid(v) { + return !(_underscore.default.isUndefined(v) || _underscore.default.isNaN(v) || _underscore.default.isNull(v)); +} // +// Functions to process missing values out of a value list +// -var keepMissing = function keepMissing(values) { - return values; -}; +/** + * Default filter, so default it does nothing at all to the values passed to it + * e.g. max(1, 2, null, 4) would be max(1, 2, null, 4) + */ + +var keepMissing = values => values; /** * Removes missing values (null, undefined or NaN) from the list of * values passed into the aggregation function * e.g. avg(1, 2, null, 4) would be avg(1, 2, 4) */ -var ignoreMissing = function ignoreMissing(values) { - return values.filter(isValid); -}; + +var ignoreMissing = values => values.filter(isValid); /** * Replaces missing values (null, undefined or NaN) by 0. * e.g. avg(1, 2, null, 4) would be avg(1, 2, 0, 4) */ -var zeroMissing = function zeroMissing(values) { - return values.map(function (v) { - return isValid(v) ? v : 0; - }); -}; + +var zeroMissing = values => values.map(v => isValid(v) ? v : 0); /** * If there are missing values in the list of values being * aggregated then the result of the aggregation should be * also undefined or null. * e.g. avg(2, 4, null, 7) would be null. */ -var propagateMissing = function propagateMissing(values) { - return ignoreMissing(values).length === values.length ? values : null; -}; + +var propagateMissing = values => ignoreMissing(values).length === values.length ? values : null; /** * If there are no values in the list, the result of the aggregation * is null */ -var noneIfEmpty = function noneIfEmpty(values) { - return values.length === 0 ? null : values; -}; -var filter = exports.filter = { - keepMissing: keepMissing, - ignoreMissing: ignoreMissing, - zeroMissing: zeroMissing, - propagateMissing: propagateMissing, - noneIfEmpty: noneIfEmpty -}; +var noneIfEmpty = values => values.length === 0 ? null : values; + +var filter = { + keepMissing, + ignoreMissing, + zeroMissing, + propagateMissing, + noneIfEmpty +}; /** * Like first() except it will return null if not all the values are * the same. This can be used to transfer a value when doing aggregation. @@ -101,22 +89,23 @@ var filter = exports.filter = { * you want to results to include the type. So you would 'keep' the type * and 'avg' the value. */ + +exports.filter = filter; + function keep() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var result = first()(cleanValues); - cleanValues.forEach(function (v) { - if (v !== result) { - return null; - } - }); - return result; - }; + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + var result = first()(cleanValues); + cleanValues.forEach(v => { + if (v !== result) { + return null; + } + }); + return result; + }; } - /** * Returns a sum function. * @@ -127,18 +116,16 @@ function keep() { * be null if the values contain a missing value * `zeroMissing` - will replace missing values with a zero */ + + function sum() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - return _underscore2.default.reduce(cleanValues, function (a, b) { - return a + b; - }, 0); - }; + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + return _underscore.default.reduce(cleanValues, (a, b) => a + b, 0); + }; } - /** * Returns a avg function. * @@ -149,19 +136,21 @@ function sum() { * be null if the values contain a missing value * `zeroMissing` - will replace missing values with a zero */ + + function avg() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var sum = _underscore2.default.reduce(cleanValues, function (a, b) { - return a + b; - }, 0); - return sum / cleanValues.length; - }; -} + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + + var sum = _underscore.default.reduce(cleanValues, (a, b) => { + return a + b; + }, 0); + return sum / cleanValues.length; + }; +} /** * Return a max function. * @@ -172,19 +161,21 @@ function avg() { * be null if the values contain a missing value * `zeroMissing` - will replace missing values with a zero */ + + function max() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var max = _underscore2.default.max(cleanValues); - if (_underscore2.default.isFinite(max)) { - return max; - } - }; -} + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + + var max = _underscore.default.max(cleanValues); + if (_underscore.default.isFinite(max)) { + return max; + } + }; +} /** * Return a min function. * @@ -195,19 +186,21 @@ function max() { * be null if the values contain a missing value * `zeroMissing` - will replace missing values with a zero */ + + function min() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var min = _underscore2.default.min(cleanValues); - if (_underscore2.default.isFinite(min)) { - return min; - } - }; -} + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + var min = _underscore.default.min(cleanValues); + + if (_underscore.default.isFinite(min)) { + return min; + } + }; +} /** * Returns a count() function. * @@ -217,16 +210,16 @@ function min() { * `propergateMissing` - which will cause the count itself to * be null if the values contain a missing value */ -function count() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - return cleanValues.length; - }; -} +function count() { + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + return cleanValues.length; + }; +} /** * Returns a first() function, i.e. a function that returns the first * value in the supplied values list. @@ -238,16 +231,16 @@ function count() { * `keepMissing` - to return the first value, regardless of if * it is a missing value or not. */ -function first() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - return cleanValues.length ? cleanValues[0] : undefined; - }; -} +function first() { + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + return cleanValues.length ? cleanValues[0] : undefined; + }; +} /** * Returns a last() function, i.e. a function that returns the list * value in the supplied values list. @@ -259,16 +252,16 @@ function first() { * `keepMissing` - to return the last value, regardless of if * it is a missing value or not. */ -function last() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - return cleanValues.length ? cleanValues[cleanValues.length - 1] : undefined; - }; -} +function last() { + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + return cleanValues.length ? cleanValues[cleanValues.length - 1] : undefined; + }; +} /** * Returns a difference() function, i.e. a function that returns * the difference between the min and max values. @@ -281,49 +274,46 @@ function last() { * be null if the values contain a missing value * `zeroMissing` - will replace missing values with a zero */ -function difference() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - return _underscore2.default.max(cleanValues) - _underscore2.default.min(cleanValues); - }; + +function difference() { + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + return _underscore.default.max(cleanValues) - _underscore.default.min(cleanValues); + }; } function median() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var sorted = cleanValues.sort(); - var i = Math.floor(sorted.length / 2); - if (sorted.length % 2 === 0) { - var a = sorted[i]; - var b = sorted[i - 1]; - return (a + b) / 2; - } else { - return sorted[i]; - } - }; + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + var sorted = cleanValues.sort(); + var i = Math.floor(sorted.length / 2); + + if (sorted.length % 2 === 0) { + var a = sorted[i]; + var b = sorted[i - 1]; + return (a + b) / 2; + } else { + return sorted[i]; + } + }; } function stdev() { - var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - var sums = 0; - var mean = avg(clean)(cleanValues); - cleanValues.forEach(function (v) { - return sums += Math.pow(v - mean, 2); - }); - return Math.sqrt(sums / values.length); - }; + var clean = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + var sums = 0; + var mean = avg(clean)(cleanValues); + cleanValues.forEach(v => sums += Math.pow(v - mean, 2)); + return Math.sqrt(sums / values.length); + }; } - /** * Returns a percentile function within the a values list. * @@ -345,53 +335,51 @@ function stdev() { * with a zero * @return {number} The percentile */ + + function percentile(q) { - var interp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "linear"; - var clean = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : filter.ignoreMissing; - - return function (values) { - var cleanValues = clean(values); - if (!cleanValues) return null; - - var v = void 0; - - var sorted = cleanValues.slice().sort(function (a, b) { - return a - b; - }); - var size = sorted.length; - - if (q < 0 || q > 100) { - throw new Error("Percentile q must be between 0 and 100"); - } - - var i = q / 100; - var index = Math.floor((sorted.length - 1) * i); - - if (size === 1 || q === 0) { - return sorted[0]; - } - - if (q === 100) { - return sorted[size - 1]; - } - - if (index < size - 1) { - var fraction = (size - 1) * i - index; - var v0 = sorted[index]; - var v1 = sorted[index + 1]; - if (interp === "lower" || fraction === 0) { - v = v0; - } else if (interp === "linear") { - v = v0 + (v1 - v0) * fraction; - } else if (interp === "higher") { - v = v1; - } else if (interp === "nearest") { - v = fraction < 0.5 ? v0 : v1; - } else if (interp === "midpoint") { - v = (v0 + v1) / 2; - } - } - - return v; - }; + var interp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "linear"; + var clean = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : filter.ignoreMissing; + return values => { + var cleanValues = clean(values); + if (!cleanValues) return null; + var v; + var sorted = cleanValues.slice().sort((a, b) => a - b); + var size = sorted.length; + + if (q < 0 || q > 100) { + throw new Error("Percentile q must be between 0 and 100"); + } + + var i = q / 100; + var index = Math.floor((sorted.length - 1) * i); + + if (size === 1 || q === 0) { + return sorted[0]; + } + + if (q === 100) { + return sorted[size - 1]; + } + + if (index < size - 1) { + var fraction = (size - 1) * i - index; + var v0 = sorted[index]; + var v1 = sorted[index + 1]; + + if (interp === "lower" || fraction === 0) { + v = v0; + } else if (interp === "linear") { + v = v0 + (v1 - v0) * fraction; + } else if (interp === "higher") { + v = v1; + } else if (interp === "nearest") { + v = fraction < 0.5 ? v0 : v1; + } else if (interp === "midpoint") { + v = (v0 + v1) / 2; + } + } + + return v; + }; } \ No newline at end of file diff --git a/lib/lib/base/observable.js b/lib/lib/base/observable.js index 082bf5c..0c29b46 100644 --- a/lib/lib/base/observable.js +++ b/lib/lib/base/observable.js @@ -1,22 +1,23 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); +var _underscore = _interopRequireDefault(require("underscore")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2016, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * Base class for objects in the processing chain which @@ -24,55 +25,41 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * interface to define the relationships and to emit events * to the interested observers. */ -var Observable = function () { - function Observable() { - (0, _classCallCheck3.default)(this, Observable); +class Observable { + constructor() { + this._id = _underscore.default.uniqueId("id-"); + this._observers = []; + } + + emit(event) { + this._observers.forEach(observer => { + observer.addEvent(event); + }); + } + + flush() { + this._observers.forEach(observer => { + observer.flush(); + }); + } + + addObserver(observer) { + var shouldAdd = true; + + this._observers.forEach(o => { + if (o === observer) { + shouldAdd = false; + } + }); - this._id = _underscore2.default.uniqueId("id-"); - this._observers = []; - } + if (shouldAdd) this._observers.push(observer); + } - (0, _createClass3.default)(Observable, [{ - key: "emit", - value: function emit(event) { - this._observers.forEach(function (observer) { - observer.addEvent(event); - }); - } - }, { - key: "flush", - value: function flush() { - this._observers.forEach(function (observer) { - observer.flush(); - }); - } - }, { - key: "addObserver", - value: function addObserver(observer) { - var shouldAdd = true; - this._observers.forEach(function (o) { - if (o === observer) { - shouldAdd = false; - } - }); + hasObservers() { + return this._observers.length > 0; + } - if (shouldAdd) this._observers.push(observer); - } - }, { - key: "hasObservers", - value: function hasObservers() { - return this._observers.length > 0; - } - }]); - return Observable; -}(); /** - * Copyright (c) 2016, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ +} -exports.default = Observable; \ No newline at end of file +var _default = Observable; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/base/util.js b/lib/lib/base/util.js index f4ad1dc..07e44c6 100644 --- a/lib/lib/base/util.js +++ b/lib/lib/base/util.js @@ -1,480 +1,341 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray"); +var _underscore = _interopRequireDefault(require("underscore")); -var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); +var _immutable = _interopRequireDefault(require("immutable")); -var _regenerator = require("babel-runtime/regenerator"); +var _moment = _interopRequireDefault(require("moment")); -var _regenerator2 = _interopRequireDefault(_regenerator); +var _timerange = _interopRequireDefault(require("../timerange")); -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _index = _interopRequireDefault(require("../index")); -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); +/** + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +var units = { + s: { + label: "seconds", + length: 1 + }, + m: { + label: "minutes", + length: 60 + }, + h: { + label: "hours", + length: 60 * 60 + }, + d: { + label: "days", + length: 60 * 60 * 24 + } +}; +/** + * This function will take an index, which may be of two forms: + * 2015-07-14 (day) + * 2015-07 (month) + * 2015 (year) + * or: + * 1d-278 (range, in n x days, hours, minutes or seconds) + * + * and return a TimeRange for that time. The TimeRange may be considered to be + * local time or UTC time, depending on the utc flag passed in. + */ -var _keys = require("babel-runtime/core-js/object/keys"); +var _default = { + /** + * Single zero left padding, for days and months. + */ + leftPad(value) { + return "".concat(value < 10 ? "0" : "").concat(value); + }, + + /** + * Returns a duration in milliseconds given a window duration string. + * For example "30s" (30 seconds) should return 30000ms. Accepts + * seconds (e.g. "30s"), minutes (e.g. "5m"), hours (e.g. "6h") and + * days (e.g. "30d") + */ + windowDuration(w) { + // window should be two parts, a number and a letter if it's a + // range based index, e.g "1h". + var regex = /([0-9]+)([smhd])/; + var parts = regex.exec(w); + + if (parts && parts.length >= 3) { + var num = parseInt(parts[1], 10); + var unit = parts[2]; + return num * units[unit].length * 1000; + } + }, -var _keys2 = _interopRequireDefault(_keys); + windowPositionFromDate(w, date) { + var duration = this.windowDuration(w); -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); + var dd = _moment.default.utc(date).valueOf(); -var _getIterator3 = _interopRequireDefault(_getIterator2); + return parseInt(dd /= duration, 10); + }, -var _underscore = require("underscore"); + rangeFromIndexString(index, utc) { + var isUTC = !_underscore.default.isUndefined(utc) ? utc : true; + var parts = index.split("-"); + var beginTime; + var endTime; -var _underscore2 = _interopRequireDefault(_underscore); + switch (parts.length) { + case 3: + // A day, month and year e.g. 2014-10-24 + if (!_underscore.default.isNaN(parseInt(parts[0], 10)) && !_underscore.default.isNaN(parseInt(parts[1], 10)) && !_underscore.default.isNaN(parseInt(parts[2], 10))) { + var _year = parseInt(parts[0], 10); -var _immutable = require("immutable"); + var month = parseInt(parts[1], 10); + var day = parseInt(parts[2], 10); + beginTime = isUTC ? _moment.default.utc([_year, month - 1, day]) : (0, _moment.default)([_year, month - 1, day]); + endTime = isUTC ? _moment.default.utc(beginTime).endOf("day") : (0, _moment.default)(beginTime).endOf("day"); + } -var _immutable2 = _interopRequireDefault(_immutable); + break; -var _moment = require("moment"); + case 2: + // Size should be two parts, a number and a letter if it's a + // range based index, e.g 1h-23478 + var rangeRegex = /([0-9]+)([smhd])/; + var sizeParts = rangeRegex.exec(parts[0]); -var _moment2 = _interopRequireDefault(_moment); + if (sizeParts && sizeParts.length >= 3 && !_underscore.default.isNaN(parseInt(parts[1], 10))) { + var pos = parseInt(parts[1], 10); + var num = parseInt(sizeParts[1], 10); + var unit = sizeParts[2]; + var length = num * units[unit].length * 1000; + beginTime = isUTC ? _moment.default.utc(pos * length) : (0, _moment.default)(pos * length); + endTime = isUTC ? _moment.default.utc((pos + 1) * length) : (0, _moment.default)((pos + 1) * length); // A month and year e.g 2015-09 + } else if (!_underscore.default.isNaN(parseInt(parts[0], 10)) && !_underscore.default.isNaN(parseInt(parts[1], 10))) { + var _year2 = parseInt(parts[0], 10); -var _timerange = require("../timerange"); + var _month = parseInt(parts[1], 10); -var _timerange2 = _interopRequireDefault(_timerange); + beginTime = isUTC ? _moment.default.utc([_year2, _month - 1]) : (0, _moment.default)([_year2, _month - 1]); + endTime = isUTC ? _moment.default.utc(beginTime).endOf("month") : (0, _moment.default)(beginTime).endOf("month"); + } -var _index = require("../index"); + break; + // A year e.g. 2015 -var _index2 = _interopRequireDefault(_index); + case 1: + var year = parts[0]; + beginTime = isUTC ? _moment.default.utc([year]) : (0, _moment.default)([year]); + endTime = isUTC ? _moment.default.utc(beginTime).endOf("year") : (0, _moment.default)(beginTime).endOf("year"); + break; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + if (beginTime && beginTime.isValid() && endTime && endTime.isValid()) { + return new _timerange.default(beginTime, endTime); + } else { + return undefined; + } + }, + + /** + * Returns a nice string for the index. If the index is of the form + * 1d-2345 then just that string is returned (there's not nice way to put + * it), but if it represents a day, month, or year (e.g. 2015-07) then a + * nice string like "July" will be returned. It's also possible to pass in + * the format of the reply for these types of strings. See moment's format + * naming conventions: + * http://momentjs.com/docs/#/displaying/format/ + */ + niceIndexString(index, format) { + var t; + var parts = index.split("-"); + + switch (parts.length) { + case 3: + if (!_underscore.default.isNaN(parseInt(parts[0], 10)) && !_underscore.default.isNaN(parseInt(parts[1], 10)) && !_underscore.default.isNaN(parseInt(parts[2], 10))) { + var _year3 = parseInt(parts[0], 10); + + var month = parseInt(parts[1], 10); + var day = parseInt(parts[2], 10); + t = _moment.default.utc([_year3, month - 1, day]); + + if (format) { + return t.format(format); + } else { + return t.format("MMMM Do YYYY"); + } + } -var units = { - s: { label: "seconds", length: 1 }, - m: { label: "minutes", length: 60 }, - h: { label: "hours", length: 60 * 60 }, - d: { label: "days", length: 60 * 60 * 24 } -}; + break; -/** - * This function will take an index, which may be of two forms: - * 2015-07-14 (day) - * 2015-07 (month) - * 2015 (year) - * or: - * 1d-278 (range, in n x days, hours, minutes or seconds) - * - * and return a TimeRange for that time. The TimeRange may be considered to be - * local time or UTC time, depending on the utc flag passed in. - */ -/** - * Copyright (c) 2015-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + case 2: + var rangeRegex = /([0-9]+)([smhd])/; + var sizeParts = rangeRegex.exec(parts[0]); -exports.default = { - /** - * Single zero left padding, for days and months. - */ - leftPad: function leftPad(value) { - return "" + (value < 10 ? "0" : "") + value; - }, - - /** - * Returns a duration in milliseconds given a window duration string. - * For example "30s" (30 seconds) should return 30000ms. Accepts - * seconds (e.g. "30s"), minutes (e.g. "5m"), hours (e.g. "6h") and - * days (e.g. "30d") - */ - windowDuration: function windowDuration(w) { - // window should be two parts, a number and a letter if it's a - // range based index, e.g "1h". - var regex = /([0-9]+)([smhd])/; - var parts = regex.exec(w); - if (parts && parts.length >= 3) { - var num = parseInt(parts[1], 10); - var unit = parts[2]; - return num * units[unit].length * 1000; - } - }, - windowPositionFromDate: function windowPositionFromDate(w, date) { - var duration = this.windowDuration(w); - var dd = _moment2.default.utc(date).valueOf(); - return parseInt(dd /= duration, 10); - }, - rangeFromIndexString: function rangeFromIndexString(index, utc) { - var isUTC = !_underscore2.default.isUndefined(utc) ? utc : true; - var parts = index.split("-"); - - var beginTime = void 0; - var endTime = void 0; - - switch (parts.length) { - case 3: - // A day, month and year e.g. 2014-10-24 - if (!_underscore2.default.isNaN(parseInt(parts[0], 10)) && !_underscore2.default.isNaN(parseInt(parts[1], 10)) && !_underscore2.default.isNaN(parseInt(parts[2], 10))) { - var _year = parseInt(parts[0], 10); - var month = parseInt(parts[1], 10); - var day = parseInt(parts[2], 10); - beginTime = isUTC ? _moment2.default.utc([_year, month - 1, day]) : (0, _moment2.default)([_year, month - 1, day]); - endTime = isUTC ? _moment2.default.utc(beginTime).endOf("day") : (0, _moment2.default)(beginTime).endOf("day"); - } - break; - - case 2: - // Size should be two parts, a number and a letter if it's a - // range based index, e.g 1h-23478 - var rangeRegex = /([0-9]+)([smhd])/; - var sizeParts = rangeRegex.exec(parts[0]); - if (sizeParts && sizeParts.length >= 3 && !_underscore2.default.isNaN(parseInt(parts[1], 10))) { - var pos = parseInt(parts[1], 10); - var num = parseInt(sizeParts[1], 10); - var unit = sizeParts[2]; - var length = num * units[unit].length * 1000; - - beginTime = isUTC ? _moment2.default.utc(pos * length) : (0, _moment2.default)(pos * length); - endTime = isUTC ? _moment2.default.utc((pos + 1) * length) : (0, _moment2.default)((pos + 1) * length); - // A month and year e.g 2015-09 - } else if (!_underscore2.default.isNaN(parseInt(parts[0], 10)) && !_underscore2.default.isNaN(parseInt(parts[1], 10))) { - var _year2 = parseInt(parts[0], 10); - var _month = parseInt(parts[1], 10); - beginTime = isUTC ? _moment2.default.utc([_year2, _month - 1]) : (0, _moment2.default)([_year2, _month - 1]); - endTime = isUTC ? _moment2.default.utc(beginTime).endOf("month") : (0, _moment2.default)(beginTime).endOf("month"); - } - break; - - // A year e.g. 2015 - case 1: - var year = parts[0]; - beginTime = isUTC ? _moment2.default.utc([year]) : (0, _moment2.default)([year]); - endTime = isUTC ? _moment2.default.utc(beginTime).endOf("year") : (0, _moment2.default)(beginTime).endOf("year"); - break; - } + if (sizeParts && sizeParts.length >= 3 && !_underscore.default.isNaN(parseInt(parts[1], 10))) { + return index; + } else if (!_underscore.default.isNaN(parseInt(parts[0], 10)) && !_underscore.default.isNaN(parseInt(parts[1], 10))) { + var _year4 = parseInt(parts[0], 10); - if (beginTime && beginTime.isValid() && endTime && endTime.isValid()) { - return new _timerange2.default(beginTime, endTime); - } else { - return undefined; - } - }, - - /** - * Returns a nice string for the index. If the index is of the form - * 1d-2345 then just that string is returned (there's not nice way to put - * it), but if it represents a day, month, or year (e.g. 2015-07) then a - * nice string like "July" will be returned. It's also possible to pass in - * the format of the reply for these types of strings. See moment's format - * naming conventions: - * http://momentjs.com/docs/#/displaying/format/ - */ - niceIndexString: function niceIndexString(index, format) { - var t = void 0; - - var parts = index.split("-"); - switch (parts.length) { - case 3: - if (!_underscore2.default.isNaN(parseInt(parts[0], 10)) && !_underscore2.default.isNaN(parseInt(parts[1], 10)) && !_underscore2.default.isNaN(parseInt(parts[2], 10))) { - var _year3 = parseInt(parts[0], 10); - var month = parseInt(parts[1], 10); - var day = parseInt(parts[2], 10); - t = _moment2.default.utc([_year3, month - 1, day]); - if (format) { - return t.format(format); - } else { - return t.format("MMMM Do YYYY"); - } - } - break; - - case 2: - var rangeRegex = /([0-9]+)([smhd])/; - var sizeParts = rangeRegex.exec(parts[0]); - if (sizeParts && sizeParts.length >= 3 && !_underscore2.default.isNaN(parseInt(parts[1], 10))) { - return index; - } else if (!_underscore2.default.isNaN(parseInt(parts[0], 10)) && !_underscore2.default.isNaN(parseInt(parts[1], 10))) { - var _year4 = parseInt(parts[0], 10); - var _month2 = parseInt(parts[1], 10); - t = _moment2.default.utc([_year4, _month2 - 1]); - if (format) { - return t.format(format); - } else { - return t.format("MMMM"); - } - } - break; - - case 1: - var year = parts[0]; - t = _moment2.default.utc([year]); - if (format) { - return t.format(format); - } else { - return t.format("YYYY"); - } - break; - } - return index; - }, - isMissing: function isMissing(val) { - return _underscore2.default.isNull(val) || _underscore2.default.isUndefined(val) || _underscore2.default.isNaN(val); - }, - - /** - * Split the field spec if it is not already a list. - * - * Also, allow for deep fields to be passed in as a tuple because - * it will need to be used as a dict key in some of the processor - * Options. - * - * This is deployed in Event.get() to process anything passed - * to it, but this should also be deployed "upstream" to avoid - * having that split() done over and over in a loop. - */ - fieldPathToArray: function fieldPathToArray(fieldSpec) { - if (_underscore2.default.isArray(fieldSpec) || _underscore2.default.isFunction(fieldSpec)) { - return fieldSpec; - } else if (_underscore2.default.isString(fieldSpec)) { - return fieldSpec.split("."); - } else if (_underscore2.default.isUndefined(fieldSpec)) { - return ["value"]; - } - }, - - /** - * Generate a list of all possible field paths in an object. This is - * for to determine all deep paths when none is given. - */ - generatePaths: function generatePaths(newData) { - var _marked = [recurse].map(_regenerator2.default.mark); - - var paths = []; - - function recurse(data) { - var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, key, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, path; - - return _regenerator2.default.wrap(function recurse$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!_underscore2.default.isObject(data)) { - _context.next = 53; - break; - } - - _iteratorNormalCompletion = true; - _didIteratorError = false; - _iteratorError = undefined; - _context.prev = 4; - _iterator = (0, _getIterator3.default)((0, _keys2.default)(data)); - - case 6: - if (_iteratorNormalCompletion = (_step = _iterator.next()).done) { - _context.next = 37; - break; - } - - key = _step.value; - _iteratorNormalCompletion2 = true; - _didIteratorError2 = false; - _iteratorError2 = undefined; - _context.prev = 11; - _iterator2 = (0, _getIterator3.default)(recurse(data[key], [].concat((0, _toConsumableArray3.default)(keys), [key]))); - - case 13: - if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) { - _context.next = 20; - break; - } - - path = _step2.value; - _context.next = 17; - return path; - - case 17: - _iteratorNormalCompletion2 = true; - _context.next = 13; - break; - - case 20: - _context.next = 26; - break; - - case 22: - _context.prev = 22; - _context.t0 = _context["catch"](11); - _didIteratorError2 = true; - _iteratorError2 = _context.t0; - - case 26: - _context.prev = 26; - _context.prev = 27; - - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - - case 29: - _context.prev = 29; - - if (!_didIteratorError2) { - _context.next = 32; - break; - } - - throw _iteratorError2; - - case 32: - return _context.finish(29); - - case 33: - return _context.finish(26); - - case 34: - _iteratorNormalCompletion = true; - _context.next = 6; - break; - - case 37: - _context.next = 43; - break; - - case 39: - _context.prev = 39; - _context.t1 = _context["catch"](4); - _didIteratorError = true; - _iteratorError = _context.t1; - - case 43: - _context.prev = 43; - _context.prev = 44; - - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - - case 46: - _context.prev = 46; - - if (!_didIteratorError) { - _context.next = 49; - break; - } - - throw _iteratorError; - - case 49: - return _context.finish(46); - - case 50: - return _context.finish(43); - - case 51: - _context.next = 55; - break; - - case 53: - _context.next = 55; - return keys; - - case 55: - case "end": - return _context.stop(); - } - } - }, _marked[0], this, [[4, 39, 43, 51], [11, 22, 26, 34], [27,, 29, 33], [44,, 46, 50]]); - } + var _month2 = parseInt(parts[1], 10); - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = (0, _getIterator3.default)(recurse(newData)), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var key = _step3.value; - - paths.push(key); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } + t = _moment.default.utc([_year4, _month2 - 1]); - return paths; - }, - - // - // Functions to turn constructor args - // into other stuff - // - timestampFromArg: function timestampFromArg(arg) { - if (_underscore2.default.isNumber(arg)) { - return new Date(arg); - } else if (_underscore2.default.isString(arg)) { - return new Date(+arg); - } else if (_underscore2.default.isDate(arg)) { - return new Date(arg.getTime()); - } else if (_moment2.default.isMoment(arg)) { - return new Date(arg.valueOf()); - } else { - throw new Error("Unable to get timestamp from " + arg + ". Should be a number, date, or moment."); - } - }, - timeRangeFromArg: function timeRangeFromArg(arg) { - if (arg instanceof _timerange2.default) { - return arg; - } else if (_underscore2.default.isString(arg)) { - var _arg$split = arg.split(","), - _arg$split2 = (0, _slicedToArray3.default)(_arg$split, 2), - begin = _arg$split2[0], - end = _arg$split2[1]; - - return new _timerange2.default([+begin, +end]); - } else if (_underscore2.default.isArray(arg) && arg.length === 2) { - return new _timerange2.default(arg); - } else { - throw new Error("Unable to parse timerange. Should be a TimeRange. Got " + arg + "."); + if (format) { + return t.format(format); + } else { + return t.format("MMMM"); + } } - }, - indexFromArgs: function indexFromArgs(arg1) { - var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - if (_underscore2.default.isString(arg1)) { - return new _index2.default(arg1, arg2); - } else if (arg1 instanceof _index2.default) { - return arg1; + + break; + + case 1: + var year = parts[0]; + t = _moment.default.utc([year]); + + if (format) { + return t.format(format); } else { - throw new Error("Unable to get index from " + arg1 + ". Should be a string or Index."); + return t.format("YYYY"); } - }, - dataFromArg: function dataFromArg(arg) { - var data = void 0; - if (_underscore2.default.isObject(arg)) { - // Deeply convert the data to Immutable Map - data = new _immutable2.default.fromJS(arg); - } else if (data instanceof _immutable2.default.Map) { - // Copy reference to the data - data = arg; - } else if (_underscore2.default.isNumber(arg) || _underscore2.default.isString(arg)) { - // Just add it to the value key of a new Map - // e.g. new Event(t, 25); -> t, {value: 25} - data = new _immutable2.default.Map({ value: arg }); - } else { - throw new Error("Unable to interpret event data from " + arg + "."); + + break; + } + + return index; + }, + + isMissing(val) { + return _underscore.default.isNull(val) || _underscore.default.isUndefined(val) || _underscore.default.isNaN(val); + }, + + /** + * Split the field spec if it is not already a list. + * + * Also, allow for deep fields to be passed in as a tuple because + * it will need to be used as a dict key in some of the processor + * Options. + * + * This is deployed in Event.get() to process anything passed + * to it, but this should also be deployed "upstream" to avoid + * having that split() done over and over in a loop. + */ + fieldPathToArray(fieldSpec) { + if (_underscore.default.isArray(fieldSpec) || _underscore.default.isFunction(fieldSpec)) { + return fieldSpec; + } else if (_underscore.default.isString(fieldSpec)) { + return fieldSpec.split("."); + } else if (_underscore.default.isUndefined(fieldSpec)) { + return ["value"]; + } + }, + + /** + * Generate a list of all possible field paths in an object. This is + * for to determine all deep paths when none is given. + */ + generatePaths(newData) { + var paths = []; + + function* recurse(data) { + var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + if (_underscore.default.isObject(data)) { + for (var key of Object.keys(data)) { + for (var path of recurse(data[key], [...keys, key])) { + yield path; + } } - return data; + } else { + yield keys; + } + } + + for (var key of recurse(newData)) { + paths.push(key); } -}; \ No newline at end of file + + return paths; + }, + + // + // Functions to turn constructor args + // into other stuff + // + timestampFromArg(arg) { + if (_underscore.default.isNumber(arg)) { + return new Date(arg); + } else if (_underscore.default.isString(arg)) { + return new Date(+arg); + } else if (_underscore.default.isDate(arg)) { + return new Date(arg.getTime()); + } else if (_moment.default.isMoment(arg)) { + return new Date(arg.valueOf()); + } else { + throw new Error("Unable to get timestamp from ".concat(arg, ". Should be a number, date, or moment.")); + } + }, + + timeRangeFromArg(arg) { + if (arg instanceof _timerange.default) { + return arg; + } else if (_underscore.default.isString(arg)) { + var [begin, end] = arg.split(","); + return new _timerange.default([+begin, +end]); + } else if (_underscore.default.isArray(arg) && arg.length === 2) { + return new _timerange.default(arg); + } else { + throw new Error("Unable to parse timerange. Should be a TimeRange. Got ".concat(arg, ".")); + } + }, + + indexFromArgs(arg1) { + var arg2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (_underscore.default.isString(arg1)) { + return new _index.default(arg1, arg2); + } else if (arg1 instanceof _index.default) { + return arg1; + } else { + throw new Error("Unable to get index from ".concat(arg1, ". Should be a string or Index.")); + } + }, + + dataFromArg(arg) { + var data; + + if (_underscore.default.isObject(arg)) { + // Deeply convert the data to Immutable Map + data = new _immutable.default.fromJS(arg); + } else if (data instanceof _immutable.default.Map) { + // Copy reference to the data + data = arg; + } else if (_underscore.default.isNumber(arg) || _underscore.default.isString(arg)) { + // Just add it to the value key of a new Map + // e.g. new Event(t, 25); -> t, {value: 25} + data = new _immutable.default.Map({ + value: arg + }); + } else { + throw new Error("Unable to interpret event data from ".concat(arg, ".")); + } + + return data; + } + +}; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/collection.js b/lib/lib/collection.js index aa24e38..70a9d68 100644 --- a/lib/lib/collection.js +++ b/lib/lib/collection.js @@ -1,68 +1,35 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _regenerator = require("babel-runtime/regenerator"); - -var _regenerator2 = _interopRequireDefault(_regenerator); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); +var _underscore = _interopRequireDefault(require("underscore")); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _immutable = _interopRequireDefault(require("immutable")); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _bounded = _interopRequireDefault(require("./io/bounded")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _event = _interopRequireDefault(require("./event")); -var _inherits3 = _interopRequireDefault(_inherits2); +var _timerange = _interopRequireDefault(require("./timerange")); -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _bounded = require("./io/bounded"); - -var _bounded2 = _interopRequireDefault(_bounded); - -var _event = require("./event"); - -var _event2 = _interopRequireDefault(_event); - -var _timerange = require("./timerange"); - -var _timerange2 = _interopRequireDefault(_timerange); - -var _util = require("./base/util"); - -var _util2 = _interopRequireDefault(_util); +var _util = _interopRequireDefault(require("./base/util")); var _functions = require("./base/functions"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * A collection is an abstraction for a bag of Events. @@ -85,1085 +52,798 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * in Pipeline event processing. They are an instance of a BoundedIn, so * they can be used as a pipeline source. */ -var Collection = function (_Bounded) { - (0, _inherits3.default)(Collection, _Bounded); - - /** - * Construct a new Collection. - * - * @param {Collection|array|Immutable.List} arg1 Initial data for - * the collection. If arg1 is another Collection, this will act as - * a copy constructor. - * @param {Boolean} [arg2] When using a the copy constructor - * this specified whether or not to also copy all the events in this - * collection. Generally you'll want to let it copy the events. - * If arg1 is an Immutable.List, then arg2 will specify the type of - * the Events accepted into the Collection. This form is generally - * used internally. - * - * @return {Collection} The constructed Collection. - */ - function Collection(arg1, arg2) { - (0, _classCallCheck3.default)(this, Collection); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Collection.__proto__ || (0, _getPrototypeOf2.default)(Collection)).call(this)); - - _this._id = _underscore2.default.uniqueId("collection-"); - _this._eventList = null; - // The events in this collection - _this._type = null; - - // The type (class) of the events in this collection - if (!arg1) { - _this._eventList = new _immutable2.default.List(); - } else if (arg1 instanceof Collection) { - var other = arg1; - var copyEvents = arg2 || true; - // copyEvents is whether to copy events from other, default is true - if (_underscore2.default.isUndefined(copyEvents) || copyEvents === true) { - _this._eventList = other._eventList; - _this._type = other._type; - } else { - _this._eventList = new _immutable2.default.List(); - } - } else if (_underscore2.default.isArray(arg1)) { - var events = []; - arg1.forEach(function (e) { - _this._check(e); - events.push(e._d); - }); - _this._eventList = new _immutable2.default.List(events); - } else if (_immutable2.default.List.isList(arg1)) { - var type = arg2; - if (!type) { - throw new Error("No type supplied to Collection constructor"); - } - _this._type = type; - _this._eventList = arg1; - } - return _this; +class Collection extends _bounded.default { + /** + * Construct a new Collection. + * + * @param {Collection|array|Immutable.List} arg1 Initial data for + * the collection. If arg1 is another Collection, this will act as + * a copy constructor. + * @param {Boolean} [arg2] When using a the copy constructor + * this specified whether or not to also copy all the events in this + * collection. Generally you'll want to let it copy the events. + * If arg1 is an Immutable.List, then arg2 will specify the type of + * the Events accepted into the Collection. This form is generally + * used internally. + * + * @return {Collection} The constructed Collection. + */ + constructor(arg1, arg2) { + super(); + this._id = _underscore.default.uniqueId("collection-"); + this._eventList = null; // The events in this collection + + this._type = null; // The type (class) of the events in this collection + + if (!arg1) { + this._eventList = new _immutable.default.List(); + } else if (arg1 instanceof Collection) { + var other = arg1; + var copyEvents = arg2 || true; // copyEvents is whether to copy events from other, default is true + + if (_underscore.default.isUndefined(copyEvents) || copyEvents === true) { + this._eventList = other._eventList; + this._type = other._type; + } else { + this._eventList = new _immutable.default.List(); + } + } else if (_underscore.default.isArray(arg1)) { + var events = []; + arg1.forEach(e => { + this._check(e); + + events.push(e._d); + }); + this._eventList = new _immutable.default.List(events); + } else if (_immutable.default.List.isList(arg1)) { + var type = arg2; + + if (!type) { + throw new Error("No type supplied to Collection constructor"); + } + + this._type = type; + this._eventList = arg1; + } + } + /** + * Returns the Collection as a regular JSON object. + * + * @return {Object} The JSON representation of this Collection + */ + + + toJSON() { + return this._eventList.toJS(); + } + /** + * Serialize out the Collection as a string. This will be the + * string representation of `toJSON()`. + * + * @return {string} The Collection serialized as a string. + */ + + + toString() { + return JSON.stringify(this.toJSON()); + } + /** + * Returns the Event object type in this Collection. + * + * Since Collections may only have one type of event (`Event`, `IndexedEvent` + * or `TimeRangeEvent`) this will return that type. If no events + * have been added to the Collection it will return `undefined`. + * + * @return {Event} - The class of the type of events contained in + * this Collection. + */ + + + type() { + return this._type; + } + /** + * Returns the number of events in this collection + * + * @return {number} Count of events + */ + + + size() { + return this._eventList.size; + } + /** + * Returns the number of valid items in this collection. + * + * Uses the fieldPath to look up values in all events. + * It then counts the number that are considered valid, which + * specifically are not NaN, undefined or null. + * + * @return {number} Count of valid events + */ + + + sizeValid() { + var fieldPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "value"; + var count = 0; + + for (var e of this.events()) { + if (_event.default.isValidValue(e, fieldPath)) count++; } - /** - * Returns the Collection as a regular JSON object. - * - * @return {Object} The JSON representation of this Collection - */ - - - (0, _createClass3.default)(Collection, [{ - key: "toJSON", - value: function toJSON() { - return this._eventList.toJS(); - } - - /** - * Serialize out the Collection as a string. This will be the - * string representation of `toJSON()`. - * - * @return {string} The Collection serialized as a string. - */ - - }, { - key: "toString", - value: function toString() { - return (0, _stringify2.default)(this.toJSON()); - } - - /** - * Returns the Event object type in this Collection. - * - * Since Collections may only have one type of event (`Event`, `IndexedEvent` - * or `TimeRangeEvent`) this will return that type. If no events - * have been added to the Collection it will return `undefined`. - * - * @return {Event} - The class of the type of events contained in - * this Collection. - */ - - }, { - key: "type", - value: function type() { - return this._type; - } - - /** - * Returns the number of events in this collection - * - * @return {number} Count of events - */ - - }, { - key: "size", - value: function size() { - return this._eventList.size; - } - - /** - * Returns the number of valid items in this collection. - * - * Uses the fieldPath to look up values in all events. - * It then counts the number that are considered valid, which - * specifically are not NaN, undefined or null. - * - * @return {number} Count of valid events - */ - - }, { - key: "sizeValid", - value: function sizeValid() { - var fieldPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "value"; - - var count = 0; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(this.events()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var e = _step.value; - - if (_event2.default.isValidValue(e, fieldPath)) count++; - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return count; - } - - /** - * Returns an event in the Collection by its position. - * @example - * ``` - * for (let row=0; row < series.size(); row++) { - * const event = series.at(row); - * console.log(event.toString()); - * } - * ``` - * @param {number} pos The position of the event - * @return {Event} Returns the event at the pos specified. - */ - - }, { - key: "at", - value: function at(pos) { - if (this._eventList.size > 0) { - var event = new this._type(this._eventList.get(pos)); - return event; - } - } - - /** - * Returns a list of events in the Collection which have - * the exact key (time, timerange or index) as the key specified - * by 'at'. Note that this is an O(n) search for the time specified, - * since collections are an unordered bag of events. - * - * @param {Date|string|TimeRange} key The key of the event. - * @return {Array} All events at that key - */ - - }, { - key: "atKey", - value: function atKey(k) { - var result = []; - var key = void 0; - if (k instanceof Date) { - key = k.getTime(); - } else if (_underscore2.default.isString(k)) { - key = k; - } else if (k instanceof _timerange2.default) { - key = this.timerange().begin() + "," + this.timerange().end(); - } - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = (0, _getIterator3.default)(this.events()), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var e = _step2.value; - - if (e.key() === key) { - result.push(e); - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return result; - } - - /** - * Returns the first event in the Collection. - * - * @return {Event} - */ - - }, { - key: "atFirst", - value: function atFirst() { - if (this.size()) { - return this.at(0); - } - } - - /** - * Returns the last event in the Collection. - * - * @return {Event} - */ - - }, { - key: "atLast", - value: function atLast() { - if (this.size()) { - return this.at(this.size() - 1); - } - } - - /** - * Generator to return all the events in the Collection. - * - * @example - * ``` - * for (let event of collection.events()) { - * console.log(event.toString()); - * } - * ``` - */ - - }, { - key: "events", - value: _regenerator2.default.mark(function events() { - var i; - return _regenerator2.default.wrap(function events$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - i = 0; - - case 1: - if (!(i < this.size())) { - _context.next = 7; - break; - } - - _context.next = 4; - return this.at(i); - - case 4: - i++; - _context.next = 1; - break; - - case 7: - case "end": - return _context.stop(); - } - } - }, events, this); - }) - }, { - key: "setEvents", - value: function setEvents(events) { - var result = new Collection(this); - result._eventList = events; - return result; - } + return count; + } + /** + * Returns an event in the Collection by its position. + * @example + * ``` + * for (let row=0; row < series.size(); row++) { + * const event = series.at(row); + * console.log(event.toString()); + * } + * ``` + * @param {number} pos The position of the event + * @return {Event} Returns the event at the pos specified. + */ + + + at(pos) { + if (this._eventList.size > 0) { + var event = new this._type(this._eventList.get(pos)); + return event; + } + } + /** + * Returns a list of events in the Collection which have + * the exact key (time, timerange or index) as the key specified + * by 'at'. Note that this is an O(n) search for the time specified, + * since collections are an unordered bag of events. + * + * @param {Date|string|TimeRange} key The key of the event. + * @return {Array} All events at that key + */ + + + atKey(k) { + var result = []; + var key; + + if (k instanceof Date) { + key = k.getTime(); + } else if (_underscore.default.isString(k)) { + key = k; + } else if (k instanceof _timerange.default) { + key = "".concat(this.timerange().begin(), ",").concat(this.timerange().end()); + } - /** - * Returns the raw Immutable event list - * - * @return {Immutable.List} All events as an Immutable List. - */ + for (var e of this.events()) { + if (e.key() === key) { + result.push(e); + } + } - }, { - key: "eventList", - value: function eventList() { - return this._eventList; - } + return result; + } + /** + * Returns the first event in the Collection. + * + * @return {Event} + */ - /** - * Returns a Javascript array representation of the event list - * - * @return {Array} All events as a Javascript Array. - */ - - }, { - key: "eventListAsArray", - value: function eventListAsArray() { - var events = []; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = (0, _getIterator3.default)(this.events()), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var e = _step3.value; - - events.push(e); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - return events; - } - /** - * Returns the events in the collection as a Javascript Map, where - * the key is the timestamp, index or timerange and the - * value is an array of events with that key. - * - * @return {map} The map of events - */ - - }, { - key: "eventListAsMap", - value: function eventListAsMap() { - var events = {}; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = (0, _getIterator3.default)(this.events()), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var e = _step4.value; - - var key = e.key(); - if (!_underscore2.default.has(events, key)) { - events[key] = []; - } - events[key].push(e); - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - return events; - } + atFirst() { + if (this.size()) { + return this.at(0); + } + } + /** + * Returns the last event in the Collection. + * + * @return {Event} + */ - // - // De-duplicate - // - /** - * Removes duplicates from the Collection. If duplicates - * exist in the collection with the same key but with different - * values, then later event values will be used. - * - * @return {Collection} The sorted Collection. - */ - - }, { - key: "dedup", - value: function dedup() { - var events = _event2.default.merge(this.eventListAsArray()); - return new Collection(events); - } - // - // Sorting - // - /** - * Sorts the Collection by the timestamp. In the case - * of TimeRangeEvents and IndexedEvents, it will be sorted - * by the begin time. This is useful when the collection - * will be passed into a TimeSeries. - * - * See also isChronological(). - * - * @return {Collection} The sorted Collection - */ - - }, { - key: "sortByTime", - value: function sortByTime() { - var _this2 = this; - - var sorted = this._eventList.sortBy(function (event) { - var e = new _this2._type(event); - return e.timestamp().getTime(); - }); - return this.setEvents(sorted); - } + atLast() { + if (this.size()) { + return this.at(this.size() - 1); + } + } + /** + * Generator to return all the events in the Collection. + * + * @example + * ``` + * for (let event of collection.events()) { + * console.log(event.toString()); + * } + * ``` + */ + + + *events() { + for (var i = 0; i < this.size(); i++) { + yield this.at(i); + } + } + + setEvents(events) { + var result = new Collection(this); + result._eventList = events; + return result; + } + /** + * Returns the raw Immutable event list + * + * @return {Immutable.List} All events as an Immutable List. + */ + + + eventList() { + return this._eventList; + } + /** + * Returns a Javascript array representation of the event list + * + * @return {Array} All events as a Javascript Array. + */ + + + eventListAsArray() { + var events = []; + + for (var e of this.events()) { + events.push(e); + } - /** - * Sorts the Collection using the value referenced by - * the fieldPath. - * - * @return {Collection} The extents of the Collection - */ - - }, { - key: "sort", - value: function sort(fieldPath) { - var _this3 = this; - - var fs = _util2.default.fieldPathToArray(fieldPath); - var sorted = this._eventList.sortBy(function (event) { - var e = new _this3._type(event); - return e.get(fs); - }); - return this.setEvents(sorted); - } + return events; + } + /** + * Returns the events in the collection as a Javascript Map, where + * the key is the timestamp, index or timerange and the + * value is an array of events with that key. + * + * @return {map} The map of events + */ - // - // Series range - // - /** - * From the range of times, or Indexes within the TimeSeries, return - * the extents of the TimeSeries as a TimeRange. This is currently implemented - * by walking the events. - * - * @return {TimeRange} The extents of the TimeSeries - */ - - }, { - key: "range", - value: function range() { - var min = void 0; - var max = void 0; - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = (0, _getIterator3.default)(this.events()), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var e = _step5.value; - - if (!min || e.begin() < min) min = e.begin(); - if (!max || e.end() > max) max = e.end(); - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5.return) { - _iterator5.return(); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } - - if (min && max) return new _timerange2.default(min, max); - } - // - // Collection mutation - // - /** - * Adds an event to the collection, returns a new Collection. The event added - * can be an Event, TimeRangeEvent or IndexedEvent, but it must be of the - * same type as other events within the Collection. - * - * @param {Event} event The event being added. - * - * @return {Collection} A new, modified, Collection containing the new event. - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - this._check(event); - var result = new Collection(this); - result._eventList = this._eventList.push(event._d); - return result; - } + eventListAsMap() { + var events = {}; - /** - * Perform a slice of events within the Collection, returns a new - * Collection representing a portion of this TimeSeries from begin up to - * but not including end. - * - * @param {Number} begin The position to begin slicing - * @param {Number} end The position to end slicing - * - * @return {Collection} The new, sliced, Collection. - */ - - }, { - key: "slice", - value: function slice(begin, end) { - return new Collection(this._eventList.slice(begin, end), this._type); - } + for (var e of this.events()) { + var key = e.key(); - /** - * Filter the collection's event list with the supplied function - * - * @param {function} func The filter function, that should return - * true or false when passed in an event. - * - * @return {Collection} A new, filtered, Collection. - */ - - }, { - key: "filter", - value: function filter(filterFunc) { - var filteredEventList = []; - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; - - try { - for (var _iterator6 = (0, _getIterator3.default)(this.events()), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var e = _step6.value; - - if (filterFunc(e)) { - filteredEventList.push(e); - } - } - } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; - } finally { - try { - if (!_iteratorNormalCompletion6 && _iterator6.return) { - _iterator6.return(); - } - } finally { - if (_didIteratorError6) { - throw _iteratorError6; - } - } - } - - return new Collection(filteredEventList); - } + if (!_underscore.default.has(events, key)) { + events[key] = []; + } - /** - * Map the collection's event list to a new event list with - * the supplied function. - * @param {function} func The mapping function, that should return - * a new event when passed in the old event. - * - * @return {Collection} A new, modified, Collection. - */ - - }, { - key: "map", - value: function map(mapFunc) { - var result = []; - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; - - try { - for (var _iterator7 = (0, _getIterator3.default)(this.events()), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var e = _step7.value; - - result.push(mapFunc(e)); - } - } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; - } finally { - try { - if (!_iteratorNormalCompletion7 && _iterator7.return) { - _iterator7.return(); - } - } finally { - if (_didIteratorError7) { - throw _iteratorError7; - } - } - } - - return new Collection(result); - } + events[key].push(e); + } - /** - * Returns a new Collection by testing the fieldPath - * values for being valid (not NaN, null or undefined). - * - * The resulting Collection will be clean (for that fieldPath). - * - * @param {string} fieldPath Name of value to look up. If not supplied, - * defaults to ['value']. "Deep" syntax is - * ['deep', 'value'] or 'deep.value' - * - * @return {Collection} A new, modified, Collection. - */ - - }, { - key: "clean", - value: function clean(fieldPath) { - var fs = _util2.default.fieldPathToArray(fieldPath); - var filteredEvents = []; - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; - - try { - for (var _iterator8 = (0, _getIterator3.default)(this.events()), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var e = _step8.value; - - if (_event2.default.isValidValue(e, fs)) { - filteredEvents.push(e); - } - } - } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; - } finally { - try { - if (!_iteratorNormalCompletion8 && _iterator8.return) { - _iterator8.return(); - } - } finally { - if (_didIteratorError8) { - throw _iteratorError8; - } - } - } - - return new Collection(filteredEvents); - } + return events; + } // + // De-duplicate + // + + /** + * Removes duplicates from the Collection. If duplicates + * exist in the collection with the same key but with different + * values, then later event values will be used. + * + * @return {Collection} The sorted Collection. + */ + + + dedup() { + var events = _event.default.merge(this.eventListAsArray()); + + return new Collection(events); + } // + // Sorting + // + + /** + * Sorts the Collection by the timestamp. In the case + * of TimeRangeEvents and IndexedEvents, it will be sorted + * by the begin time. This is useful when the collection + * will be passed into a TimeSeries. + * + * See also isChronological(). + * + * @return {Collection} The sorted Collection + */ + + + sortByTime() { + var sorted = this._eventList.sortBy(event => { + var e = new this._type(event); + return e.timestamp().getTime(); + }); + + return this.setEvents(sorted); + } + /** + * Sorts the Collection using the value referenced by + * the fieldPath. + * + * @return {Collection} The extents of the Collection + */ + + + sort(fieldPath) { + var fs = _util.default.fieldPathToArray(fieldPath); + + var sorted = this._eventList.sortBy(event => { + var e = new this._type(event); + return e.get(fs); + }); + + return this.setEvents(sorted); + } // + // Series range + // + + /** + * From the range of times, or Indexes within the TimeSeries, return + * the extents of the TimeSeries as a TimeRange. This is currently implemented + * by walking the events. + * + * @return {TimeRange} The extents of the TimeSeries + */ + + + range() { + var min; + var max; + + for (var e of this.events()) { + if (!min || e.begin() < min) min = e.begin(); + if (!max || e.end() > max) max = e.end(); + } - // - // Aggregate the event list to a single value - // - /** - * Returns the number of events in this collection - * - * @return {number} The number of events - */ - - }, { - key: "count", - value: function count() { - return this.size(); - } + if (min && max) return new _timerange.default(min, max); + } // + // Collection mutation + // + + /** + * Adds an event to the collection, returns a new Collection. The event added + * can be an Event, TimeRangeEvent or IndexedEvent, but it must be of the + * same type as other events within the Collection. + * + * @param {Event} event The event being added. + * + * @return {Collection} A new, modified, Collection containing the new event. + */ + + + addEvent(event) { + this._check(event); + + var result = new Collection(this); + result._eventList = this._eventList.push(event._d); + return result; + } + /** + * Perform a slice of events within the Collection, returns a new + * Collection representing a portion of this TimeSeries from begin up to + * but not including end. + * + * @param {Number} begin The position to begin slicing + * @param {Number} end The position to end slicing + * + * @return {Collection} The new, sliced, Collection. + */ + + + slice(begin, end) { + return new Collection(this._eventList.slice(begin, end), this._type); + } + /** + * Filter the collection's event list with the supplied function + * + * @param {function} func The filter function, that should return + * true or false when passed in an event. + * + * @return {Collection} A new, filtered, Collection. + */ + + + filter(filterFunc) { + var filteredEventList = []; + + for (var e of this.events()) { + if (filterFunc(e)) { + filteredEventList.push(e); + } + } - /** - * Returns the first value in the Collection for the fieldspec - * - * @param {string} fieldPath Column to find the first value of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The first value - */ - - }, { - key: "first", - value: function first(fieldPath, filter) { - return this.aggregate((0, _functions.first)(filter), fieldPath); - } + return new Collection(filteredEventList); + } + /** + * Map the collection's event list to a new event list with + * the supplied function. + * @param {function} func The mapping function, that should return + * a new event when passed in the old event. + * + * @return {Collection} A new, modified, Collection. + */ - /** - * Returns the last value in the Collection for the fieldspec - * - * @param {string} fieldPath Column to find the last value of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The last value - */ - - }, { - key: "last", - value: function last(fieldPath, filter) { - return this.aggregate((0, _functions.last)(filter), fieldPath); - } - /** - * Returns the sum of the Collection for the fieldspec - * - * @param {string} fieldPath Column to find the sum of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The sum - */ - - }, { - key: "sum", - value: function sum(fieldPath, filter) { - return this.aggregate((0, _functions.sum)(filter), fieldPath); - } + map(mapFunc) { + var result = []; - /** - * Aggregates the events down to their average(s) - * - * @param {string} fieldPath Column to find the avg of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The average - */ - - }, { - key: "avg", - value: function avg(fieldPath, filter) { - return this.aggregate((0, _functions.avg)(filter), fieldPath); - } + for (var e of this.events()) { + result.push(mapFunc(e)); + } - /** - * Aggregates the events down to their maximum value - * - * @param {string} fieldPath Column to find the max of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The max value for the field - */ - - }, { - key: "max", - value: function max(fieldPath, filter) { - return this.aggregate((0, _functions.max)(filter), fieldPath); - } + return new Collection(result); + } + /** + * Returns a new Collection by testing the fieldPath + * values for being valid (not NaN, null or undefined). + * + * The resulting Collection will be clean (for that fieldPath). + * + * @param {string} fieldPath Name of value to look up. If not supplied, + * defaults to ['value']. "Deep" syntax is + * ['deep', 'value'] or 'deep.value' + * + * @return {Collection} A new, modified, Collection. + */ + + + clean(fieldPath) { + var fs = _util.default.fieldPathToArray(fieldPath); + + var filteredEvents = []; + + for (var e of this.events()) { + if (_event.default.isValidValue(e, fs)) { + filteredEvents.push(e); + } + } - /** - * Aggregates the events down to their minimum value - * - * @param {string} fieldPath Column to find the min of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The min value for the field - */ - - }, { - key: "min", - value: function min(fieldPath, filter) { - return this.aggregate((0, _functions.min)(filter), fieldPath); - } + return new Collection(filteredEvents); + } // + // Aggregate the event list to a single value + // + + /** + * Returns the number of events in this collection + * + * @return {number} The number of events + */ + + + count() { + return this.size(); + } + /** + * Returns the first value in the Collection for the fieldspec + * + * @param {string} fieldPath Column to find the first value of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The first value + */ + + + first(fieldPath, filter) { + return this.aggregate((0, _functions.first)(filter), fieldPath); + } + /** + * Returns the last value in the Collection for the fieldspec + * + * @param {string} fieldPath Column to find the last value of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The last value + */ + + + last(fieldPath, filter) { + return this.aggregate((0, _functions.last)(filter), fieldPath); + } + /** + * Returns the sum of the Collection for the fieldspec + * + * @param {string} fieldPath Column to find the sum of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The sum + */ + + + sum(fieldPath, filter) { + return this.aggregate((0, _functions.sum)(filter), fieldPath); + } + /** + * Aggregates the events down to their average(s) + * + * @param {string} fieldPath Column to find the avg of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The average + */ + + + avg(fieldPath, filter) { + return this.aggregate((0, _functions.avg)(filter), fieldPath); + } + /** + * Aggregates the events down to their maximum value + * + * @param {string} fieldPath Column to find the max of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The max value for the field + */ + + + max(fieldPath, filter) { + return this.aggregate((0, _functions.max)(filter), fieldPath); + } + /** + * Aggregates the events down to their minimum value + * + * @param {string} fieldPath Column to find the min of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The min value for the field + */ + + + min(fieldPath, filter) { + return this.aggregate((0, _functions.min)(filter), fieldPath); + } + /** + * Aggregates the events down to their mean (same as avg) + * + * @param {string} fieldPath Column to find the mean of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The mean + */ + + + mean(fieldPath, filter) { + return this.avg(fieldPath, filter); + } + /** + * Aggregates the events down to their minimum value + * + * @param {string} fieldPath Column to find the median of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The median value + */ + + + median(fieldPath, filter) { + return this.aggregate((0, _functions.median)(filter), fieldPath); + } + /** + * Aggregates the events down to their stdev + * + * @param {string} fieldPath Column to find the stdev of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The resulting stdev value + */ + + + stdev(fieldPath, filter) { + return this.aggregate((0, _functions.stdev)(filter), fieldPath); + } + /** + * Gets percentile q within the Collection. This works the same way as numpy. + * + * @param {integer} q The percentile (should be between 0 and 100) + * + * @param {string} fieldPath Column to find the percentile of. A deep value can be referenced with a + * string.like.this. If not supplied the `value` column will be + * aggregated. + * + * @param {string} interp Specifies the interpolation method + * to use when the desired quantile lies between + * two data points. Options are: + * options are: + * * linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j. + * * lower: i. + * * higher: j. + * * nearest: i or j whichever is nearest. + * * midpoint: (i + j) / 2. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The percentile + */ + + + percentile(q, fieldPath) { + var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; + var filter = arguments.length > 3 ? arguments[3] : undefined; + return this.aggregate((0, _functions.percentile)(q, interp, filter), fieldPath); + } + /** + * Aggregates the events down using a user defined function to + * do the reduction. + * + * @param {function} func User defined reduction function. Will be + * passed a list of values. Should return a + * singe value. + * + * @param {String} fieldPath The field to aggregate over + * + * @return {number} The resulting value + */ + + + aggregate(func, fieldPath) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var fpath; + + if (!_underscore.default.isFunction(func)) { + throw new Error("First arg to aggregate() must be a function"); + } - /** - * Aggregates the events down to their mean (same as avg) - * - * @param {string} fieldPath Column to find the mean of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The mean - */ - - }, { - key: "mean", - value: function mean(fieldPath, filter) { - return this.avg(fieldPath, filter); - } + if (_underscore.default.isString(fieldPath)) { + fpath = fieldPath; + } else if (_underscore.default.isArray(fieldPath)) { + // if the ['array', 'style', 'fieldpath'] is being used, + // we need to turn it back into a string since we are + // using a subset of the the map() functionality on + // a single column + fpath = fieldPath.split("."); + } else if (_underscore.default.isUndefined(fieldPath)) { + // map() needs a field name to use as a key. Normally + // this case is normally handled by _field_spec_to_array() + // inside get(). Also, if map(func, field_spec=None) then + // it will map all the columns. + fpath = "value"; + } else { + throw new Error("Collection.aggregate() takes a string/array fieldPath"); + } - /** - * Aggregates the events down to their minimum value - * - * @param {string} fieldPath Column to find the median of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The median value - */ - - }, { - key: "median", - value: function median(fieldPath, filter) { - return this.aggregate((0, _functions.median)(filter), fieldPath); - } + var result = _event.default.mapReduce(this.eventListAsArray(), fpath, func, options); + + return result[fpath]; + } + /** + * Gets n quantiles within the Collection. This works the same way as numpy. + * + * @param {integer} n The number of quantiles to divide the + * Collection into. + * + * @param {string} column The field to return as the quantile + * + * @param {string} interp Specifies the interpolation method + * to use when the desired quantile lies between + * two data points. Options are: + * options are: + * * linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j. + * * lower: i. + * * higher: j. + * * nearest: i or j whichever is nearest. + * * midpoint: (i + j) / 2. + * + * @return {array} An array of n quantiles + */ + + + quantile(n) { + var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; + var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; + var results = []; + var sorted = this.sort(column); + var subsets = 1.0 / n; + + if (n > this.length) { + throw new Error("Subset n is greater than the Collection length"); + } - /** - * Aggregates the events down to their stdev - * - * @param {string} fieldPath Column to find the stdev of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The resulting stdev value - */ - - }, { - key: "stdev", - value: function stdev(fieldPath, filter) { - return this.aggregate((0, _functions.stdev)(filter), fieldPath); - } + for (var i = subsets; i < 1; i += subsets) { + var index = Math.floor((sorted.size() - 1) * i); + + if (index < sorted.size() - 1) { + var fraction = (sorted.size() - 1) * i - index; + var v0 = sorted.at(index).get(column); + var v1 = sorted.at(index + 1).get(column); + var v = void 0; + + if (interp === "lower" || fraction === 0) { + v = v0; + } else if (interp === "linear") { + v = v0 + (v1 - v0) * fraction; + } else if (interp === "higher") { + v = v1; + } else if (interp === "nearest") { + v = fraction < 0.5 ? v0 : v1; + } else if (interp === "midpoint") { + v = (v0 + v1) / 2; + } + + results.push(v); + } + } - /** - * Gets percentile q within the Collection. This works the same way as numpy. - * - * @param {integer} q The percentile (should be between 0 and 100) - * - * @param {string} fieldPath Column to find the percentile of. A deep value can be referenced with a - * string.like.this. If not supplied the `value` column will be - * aggregated. - * - * @param {string} interp Specifies the interpolation method - * to use when the desired quantile lies between - * two data points. Options are: - * options are: - * * linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j. - * * lower: i. - * * higher: j. - * * nearest: i or j whichever is nearest. - * * midpoint: (i + j) / 2. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The percentile - */ - - }, { - key: "percentile", - value: function percentile(q, fieldPath) { - var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; - var filter = arguments[3]; - - return this.aggregate((0, _functions.percentile)(q, interp, filter), fieldPath); - } + return results; + } + /** + * Returns true if all events in this Collection are in chronological order. + * @return {Boolean} True if all events are in order, oldest events to newest. + */ - /** - * Aggregates the events down using a user defined function to - * do the reduction. - * - * @param {function} func User defined reduction function. Will be - * passed a list of values. Should return a - * singe value. - * - * @param {String} fieldPath The field to aggregate over - * - * @return {number} The resulting value - */ - - }, { - key: "aggregate", - value: function aggregate(func, fieldPath) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - var fpath = void 0; - if (!_underscore2.default.isFunction(func)) { - throw new Error("First arg to aggregate() must be a function"); - } - - if (_underscore2.default.isString(fieldPath)) { - fpath = fieldPath; - } else if (_underscore2.default.isArray(fieldPath)) { - // if the ['array', 'style', 'fieldpath'] is being used, - // we need to turn it back into a string since we are - // using a subset of the the map() functionality on - // a single column - fpath = fieldPath.split("."); - } else if (_underscore2.default.isUndefined(fieldPath)) { - // map() needs a field name to use as a key. Normally - // this case is normally handled by _field_spec_to_array() - // inside get(). Also, if map(func, field_spec=None) then - // it will map all the columns. - fpath = "value"; - } else { - throw new Error("Collection.aggregate() takes a string/array fieldPath"); - } - - var result = _event2.default.mapReduce(this.eventListAsArray(), fpath, func, options); - return result[fpath]; - } - /** - * Gets n quantiles within the Collection. This works the same way as numpy. - * - * @param {integer} n The number of quantiles to divide the - * Collection into. - * - * @param {string} column The field to return as the quantile - * - * @param {string} interp Specifies the interpolation method - * to use when the desired quantile lies between - * two data points. Options are: - * options are: - * * linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j. - * * lower: i. - * * higher: j. - * * nearest: i or j whichever is nearest. - * * midpoint: (i + j) / 2. - * - * @return {array} An array of n quantiles - */ - - }, { - key: "quantile", - value: function quantile(n) { - var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; - var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; - - var results = []; - var sorted = this.sort(column); - var subsets = 1.0 / n; - - if (n > this.length) { - throw new Error("Subset n is greater than the Collection length"); - } - - for (var i = subsets; i < 1; i += subsets) { - var index = Math.floor((sorted.size() - 1) * i); - if (index < sorted.size() - 1) { - var fraction = (sorted.size() - 1) * i - index; - var v0 = sorted.at(index).get(column); - var v1 = sorted.at(index + 1).get(column); - var v = void 0; - - if (interp === "lower" || fraction === 0) { - v = v0; - } else if (interp === "linear") { - v = v0 + (v1 - v0) * fraction; - } else if (interp === "higher") { - v = v1; - } else if (interp === "nearest") { - v = fraction < 0.5 ? v0 : v1; - } else if (interp === "midpoint") { - v = (v0 + v1) / 2; - } - - results.push(v); - } - } - return results; - } + isChronological() { + var result = true; + var t; - /** - * Returns true if all events in this Collection are in chronological order. - * @return {Boolean} True if all events are in order, oldest events to newest. - */ - - }, { - key: "isChronological", - value: function isChronological() { - var result = true; - var t = void 0; - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; - - try { - for (var _iterator9 = (0, _getIterator3.default)(this.events()), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var e = _step9.value; - - if (!t) { - t = e.timestamp().getTime(); - } else { - if (e.timestamp() < t) { - result = false; - } - t = e.timestamp(); - } - } - } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; - } finally { - try { - if (!_iteratorNormalCompletion9 && _iterator9.return) { - _iterator9.return(); - } - } finally { - if (_didIteratorError9) { - throw _iteratorError9; - } - } - } - - return result; + for (var e of this.events()) { + if (!t) { + t = e.timestamp().getTime(); + } else { + if (e.timestamp() < t) { + result = false; } - /** - * STATIC - */ - /** - * Static function to compare two collections to each other. If the collections - * are of the same instance as each other then equals will return true. - * - * @param {Collection} collection1 - * @param {Collection} collection2 - * - * @return {bool} result - */ - - }], [{ - key: "equal", - value: function equal(collection1, collection2) { - return collection1._type === collection2._type && collection1._eventList === collection2._eventList; - } + t = e.timestamp(); + } + } - /** - * Static function to compare two collections to each other. If the collections - * are of the same value as each other then equals will return true. - * - * @param {Collection} collection1 - * @param {Collection} collection2 - * - * @return {bool} result - */ - - }, { - key: "is", - value: function is(collection1, collection2) { - return collection1._type === collection2._type && _immutable2.default.is(collection1._eventList, collection2._eventList); - } - }]); - return Collection; -}(_bounded2.default); /* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -exports.default = Collection; \ No newline at end of file + return result; + } + /** + * STATIC + */ + + /** + * Static function to compare two collections to each other. If the collections + * are of the same instance as each other then equals will return true. + * + * @param {Collection} collection1 + * @param {Collection} collection2 + * + * @return {bool} result + */ + + + static equal(collection1, collection2) { + return collection1._type === collection2._type && collection1._eventList === collection2._eventList; + } + /** + * Static function to compare two collections to each other. If the collections + * are of the same value as each other then equals will return true. + * + * @param {Collection} collection1 + * @param {Collection} collection2 + * + * @return {bool} result + */ + + + static is(collection1, collection2) { + return collection1._type === collection2._type && _immutable.default.is(collection1._eventList, collection2._eventList); + } + +} + +var _default = Collection; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/collector.js b/lib/lib/collector.js index 56d91a1..b37d5d1 100644 --- a/lib/lib/collector.js +++ b/lib/lib/collector.js @@ -1,34 +1,27 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); +var _underscore = _interopRequireDefault(require("underscore")); -var _underscore = require("underscore"); +var _collection = _interopRequireDefault(require("./collection")); -var _underscore2 = _interopRequireDefault(_underscore); +var _index = _interopRequireDefault(require("./index")); -var _collection = require("./collection"); - -var _collection2 = _interopRequireDefault(_collection); - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * A Collector is used to accumulate events into multiple collections, @@ -39,132 +32,115 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * Collections are emitted from this class to the supplied onTrigger * callback. */ -var Collector = function () { - function Collector(options, onTrigger) { - (0, _classCallCheck3.default)(this, Collector); - var windowType = options.windowType, - windowDuration = options.windowDuration, - groupBy = options.groupBy, - emitOn = options.emitOn; +class Collector { + constructor(options, onTrigger) { + var { + windowType, + windowDuration, + groupBy, + emitOn + } = options; + this._groupBy = groupBy; + this._emitOn = emitOn; + this._windowType = windowType; + this._windowDuration = windowDuration; // Callback for trigger + + this._onTrigger = onTrigger; // Maintained collections + + this._collections = {}; + } + + flushCollections() { + this.emitCollections(this._collections); + } + + emitCollections(collections) { + if (this._onTrigger) { + _underscore.default.each(collections, c => { + var { + collection, + windowKey, + groupByKey + } = c; + this._onTrigger && this._onTrigger(collection, windowKey, groupByKey); + }); + } + } + + addEvent(event) { + var timestamp = event.timestamp(); // + // Window key + // + + var windowType = this._windowType; + var windowKey; + + if (windowType === "fixed") { + windowKey = _index.default.getIndexString(this._windowDuration, timestamp); + } else if (windowType === "daily") { + windowKey = _index.default.getDailyIndexString(timestamp); + } else if (windowType === "monthly") { + windowKey = _index.default.getMonthlyIndexString(timestamp); + } else if (windowType === "yearly") { + windowKey = _index.default.getYearlyIndexString(timestamp); + } else { + windowKey = windowType; + } // + // Groupby key + // + + + var groupByKey = this._groupBy(event); // + // Collection key + // + + + var collectionKey = groupByKey ? "".concat(windowKey, "::").concat(groupByKey) : windowKey; + var discard = false; + + if (!_underscore.default.has(this._collections, collectionKey)) { + this._collections[collectionKey] = { + windowKey, + groupByKey, + collection: new _collection.default() + }; + discard = true; + } + + this._collections[collectionKey].collection = this._collections[collectionKey].collection.addEvent(event); // + // If fixed windows, collect together old collections that + // will be discarded + // + + var discards = {}; + + if (discard && windowType === "fixed") { + _underscore.default.each(this._collections, (c, k) => { + if (windowKey !== c.windowKey) { + discards[k] = c; + } + }); + } // + // Emit + // - this._groupBy = groupBy; - this._emitOn = emitOn; - this._windowType = windowType; - this._windowDuration = windowDuration; + var emitOn = this._emitOn; - // Callback for trigger - this._onTrigger = onTrigger; + if (emitOn === "eachEvent") { + this.emitCollections(this._collections); + } else if (emitOn === "discard") { + this.emitCollections(discards); - // Maintained collections - this._collections = {}; + _underscore.default.each(Object.keys(discards), k => { + delete this._collections[k]; + }); + } else if (emitOn === "flush") {// pass + } else { + throw new Error("Unknown emit type supplied to Collector"); } + } - (0, _createClass3.default)(Collector, [{ - key: "flushCollections", - value: function flushCollections() { - this.emitCollections(this._collections); - } - }, { - key: "emitCollections", - value: function emitCollections(collections) { - var _this = this; - - if (this._onTrigger) { - _underscore2.default.each(collections, function (c) { - var collection = c.collection, - windowKey = c.windowKey, - groupByKey = c.groupByKey; - - _this._onTrigger && _this._onTrigger(collection, windowKey, groupByKey); - }); - } - } - }, { - key: "addEvent", - value: function addEvent(event) { - var _this2 = this; - - var timestamp = event.timestamp(); - - // - // Window key - // - var windowType = this._windowType; - var windowKey = void 0; - if (windowType === "fixed") { - windowKey = _index2.default.getIndexString(this._windowDuration, timestamp); - } else if (windowType === "daily") { - windowKey = _index2.default.getDailyIndexString(timestamp); - } else if (windowType === "monthly") { - windowKey = _index2.default.getMonthlyIndexString(timestamp); - } else if (windowType === "yearly") { - windowKey = _index2.default.getYearlyIndexString(timestamp); - } else { - windowKey = windowType; - } - - // - // Groupby key - // - var groupByKey = this._groupBy(event); - - // - // Collection key - // - var collectionKey = groupByKey ? windowKey + "::" + groupByKey : windowKey; - - var discard = false; - if (!_underscore2.default.has(this._collections, collectionKey)) { - this._collections[collectionKey] = { - windowKey: windowKey, - groupByKey: groupByKey, - collection: new _collection2.default() - }; - discard = true; - } - this._collections[collectionKey].collection = this._collections[collectionKey].collection.addEvent(event); - - // - // If fixed windows, collect together old collections that - // will be discarded - // - var discards = {}; - if (discard && windowType === "fixed") { - _underscore2.default.each(this._collections, function (c, k) { - if (windowKey !== c.windowKey) { - discards[k] = c; - } - }); - } - - // - // Emit - // - var emitOn = this._emitOn; - if (emitOn === "eachEvent") { - this.emitCollections(this._collections); - } else if (emitOn === "discard") { - this.emitCollections(discards); - _underscore2.default.each((0, _keys2.default)(discards), function (k) { - delete _this2._collections[k]; - }); - } else if (emitOn === "flush") { - // pass - } else { - throw new Error("Unknown emit type supplied to Collector"); - } - } - }]); - return Collector; -}(); /* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ +} exports.default = Collector; \ No newline at end of file diff --git a/lib/lib/event.js b/lib/lib/event.js index 7e641be..e4fba45 100644 --- a/lib/lib/event.js +++ b/lib/lib/event.js @@ -1,34 +1,27 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); +var _underscore = _interopRequireDefault(require("underscore")); -var _util = require("./base/util"); +var _immutable = _interopRequireDefault(require("immutable")); -var _util2 = _interopRequireDefault(_util); +var _util = _interopRequireDefault(require("./base/util")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** There are three types of Events in Pond, while this class provides the base class @@ -43,559 +36,525 @@ are used by the Collection and TimeSeries classes. So, if you already have a TimeSeries or Collection you may want to examine the API there to see if you can do what you want to do. */ -var Event = function () { - function Event() { - (0, _classCallCheck3.default)(this, Event); - - if (this.constructor.name === "Event") { - throw new TypeError("Cannot construct Event instances directly"); - } +class Event { + constructor() { + if (this.constructor.name === "Event") { + throw new TypeError("Cannot construct Event instances directly"); } - - /** - * Express the event as a string - */ + } + /** + * Express the event as a string + */ - (0, _createClass3.default)(Event, [{ - key: "toString", - value: function toString() { - if (this.toJSON === undefined) { - throw new TypeError("Must implement toJSON()"); - } - return (0, _stringify2.default)(this.toJSON()); - } + toString() { + if (this.toJSON === undefined) { + throw new TypeError("Must implement toJSON()"); + } - /** - * Returns the type of this class instance - */ + return JSON.stringify(this.toJSON()); + } + /** + * Returns the type of this class instance + */ + + + type() { + return this.constructor; + } + /** + * Sets the data of the event and returns a new event of the + * same type. + * + * @param {object} data New data for the event + * @return {object} A new event + */ + + + setData(data) { + var eventType = this.type(); + + var d = this._d.set("data", _util.default.dataFromArg(data)); + + return new eventType(d); + } + /** + * Access the event data in its native form. The result + * will be an Immutable.Map. + * + * @return {Immutable.Map} Data for the Event + */ + + + data() { + return this._d.get("data"); + } + /** + * Get specific data out of the event. The data will be converted + * to a JS Object. You can use a `fieldSpec` to address deep data. + * A `fieldSpec` could be "a.b" + */ + + + get() { + var fieldSpec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ["value"]; + var v; + + if (_underscore.default.isArray(fieldSpec)) { + v = this.data().getIn(fieldSpec); + } else if (_underscore.default.isString(fieldSpec)) { + var searchKeyPath = fieldSpec.split("."); + v = this.data().getIn(searchKeyPath); + } - }, { - key: "type", - value: function type() { - return this.constructor; - } + if (v instanceof _immutable.default.Map || v instanceof _immutable.default.List) { + return v.toJS(); + } - /** - * Sets the data of the event and returns a new event of the - * same type. - * - * @param {object} data New data for the event - * @return {object} A new event - */ - - }, { - key: "setData", - value: function setData(data) { - var eventType = this.type(); - var d = this._d.set("data", _util2.default.dataFromArg(data)); - return new eventType(d); - } + return v; + } + /** + * Alias for `get()`. + */ + + + value() { + var fieldSpec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ["value"]; + return this.get(fieldSpec); + } + /** + * Collapses this event's columns, represented by the fieldSpecList + * into a single column. The collapsing itself is done with the reducer + * function. Optionally the collapsed column could be appended to the + * existing columns, or replace them (the default). + */ + + + collapse(fieldSpecList, name, reducer) { + var append = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var data = append ? this.data().toJS() : {}; + var d = fieldSpecList.map(fs => this.get(fs)); + data[name] = reducer(d); + return this.setData(data); + } // + // Static Event functions + // + + /** + * Do the two supplied events contain the same data, + * even if they are not the same instance. + * @param {Event} event1 First event to compare + * @param {Event} event2 Second event to compare + * @return {Boolean} Result + */ + + + static is(event1, event2) { + return event1.key() === event2.key() && _immutable.default.is(event1._d.get("data"), event2._d.get("data")); + } + /** + * Returns if the two supplied events are duplicates + * of each other. By default, duplicated means that the + * timestamps are the same. This is the case with incoming events + * where the second event is either known to be the same (but + * duplicate) of the first, or supersedes the first. You can + * also pass in false for ignoreValues and get a full + * compare. + * + * @return {Boolean} The result of the compare + */ + + + static isDuplicate(event1, event2) { + var ignoreValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + if (ignoreValues) { + return event1.type() === event2.type() && event1.key() === event2.key(); + } else { + return event1.type() === event2.type() && Event.is(event1, event2); + } + } + /** + * The same as Event.value() only it will return false if the + * value is either undefined, NaN or Null. + * + * @param {Event} event The Event to check + * @param {string|array} The field to check + */ + + + static isValidValue(event, fieldPath) { + var v = event.value(fieldPath); + + var invalid = _underscore.default.isUndefined(v) || _underscore.default.isNaN(v) || _underscore.default.isNull(v); + + return !invalid; + } + /** + * Function to select specific fields of an event using + * a fieldPath and return a new event with just those fields. + * + * The fieldPath currently can be: + * * A single field name + * * An array of field names + * + * The function returns a new event. + */ + + + static selector(event, fieldPath) { + var data = {}; + + if (_underscore.default.isString(fieldPath)) { + var fieldName = fieldPath; + var value = event.get(fieldName); + data[fieldName] = value; + } else if (_underscore.default.isArray(fieldPath)) { + _underscore.default.each(fieldPath, fieldName => { + var value = event.get(fieldName); + data[fieldName] = value; + }); + } else { + return event; + } - /** - * Access the event data in its native form. The result - * will be an Immutable.Map. - * - * @return {Immutable.Map} Data for the Event - */ - - }, { - key: "data", - value: function data() { - return this._d.get("data"); + return event.setData(data); + } + /** + * Merges multiple `events` together into a new array of events, one + * for each time/index/timerange of the source events. Merging is done on + * the data of each event. Values from later events in the list overwrite + * early values if fields conflict. + * + * Common use cases: + * - append events of different timestamps + * - merge in events with one field to events with another + * - merge in events that supersede the previous events + * + * See also: TimeSeries.timeSeriesListMerge() + * + * @param {Immutable.List|array} events Array or Immutable.List of events + * + * @return {Immutable.List|array} Array or Immutable.List of events + */ + + + static merge(events, deep) { + if (events instanceof _immutable.default.List && events.size === 0 || _underscore.default.isArray(events) && events.length === 0) { + return []; + } // + // Group by the time (the key), as well as keeping track + // of the event types so we can check that for a given key + // they are homogeneous and also so we can build an output + // event for this key + // + + + var eventMap = {}; + var typeMap = {}; + events.forEach(e => { + var type = e.type(); + var key = e.key(); + + if (!_underscore.default.has(eventMap, key)) { + eventMap[key] = []; + } + + eventMap[key].push(e); + + if (!_underscore.default.has(typeMap, key)) { + typeMap[key] = type; + } else { + if (typeMap[key] !== type) { + throw new Error("Events for time ".concat(key, " are not homogeneous")); } + } + }); // + // For each key we'll build a new event of the same type as the source + // events. Here we loop through all the events for that key, then for each field + // we are considering, we get all the values and reduce them (sum, avg, etc). + // + + var outEvents = []; + + _underscore.default.each(eventMap, (events, key) => { + var data = _immutable.default.Map(); + + events.forEach(event => { + data = deep ? data.mergeDeep(event.data()) : data.merge(event.data()); + }); + var type = typeMap[key]; + outEvents.push(new type(key, data)); + }); // This function outputs the same as its input. If we are + // passed an Immutable.List of events, the user will get + // an Immutable.List back. If an array, a simple JS array will + // be returned. + + + if (events instanceof _immutable.default.List) { + return _immutable.default.List(outEvents); + } - /** - * Get specific data out of the event. The data will be converted - * to a JS Object. You can use a `fieldSpec` to address deep data. - * A `fieldSpec` could be "a.b" - */ - - }, { - key: "get", - value: function get() { - var fieldSpec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ["value"]; - - var v = void 0; - if (_underscore2.default.isArray(fieldSpec)) { - v = this.data().getIn(fieldSpec); - } else if (_underscore2.default.isString(fieldSpec)) { - var searchKeyPath = fieldSpec.split("."); - v = this.data().getIn(searchKeyPath); - } - - if (v instanceof _immutable2.default.Map || v instanceof _immutable2.default.List) { - return v.toJS(); - } - return v; - } + return outEvents; + } + /** + * Combines multiple `events` together into a new array of events, one + * for each time/index/timerange of the source events. The list of + * events may be specified as an array or `Immutable.List`. Combining acts + * on the fields specified in the `fieldSpec` and uses the reducer + * function to take the multiple values and reducer them down to one. + * + * The return result will be an of the same form as the input. If you + * pass in an array of events, you will get an array of events back. If + * you pass an `Immutable.List` of events then you will get an + * `Immutable.List` of events back. + * + * This is the general version of `Event.sum()` and `Event.avg()`. If those + * common use cases are what you want, just use those functions. If you + * want to specify your own reducer you can use this function. + * + * See also: `TimeSeries.timeSeriesListSum()` + * + * @param {Immutable.List|array} events Array of event objects + * @param {string|array} fieldSpec Column or columns to look up. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * If not supplied, all columns will be operated on. + * @param {function} reducer Reducer function to apply to column data. + * + * @return {Immutable.List|array} An Immutable.List or array of events + */ + + + static combine(events, reducer, fieldSpec) { + if (events instanceof _immutable.default.List && events.size === 0 || _underscore.default.isArray(events) && events.length === 0) { + return []; + } - /** - * Alias for `get()`. - */ + var fieldNames; - }, { - key: "value", - value: function value() { - var fieldSpec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ["value"]; + if (_underscore.default.isString(fieldSpec)) { + fieldNames = [fieldSpec]; + } else if (_underscore.default.isArray(fieldSpec)) { + fieldNames = fieldSpec; + } - return this.get(fieldSpec); + var eventMap = {}; + var typeMap = {}; // + // Group by the time (the key), as well as keeping track + // of the event types so we can check that for a given key + // they are homogeneous and also so we can build an output + // event for this key + // + + events.forEach(e => { + var type = e.type(); + var key = e.key(); + + if (!_underscore.default.has(eventMap, key)) { + eventMap[key] = []; + } + + eventMap[key].push(e); + + if (!_underscore.default.has(typeMap, key)) { + typeMap[key] = type; + } else { + if (typeMap[key] !== type) { + throw new Error("Events for time ".concat(key, " are not homogeneous")); } - - /** - * Collapses this event's columns, represented by the fieldSpecList - * into a single column. The collapsing itself is done with the reducer - * function. Optionally the collapsed column could be appended to the - * existing columns, or replace them (the default). - */ - - }, { - key: "collapse", - value: function collapse(fieldSpecList, name, reducer) { - var _this = this; - - var append = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - var data = append ? this.data().toJS() : {}; - var d = fieldSpecList.map(function (fs) { - return _this.get(fs); - }); - data[name] = reducer(d); - return this.setData(data); + } + }); // + // For each key we'll build a new event of the same type as the source + // events. Here we loop through all the events for that key, then for each field + // we are considering, we get all the values and reduce them (sum, avg, etc). + // + + var outEvents = []; + + _underscore.default.each(eventMap, (events, key) => { + var mapEvent = {}; + events.forEach(event => { + var fields = fieldNames; + + if (!fieldNames) { + fields = _underscore.default.map(event.data().toJSON(), (value, fieldName) => fieldName); } - // - // Static Event functions - // - /** - * Do the two supplied events contain the same data, - * even if they are not the same instance. - * @param {Event} event1 First event to compare - * @param {Event} event2 Second event to compare - * @return {Boolean} Result - */ - - }], [{ - key: "is", - value: function is(event1, event2) { - return event1.key() === event2.key() && _immutable2.default.is(event1._d.get("data"), event2._d.get("data")); - } + fields.forEach(fieldName => { + if (!mapEvent[fieldName]) { + mapEvent[fieldName] = []; + } - /** - * Returns if the two supplied events are duplicates - * of each other. By default, duplicated means that the - * timestamps are the same. This is the case with incoming events - * where the second event is either known to be the same (but - * duplicate) of the first, or supersedes the first. You can - * also pass in false for ignoreValues and get a full - * compare. - * - * @return {Boolean} The result of the compare - */ - - }, { - key: "isDuplicate", - value: function isDuplicate(event1, event2) { - var ignoreValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; - - if (ignoreValues) { - return event1.type() === event2.type() && event1.key() === event2.key(); - } else { - return event1.type() === event2.type() && Event.is(event1, event2); - } - } + mapEvent[fieldName].push(event.data().get(fieldName)); + }); + }); + var data = {}; - /** - * The same as Event.value() only it will return false if the - * value is either undefined, NaN or Null. - * - * @param {Event} event The Event to check - * @param {string|array} The field to check - */ - - }, { - key: "isValidValue", - value: function isValidValue(event, fieldPath) { - var v = event.value(fieldPath); - var invalid = _underscore2.default.isUndefined(v) || _underscore2.default.isNaN(v) || _underscore2.default.isNull(v); - return !invalid; - } + _underscore.default.map(mapEvent, (values, fieldName) => { + data[fieldName] = reducer(values); + }); - /** - * Function to select specific fields of an event using - * a fieldPath and return a new event with just those fields. - * - * The fieldPath currently can be: - * * A single field name - * * An array of field names - * - * The function returns a new event. - */ - - }, { - key: "selector", - value: function selector(event, fieldPath) { - var data = {}; - if (_underscore2.default.isString(fieldPath)) { - var fieldName = fieldPath; - var value = event.get(fieldName); - data[fieldName] = value; - } else if (_underscore2.default.isArray(fieldPath)) { - _underscore2.default.each(fieldPath, function (fieldName) { - var value = event.get(fieldName); - data[fieldName] = value; - }); - } else { - return event; - } - return event.setData(data); - } + var type = typeMap[key]; + outEvents.push(new type(key, data)); + }); // This function outputs the same as its input. If we are + // passed an Immutable.List of events, the user will get + // an Immutable.List back. If an array, a simple JS array will + // be returned. - /** - * Merges multiple `events` together into a new array of events, one - * for each time/index/timerange of the source events. Merging is done on - * the data of each event. Values from later events in the list overwrite - * early values if fields conflict. - * - * Common use cases: - * - append events of different timestamps - * - merge in events with one field to events with another - * - merge in events that supersede the previous events - * - * See also: TimeSeries.timeSeriesListMerge() - * - * @param {Immutable.List|array} events Array or Immutable.List of events - * - * @return {Immutable.List|array} Array or Immutable.List of events - */ - - }, { - key: "merge", - value: function merge(events, deep) { - if (events instanceof _immutable2.default.List && events.size === 0 || _underscore2.default.isArray(events) && events.length === 0) { - return []; - } - - // - // Group by the time (the key), as well as keeping track - // of the event types so we can check that for a given key - // they are homogeneous and also so we can build an output - // event for this key - // - var eventMap = {}; - var typeMap = {}; - - events.forEach(function (e) { - var type = e.type(); - var key = e.key(); - if (!_underscore2.default.has(eventMap, key)) { - eventMap[key] = []; - } - eventMap[key].push(e); - - if (!_underscore2.default.has(typeMap, key)) { - typeMap[key] = type; - } else { - if (typeMap[key] !== type) { - throw new Error("Events for time " + key + " are not homogeneous"); - } - } - }); - - // - // For each key we'll build a new event of the same type as the source - // events. Here we loop through all the events for that key, then for each field - // we are considering, we get all the values and reduce them (sum, avg, etc). - // - var outEvents = []; - _underscore2.default.each(eventMap, function (events, key) { - var data = _immutable2.default.Map(); - events.forEach(function (event) { - data = deep ? data.mergeDeep(event.data()) : data.merge(event.data()); - }); - var type = typeMap[key]; - outEvents.push(new type(key, data)); - }); - - // This function outputs the same as its input. If we are - // passed an Immutable.List of events, the user will get - // an Immutable.List back. If an array, a simple JS array will - // be returned. - if (events instanceof _immutable2.default.List) { - return _immutable2.default.List(outEvents); - } - return outEvents; - } - /** - * Combines multiple `events` together into a new array of events, one - * for each time/index/timerange of the source events. The list of - * events may be specified as an array or `Immutable.List`. Combining acts - * on the fields specified in the `fieldSpec` and uses the reducer - * function to take the multiple values and reducer them down to one. - * - * The return result will be an of the same form as the input. If you - * pass in an array of events, you will get an array of events back. If - * you pass an `Immutable.List` of events then you will get an - * `Immutable.List` of events back. - * - * This is the general version of `Event.sum()` and `Event.avg()`. If those - * common use cases are what you want, just use those functions. If you - * want to specify your own reducer you can use this function. - * - * See also: `TimeSeries.timeSeriesListSum()` - * - * @param {Immutable.List|array} events Array of event objects - * @param {string|array} fieldSpec Column or columns to look up. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * If not supplied, all columns will be operated on. - * @param {function} reducer Reducer function to apply to column data. - * - * @return {Immutable.List|array} An Immutable.List or array of events - */ - - }, { - key: "combine", - value: function combine(events, reducer, fieldSpec) { - if (events instanceof _immutable2.default.List && events.size === 0 || _underscore2.default.isArray(events) && events.length === 0) { - return []; - } - - var fieldNames = void 0; - if (_underscore2.default.isString(fieldSpec)) { - fieldNames = [fieldSpec]; - } else if (_underscore2.default.isArray(fieldSpec)) { - fieldNames = fieldSpec; - } - - var eventMap = {}; - var typeMap = {}; - - // - // Group by the time (the key), as well as keeping track - // of the event types so we can check that for a given key - // they are homogeneous and also so we can build an output - // event for this key - // - events.forEach(function (e) { - var type = e.type(); - var key = e.key(); - if (!_underscore2.default.has(eventMap, key)) { - eventMap[key] = []; - } - eventMap[key].push(e); - if (!_underscore2.default.has(typeMap, key)) { - typeMap[key] = type; - } else { - if (typeMap[key] !== type) { - throw new Error("Events for time " + key + " are not homogeneous"); - } - } - }); - - // - // For each key we'll build a new event of the same type as the source - // events. Here we loop through all the events for that key, then for each field - // we are considering, we get all the values and reduce them (sum, avg, etc). - // - var outEvents = []; - _underscore2.default.each(eventMap, function (events, key) { - var mapEvent = {}; - events.forEach(function (event) { - var fields = fieldNames; - if (!fieldNames) { - fields = _underscore2.default.map(event.data().toJSON(), function (value, fieldName) { - return fieldName; - }); - } - fields.forEach(function (fieldName) { - if (!mapEvent[fieldName]) { - mapEvent[fieldName] = []; - } - mapEvent[fieldName].push(event.data().get(fieldName)); - }); - }); - - var data = {}; - _underscore2.default.map(mapEvent, function (values, fieldName) { - data[fieldName] = reducer(values); - }); - - var type = typeMap[key]; - outEvents.push(new type(key, data)); - }); - - // This function outputs the same as its input. If we are - // passed an Immutable.List of events, the user will get - // an Immutable.List back. If an array, a simple JS array will - // be returned. - if (events instanceof _immutable2.default.List) { - return _immutable2.default.List(outEvents); - } - return outEvents; - } + if (events instanceof _immutable.default.List) { + return _immutable.default.List(outEvents); + } - /** - * Returns a function that will take a list of events and combine them - * together using the fieldSpec and reducer function provided. This is - * used as an event reducer for merging multiple TimeSeries together - * with `timeSeriesListReduce()`. - */ - - }, { - key: "combiner", - value: function combiner(fieldSpec, reducer) { - return function (events) { - return Event.combine(events, reducer, fieldSpec); - }; - } + return outEvents; + } + /** + * Returns a function that will take a list of events and combine them + * together using the fieldSpec and reducer function provided. This is + * used as an event reducer for merging multiple TimeSeries together + * with `timeSeriesListReduce()`. + */ + + + static combiner(fieldSpec, reducer) { + return events => Event.combine(events, reducer, fieldSpec); + } + /** + * Returns a function that will take a list of events and merge them + * together using the fieldSpec provided. This is used as a reducer for + * merging multiple TimeSeries together with `timeSeriesListMerge()`. + */ + + + static merger(fieldSpec) { + return events => Event.merge(events, fieldSpec); + } + /** + * Maps a list of events according to the fieldSpec + * passed in. The spec maybe a single field name, a + * list of field names, or a function that takes an + * event and returns a key/value pair. + * + * @example + * ```` + * in out + * 3am 1 2 + * 4am 3 4 + * + * Mapper result: { in: [1, 3], out: [2, 4]} + * ``` + * @param {string|array} fieldSpec Column or columns to look up. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * If not supplied, all columns will be operated on. + * If field_spec is a function, the function should + * return a map. The keys will be come the + * "column names" that will be used in the map that + * is returned. + */ + + + static map(evts) { + var multiFieldSpec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; + var result = {}; + var events; + + if (evts instanceof _immutable.default.List) { + events = evts; + } else if (_underscore.default.isArray(evts)) { + events = new _immutable.default.List(evts); + } else { + throw new Error("Unknown event list type. Should be an array or Immutable List"); + } - /** - * Returns a function that will take a list of events and merge them - * together using the fieldSpec provided. This is used as a reducer for - * merging multiple TimeSeries together with `timeSeriesListMerge()`. - */ - - }, { - key: "merger", - value: function merger(fieldSpec) { - return function (events) { - return Event.merge(events, fieldSpec); - }; + if (_underscore.default.isString(multiFieldSpec)) { + var fieldSpec = multiFieldSpec; + events.forEach(event => { + if (!_underscore.default.has(result, fieldSpec)) { + result[fieldSpec] = []; } - /** - * Maps a list of events according to the fieldSpec - * passed in. The spec maybe a single field name, a - * list of field names, or a function that takes an - * event and returns a key/value pair. - * - * @example - * ```` - * in out - * 3am 1 2 - * 4am 3 4 - * - * Mapper result: { in: [1, 3], out: [2, 4]} - * ``` - * @param {string|array} fieldSpec Column or columns to look up. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * If not supplied, all columns will be operated on. - * If field_spec is a function, the function should - * return a map. The keys will be come the - * "column names" that will be used in the map that - * is returned. - */ - - }, { - key: "map", - value: function map(evts) { - var multiFieldSpec = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; - - var result = {}; - - var events = void 0; - if (evts instanceof _immutable2.default.List) { - events = evts; - } else if (_underscore2.default.isArray(evts)) { - events = new _immutable2.default.List(evts); - } else { - throw new Error("Unknown event list type. Should be an array or Immutable List"); - } - - if (_underscore2.default.isString(multiFieldSpec)) { - var fieldSpec = multiFieldSpec; - events.forEach(function (event) { - if (!_underscore2.default.has(result, fieldSpec)) { - result[fieldSpec] = []; - } - var value = event.get(fieldSpec); - - result[fieldSpec].push(value); - }); - } else if (_underscore2.default.isArray(multiFieldSpec)) { - _underscore2.default.each(multiFieldSpec, function (fieldSpec) { - events.forEach(function (event) { - if (!_underscore2.default.has(result, fieldSpec)) { - result[fieldSpec] = []; - } - result[fieldSpec].push(event.get(fieldSpec)); - }); - }); - } else if (_underscore2.default.isFunction(multiFieldSpec)) { - events.forEach(function (event) { - var pair = multiFieldSpec(event); - _underscore2.default.each(pair, function (value, key) { - if (!_underscore2.default.has(result, key)) { - result[key] = []; - } - result[key].push(value); - }); - }); - } else { - events.forEach(function (event) { - _underscore2.default.each(event.data().toJSON(), function (value, key) { - if (!_underscore2.default.has(result, key)) { - result[key] = []; - } - result[key].push(value); - }); - }); - } - return result; - } + var value = event.get(fieldSpec); + result[fieldSpec].push(value); + }); + } else if (_underscore.default.isArray(multiFieldSpec)) { + _underscore.default.each(multiFieldSpec, fieldSpec => { + events.forEach(event => { + if (!_underscore.default.has(result, fieldSpec)) { + result[fieldSpec] = []; + } + + result[fieldSpec].push(event.get(fieldSpec)); + }); + }); + } else if (_underscore.default.isFunction(multiFieldSpec)) { + events.forEach(event => { + var pair = multiFieldSpec(event); + + _underscore.default.each(pair, (value, key) => { + if (!_underscore.default.has(result, key)) { + result[key] = []; + } + + result[key].push(value); + }); + }); + } else { + events.forEach(event => { + _underscore.default.each(event.data().toJSON(), (value, key) => { + if (!_underscore.default.has(result, key)) { + result[key] = []; + } + + result[key].push(value); + }); + }); + } - /** - * Takes a list of events and a reducer function and returns - * a new Event with the result, for each column. The reducer is - * of the form: - * ``` - * function sum(valueList) { - * return calcValue; - * } - * ``` - * @param {map} mapped A map, as produced from map() - * @param {function} reducer The reducer function - */ - - }, { - key: "reduce", - value: function reduce(mapped, reducer) { - var result = {}; - _underscore2.default.each(mapped, function (valueList, key) { - result[key] = reducer(valueList); - }); - return result; - } - /* - * @param {array} events Array of event objects - * @param {string|array} fieldSpec Column or columns to look up. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * If not supplied, all columns will be operated on. - * @param {function} reducer The reducer function - */ - - }, { - key: "mapReduce", - value: function mapReduce(events, multiFieldSpec, reducer) { - return Event.reduce(this.map(events, multiFieldSpec), reducer); - } - }]); - return Event; -}(); /* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -exports.default = Event; \ No newline at end of file + return result; + } + /** + * Takes a list of events and a reducer function and returns + * a new Event with the result, for each column. The reducer is + * of the form: + * ``` + * function sum(valueList) { + * return calcValue; + * } + * ``` + * @param {map} mapped A map, as produced from map() + * @param {function} reducer The reducer function + */ + + + static reduce(mapped, reducer) { + var result = {}; + + _underscore.default.each(mapped, (valueList, key) => { + result[key] = reducer(valueList); + }); + + return result; + } + /* + * @param {array} events Array of event objects + * @param {string|array} fieldSpec Column or columns to look up. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * If not supplied, all columns will be operated on. + * @param {function} reducer The reducer function + */ + + + static mapReduce(events, multiFieldSpec, reducer) { + return Event.reduce(this.map(events, multiFieldSpec), reducer); + } + +} + +var _default = Event; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/index.js b/lib/lib/index.js index 5152f2a..e6b1d19 100644 --- a/lib/lib/index.js +++ b/lib/lib/index.js @@ -1,22 +1,23 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _util = require("./base/util"); - -var _util2 = _interopRequireDefault(_util); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +exports.default = void 0; + +var _util = _interopRequireDefault(require("./base/util")); + +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** An index is simply a string that represents a fixed range of time. There are two basic types: @@ -44,170 +45,142 @@ An Index is a nice representation of certain types of time intervals because it An Index is also useful when collecting into specific time ranges, for example generating all the 5 min ("5m") maximum rollups within a specific day ("1d"). See the processing section within these docs. */ -var Index = function () { - function Index(s) { - var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - (0, _classCallCheck3.default)(this, Index); - - this._utc = utc; - this._string = s; - this._timerange = _util2.default.rangeFromIndexString(s, this._utc); +class Index { + constructor(s) { + var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + this._utc = utc; + this._string = s; + this._timerange = _util.default.rangeFromIndexString(s, this._utc); + } + /** + * Returns the Index as JSON, which will just be its string + * representation + */ + + + toJSON() { + return this._string; + } + /** + * Simply returns the Index as its string + */ + + + toString() { + return this._string; + } + /** + * for the calendar range style Indexes, this lets you return + * that calendar range as a human readable format, e.g. "June, 2014". + * The format specified is a Moment.format. + */ + + + toNiceString(format) { + return _util.default.niceIndexString(this._string, format); + } + /** + * Alias for toString() + */ + + + asString() { + return this.toString(); + } + /** + * Returns the Index as a TimeRange + */ + + + asTimerange() { + return this._timerange; + } + /** + * Returns the start date of the Index + */ + + + begin() { + return this._timerange.begin(); + } + /** + * Returns the end date of the Index + */ + + + end() { + return this._timerange.end(); + } + /** + * Return the index string given an index prefix and a datetime object. + */ + + + static getIndexString(win, date) { + var pos = _util.default.windowPositionFromDate(win, date); + + return "".concat(win, "-").concat(pos); + } + /** + * Given the time range, return a list of strings of index values every tick. + */ + + + static getIndexStringList(win, timerange) { + var pos1 = _util.default.windowPositionFromDate(win, timerange.begin()); + + var pos2 = _util.default.windowPositionFromDate(win, timerange.end()); + + var indexList = []; + + if (pos1 <= pos2) { + for (var pos = pos1; pos <= pos2; pos++) { + indexList.push("".concat(win, "-").concat(pos)); + } } - /** - * Returns the Index as JSON, which will just be its string - * representation - */ - - - (0, _createClass3.default)(Index, [{ - key: "toJSON", - value: function toJSON() { - return this._string; - } - - /** - * Simply returns the Index as its string - */ - - }, { - key: "toString", - value: function toString() { - return this._string; - } - - /** - * for the calendar range style Indexes, this lets you return - * that calendar range as a human readable format, e.g. "June, 2014". - * The format specified is a Moment.format. - */ - - }, { - key: "toNiceString", - value: function toNiceString(format) { - return _util2.default.niceIndexString(this._string, format); - } - - /** - * Alias for toString() - */ - - }, { - key: "asString", - value: function asString() { - return this.toString(); - } - - /** - * Returns the Index as a TimeRange - */ - - }, { - key: "asTimerange", - value: function asTimerange() { - return this._timerange; - } - - /** - * Returns the start date of the Index - */ - - }, { - key: "begin", - value: function begin() { - return this._timerange.begin(); - } - - /** - * Returns the end date of the Index - */ - - }, { - key: "end", - value: function end() { - return this._timerange.end(); - } - - /** - * Return the index string given an index prefix and a datetime object. - */ - - }], [{ - key: "getIndexString", - value: function getIndexString(win, date) { - var pos = _util2.default.windowPositionFromDate(win, date); - return win + "-" + pos; - } - - /** - * Given the time range, return a list of strings of index values every tick. - */ - - }, { - key: "getIndexStringList", - value: function getIndexStringList(win, timerange) { - var pos1 = _util2.default.windowPositionFromDate(win, timerange.begin()); - var pos2 = _util2.default.windowPositionFromDate(win, timerange.end()); - var indexList = []; - if (pos1 <= pos2) { - for (var pos = pos1; pos <= pos2; pos++) { - indexList.push(win + "-" + pos); - } - } - return indexList; - } - - /** - * Generate an index string with day granularity. - */ - - }, { - key: "getDailyIndexString", - value: function getDailyIndexString(date) { - var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var day = _util2.default.leftPad(utc ? date.getUTCDate() : date.getDate()); - var month = _util2.default.leftPad(utc ? date.getUTCMonth() + 1 : date.getMonth() + 1); - var year = utc ? date.getUTCFullYear() : date.getFullYear(); - return year + "-" + month + "-" + day; - } - - /** - * Generate an index string with month granularity. - */ - - }, { - key: "getMonthlyIndexString", - value: function getMonthlyIndexString(date) { - var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var month = _util2.default.leftPad(utc ? date.getUTCMonth() + 1 : date.getMonth() + 1); - var year = utc ? date.getUTCFullYear() : date.getFullYear(); - return year + "-" + month; - } - - /** - * Generate an index string with month granularity. - */ - - }, { - key: "getYearlyIndexString", - value: function getYearlyIndexString(date) { - var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var year = utc ? date.getUTCFullYear() : date.getFullYear(); - return "" + year; - } - }]); - return Index; -}(); /* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -exports.default = Index; \ No newline at end of file + return indexList; + } + /** + * Generate an index string with day granularity. + */ + + + static getDailyIndexString(date) { + var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var day = _util.default.leftPad(utc ? date.getUTCDate() : date.getDate()); + + var month = _util.default.leftPad(utc ? date.getUTCMonth() + 1 : date.getMonth() + 1); + + var year = utc ? date.getUTCFullYear() : date.getFullYear(); + return "".concat(year, "-").concat(month, "-").concat(day); + } + /** + * Generate an index string with month granularity. + */ + + + static getMonthlyIndexString(date) { + var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var month = _util.default.leftPad(utc ? date.getUTCMonth() + 1 : date.getMonth() + 1); + + var year = utc ? date.getUTCFullYear() : date.getFullYear(); + return "".concat(year, "-").concat(month); + } + /** + * Generate an index string with month granularity. + */ + + + static getYearlyIndexString(date) { + var utc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var year = utc ? date.getUTCFullYear() : date.getFullYear(); + return "".concat(year); + } + +} + +var _default = Index; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/indexedevent.js b/lib/lib/indexedevent.js index 822e627..52f919d 100644 --- a/lib/lib/indexedevent.js +++ b/lib/lib/indexedevent.js @@ -1,50 +1,29 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _underscore = _interopRequireDefault(require("underscore")); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _immutable = _interopRequireDefault(require("immutable")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _event = _interopRequireDefault(require("./event")); -var _inherits3 = _interopRequireDefault(_inherits2); +var _util = _interopRequireDefault(require("./base/util")); -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _event = require("./event"); - -var _event2 = _interopRequireDefault(_event); - -var _util = require("./base/util"); - -var _util2 = _interopRequireDefault(_util); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * An `IndexedEvent` uses an `Index` to specify a timerange over which the event @@ -71,183 +50,160 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * The get the data out of an IndexedEvent instance use `data()`. It will return * an Immutable.Map. */ -/* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -var IndexedEvent = function (_Event) { - (0, _inherits3.default)(IndexedEvent, _Event); - - /** - * The creation of an IndexedEvent is done by combining two parts: - * the Index and the data. - * - * To construct you specify an Index, along with the data. - * - * The index may be an Index, or a string. - * - * To specify the data you can supply either: - * - a Javascript object containing key values pairs - * - an Immutable.Map, or - * - a simple type such as an integer. In the case of the simple type - * this is a shorthand for supplying {"value": v}. - */ - function IndexedEvent(arg1, arg2, arg3) { - (0, _classCallCheck3.default)(this, IndexedEvent); - - var _this = (0, _possibleConstructorReturn3.default)(this, (IndexedEvent.__proto__ || (0, _getPrototypeOf2.default)(IndexedEvent)).call(this)); - - if (arg1 instanceof IndexedEvent) { - var other = arg1; - _this._d = other._d; - return (0, _possibleConstructorReturn3.default)(_this); - } else if (arg1 instanceof _immutable2.default.Map) { - _this._d = arg1; - return (0, _possibleConstructorReturn3.default)(_this); - } - var index = _util2.default.indexFromArgs(arg1, arg3); - var data = _util2.default.dataFromArg(arg2); - _this._d = new _immutable2.default.Map({ index: index, data: data }); - return _this; +class IndexedEvent extends _event.default { + /** + * The creation of an IndexedEvent is done by combining two parts: + * the Index and the data. + * + * To construct you specify an Index, along with the data. + * + * The index may be an Index, or a string. + * + * To specify the data you can supply either: + * - a Javascript object containing key values pairs + * - an Immutable.Map, or + * - a simple type such as an integer. In the case of the simple type + * this is a shorthand for supplying {"value": v}. + */ + constructor(arg1, arg2, arg3) { + super(); + + if (arg1 instanceof IndexedEvent) { + var other = arg1; + this._d = other._d; + return; + } else if (arg1 instanceof _immutable.default.Map) { + this._d = arg1; + return; } - /** - * Returns the timestamp (as ms since the epoch) - */ - - - (0, _createClass3.default)(IndexedEvent, [{ - key: "key", - value: function key() { - return this.indexAsString(); - } - - /** - * For Avro serialization, this defines the event's key (the Index) - * as a simple string - */ - - }, { - key: "toJSON", - - - /** - * Express the IndexedEvent as a JSON object - */ - value: function toJSON() { - return { index: this.indexAsString(), data: this.data().toJSON() }; - } - - /** - * Returns a flat array starting with the index, followed by the values. - */ - - }, { - key: "toPoint", - value: function toPoint() { - return [this.indexAsString()].concat((0, _toConsumableArray3.default)(_underscore2.default.values(this.data().toJSON()))); - } - - /** - * Returns the Index associated with the data in this Event - * @return {Index} The Index - */ - - }, { - key: "index", - value: function index() { - return this._d.get("index"); - } - - /** - * Returns the Index as a string, same as event.index().toString() - * @return {string} The Index - */ - - }, { - key: "indexAsString", - value: function indexAsString() { - return this.index().asString(); - } - - /** - * The TimeRange of this data, in UTC, as a string. - * @return {string} TimeRange of this data. - */ - - }, { - key: "timerangeAsUTCString", - value: function timerangeAsUTCString() { - return this.timerange().toUTCString(); - } - - /** - * The TimeRange of this data, in Local time, as a string. - * @return {string} TimeRange of this data. - */ - - }, { - key: "timerangeAsLocalString", - value: function timerangeAsLocalString() { - return this.timerange().toLocalString(); - } - - /** - * The TimeRange of this data - * @return {TimeRange} TimeRange of this data. - */ - - }, { - key: "timerange", - value: function timerange() { - return this.index().asTimerange(); - } - - /** - * The begin time of this Event - * @return {Data} Begin time - */ - - }, { - key: "begin", - value: function begin() { - return this.timerange().begin(); - } - - /** - * The end time of this Event - * @return {Data} End time - */ - - }, { - key: "end", - value: function end() { - return this.timerange().end(); - } - - /** - * Alias for the begin() time. - * @return {Data} Time representing this Event - */ - - }, { - key: "timestamp", - value: function timestamp() { - return this.begin(); - } - }], [{ - key: "keySchema", - value: function keySchema() { - return { name: "index", type: "string" }; - } - }]); - return IndexedEvent; -}(_event2.default); - -exports.default = IndexedEvent; \ No newline at end of file + var index = _util.default.indexFromArgs(arg1, arg3); + + var data = _util.default.dataFromArg(arg2); + + this._d = new _immutable.default.Map({ + index, + data + }); + } + /** + * Returns the timestamp (as ms since the epoch) + */ + + + key() { + return this.indexAsString(); + } + /** + * For Avro serialization, this defines the event's key (the Index) + * as a simple string + */ + + + static keySchema() { + return { + name: "index", + type: "string" + }; + } + /** + * Express the IndexedEvent as a JSON object + */ + + + toJSON() { + return { + index: this.indexAsString(), + data: this.data().toJSON() + }; + } + /** + * Returns a flat array starting with the index, followed by the values. + */ + + + toPoint(columns) { + var values = []; + columns.forEach(c => { + var v = this.data().get(c); + values.push(v === "undefined" ? null : v); + }); + return [this.indexAsString(), ...values]; + } + /** + * Returns the Index associated with the data in this Event + * @return {Index} The Index + */ + + + index() { + return this._d.get("index"); + } + /** + * Returns the Index as a string, same as event.index().toString() + * @return {string} The Index + */ + + + indexAsString() { + return this.index().asString(); + } + /** + * The TimeRange of this data, in UTC, as a string. + * @return {string} TimeRange of this data. + */ + + + timerangeAsUTCString() { + return this.timerange().toUTCString(); + } + /** + * The TimeRange of this data, in Local time, as a string. + * @return {string} TimeRange of this data. + */ + + + timerangeAsLocalString() { + return this.timerange().toLocalString(); + } + /** + * The TimeRange of this data + * @return {TimeRange} TimeRange of this data. + */ + + + timerange() { + return this.index().asTimerange(); + } + /** + * The begin time of this Event + * @return {Data} Begin time + */ + + + begin() { + return this.timerange().begin(); + } + /** + * The end time of this Event + * @return {Data} End time + */ + + + end() { + return this.timerange().end(); + } + /** + * Alias for the begin() time. + * @return {Data} Time representing this Event + */ + + + timestamp() { + return this.begin(); + } + +} + +var _default = IndexedEvent; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/bounded.js b/lib/lib/io/bounded.js index 6856c0d..d6a8bb4 100644 --- a/lib/lib/io/bounded.js +++ b/lib/lib/io/bounded.js @@ -1,68 +1,41 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _pipelinein = require("./pipelinein"); - -var _pipelinein2 = _interopRequireDefault(_pipelinein); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Bounded = function (_PipelineIn) { - (0, _inherits3.default)(Bounded, _PipelineIn); - - function Bounded() { - (0, _classCallCheck3.default)(this, Bounded); - return (0, _possibleConstructorReturn3.default)(this, (Bounded.__proto__ || (0, _getPrototypeOf2.default)(Bounded)).call(this)); - } - - (0, _createClass3.default)(Bounded, [{ - key: "start", - value: function start() { - throw new Error("start() not supported on bounded source."); - } - }, { - key: "stop", - value: function stop() { - throw new Error("stop() not supported on bounded source."); - } - }, { - key: "onEmit", - value: function onEmit() { - throw new Error("You can not setup a listener to a bounded source."); - } - }]); - return Bounded; -}(_pipelinein2.default); /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -exports.default = Bounded; \ No newline at end of file +exports.default = void 0; + +var _pipelinein = _interopRequireDefault(require("./pipelinein")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +class Bounded extends _pipelinein.default { + constructor() { + super(); + } + + start() { + throw new Error("start() not supported on bounded source."); + } + + stop() { + throw new Error("stop() not supported on bounded source."); + } + + onEmit() { + throw new Error("You can not setup a listener to a bounded source."); + } + +} + +var _default = Bounded; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/collectionout.js b/lib/lib/io/collectionout.js index be4c7f8..2859392 100644 --- a/lib/lib/io/collectionout.js +++ b/lib/lib/io/collectionout.js @@ -1,38 +1,15 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _collector = require("../collector"); - -var _collector2 = _interopRequireDefault(_collector); - -var _pipelineout = require("./pipelineout"); +var _collector = _interopRequireDefault(require("../collector")); -var _pipelineout2 = _interopRequireDefault(_pipelineout); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _pipelineout = _interopRequireDefault(require("./pipelineout")); /** * Copyright (c) 2016-2017, The Regents of the University of California, @@ -43,60 +20,55 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ +class CollectionOut extends _pipelineout.default { + constructor(pipeline, options, callback) { + super(pipeline); + this._callback = callback; + this._collector = new _collector.default({ + windowType: pipeline.getWindowType(), + windowDuration: pipeline.getWindowDuration(), + groupBy: pipeline.getGroupBy(), + emitOn: pipeline.getEmitOn() + }, (collection, windowKey, groupByKey) => { + var groupBy = groupByKey ? groupByKey : "all"; + + if (this._callback) { + this._callback(collection, windowKey, groupBy); + } else { + var keys = []; + + if (windowKey !== "global") { + keys.push(windowKey); + } + + if (groupBy !== "all") { + keys.push(groupBy); + } + + var k = keys.length > 0 ? keys.join("--") : "all"; + + this._pipeline.addResult(k, collection); + } + }); + } -var CollectionOut = function (_PipelineOut) { - (0, _inherits3.default)(CollectionOut, _PipelineOut); - - function CollectionOut(pipeline, options, callback) { - (0, _classCallCheck3.default)(this, CollectionOut); - - var _this = (0, _possibleConstructorReturn3.default)(this, (CollectionOut.__proto__ || (0, _getPrototypeOf2.default)(CollectionOut)).call(this, pipeline)); - - _this._callback = callback; - _this._collector = new _collector2.default({ - windowType: pipeline.getWindowType(), - windowDuration: pipeline.getWindowDuration(), - groupBy: pipeline.getGroupBy(), - emitOn: pipeline.getEmitOn() - }, function (collection, windowKey, groupByKey) { - var groupBy = groupByKey ? groupByKey : "all"; - if (_this._callback) { - _this._callback(collection, windowKey, groupBy); - } else { - var keys = []; - if (windowKey !== "global") { - keys.push(windowKey); - } - if (groupBy !== "all") { - keys.push(groupBy); - } - var k = keys.length > 0 ? keys.join("--") : "all"; - _this._pipeline.addResult(k, collection); - } - }); - return _this; + addEvent(event) { + this._collector.addEvent(event); + } + + onEmit(cb) { + this._callback = cb; + } + + flush() { + this._collector.flushCollections(); + + if (!this._callback) { + this._pipeline.resultsDone(); } + } - (0, _createClass3.default)(CollectionOut, [{ - key: "addEvent", - value: function addEvent(event) { - this._collector.addEvent(event); - } - }, { - key: "onEmit", - value: function onEmit(cb) { - this._callback = cb; - } - }, { - key: "flush", - value: function flush() { - this._collector.flushCollections(); - if (!this._callback) { - this._pipeline.resultsDone(); - } - } - }]); - return CollectionOut; -}(_pipelineout2.default); +} -exports.default = CollectionOut; \ No newline at end of file +var _default = CollectionOut; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/eventout.js b/lib/lib/io/eventout.js index a6beb96..43048d6 100644 --- a/lib/lib/io/eventout.js +++ b/lib/lib/io/eventout.js @@ -1,78 +1,48 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; + +var _pipelineout = _interopRequireDefault(require("./pipelineout")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +class EventOut extends _pipelineout.default { + constructor(pipeline, options, callback) { + super(pipeline); + this._callback = callback; + } + + addEvent(event) { + if (this._callback) { + this._callback(event); + } else { + this._pipeline.addResult(event); + } + } -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _pipelineout = require("./pipelineout"); - -var _pipelineout2 = _interopRequireDefault(_pipelineout); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var EventOut = function (_PipelineOut) { - (0, _inherits3.default)(EventOut, _PipelineOut); - - function EventOut(pipeline, options, callback) { - (0, _classCallCheck3.default)(this, EventOut); - - var _this = (0, _possibleConstructorReturn3.default)(this, (EventOut.__proto__ || (0, _getPrototypeOf2.default)(EventOut)).call(this, pipeline)); + onEmit(cb) { + this._callback = cb; + } - _this._callback = callback; - return _this; + flush() { + if (!this._callback) { + this._pipeline.resultsDone(); } + } - (0, _createClass3.default)(EventOut, [{ - key: "addEvent", - value: function addEvent(event) { - if (this._callback) { - this._callback(event); - } else { - this._pipeline.addResult(event); - } - } - }, { - key: "onEmit", - value: function onEmit(cb) { - this._callback = cb; - } - }, { - key: "flush", - value: function flush() { - if (!this._callback) { - this._pipeline.resultsDone(); - } - } - }]); - return EventOut; -}(_pipelineout2.default); /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ +} -exports.default = EventOut; \ No newline at end of file +var _default = EventOut; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/pipelinein.js b/lib/lib/io/pipelinein.js index a7e4f36..cfed02c 100644 --- a/lib/lib/io/pipelinein.js +++ b/lib/lib/io/pipelinein.js @@ -1,38 +1,15 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _underscore = _interopRequireDefault(require("underscore")); -var _inherits3 = _interopRequireDefault(_inherits2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _observable = require("../base/observable"); - -var _observable2 = _interopRequireDefault(_observable); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _observable = _interopRequireDefault(require("../base/observable")); /** * Copyright (c) 2016-2017, The Regents of the University of California, @@ -43,33 +20,24 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ - -var PipelineIn = function (_Observable) { - (0, _inherits3.default)(PipelineIn, _Observable); - - function PipelineIn() { - (0, _classCallCheck3.default)(this, PipelineIn); - - var _this = (0, _possibleConstructorReturn3.default)(this, (PipelineIn.__proto__ || (0, _getPrototypeOf2.default)(PipelineIn)).call(this)); - - _this._id = _underscore2.default.uniqueId("in-"); - _this._type = null; // The type (class) of the events in this In - return _this; +class PipelineIn extends _observable.default { + constructor() { + super(); + this._id = _underscore.default.uniqueId("in-"); + this._type = null; // The type (class) of the events in this In + } + + _check(e) { + if (!this._type) { + this._type = e.type(); + } else { + if (!(e instanceof this._type)) { + throw new Error("Homogeneous events expected."); + } } + } - (0, _createClass3.default)(PipelineIn, [{ - key: "_check", - value: function _check(e) { - if (!this._type) { - this._type = e.type(); - } else { - if (!(e instanceof this._type)) { - throw new Error("Homogeneous events expected."); - } - } - } - }]); - return PipelineIn; -}(_observable2.default); +} -exports.default = PipelineIn; \ No newline at end of file +var _default = PipelineIn; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/pipelineout.js b/lib/lib/io/pipelineout.js index 4dad19f..d291352 100644 --- a/lib/lib/io/pipelineout.js +++ b/lib/lib/io/pipelineout.js @@ -1,32 +1,30 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PipelineOut = function PipelineOut(pipeline) { - (0, _classCallCheck3.default)(this, PipelineOut); - - this._id = _underscore2.default.uniqueId("id-"); +exports.default = void 0; + +var _underscore = _interopRequireDefault(require("underscore")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +class PipelineOut { + constructor(pipeline) { + this._id = _underscore.default.uniqueId("id-"); this._pipeline = pipeline; -}; /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + } + +} -exports.default = PipelineOut; \ No newline at end of file +var _default = PipelineOut; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/io/stream.js b/lib/lib/io/stream.js index 9df1515..ba04070 100644 --- a/lib/lib/io/stream.js +++ b/lib/lib/io/stream.js @@ -1,111 +1,62 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); - -var _regenerator = require("babel-runtime/regenerator"); - -var _regenerator2 = _interopRequireDefault(_regenerator); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _pipelinein = require("./pipelinein"); - -var _pipelinein2 = _interopRequireDefault(_pipelinein); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Stream = function (_PipelineIn) { - (0, _inherits3.default)(Stream, _PipelineIn); - - function Stream() { - (0, _classCallCheck3.default)(this, Stream); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Stream.__proto__ || (0, _getPrototypeOf2.default)(Stream)).call(this)); - - _this._running = true; - return _this; +exports.default = void 0; + +var _pipelinein = _interopRequireDefault(require("./pipelinein")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +class Stream extends _pipelinein.default { + constructor() { + super(); + this._running = true; + } + /** + * Start listening to events + */ + + + start() { + this._running = true; + } + /** + * Stop listening to events + */ + + + stop() { + this._running = false; + this.flush(); // emit a flush to let processors cleanly exit. + } + /** + * Add an incoming event to the source + */ + + + addEvent(event) { + this._check(event); + + if (this.hasObservers() && this._running) { + this.emit(event); } + } - /** - * Start listening to events - */ - - - (0, _createClass3.default)(Stream, [{ - key: "start", - value: function start() { - this._running = true; - } - - /** - * Stop listening to events - */ - - }, { - key: "stop", - value: function stop() { - this._running = false; - this.flush(); // emit a flush to let processors cleanly exit. - } - - /** - * Add an incoming event to the source - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - this._check(event); - if (this.hasObservers() && this._running) { - this.emit(event); - } - } - }, { - key: "events", - value: _regenerator2.default.mark(function events() { - return _regenerator2.default.wrap(function events$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - throw new Error("Iteration across unbounded sources is not supported."); + *events() { + throw new Error("Iteration across unbounded sources is not supported."); + } - case 1: - case "end": - return _context.stop(); - } - } - }, events, this); - }) - }]); - return Stream; -}(_pipelinein2.default); /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ +} exports.default = Stream; \ No newline at end of file diff --git a/lib/lib/pipeline.js b/lib/lib/pipeline.js index 68f78af..3a08804 100644 --- a/lib/lib/pipeline.js +++ b/lib/lib/pipeline.js @@ -1,115 +1,62 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); -exports.isPipeline = exports.Pipeline = undefined; - -var _extends2 = require("babel-runtime/helpers/extends"); - -var _extends3 = _interopRequireDefault(_extends2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _timeevent = require("./timeevent"); - -var _timeevent2 = _interopRequireDefault(_timeevent); - -var _indexedevent = require("./indexedevent"); - -var _indexedevent2 = _interopRequireDefault(_indexedevent); - -var _timerangeevent = require("./timerangeevent"); - -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); - -var _timeseries = require("./timeseries"); - -var _timeseries2 = _interopRequireDefault(_timeseries); - -var _bounded = require("./io/bounded"); - -var _bounded2 = _interopRequireDefault(_bounded); - -var _collectionout = require("./io/collectionout"); - -var _collectionout2 = _interopRequireDefault(_collectionout); - -var _eventout = require("./io/eventout"); - -var _eventout2 = _interopRequireDefault(_eventout); - -var _stream = require("./io/stream"); - -var _stream2 = _interopRequireDefault(_stream); +exports.Pipeline = pipeline; +exports.isPipeline = is; -var _aggregator = require("./processors/aggregator"); +var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); -var _aggregator2 = _interopRequireDefault(_aggregator); +var _immutable = _interopRequireDefault(require("immutable")); -var _aligner = require("./processors/aligner"); +var _underscore = _interopRequireDefault(require("underscore")); -var _aligner2 = _interopRequireDefault(_aligner); +var _timeevent = _interopRequireDefault(require("./timeevent")); -var _collapser = require("./processors/collapser"); +var _indexedevent = _interopRequireDefault(require("./indexedevent")); -var _collapser2 = _interopRequireDefault(_collapser); +var _timerangeevent = _interopRequireDefault(require("./timerangeevent")); -var _converter = require("./processors/converter"); +var _timeseries = _interopRequireDefault(require("./timeseries")); -var _converter2 = _interopRequireDefault(_converter); +var _bounded = _interopRequireDefault(require("./io/bounded")); -var _derivator = require("./processors/derivator"); +var _collectionout = _interopRequireDefault(require("./io/collectionout")); -var _derivator2 = _interopRequireDefault(_derivator); +var _eventout = _interopRequireDefault(require("./io/eventout")); -var _filler = require("./processors/filler"); +var _stream = _interopRequireDefault(require("./io/stream")); -var _filler2 = _interopRequireDefault(_filler); +var _aggregator = _interopRequireDefault(require("./processors/aggregator")); -var _filter = require("./processors/filter"); +var _aligner = _interopRequireDefault(require("./processors/aligner")); -var _filter2 = _interopRequireDefault(_filter); +var _collapser = _interopRequireDefault(require("./processors/collapser")); -var _mapper = require("./processors/mapper"); +var _converter = _interopRequireDefault(require("./processors/converter")); -var _mapper2 = _interopRequireDefault(_mapper); +var _derivator = _interopRequireDefault(require("./processors/derivator")); -var _offset = require("./processors/offset"); +var _filler = _interopRequireDefault(require("./processors/filler")); -var _offset2 = _interopRequireDefault(_offset); +var _filter = _interopRequireDefault(require("./processors/filter")); -var _processor = require("./processors/processor"); +var _mapper = _interopRequireDefault(require("./processors/mapper")); -var _processor2 = _interopRequireDefault(_processor); +var _offset = _interopRequireDefault(require("./processors/offset")); -var _selector = require("./processors/selector"); +var _processor = _interopRequireDefault(require("./processors/processor")); -var _selector2 = _interopRequireDefault(_selector); +var _selector = _interopRequireDefault(require("./processors/selector")); -var _taker = require("./processors/taker"); +var _taker = _interopRequireDefault(require("./processors/taker")); -var _taker2 = _interopRequireDefault(_taker); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /** * A runner is used to extract the chain of processing operations @@ -138,1019 +85,910 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * a time series has a TimeSeries.merge() static method for * this purpose. */ +class Runner { + /** + * Create a new batch runner. + * @param {Pipeline} pipeline The pipeline to run + * @param {PipelineOut} output The output driving this runner + */ + constructor(pipeline, output) { + this._output = output; + this._pipeline = pipeline; // + // We use the pipeline's chain() function to walk the + // DAG back up the tree to the "in" to: + // 1) assemble a list of process nodes that feed into + // this pipeline, the processChain + // 2) determine the _input + // + // TODO: we do not currently support merging, so this is + // a linear chain. + // + var processChain = []; + + if (pipeline.last()) { + processChain = pipeline.last().chain(); + this._input = processChain[0].pipeline().in(); + } else { + this._input = pipeline.in(); + } // + // Using the list of nodes in the tree that will be involved in + // our processing we can build an execution chain. This is the + // chain of processor clones, linked together, for our specific + // processing pipeline. We run this execution chain later by + // evoking start(). + // -// Processors + this._executionChain = [this._output]; + var prev = this._output; + processChain.forEach(p => { + if (p instanceof _processor.default) { + var processor = p.clone(); + if (prev) processor.addObserver(prev); -// I/O -/* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + this._executionChain.push(processor); -var Runner = function () { - /** - * Create a new batch runner. - * @param {Pipeline} pipeline The pipeline to run - * @param {PipelineOut} output The output driving this runner - */ - function Runner(pipeline, output) { - var _this = this; - - (0, _classCallCheck3.default)(this, Runner); - - this._output = output; - this._pipeline = pipeline; - - // - // We use the pipeline's chain() function to walk the - // DAG back up the tree to the "in" to: - // 1) assemble a list of process nodes that feed into - // this pipeline, the processChain - // 2) determine the _input - // - // TODO: we do not currently support merging, so this is - // a linear chain. - // - var processChain = []; - if (pipeline.last()) { - processChain = pipeline.last().chain(); - this._input = processChain[0].pipeline().in(); - } else { - this._input = pipeline.in(); - } - - // - // Using the list of nodes in the tree that will be involved in - // our processing we can build an execution chain. This is the - // chain of processor clones, linked together, for our specific - // processing pipeline. We run this execution chain later by - // evoking start(). - // - this._executionChain = [this._output]; - var prev = this._output; - processChain.forEach(function (p) { - if (p instanceof _processor2.default) { - var processor = p.clone(); - if (prev) processor.addObserver(prev); - _this._executionChain.push(processor); - prev = processor; - } - }); - } + prev = processor; + } + }); + } + /** + * Start the runner + * @param {Boolean} force Force a flush at the end of the batch source + * to cause any buffers to emit. + */ + + + start() { + var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - /** - * Start the runner - * @param {Boolean} force Force a flush at the end of the batch source - * to cause any buffers to emit. - */ - - - (0, _createClass3.default)(Runner, [{ - key: "start", - value: function start() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - // Clear any results ready for the run - this._pipeline.clearResults(); - - // - // The head is the first process node in the execution chain. - // To process the source through the execution chain we add - // each event from the input to the head. - // - var head = this._executionChain.pop(); - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(this._input.events()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var e = _step.value; - - head.addEvent(e); - } - - // - // The runner indicates that it is finished with the bounded - // data by sending a flush() call down the chain. If force is - // set to false (the default) this is never called. - // - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - if (force) { - head.flush(); - } - } - }]); - return Runner; -}(); + // Clear any results ready for the run + this._pipeline.clearResults(); // + // The head is the first process node in the execution chain. + // To process the source through the execution chain we add + // each event from the input to the head. + // + + + var head = this._executionChain.pop(); + + for (var e of this._input.events()) { + head.addEvent(e); + } // + // The runner indicates that it is finished with the bounded + // data by sending a flush() call down the chain. If force is + // set to false (the default) this is never called. + // + + if (force) { + head.flush(); + } + } + +} /** * A pipeline manages a processing chain, for either batch or stream processing * of collection data. */ -var Pipeline = function () { - /** - * Build a new Pipeline. - * - * @param {Pipeline|Immutable.Map|null} [arg] May be either: - * * a Pipeline (copy contructor) - * * an Immutable.Map, in which case the internal state of the - * Pipeline will be contructed from the Map - * * not specified - * - * Usually you would initialize a Pipeline using the factory - * function, rather than this object directly with `new`. - * - * @example - * ``` - * import { Pipeline } from "pondjs"; - * const p = Pipeline()...` - * ``` - * - * @return {Pipeline} The Pipeline - */ - function Pipeline(arg) { - (0, _classCallCheck3.default)(this, Pipeline); - - if (arg instanceof Pipeline) { - var other = arg; - this._d = other._d; - } else if (arg instanceof _immutable2.default.Map) { - this._d = arg; - } else { - this._d = new _immutable2.default.Map({ - type: null, - in: null, - first: null, - last: null, - groupBy: function groupBy() { - return ""; - }, - windowType: "global", - windowDuration: null, - emitOn: "eachEvent" - }); - } +class Pipeline { + /** + * Build a new Pipeline. + * + * @param {Pipeline|Immutable.Map|null} [arg] May be either: + * * a Pipeline (copy contructor) + * * an Immutable.Map, in which case the internal state of the + * Pipeline will be contructed from the Map + * * not specified + * + * Usually you would initialize a Pipeline using the factory + * function, rather than this object directly with `new`. + * + * @example + * ``` + * import { Pipeline } from "pondjs"; + * const p = Pipeline()...` + * ``` + * + * @return {Pipeline} The Pipeline + */ + constructor(arg) { + if (arg instanceof Pipeline) { + var other = arg; + this._d = other._d; + } else if (arg instanceof _immutable.default.Map) { + this._d = arg; + } else { + this._d = new _immutable.default.Map({ + type: null, + in: null, + first: null, + last: null, + groupBy: () => "", + windowType: "global", + windowDuration: null, + emitOn: "eachEvent" + }); + } + + this._results = []; + } // + // Accessors to the current Pipeline state + // + + + in() { + return this._d.get("in"); + } + + mode() { + return this._d.get("mode"); + } + + first() { + return this._d.get("first"); + } + + last() { + return this._d.get("last"); + } + + getWindowType() { + return this._d.get("windowType"); + } + + getWindowDuration() { + return this._d.get("windowDuration"); + } + + getGroupBy() { + return this._d.get("groupBy"); + } + + getEmitOn() { + return this._d.get("emitOn"); + } // + // Results + // + + + clearResults() { + this._resultsDone = false; + this._results = null; + } + + addResult(arg1, arg2) { + if (!this._results) { + if (_underscore.default.isString(arg1) && arg2) { + this._results = {}; + } else { this._results = []; + } } - // - // Accessors to the current Pipeline state - // + if (_underscore.default.isString(arg1) && arg2) { + this._results[arg1] = arg2; + } else { + this._results.push(arg1); + } + this._resultsDone = false; + } + + resultsDone() { + this._resultsDone = true; + } // + // Pipeline mutations + // + + /** + * Setting the In for the Pipeline returns a new Pipeline + * + * @private + */ + + + _setIn(input) { + var mode; + var source = input; + + if (input instanceof _timeseries.default) { + mode = "batch"; + source = input.collection(); + } else if (input instanceof _bounded.default) { + mode = "batch"; + } else if (input instanceof _stream.default) { + mode = "stream"; + } else { + throw new Error("Unknown input type", input); + } - (0, _createClass3.default)(Pipeline, [{ - key: "in", - value: function _in() { - return this._d.get("in"); - } - }, { - key: "mode", - value: function mode() { - return this._d.get("mode"); - } - }, { - key: "first", - value: function first() { - return this._d.get("first"); - } - }, { - key: "last", - value: function last() { - return this._d.get("last"); - } - }, { - key: "getWindowType", - value: function getWindowType() { - return this._d.get("windowType"); - } - }, { - key: "getWindowDuration", - value: function getWindowDuration() { - return this._d.get("windowDuration"); - } - }, { - key: "getGroupBy", - value: function getGroupBy() { - return this._d.get("groupBy"); - } - }, { - key: "getEmitOn", - value: function getEmitOn() { - return this._d.get("emitOn"); - } - - // - // Results - // - - }, { - key: "clearResults", - value: function clearResults() { - this._resultsDone = false; - this._results = null; - } - }, { - key: "addResult", - value: function addResult(arg1, arg2) { - if (!this._results) { - if (_underscore2.default.isString(arg1) && arg2) { - this._results = {}; - } else { - this._results = []; - } - } - - if (_underscore2.default.isString(arg1) && arg2) { - this._results[arg1] = arg2; - } else { - this._results.push(arg1); - } - this._resultsDone = false; - } - }, { - key: "resultsDone", - value: function resultsDone() { - this._resultsDone = true; - } - - // - // Pipeline mutations - // - /** - * Setting the In for the Pipeline returns a new Pipeline - * - * @private - */ - - }, { - key: "_setIn", - value: function _setIn(input) { - var mode = void 0; - var source = input; - if (input instanceof _timeseries2.default) { - mode = "batch"; - source = input.collection(); - } else if (input instanceof _bounded2.default) { - mode = "batch"; - } else if (input instanceof _stream2.default) { - mode = "stream"; - } else { - throw new Error("Unknown input type", input); - } - - var d = this._d.withMutations(function (map) { - map.set("in", source).set("mode", mode); - }); - - return new Pipeline(d); - } - - /** - * Set the first processing node pointed to, returning - * a new Pipeline. The original pipeline will still point - * to its orginal processing node. - * - * @private - */ - - }, { - key: "_setFirst", - value: function _setFirst(n) { - var d = this._d.set("first", n); - return new Pipeline(d); - } - - /** - * Set the last processing node pointed to, returning - * a new Pipeline. The original pipeline will still point - * to its orginal processing node. - * - * @private - */ - - }, { - key: "_setLast", - value: function _setLast(n) { - var d = this._d.set("last", n); - return new Pipeline(d); - } - - /** - * @private - */ - - }, { - key: "_append", - value: function _append(processor) { - var first = this.first(); - var last = this.last(); - - if (!first) first = processor; - if (last) last.addObserver(processor); - last = processor; - - var d = this._d.withMutations(function (map) { - map.set("first", first).set("last", last); - }); - return new Pipeline(d); - } - }, { - key: "_chainPrev", - value: function _chainPrev() { - return this.last() || this; - } - - // - // Pipeline state chained methods - // - /** - * Set the window, returning a new Pipeline. A new window will - * have a type and duration associated with it. Current available - * types are: - * * fixed (e.g. every 5m) - * * calendar based windows (e.g. every month) - * - * Windows are a type of grouping. Typically you'd define a window - * on the pipeline before doing an aggregation or some other operation - * on the resulting grouped collection. You can combine window-based - * grouping with key-grouping (see groupBy()). - * - * There are several ways to define a window. The general format is - * an options object containing a `type` field and a `duration` field. - * - * Currently the only accepted type is `fixed`, but others are planned. - * For duration, this is a duration string, for example "30s" or "1d". - * Supported are: seconds (s), minutes (m), hours (h) and days (d). - * - * If no arg is supplied, the window type is set to 'global' and there - * is no duration. - * - * There is also a short-cut notation for a fixed window or a calendar - * window. Simply supplying the duration string ("30s" for example) will - * result in a `fixed` window type with the supplied duration. - * - * Calendar types are specified by simply specifying "daily", "monthly" - * or "yearly". - * - * @param {string|object} w Window or duration - See above - * @return {Pipeline} The Pipeline - */ - - }, { - key: "windowBy", - value: function windowBy(w) { - var type = void 0, - duration = void 0; - if (_underscore2.default.isString(w)) { - if (w === "daily" || w === "monthly" || w === "yearly") { - type = w; - } else { - // assume fixed window with size w - type = "fixed"; - duration = w; - } - } else if (_underscore2.default.isObject(w)) { - type = w.type; - duration = w.duration; - } else { - type = "global"; - duration = null; - } - - var d = this._d.withMutations(function (map) { - map.set("windowType", type).set("windowDuration", duration); - }); - - return new Pipeline(d); - } - - /** - * Remove windowing from the Pipeline. This will - * return the pipeline to no window grouping. This is - * useful if you have first done some aggregated by - * some window size and then wish to collect together - * the all resulting events. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "clearWindow", - value: function clearWindow() { - return this.windowBy(); - } - - /** - * Sets a new key grouping. Returns a new Pipeline. - * - * Grouping is a state set on the Pipeline. Operations downstream - * of the group specification will use that state. For example, an - * aggregation would occur over any grouping specified. You can - * combine a key grouping with windowing (see windowBy()). - * - * Note: the key, if it is a field path, is not a list of multiple - * columns, it is the path to a single column to pull group by keys - * from. For example, a column called 'status' that contains the - * values 'OK' and 'FAIL' - then the key would be 'status' and two - * collections OK and FAIL will be generated. - * - * @param {function|array|string} k The key to group by. - * You can groupBy using a function - * `(event) => return key`, - * a field path (a field name, or dot - * delimitted path to a field), - * or a array of field paths. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "groupBy", - value: function groupBy(k) { - var grp = void 0; - var groupBy = k || "value"; - if (_underscore2.default.isFunction(groupBy)) { - // group using a user defined function - // (event) => key - grp = groupBy; - } else if (_underscore2.default.isArray(groupBy)) { - // group by several column values - grp = function grp(e) { - return _underscore2.default.map(groupBy, function (c) { - return "" + e.get(c); - }).join("::"); - }; - } else if (_underscore2.default.isString(groupBy)) { - // group by a column value - grp = function grp(e) { - return "" + e.get(groupBy); - }; - } else { - // Reset to no grouping - grp = function grp() { - return ""; - }; - } - - var d = this._d.withMutations(function (map) { - map.set("groupBy", grp); - }); - - return new Pipeline(d); - } - - /** - * Remove the grouping from the pipeline. In other words - * recombine the events. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "clearGroupBy", - value: function clearGroupBy() { - return this.groupBy(); - } - - /** - * Sets the condition under which an accumulated collection will - * be emitted. If specified before an aggregation this will control - * when the resulting event will be emitted relative to the - * window accumulation. Current options are: - * * to emit on every event, or - * * just when the collection is complete, or - * * when a flush signal is received, either manually calling done(), - * or at the end of a bounded source - * - * The difference will depend on the output you want, how often - * you want to get updated, and if you need to get a partial state. - * There's currently no support for late data or watermarks. If an - * event passes comes in after a collection window, that collection - * is considered finished. - * - * @param {string} trigger A string indicating how to trigger a - * Collection should be emitted. May be: - * * "eachEvent" - when a new event comes in, all currently - * maintained collections will emit their result - * * "discard" - when a collection is to be discarded, - * first it will emit. But only then. - * * "flush" - when a flush signal is received - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "emitOn", - value: function emitOn(trigger) { - var d = this._d.set("emitOn", trigger); - return new Pipeline(d); - } - - // - // I/O - // - /** - * The source to get events from. The source needs to be able to - * iterate its events using `for..of` loop for bounded Ins, or - * be able to emit() for unbounded Ins. The actual batch, or stream - * connection occurs when an output is defined with `to()`. - * - * Pipelines can be chained together since a source may be another - * Pipeline. - * - * @param {Bounded|Stream} src The source for the Pipeline - * @return {Pipeline} The Pipeline - */ - - }, { - key: "from", - value: function from(src) { - return this._setIn(src); - } - - /** - * Directly return the results from the processor rather than - * feeding to a callback. This breaks the chain, causing a result to - * be returned (the array of events) rather than a reference to the - * Pipeline itself. This function is only available for sync batch - * processing. - * - * @return {array|map} Returns the _results attribute from a Pipeline - * object after processing. Will contain Collection - * objects. - */ - - }, { - key: "toEventList", - value: function toEventList() { - return this.to(_eventout2.default); - } - - /** - * Directly return the results from the processor rather than - * passing a callback in. This breaks the chain, causing a result to - * be returned (the collections) rather than a reference to the - * Pipeline itself. This function is only available for sync batch - * processing. - * - * @return {array|map} Returns the _results attribute from a Pipeline - * object after processing. Will contain Collection - * objects. - */ - - }, { - key: "toKeyedCollections", - value: function toKeyedCollections() { - var result = this.to(_collectionout2.default); - if (result) { - return result; - } else { - return {}; - } - } - - /** - * Sets up the destination sink for the pipeline. - * - * For a batch mode connection, i.e. one with a Bounded source, - * the output is connected to a clone of the parts of the Pipeline dependencies - * that lead to this output. This is done by a Runner. The source input is - * then iterated over to process all events into the pipeline and though to the Out. - * - * For stream mode connections, the output is connected and from then on - * any events added to the input will be processed down the pipeline to - * the out. - * - * @example - * ``` - * const p = Pipeline() - * ... - * .to(EventOut, {}, event => { - * result[`${event.index()}`] = event; - * }); - * ``` - * @return {Pipeline} The Pipeline - */ - - }, { - key: "to", - value: function to(arg1, arg2, arg3) { - var Out = arg1; - var observer = void 0; - var options = {}; - - if (_underscore2.default.isFunction(arg2)) { - observer = arg2; - } else if (_underscore2.default.isObject(arg2)) { - options = arg2; - observer = arg3; - } - - if (!this.in()) { - throw new Error("Tried to eval pipeline without a In. Missing from() in chain?"); - } - - var out = new Out(this, options, observer); - - if (this.mode() === "batch") { - var runner = new Runner(this, out); - runner.start(true); - if (this._resultsDone && !observer) { - return this._results; - } - } else if (this.mode() === "stream") { - var _out = new Out(this, options, observer); - if (this.first()) { - this.in().addObserver(this.first()); - } - if (this.last()) { - this.last().addObserver(_out); - } else { - this.in().addObserver(_out); - } - } - - return this; - } - - /** - * Outputs the count of events - * - * @param {function} observer The callback function. This will be - * passed the count, the windowKey and - * the groupByKey - * @param {Boolean} force Flush at the end of processing batch - * events, output again with possibly partial - * result. - * @return {Pipeline} The Pipeline - */ - - }, { - key: "count", - value: function count(observer) { - var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - return this.to(_collectionout2.default, function (collection, windowKey, groupByKey) { - observer(collection.size(), windowKey, groupByKey); - }, force); - } - - // - // Processors - // - /** - * Processor to offset a set of fields by a value. Mostly used for - * testing processor and pipeline operations with a simple operation. - * - * @param {number} by The amount to offset by - * @param {string|array} fieldSpec The field(s) - * - * @return {Pipeline} The modified Pipeline - */ - - }, { - key: "offsetBy", - value: function offsetBy(by, fieldSpec) { - var p = new _offset2.default(this, { by: by, fieldSpec: fieldSpec, prev: this._chainPrev() }); - - return this._append(p); - } - - /** - * Uses the current Pipeline windowing and grouping - * state to build collections of events and aggregate them. - * - * `IndexedEvent`s will be emitted out of the aggregator based - * on the `emitOn` state of the Pipeline. - * - * To specify what part of the incoming events should - * be aggregated together you specify a `fields` - * object. This is a map from fieldName to operator. - * - * @example - * - * ``` - * import { Pipeline, EventOut, functions } from "pondjs"; - * const { avg } = functions; - * - * const p = Pipeline() - * .from(input) - * .windowBy("1h") // 1 day fixed windows - * .emitOn("eachEvent") // emit result on each event - * .aggregate({ - * in_avg: {in: avg}, - * out_avg: {in: avg} - * }) - * .asTimeEvents() - * .to(EventOut, {}, event => { - * result[`${event.index()}`] = event; // Result - * }); - * ``` - * - * @param {object} fields Fields and operators to be aggregated - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "aggregate", - value: function aggregate(fields) { - var p = new _aggregator2.default(this, { fields: fields, prev: this._chainPrev() }); - return this._append(p); - } - - /** - * Converts incoming TimeRangeEvents or IndexedEvents to - * TimeEvents. This is helpful since some processors, - * especially aggregators, will emit TimeRangeEvents or - * IndexedEvents, which may be unsuitable for some applications. - * - * @param {object} options To convert to an TimeEvent you need - * to convert a time range to a single time. There are three options: - * 1. use the beginning time (options = {alignment: "lag"}) - * 2. use the center time (options = {alignment: "center"}) - * 3. use the end time (options = {alignment: "lead"}) - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "asTimeEvents", - value: function asTimeEvents(options) { - var type = _timeevent2.default; - var p = new _converter2.default(this, (0, _extends3.default)({ - type: type - }, options, { - prev: this._chainPrev() - })); - - return this._append(p); - } - - /** - * Map the event stream using an operator - * - * @param {function} op A function that returns a new Event - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "map", - value: function map(op) { - var p = new _mapper2.default(this, { op: op, prev: this._chainPrev() }); - - return this._append(p); - } - - /** - * Filter the event stream using an operator - * - * @param {function} op A function that returns true or false - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "filter", - value: function filter(op) { - var p = new _filter2.default(this, { op: op, prev: this._chainPrev() }); - - return this._append(p); - } - - /** - * Select a subset of columns - * - * @param {string|array} fieldSpec Column or columns to look up. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * If not supplied, the 'value' column will be used. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "select", - value: function select(fieldSpec) { - var p = new _selector2.default(this, { fieldSpec: fieldSpec, prev: this._chainPrev() }); - - return this._append(p); - } - - /** - * Collapse a subset of columns using a reducer function - * - * @example - * - * ``` - * const timeseries = new TimeSeries(inOutData); - * Pipeline() - * .from(timeseries) - * .collapse(["in", "out"], "in_out_sum", sum) - * .emitOn("flush") - * .to(CollectionOut, c => { - * const ts = new TimeSeries({name: "subset", collection: c}); - * ... - * }, true); - * ``` - * @param {string|array} fieldSpecList Column or columns to collapse. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * @param {string} name The resulting output column's name - * @param {function} reducer Function to use to do the reduction - * @param {boolean} append Add the new column to the existing ones, - * or replace them. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "collapse", - value: function collapse(fieldSpecList, name, reducer, append) { - var p = new _collapser2.default(this, { - fieldSpecList: fieldSpecList, - name: name, - reducer: reducer, - append: append, - prev: this._chainPrev() - }); - - return this._append(p); - } - - /** - * Take the data in this event steam and "fill" any missing - * or invalid values. This could be setting `null` values to `0` - * so mathematical operations will succeed, interpolate a new - * value, or pad with the previously given value. - * - * If one wishes to limit the number of filled events in the result - * set, use Pipeline.keep() in the chain. See: TimeSeries.fill() - * for an example. - * - * Fill takes a single arg `options` which should be composed of: - * * fieldSpec - Column or columns to look up. If you need - * to retrieve multiple deep nested values that - * ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * * method - Filling method: zero | linear | pad - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "fill", - value: function fill(_ref) { - var _ref$fieldSpec = _ref.fieldSpec, - fieldSpec = _ref$fieldSpec === undefined ? null : _ref$fieldSpec, - _ref$method = _ref.method, - method = _ref$method === undefined ? "linear" : _ref$method, - _ref$limit = _ref.limit, - limit = _ref$limit === undefined ? null : _ref$limit; - - var prev = this._chainPrev(); - return this._append(new _filler2.default(this, { - fieldSpec: fieldSpec, - method: method, - limit: limit, - prev: prev - })); - } - }, { - key: "align", - value: function align(fieldSpec, window, method, limit) { - var prev = this._chainPrev(); - return this._append(new _aligner2.default(this, { - fieldSpec: fieldSpec, - window: window, - method: method, - limit: limit, - prev: prev - })); - } - }, { - key: "rate", - value: function rate(fieldSpec) { - var allowNegative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - var p = new _derivator2.default(this, { - fieldSpec: fieldSpec, - allowNegative: allowNegative, - prev: this._chainPrev() - }); - - return this._append(p); - } - - /** - * Take events up to the supplied limit, per key. - * - * @param {number} limit Integer number of events to take - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "take", - value: function take(limit) { - var p = new _taker2.default(this, { limit: limit, prev: this._chainPrev() }); - - return this._append(p); - } - - /** - * Converts incoming Events or IndexedEvents to TimeRangeEvents. - * - * @param {object} options To convert from an Event you need - * to convert a single time to a time range. To control this you - * need to specify the duration of that time range, along with - * the positioning (alignment) of the time range with respect to - * the time stamp of the Event. - * - * There are three option for alignment: - * 1. time range will be in front of the timestamp (options = {alignment: "front"}) - * 2. time range will be centered on the timestamp (options = {alignment: "center"}) - * 3. time range will be positoned behind the timestamp (options = {alignment: "behind"}) - * - * The duration is of the form "1h" for one hour, "30s" for 30 seconds and so on. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "asTimeRangeEvents", - value: function asTimeRangeEvents(options) { - var type = _timerangeevent2.default; - var p = new _converter2.default(this, (0, _extends3.default)({ - type: type - }, options, { - prev: this._chainPrev() - })); - - return this._append(p); - } - - /** - * Converts incoming Events to IndexedEvents. - * - * Note: It isn't possible to convert TimeRangeEvents to IndexedEvents. - * - * @param {Object} options An object containing the conversion - * options. In this case the duration string of the Index is expected. - * @param {string} options.duration The duration string is of the form "1h" for one hour, "30s" - * for 30 seconds and so on. - * - * @return {Pipeline} The Pipeline - */ - - }, { - key: "asIndexedEvents", - value: function asIndexedEvents(options) { - var type = _indexedevent2.default; - var p = new _converter2.default(this, (0, _extends3.default)({ - type: type - }, options, { - prev: this._chainPrev() - })); - return this._append(p); - } - }]); - return Pipeline; -}(); + var d = this._d.withMutations(map => { + map.set("in", source).set("mode", mode); + }); + + return new Pipeline(d); + } + /** + * Set the first processing node pointed to, returning + * a new Pipeline. The original pipeline will still point + * to its orginal processing node. + * + * @private + */ + + + _setFirst(n) { + var d = this._d.set("first", n); + + return new Pipeline(d); + } + /** + * Set the last processing node pointed to, returning + * a new Pipeline. The original pipeline will still point + * to its orginal processing node. + * + * @private + */ + + + _setLast(n) { + var d = this._d.set("last", n); + + return new Pipeline(d); + } + /** + * @private + */ + + + _append(processor) { + var first = this.first(); + var last = this.last(); + if (!first) first = processor; + if (last) last.addObserver(processor); + last = processor; + + var d = this._d.withMutations(map => { + map.set("first", first).set("last", last); + }); + + return new Pipeline(d); + } + + _chainPrev() { + return this.last() || this; + } // + // Pipeline state chained methods + // + + /** + * Set the window, returning a new Pipeline. A new window will + * have a type and duration associated with it. Current available + * types are: + * * fixed (e.g. every 5m) + * * calendar based windows (e.g. every month) + * + * Windows are a type of grouping. Typically you'd define a window + * on the pipeline before doing an aggregation or some other operation + * on the resulting grouped collection. You can combine window-based + * grouping with key-grouping (see groupBy()). + * + * There are several ways to define a window. The general format is + * an options object containing a `type` field and a `duration` field. + * + * Currently the only accepted type is `fixed`, but others are planned. + * For duration, this is a duration string, for example "30s" or "1d". + * Supported are: seconds (s), minutes (m), hours (h) and days (d). + * + * If no arg is supplied, the window type is set to 'global' and there + * is no duration. + * + * There is also a short-cut notation for a fixed window or a calendar + * window. Simply supplying the duration string ("30s" for example) will + * result in a `fixed` window type with the supplied duration. + * + * Calendar types are specified by simply specifying "daily", "monthly" + * or "yearly". + * + * @param {string|object} w Window or duration - See above + * @return {Pipeline} The Pipeline + */ + + + windowBy(w) { + var type, duration; + + if (_underscore.default.isString(w)) { + if (w === "daily" || w === "monthly" || w === "yearly") { + type = w; + } else { + // assume fixed window with size w + type = "fixed"; + duration = w; + } + } else if (_underscore.default.isObject(w)) { + type = w.type; + duration = w.duration; + } else { + type = "global"; + duration = null; + } + + var d = this._d.withMutations(map => { + map.set("windowType", type).set("windowDuration", duration); + }); + + return new Pipeline(d); + } + /** + * Remove windowing from the Pipeline. This will + * return the pipeline to no window grouping. This is + * useful if you have first done some aggregated by + * some window size and then wish to collect together + * the all resulting events. + * + * @return {Pipeline} The Pipeline + */ + + + clearWindow() { + return this.windowBy(); + } + /** + * Sets a new key grouping. Returns a new Pipeline. + * + * Grouping is a state set on the Pipeline. Operations downstream + * of the group specification will use that state. For example, an + * aggregation would occur over any grouping specified. You can + * combine a key grouping with windowing (see windowBy()). + * + * Note: the key, if it is a field path, is not a list of multiple + * columns, it is the path to a single column to pull group by keys + * from. For example, a column called 'status' that contains the + * values 'OK' and 'FAIL' - then the key would be 'status' and two + * collections OK and FAIL will be generated. + * + * @param {function|array|string} k The key to group by. + * You can groupBy using a function + * `(event) => return key`, + * a field path (a field name, or dot + * delimitted path to a field), + * or a array of field paths. + * + * @return {Pipeline} The Pipeline + */ + + + groupBy(k) { + var grp; + var groupBy = k || "value"; + + if (_underscore.default.isFunction(groupBy)) { + // group using a user defined function + // (event) => key + grp = groupBy; + } else if (_underscore.default.isArray(groupBy)) { + // group by several column values + grp = e => _underscore.default.map(groupBy, c => "".concat(e.get(c))).join("::"); + } else if (_underscore.default.isString(groupBy)) { + // group by a column value + grp = e => "".concat(e.get(groupBy)); + } else { + // Reset to no grouping + grp = () => ""; + } + + var d = this._d.withMutations(map => { + map.set("groupBy", grp); + }); + + return new Pipeline(d); + } + /** + * Remove the grouping from the pipeline. In other words + * recombine the events. + * + * @return {Pipeline} The Pipeline + */ + + + clearGroupBy() { + return this.groupBy(); + } + /** + * Sets the condition under which an accumulated collection will + * be emitted. If specified before an aggregation this will control + * when the resulting event will be emitted relative to the + * window accumulation. Current options are: + * * to emit on every event, or + * * just when the collection is complete, or + * * when a flush signal is received, either manually calling done(), + * or at the end of a bounded source + * + * The difference will depend on the output you want, how often + * you want to get updated, and if you need to get a partial state. + * There's currently no support for late data or watermarks. If an + * event passes comes in after a collection window, that collection + * is considered finished. + * + * @param {string} trigger A string indicating how to trigger a + * Collection should be emitted. May be: + * * "eachEvent" - when a new event comes in, all currently + * maintained collections will emit their result + * * "discard" - when a collection is to be discarded, + * first it will emit. But only then. + * * "flush" - when a flush signal is received + * + * @return {Pipeline} The Pipeline + */ + + + emitOn(trigger) { + var d = this._d.set("emitOn", trigger); + + return new Pipeline(d); + } // + // I/O + // + + /** + * The source to get events from. The source needs to be able to + * iterate its events using `for..of` loop for bounded Ins, or + * be able to emit() for unbounded Ins. The actual batch, or stream + * connection occurs when an output is defined with `to()`. + * + * Pipelines can be chained together since a source may be another + * Pipeline. + * + * @param {Bounded|Stream} src The source for the Pipeline + * @return {Pipeline} The Pipeline + */ + + + from(src) { + return this._setIn(src); + } + /** + * Directly return the results from the processor rather than + * feeding to a callback. This breaks the chain, causing a result to + * be returned (the array of events) rather than a reference to the + * Pipeline itself. This function is only available for sync batch + * processing. + * + * @return {array|map} Returns the _results attribute from a Pipeline + * object after processing. Will contain Collection + * objects. + */ + + + toEventList() { + return this.to(_eventout.default); + } + /** + * Directly return the results from the processor rather than + * passing a callback in. This breaks the chain, causing a result to + * be returned (the collections) rather than a reference to the + * Pipeline itself. This function is only available for sync batch + * processing. + * + * @return {array|map} Returns the _results attribute from a Pipeline + * object after processing. Will contain Collection + * objects. + */ + + + toKeyedCollections() { + var result = this.to(_collectionout.default); + + if (result) { + return result; + } else { + return {}; + } + } + /** + * Sets up the destination sink for the pipeline. + * + * For a batch mode connection, i.e. one with a Bounded source, + * the output is connected to a clone of the parts of the Pipeline dependencies + * that lead to this output. This is done by a Runner. The source input is + * then iterated over to process all events into the pipeline and though to the Out. + * + * For stream mode connections, the output is connected and from then on + * any events added to the input will be processed down the pipeline to + * the out. + * + * @example + * ``` + * const p = Pipeline() + * ... + * .to(EventOut, {}, event => { + * result[`${event.index()}`] = event; + * }); + * ``` + * @return {Pipeline} The Pipeline + */ + + + to(arg1, arg2, arg3) { + var Out = arg1; + var observer; + var options = {}; + + if (_underscore.default.isFunction(arg2)) { + observer = arg2; + } else if (_underscore.default.isObject(arg2)) { + options = arg2; + observer = arg3; + } + + if (!this.in()) { + throw new Error("Tried to eval pipeline without a In. Missing from() in chain?"); + } + + var out = new Out(this, options, observer); + + if (this.mode() === "batch") { + var runner = new Runner(this, out); + runner.start(true); + + if (this._resultsDone && !observer) { + return this._results; + } + } else if (this.mode() === "stream") { + var _out = new Out(this, options, observer); + + if (this.first()) { + this.in().addObserver(this.first()); + } + + if (this.last()) { + this.last().addObserver(_out); + } else { + this.in().addObserver(_out); + } + } + + return this; + } + /** + * Outputs the count of events + * + * @param {function} observer The callback function. This will be + * passed the count, the windowKey and + * the groupByKey + * @param {Boolean} force Flush at the end of processing batch + * events, output again with possibly partial + * result. + * @return {Pipeline} The Pipeline + */ + + + count(observer) { + var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + return this.to(_collectionout.default, (collection, windowKey, groupByKey) => { + observer(collection.size(), windowKey, groupByKey); + }, force); + } // + // Processors + // + + /** + * Processor to offset a set of fields by a value. Mostly used for + * testing processor and pipeline operations with a simple operation. + * + * @param {number} by The amount to offset by + * @param {string|array} fieldSpec The field(s) + * + * @return {Pipeline} The modified Pipeline + */ + + + offsetBy(by, fieldSpec) { + var p = new _offset.default(this, { + by, + fieldSpec, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Uses the current Pipeline windowing and grouping + * state to build collections of events and aggregate them. + * + * `IndexedEvent`s will be emitted out of the aggregator based + * on the `emitOn` state of the Pipeline. + * + * To specify what part of the incoming events should + * be aggregated together you specify a `fields` + * object. This is a map from fieldName to operator. + * + * @example + * + * ``` + * import { Pipeline, EventOut, functions } from "pondjs"; + * const { avg } = functions; + * + * const p = Pipeline() + * .from(input) + * .windowBy("1h") // 1 day fixed windows + * .emitOn("eachEvent") // emit result on each event + * .aggregate({ + * in_avg: {in: avg}, + * out_avg: {in: avg} + * }) + * .asTimeEvents() + * .to(EventOut, {}, event => { + * result[`${event.index()}`] = event; // Result + * }); + * ``` + * + * @param {object} fields Fields and operators to be aggregated + * + * @return {Pipeline} The Pipeline + */ + + + aggregate(fields) { + var p = new _aggregator.default(this, { + fields, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Converts incoming TimeRangeEvents or IndexedEvents to + * TimeEvents. This is helpful since some processors, + * especially aggregators, will emit TimeRangeEvents or + * IndexedEvents, which may be unsuitable for some applications. + * + * @param {object} options To convert to an TimeEvent you need + * to convert a time range to a single time. There are three options: + * 1. use the beginning time (options = {alignment: "lag"}) + * 2. use the center time (options = {alignment: "center"}) + * 3. use the end time (options = {alignment: "lead"}) + * + * @return {Pipeline} The Pipeline + */ + + + asTimeEvents(options) { + var type = _timeevent.default; + var p = new _converter.default(this, _objectSpread({ + type + }, options, { + prev: this._chainPrev() + })); + return this._append(p); + } + /** + * Map the event stream using an operator + * + * @param {function} op A function that returns a new Event + * + * @return {Pipeline} The Pipeline + */ + + + map(op) { + var p = new _mapper.default(this, { + op, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Filter the event stream using an operator + * + * @param {function} op A function that returns true or false + * + * @return {Pipeline} The Pipeline + */ + + + filter(op) { + var p = new _filter.default(this, { + op, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Select a subset of columns + * + * @param {string|array} fieldSpec Column or columns to look up. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * If not supplied, the 'value' column will be used. + * + * @return {Pipeline} The Pipeline + */ + + + select(fieldSpec) { + var p = new _selector.default(this, { + fieldSpec, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Collapse a subset of columns using a reducer function + * + * @example + * + * ``` + * const timeseries = new TimeSeries(inOutData); + * Pipeline() + * .from(timeseries) + * .collapse(["in", "out"], "in_out_sum", sum) + * .emitOn("flush") + * .to(CollectionOut, c => { + * const ts = new TimeSeries({name: "subset", collection: c}); + * ... + * }, true); + * ``` + * @param {string|array} fieldSpecList Column or columns to collapse. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * @param {string} name The resulting output column's name + * @param {function} reducer Function to use to do the reduction + * @param {boolean} append Add the new column to the existing ones, + * or replace them. + * + * @return {Pipeline} The Pipeline + */ + + + collapse(fieldSpecList, name, reducer, append) { + var p = new _collapser.default(this, { + fieldSpecList, + name, + reducer, + append, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Take the data in this event steam and "fill" any missing + * or invalid values. This could be setting `null` values to `0` + * so mathematical operations will succeed, interpolate a new + * value, or pad with the previously given value. + * + * If one wishes to limit the number of filled events in the result + * set, use Pipeline.keep() in the chain. See: TimeSeries.fill() + * for an example. + * + * Fill takes a single arg `options` which should be composed of: + * * fieldSpec - Column or columns to look up. If you need + * to retrieve multiple deep nested values that + * ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * * method - Filling method: zero | linear | pad + * + * @return {Pipeline} The Pipeline + */ + + + fill(_ref) { + var { + fieldSpec = null, + method = "linear", + limit = null + } = _ref; + + var prev = this._chainPrev(); + + return this._append(new _filler.default(this, { + fieldSpec, + method, + limit, + prev + })); + } + + align(fieldSpec, window, method, limit) { + var prev = this._chainPrev(); + + return this._append(new _aligner.default(this, { + fieldSpec, + window, + method, + limit, + prev + })); + } + + rate(fieldSpec) { + var allowNegative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var p = new _derivator.default(this, { + fieldSpec, + allowNegative, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Take events up to the supplied limit, per key. + * + * @param {number} limit Integer number of events to take + * + * @return {Pipeline} The Pipeline + */ + + + take(limit) { + var p = new _taker.default(this, { + limit, + prev: this._chainPrev() + }); + return this._append(p); + } + /** + * Converts incoming Events or IndexedEvents to TimeRangeEvents. + * + * @param {object} options To convert from an Event you need + * to convert a single time to a time range. To control this you + * need to specify the duration of that time range, along with + * the positioning (alignment) of the time range with respect to + * the time stamp of the Event. + * + * There are three option for alignment: + * 1. time range will be in front of the timestamp (options = {alignment: "front"}) + * 2. time range will be centered on the timestamp (options = {alignment: "center"}) + * 3. time range will be positoned behind the timestamp (options = {alignment: "behind"}) + * + * The duration is of the form "1h" for one hour, "30s" for 30 seconds and so on. + * + * @return {Pipeline} The Pipeline + */ + + + asTimeRangeEvents(options) { + var type = _timerangeevent.default; + var p = new _converter.default(this, _objectSpread({ + type + }, options, { + prev: this._chainPrev() + })); + return this._append(p); + } + /** + * Converts incoming Events to IndexedEvents. + * + * Note: It isn't possible to convert TimeRangeEvents to IndexedEvents. + * + * @param {Object} options An object containing the conversion + * options. In this case the duration string of the Index is expected. + * @param {string} options.duration The duration string is of the form "1h" for one hour, "30s" + * for 30 seconds and so on. + * + * @return {Pipeline} The Pipeline + */ + + + asIndexedEvents(options) { + var type = _indexedevent.default; + var p = new _converter.default(this, _objectSpread({ + type + }, options, { + prev: this._chainPrev() + })); + return this._append(p); + } -function pipeline(args) { - return new Pipeline(args); } -function is(p) { - return p instanceof Pipeline; +function pipeline(args) { + return new Pipeline(args); } -exports.Pipeline = pipeline; -exports.isPipeline = is; \ No newline at end of file +function is(p) { + return p instanceof Pipeline; +} \ No newline at end of file diff --git a/lib/lib/processors/aggregator.js b/lib/lib/processors/aggregator.js index c65d53a..4d6f267 100644 --- a/lib/lib/processors/aggregator.js +++ b/lib/lib/processors/aggregator.js @@ -1,67 +1,24 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _get2 = require("babel-runtime/helpers/get"); - -var _get3 = _interopRequireDefault(_get2); +var _underscore = _interopRequireDefault(require("underscore")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _processor = _interopRequireDefault(require("./processor")); -var _inherits3 = _interopRequireDefault(_inherits2); +var _collector = _interopRequireDefault(require("../collector")); -var _underscore = require("underscore"); +var _indexedevent = _interopRequireDefault(require("../indexedevent")); -var _underscore2 = _interopRequireDefault(_underscore); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); - -var _collector = require("../collector"); - -var _collector2 = _interopRequireDefault(_collector); - -var _indexedevent = require("../indexedevent"); - -var _indexedevent2 = _interopRequireDefault(_indexedevent); - -var _timerangeevent = require("../timerangeevent"); - -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * An Aggregator takes incoming events and adds them to a Collector - * with given windowing and grouping parameters. As each Collection is - * emitted from the Collector it is aggregated into a new event - * and emitted from this Processor. - */ /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -72,109 +29,106 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * LICENSE file in the root directory of this source tree. */ -var Aggregator = function (_Processor) { - (0, _inherits3.default)(Aggregator, _Processor); - - function Aggregator(arg1, options) { - (0, _classCallCheck3.default)(this, Aggregator); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Aggregator.__proto__ || (0, _getPrototypeOf2.default)(Aggregator)).call(this, arg1, options)); - - if (arg1 instanceof Aggregator) { - var other = arg1; - - _this._fields = other._fields; - _this._windowType = other._windowType; - _this._windowDuration = other._windowDuration; - _this._groupBy = other._groupBy; - _this._emitOn = other._emitOn; - } else if ((0, _pipeline.isPipeline)(arg1)) { - var pipeline = arg1; - - _this._windowType = pipeline.getWindowType(); - _this._windowDuration = pipeline.getWindowDuration(); - _this._groupBy = pipeline.getGroupBy(); - _this._emitOn = pipeline.getEmitOn(); - - if (!_underscore2.default.has(options, "fields")) { - throw new Error("Aggregator: constructor needs an aggregator field mapping"); - } - - // Check each of the aggregator -> field mappings - _underscore2.default.forEach(options.fields, function (operator, field) { - // Field should either be an array or a string - if (!_underscore2.default.isString(field) && !_underscore2.default.isArray(field)) { - throw new Error("Aggregator: field of unknown type: " + field); - } - }); - - if (pipeline.mode() === "stream") { - if (!pipeline.getWindowType() || !pipeline.getWindowDuration()) { - throw new Error("Unable to aggregate because no windowing strategy was specified in pipeline"); - } - } - _this._fields = options.fields; - } else { - throw new Error("Unknown arg to Filter constructor", arg1); +/** + * An Aggregator takes incoming events and adds them to a Collector + * with given windowing and grouping parameters. As each Collection is + * emitted from the Collector it is aggregated into a new event + * and emitted from this Processor. + */ +class Aggregator extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Aggregator) { + var other = arg1; + this._fields = other._fields; + this._windowType = other._windowType; + this._windowDuration = other._windowDuration; + this._groupBy = other._groupBy; + this._emitOn = other._emitOn; + } else if ((0, _pipeline.isPipeline)(arg1)) { + var pipeline = arg1; + this._windowType = pipeline.getWindowType(); + this._windowDuration = pipeline.getWindowDuration(); + this._groupBy = pipeline.getGroupBy(); + this._emitOn = pipeline.getEmitOn(); + + if (!_underscore.default.has(options, "fields")) { + throw new Error("Aggregator: constructor needs an aggregator field mapping"); + } // Check each of the aggregator -> field mappings + + + _underscore.default.forEach(options.fields, (operator, field) => { + // Field should either be an array or a string + if (!_underscore.default.isString(field) && !_underscore.default.isArray(field)) { + throw new Error("Aggregator: field of unknown type: " + field); + } + }); + + if (pipeline.mode() === "stream") { + if (!pipeline.getWindowType() || !pipeline.getWindowDuration()) { + throw new Error("Unable to aggregate because no windowing strategy was specified in pipeline"); } + } - _this._collector = new _collector2.default({ - windowType: _this._windowType, - windowDuration: _this._windowDuration, - groupBy: _this._groupBy, - emitOn: _this._emitOn - }, function (collection, windowKey, groupByKey) { - return _this.handleTrigger(collection, windowKey, groupByKey); - }); - return _this; + this._fields = options.fields; + } else { + throw new Error("Unknown arg to Filter constructor", arg1); } - (0, _createClass3.default)(Aggregator, [{ - key: "clone", - value: function clone() { - return new Aggregator(this); - } - }, { - key: "handleTrigger", - value: function handleTrigger(collection, windowKey) { - var d = {}; - _underscore2.default.each(this._fields, function (f, fieldName) { - var keys = (0, _keys2.default)(f); - if (keys.length !== 1) { - throw new Error("Fields should contain exactly one field", f); - } - var field = keys[0]; - var operator = f[field]; - - d[fieldName] = collection.aggregate(operator, field); - }); - - var event = void 0; - if (windowKey === "global") { - event = new _timerangeevent2.default(collection.range(), d); - } else { - //TODO: Specify UTC (or local) pipeline - var utc = this._windowType === "fixed"; - event = new _indexedevent2.default(windowKey, d, utc); - } - - this.emit(event); - } - }, { - key: "flush", - value: function flush() { - this._collector.flushCollections(); - (0, _get3.default)(Aggregator.prototype.__proto__ || (0, _getPrototypeOf2.default)(Aggregator.prototype), "flush", this).call(this); - } - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - this._collector.addEvent(event); - } - } - }]); - return Aggregator; -}(_processor2.default); + this._collector = new _collector.default({ + windowType: this._windowType, + windowDuration: this._windowDuration, + groupBy: this._groupBy, + emitOn: this._emitOn + }, (collection, windowKey, groupByKey) => this.handleTrigger(collection, windowKey, groupByKey)); + } + + clone() { + return new Aggregator(this); + } + + handleTrigger(collection, windowKey) { + var d = {}; + + _underscore.default.each(this._fields, (f, fieldName) => { + var keys = Object.keys(f); + + if (keys.length !== 1) { + throw new Error("Fields should contain exactly one field", f); + } + + var field = keys[0]; + var operator = f[field]; + d[fieldName] = collection.aggregate(operator, field); + }); + + var event; + + if (windowKey === "global") { + event = new _timerangeevent.default(collection.range(), d); + } else { + //TODO: Specify UTC (or local) pipeline + var utc = this._windowType === "fixed"; + event = new _indexedevent.default(windowKey, d, utc); + } + + this.emit(event); + } + + flush() { + this._collector.flushCollections(); + + super.flush(); + } + + addEvent(event) { + if (this.hasObservers()) { + this._collector.addEvent(event); + } + } + +} -exports.default = Aggregator; \ No newline at end of file +var _default = Aggregator; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/processors/aligner.js b/lib/lib/processors/aligner.js index 1834cca..c5a631c 100644 --- a/lib/lib/processors/aligner.js +++ b/lib/lib/processors/aligner.js @@ -1,311 +1,250 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _isInteger = require("babel-runtime/core-js/number/is-integer"); +var _underscore = _interopRequireDefault(require("underscore")); -var _isInteger2 = _interopRequireDefault(_isInteger); +var _immutable = _interopRequireDefault(require("immutable")); -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); +var _index = _interopRequireDefault(require("../index")); -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); +var _indexedevent = _interopRequireDefault(require("../indexedevent")); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _processor = _interopRequireDefault(require("./processor")); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _timeevent = _interopRequireDefault(require("../timeevent")); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _timerange = _interopRequireDefault(require("../timerange")); -var _createClass3 = _interopRequireDefault(_createClass2); +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _pipeline = require("../pipeline"); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _util = _interopRequireDefault(require("../base/util")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ -var _inherits3 = _interopRequireDefault(_inherits2); +/*eslint no-console: 0 */ -var _underscore = require("underscore"); +/** + * A processor to align the data into bins of regular time period. + */ +class Aligner extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Aligner) { + var other = arg1; + this._fieldSpec = other._fieldSpec; + this._window = other._window; + this._method = other._method; + this._limit = other._limit; + } else if ((0, _pipeline.isPipeline)(arg1)) { + var { + fieldSpec, + window, + method = "hold", + limit = null + } = options; + this._fieldSpec = fieldSpec; + this._window = window; + this._method = method; + this._limit = limit; + } else { + throw new Error("Unknown arg to Aligner constructor", arg1); + } // + // Internal members + // + + + this._previous = null; // work out field specs + + if (_underscore.default.isString(this._fieldSpec)) { + this._fieldSpec = [this._fieldSpec]; + } // check input of method + + + if (!_underscore.default.contains(["linear", "hold"], this._method)) { + throw new Error("Unknown method '".concat(this._method, "' passed to Aligner")); + } // check limit + + + if (this._limit && !Number.isInteger(this._limit)) { + throw new Error("Limit passed to Aligner is not an integer"); + } + } -var _underscore2 = _interopRequireDefault(_underscore); + clone() { + return new Aligner(this); + } + /** + * Test to see if an event is perfectly aligned. Used on first event. + */ -var _immutable = require("immutable"); -var _immutable2 = _interopRequireDefault(_immutable); + isAligned(event) { + var bound = _index.default.getIndexString(this._window, event.timestamp()); -var _index = require("../index"); + return this.getBoundaryTime(bound) === event.timestamp().getTime(); + } + /** + * Returns a list of indexes of window boundaries if the current + * event and the previous event do not lie in the same window. If + * they are in the same window, return an empty list. + */ -var _index2 = _interopRequireDefault(_index); -var _indexedevent = require("../indexedevent"); + getBoundaries(event) { + var prevIndex = _index.default.getIndexString(this._window, this._previous.timestamp()); -var _indexedevent2 = _interopRequireDefault(_indexedevent); + var currentIndex = _index.default.getIndexString(this._window, event.timestamp()); -var _processor = require("./processor"); + if (prevIndex !== currentIndex) { + var range = new _timerange.default(this._previous.timestamp(), event.timestamp()); + return _index.default.getIndexStringList(this._window, range).slice(1); + } else { + return []; + } + } + /** + * We are dealing in UTC only with the Index because the events + * all have internal timestamps in UTC and that's what we're + * aligning. Let the user display in local time if that's + * what they want. + */ -var _processor2 = _interopRequireDefault(_processor); -var _timeevent = require("../timeevent"); + getBoundaryTime(boundaryIndex) { + var index = new _index.default(boundaryIndex); + return index.begin().getTime(); + } + /** + * Generate a new event on the requested boundary and carry over the + * value from the previous event. + * + * A variation just sets the values to null, this is used when the + * limit is hit. + */ -var _timeevent2 = _interopRequireDefault(_timeevent); -var _timerange = require("../timerange"); + interpolateHold(boundary) { + var setNone = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var d = new _immutable.default.Map(); + var t = this.getBoundaryTime(boundary); -var _timerange2 = _interopRequireDefault(_timerange); + this._fieldSpec.forEach(path => { + var fieldPath = _util.default.fieldPathToArray(path); -var _timerangeevent = require("../timerangeevent"); + if (!setNone) { + d = d.setIn(fieldPath, this._previous.get(fieldPath)); + } else { + d = d.setIn(fieldPath, null); + } + }); -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); + return new _timeevent.default(t, d); + } + /** + * Generate a linear differential between two counter values that lie + * on either side of a window boundary. + */ -var _pipeline = require("../pipeline"); -var _util = require("../base/util"); + interpolateLinear(boundary, event) { + var d = new _immutable.default.Map(); -var _util2 = _interopRequireDefault(_util); + var previousTime = this._previous.timestamp().getTime(); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + var boundaryTime = this.getBoundaryTime(boundary); + var currentTime = event.timestamp().getTime(); // This ratio will be the same for all values being processed -/** - * A processor to align the data into bins of regular time period. - */ -/** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + var f = (boundaryTime - previousTime) / (currentTime - previousTime); -/*eslint no-console: 0 */ + this._fieldSpec.forEach(path => { + var fieldPath = _util.default.fieldPathToArray(path); // + // Generate the delta beteen the values and + // bulletproof against non-numeric or bad paths + // -var Aligner = function (_Processor) { - (0, _inherits3.default)(Aligner, _Processor); - - function Aligner(arg1, options) { - (0, _classCallCheck3.default)(this, Aligner); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Aligner.__proto__ || (0, _getPrototypeOf2.default)(Aligner)).call(this, arg1, options)); - - if (arg1 instanceof Aligner) { - var other = arg1; - _this._fieldSpec = other._fieldSpec; - _this._window = other._window; - _this._method = other._method; - _this._limit = other._limit; - } else if ((0, _pipeline.isPipeline)(arg1)) { - var fieldSpec = options.fieldSpec, - window = options.window, - _options$method = options.method, - method = _options$method === undefined ? "hold" : _options$method, - _options$limit = options.limit, - limit = _options$limit === undefined ? null : _options$limit; - - - _this._fieldSpec = fieldSpec; - _this._window = window; - _this._method = method; - _this._limit = limit; - } else { - throw new Error("Unknown arg to Aligner constructor", arg1); - } - // - // Internal members - // - _this._previous = null; + var previousVal = this._previous.get(fieldPath); - // work out field specs - if (_underscore2.default.isString(_this._fieldSpec)) { - _this._fieldSpec = [_this._fieldSpec]; - } + var currentVal = event.get(fieldPath); + var interpolatedVal = null; - // check input of method - if (!_underscore2.default.contains(["linear", "hold"], _this._method)) { - throw new Error("Unknown method '" + _this._method + "' passed to Aligner"); - } + if (!_underscore.default.isNumber(previousVal) || !_underscore.default.isNumber(currentVal)) { + console.warn("Path ".concat(fieldPath, " contains a non-numeric value or does not exist")); + } else { + interpolatedVal = previousVal + f * (currentVal - previousVal); + } - // check limit - if (_this._limit && !(0, _isInteger2.default)(_this._limit)) { - throw new Error("Limit passed to Aligner is not an integer"); - } - return _this; + d = d.setIn(fieldPath, interpolatedVal); + }); + + return new _timeevent.default(boundaryTime, d); + } + /** + * Perform the fill operation on the event and emit. + */ + + + addEvent(event) { + if (event instanceof _timerangeevent.default || event instanceof _indexedevent.default) { + throw new Error("TimeRangeEvent and IndexedEvent series can not be aligned."); } - (0, _createClass3.default)(Aligner, [{ - key: "clone", - value: function clone() { - return new Aligner(this); + if (this.hasObservers()) { + if (!this._previous) { + this._previous = event; + + if (this.isAligned(event)) { + this.emit(event); } - /** - * Test to see if an event is perfectly aligned. Used on first event. - */ + return; + } - }, { - key: "isAligned", - value: function isAligned(event) { - var bound = _index2.default.getIndexString(this._window, event.timestamp()); - return this.getBoundaryTime(bound) === event.timestamp().getTime(); - } + var boundaries = this.getBoundaries(event); // + // If the returned list is not empty, interpolate an event + // on each of the boundaries and emit them + // - /** - * Returns a list of indexes of window boundaries if the current - * event and the previous event do not lie in the same window. If - * they are in the same window, return an empty list. - */ - - }, { - key: "getBoundaries", - value: function getBoundaries(event) { - var prevIndex = _index2.default.getIndexString(this._window, this._previous.timestamp()); - var currentIndex = _index2.default.getIndexString(this._window, event.timestamp()); - if (prevIndex !== currentIndex) { - var range = new _timerange2.default(this._previous.timestamp(), event.timestamp()); - return _index2.default.getIndexStringList(this._window, range).slice(1); - } else { - return []; - } - } + var count = boundaries.length; + boundaries.forEach(boundary => { + var outputEvent; - /** - * We are dealing in UTC only with the Index because the events - * all have internal timestamps in UTC and that's what we're - * aligning. Let the user display in local time if that's - * what they want. - */ - - }, { - key: "getBoundaryTime", - value: function getBoundaryTime(boundaryIndex) { - var index = new _index2.default(boundaryIndex); - return index.begin().getTime(); + if (this._limit && count > this._limit) { + outputEvent = this.interpolateHold(boundary, true); + } else { + if (this._method === "linear") { + outputEvent = this.interpolateLinear(boundary, event); + } else { + outputEvent = this.interpolateHold(boundary); + } } - /** - * Generate a new event on the requested boundary and carry over the - * value from the previous event. - * - * A variation just sets the values to null, this is used when the - * limit is hit. - */ - - }, { - key: "interpolateHold", - value: function interpolateHold(boundary) { - var _this2 = this; - - var setNone = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var d = new _immutable2.default.Map(); - var t = this.getBoundaryTime(boundary); - this._fieldSpec.forEach(function (path) { - var fieldPath = _util2.default.fieldPathToArray(path); - if (!setNone) { - d = d.setIn(fieldPath, _this2._previous.get(fieldPath)); - } else { - d = d.setIn(fieldPath, null); - } - }); - return new _timeevent2.default(t, d); - } + this.emit(outputEvent); + }); // + // The current event now becomes the previous event + // - /** - * Generate a linear differential between two counter values that lie - * on either side of a window boundary. - */ - - }, { - key: "interpolateLinear", - value: function interpolateLinear(boundary, event) { - var _this3 = this; - - var d = new _immutable2.default.Map(); - - var previousTime = this._previous.timestamp().getTime(); - var boundaryTime = this.getBoundaryTime(boundary); - var currentTime = event.timestamp().getTime(); - - // This ratio will be the same for all values being processed - var f = (boundaryTime - previousTime) / (currentTime - previousTime); - - this._fieldSpec.forEach(function (path) { - var fieldPath = _util2.default.fieldPathToArray(path); - - // - // Generate the delta beteen the values and - // bulletproof against non-numeric or bad paths - // - var previousVal = _this3._previous.get(fieldPath); - var currentVal = event.get(fieldPath); - - var interpolatedVal = null; - if (!_underscore2.default.isNumber(previousVal) || !_underscore2.default.isNumber(currentVal)) { - console.warn("Path " + fieldPath + " contains a non-numeric value or does not exist"); - } else { - interpolatedVal = previousVal + f * (currentVal - previousVal); - } - d = d.setIn(fieldPath, interpolatedVal); - }); - - return new _timeevent2.default(boundaryTime, d); - } + this._previous = event; + } + } - /** - * Perform the fill operation on the event and emit. - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - var _this4 = this; - - if (event instanceof _timerangeevent2.default || event instanceof _indexedevent2.default) { - throw new Error("TimeRangeEvent and IndexedEvent series can not be aligned."); - } - - if (this.hasObservers()) { - if (!this._previous) { - this._previous = event; - if (this.isAligned(event)) { - this.emit(event); - } - return; - } - - var boundaries = this.getBoundaries(event); - - // - // If the returned list is not empty, interpolate an event - // on each of the boundaries and emit them - // - var count = boundaries.length; - boundaries.forEach(function (boundary) { - var outputEvent = void 0; - if (_this4._limit && count > _this4._limit) { - outputEvent = _this4.interpolateHold(boundary, true); - } else { - if (_this4._method === "linear") { - outputEvent = _this4.interpolateLinear(boundary, event); - } else { - outputEvent = _this4.interpolateHold(boundary); - } - } - _this4.emit(outputEvent); - }); - - // - // The current event now becomes the previous event - // - this._previous = event; - } - } - }]); - return Aligner; -}(_processor2.default); +} exports.default = Aligner; \ No newline at end of file diff --git a/lib/lib/processors/collapser.js b/lib/lib/processors/collapser.js index 2f9e2ec..45487b3 100644 --- a/lib/lib/processors/collapser.js +++ b/lib/lib/processors/collapser.js @@ -1,44 +1,16 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); +var _processor = _interopRequireDefault(require("./processor")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * A processor which takes a fieldSpec and returns a new event - * with a new column that is a collapsed result of the selected - * columns. To collapse the columns it uses the supplied reducer - * function. Optionally the new column can completely replace - * the existing columns in the event. - */ /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -49,45 +21,43 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * LICENSE file in the root directory of this source tree. */ -var Collapser = function (_Processor) { - (0, _inherits3.default)(Collapser, _Processor); - - function Collapser(arg1, options) { - (0, _classCallCheck3.default)(this, Collapser); +/** + * A processor which takes a fieldSpec and returns a new event + * with a new column that is a collapsed result of the selected + * columns. To collapse the columns it uses the supplied reducer + * function. Optionally the new column can completely replace + * the existing columns in the event. + */ +class Collapser extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Collapser) { + var other = arg1; + this._fieldSpecList = other._fieldSpecList; + this._name = other._name; + this._reducer = other._reducer; + this._append = other._append; + } else if ((0, _pipeline.isPipeline)(arg1)) { + this._fieldSpecList = options.fieldSpecList; + this._name = options.name; + this._reducer = options.reducer; + this._append = options.append; + } else { + throw new Error("Unknown arg to Collapser constructor", arg1); + } + } - var _this = (0, _possibleConstructorReturn3.default)(this, (Collapser.__proto__ || (0, _getPrototypeOf2.default)(Collapser)).call(this, arg1, options)); + clone() { + return new Collapser(this); + } - if (arg1 instanceof Collapser) { - var other = arg1; - _this._fieldSpecList = other._fieldSpecList; - _this._name = other._name; - _this._reducer = other._reducer; - _this._append = other._append; - } else if ((0, _pipeline.isPipeline)(arg1)) { - _this._fieldSpecList = options.fieldSpecList; - _this._name = options.name; - _this._reducer = options.reducer; - _this._append = options.append; - } else { - throw new Error("Unknown arg to Collapser constructor", arg1); - } - return _this; + addEvent(event) { + if (this.hasObservers()) { + this.emit(event.collapse(this._fieldSpecList, this._name, this._reducer, this._append)); } + } - (0, _createClass3.default)(Collapser, [{ - key: "clone", - value: function clone() { - return new Collapser(this); - } - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - this.emit(event.collapse(this._fieldSpecList, this._name, this._reducer, this._append)); - } - } - }]); - return Collapser; -}(_processor2.default); +} exports.default = Collapser; \ No newline at end of file diff --git a/lib/lib/processors/converter.js b/lib/lib/processors/converter.js index aa00592..f7772b7 100644 --- a/lib/lib/processors/converter.js +++ b/lib/lib/processors/converter.js @@ -1,237 +1,217 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); +var _underscore = _interopRequireDefault(require("underscore")); -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); +var _processor = _interopRequireDefault(require("./processor")); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _index = _interopRequireDefault(require("../index")); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _timeevent = _interopRequireDefault(require("../timeevent")); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _indexedevent = _interopRequireDefault(require("../indexedevent")); -var _createClass3 = _interopRequireDefault(_createClass2); +var _timerange = _interopRequireDefault(require("../timerange")); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _pipeline = require("../pipeline"); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _util = _interopRequireDefault(require("../base/util")); + +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +function isSubclass(Base, X) { + return Base === X || X.prototype === Base; +} + +class Converter extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Converter) { + var other = arg1; + this._convertTo = other._convertTo; + this._duration = other._duration; + this._durationString = other._durationString; + this._alignment = other._alignment; + } else if ((0, _pipeline.isPipeline)(arg1)) { + if (!_underscore.default.has(options, "type")) { + throw new Error("Converter: constructor needs 'type' in options"); + } + + if (isSubclass(_timeevent.default, options.type)) { + this._convertTo = options.type; + } else if (isSubclass(_timerangeevent.default, options.type) || isSubclass(_indexedevent.default, options.type)) { + this._convertTo = options.type; + + if (options.duration && _underscore.default.isString(options.duration)) { + this._duration = _util.default.windowDuration(options.duration); + this._durationString = options.duration; + } + } else { + throw Error("Unable to interpret type argument passed to Converter constructor"); + } -var _inherits3 = _interopRequireDefault(_inherits2); + this._alignment = options.alignment || "center"; + } else { + throw new Error("Unknown arg to Converter constructor", arg1); + } + } -var _underscore = require("underscore"); + clone() { + return new Converter(this); + } -var _underscore2 = _interopRequireDefault(_underscore); + convertEvent(event) { + var T = this._convertTo; -var _processor = require("./processor"); + if (isSubclass(_timeevent.default, T)) { + return event; + } else if (isSubclass(_timerangeevent.default, T)) { + var alignment = this._alignment; + var begin, end; -var _processor2 = _interopRequireDefault(_processor); + if (!this._duration) { + throw new Error("Duration expected in converter"); + } -var _index = require("../index"); + switch (alignment) { + case "front": + begin = event.timestamp(); + end = new Date(+event.timestamp() + this._duration); + break; -var _index2 = _interopRequireDefault(_index); + case "center": + begin = new Date(+event.timestamp() - parseInt(this._duration / 2, 10)); + end = new Date(+event.timestamp() + parseInt(this._duration / 2, 10)); + break; -var _timeevent = require("../timeevent"); + case "behind": + end = event.timestamp(); + begin = new Date(+event.timestamp() - this._duration); + break; -var _timeevent2 = _interopRequireDefault(_timeevent); + default: + throw new Error("Unknown alignment of converter"); + } -var _indexedevent = require("../indexedevent"); + var timeRange = new _timerange.default([begin, end]); + return new T(timeRange, event.data()); + } else if (isSubclass(_indexedevent.default, T)) { + var timestamp = event.timestamp(); -var _indexedevent2 = _interopRequireDefault(_indexedevent); + var indexString = _index.default.getIndexString(this._durationString, timestamp); -var _timerange = require("../timerange"); + return new this._convertTo(indexString, event.data(), null); + } + } -var _timerange2 = _interopRequireDefault(_timerange); + convertTimeRangeEvent(event) { + var T = this._convertTo; -var _timerangeevent = require("../timerangeevent"); + if (isSubclass(_timerangeevent.default, T)) { + return event; + } -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); + if (isSubclass(_timeevent.default, T)) { + var alignment = this._alignment; + var beginTime = event.begin(); + var endTime = event.end(); + var timestamp; -var _pipeline = require("../pipeline"); + switch (alignment) { + case "lag": + timestamp = beginTime; + break; -var _util = require("../base/util"); + case "center": + timestamp = new Date(parseInt((beginTime.getTime() + endTime.getTime()) / 2, 10)); + break; -var _util2 = _interopRequireDefault(_util); + case "lead": + timestamp = endTime; + break; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + return new T(timestamp, event.data()); + } -function isSubclass(Base, X) { - return Base === X || X.prototype === Base; -} /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + if (isSubclass(_indexedevent.default, T)) { + throw new Error("Cannot convert TimeRangeEvent to an IndexedEvent"); + } + } -var Converter = function (_Processor) { - (0, _inherits3.default)(Converter, _Processor); - - function Converter(arg1, options) { - (0, _classCallCheck3.default)(this, Converter); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Converter.__proto__ || (0, _getPrototypeOf2.default)(Converter)).call(this, arg1, options)); - - if (arg1 instanceof Converter) { - var other = arg1; - _this._convertTo = other._convertTo; - _this._duration = other._duration; - _this._durationString = other._durationString; - _this._alignment = other._alignment; - } else if ((0, _pipeline.isPipeline)(arg1)) { - if (!_underscore2.default.has(options, "type")) { - throw new Error("Converter: constructor needs 'type' in options"); - } - if (isSubclass(_timeevent2.default, options.type)) { - _this._convertTo = options.type; - } else if (isSubclass(_timerangeevent2.default, options.type) || isSubclass(_indexedevent2.default, options.type)) { - _this._convertTo = options.type; - if (options.duration && _underscore2.default.isString(options.duration)) { - _this._duration = _util2.default.windowDuration(options.duration); - _this._durationString = options.duration; - } - } else { - throw Error("Unable to interpret type argument passed to Converter constructor"); - } - _this._alignment = options.alignment || "center"; - } else { - throw new Error("Unknown arg to Converter constructor", arg1); - } - return _this; + convertIndexedEvent(event) { + var T = this._convertTo; + + if (isSubclass(_indexedevent.default, T)) { + return event; } - (0, _createClass3.default)(Converter, [{ - key: "clone", - value: function clone() { - return new Converter(this); - } - }, { - key: "convertEvent", - value: function convertEvent(event) { - var T = this._convertTo; - if (isSubclass(_timeevent2.default, T)) { - return event; - } else if (isSubclass(_timerangeevent2.default, T)) { - var alignment = this._alignment; - var begin = void 0, - end = void 0; - if (!this._duration) { - throw new Error("Duration expected in converter"); - } - switch (alignment) { - case "front": - begin = event.timestamp(); - end = new Date(+event.timestamp() + this._duration); - break; - case "center": - begin = new Date(+event.timestamp() - parseInt(this._duration / 2, 10)); - end = new Date(+event.timestamp() + parseInt(this._duration / 2, 10)); - break; - case "behind": - end = event.timestamp(); - begin = new Date(+event.timestamp() - this._duration); - break; - default: - throw new Error("Unknown alignment of converter"); - } - var timeRange = new _timerange2.default([begin, end]); - return new T(timeRange, event.data()); - } else if (isSubclass(_indexedevent2.default, T)) { - var timestamp = event.timestamp(); - var indexString = _index2.default.getIndexString(this._durationString, timestamp); - return new this._convertTo(indexString, event.data(), null); - } - } - }, { - key: "convertTimeRangeEvent", - value: function convertTimeRangeEvent(event) { - var T = this._convertTo; - if (isSubclass(_timerangeevent2.default, T)) { - return event; - } - if (isSubclass(_timeevent2.default, T)) { - var alignment = this._alignment; - var beginTime = event.begin(); - var endTime = event.end(); - var timestamp = void 0; - switch (alignment) { - case "lag": - timestamp = beginTime; - break; - case "center": - timestamp = new Date(parseInt((beginTime.getTime() + endTime.getTime()) / 2, 10)); - break; - case "lead": - timestamp = endTime; - break; - } - return new T(timestamp, event.data()); - } - if (isSubclass(_indexedevent2.default, T)) { - throw new Error("Cannot convert TimeRangeEvent to an IndexedEvent"); - } - } - }, { - key: "convertIndexedEvent", - value: function convertIndexedEvent(event) { - var T = this._convertTo; - if (isSubclass(_indexedevent2.default, T)) { - return event; - } - if (isSubclass(_timeevent2.default, T)) { - var alignment = this._alignment; - var beginTime = event.begin(); - var endTime = event.end(); - var timestamp = void 0; - switch (alignment) { - case "lag": - timestamp = beginTime; - break; - case "center": - timestamp = new Date(parseInt((beginTime.getTime() + endTime.getTime()) / 2, 10)); - break; - case "lead": - timestamp = endTime; - break; - } - return new T(timestamp, event.data()); - } - if (isSubclass(_timerangeevent2.default, T)) { - return new T(event.timerange(), event.data()); - } - } + if (isSubclass(_timeevent.default, T)) { + var alignment = this._alignment; + var beginTime = event.begin(); + var endTime = event.end(); + var timestamp; - /** - * Output a converted event - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - var outputEvent = void 0; - if (event instanceof _timerangeevent2.default) { - outputEvent = this.convertTimeRangeEvent(event); - } else if (event instanceof _indexedevent2.default) { - outputEvent = this.convertIndexedEvent(event); - } else if (event instanceof _timeevent2.default) { - outputEvent = this.convertEvent(event); - } else { - throw new Error("Unknown event type received"); - } - this.emit(outputEvent); - } - } - }]); - return Converter; -}(_processor2.default); + switch (alignment) { + case "lag": + timestamp = beginTime; + break; + + case "center": + timestamp = new Date(parseInt((beginTime.getTime() + endTime.getTime()) / 2, 10)); + break; + + case "lead": + timestamp = endTime; + break; + } + + return new T(timestamp, event.data()); + } + + if (isSubclass(_timerangeevent.default, T)) { + return new T(event.timerange(), event.data()); + } + } + /** + * Output a converted event + */ + + + addEvent(event) { + if (this.hasObservers()) { + var outputEvent; + + if (event instanceof _timerangeevent.default) { + outputEvent = this.convertTimeRangeEvent(event); + } else if (event instanceof _indexedevent.default) { + outputEvent = this.convertIndexedEvent(event); + } else if (event instanceof _timeevent.default) { + outputEvent = this.convertEvent(event); + } else { + throw new Error("Unknown event type received"); + } + + this.emit(outputEvent); + } + } + +} exports.default = Converter; \ No newline at end of file diff --git a/lib/lib/processors/derivator.js b/lib/lib/processors/derivator.js index d6f8af2..708bd00 100644 --- a/lib/lib/processors/derivator.js +++ b/lib/lib/processors/derivator.js @@ -1,182 +1,141 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); +var _underscore = _interopRequireDefault(require("underscore")); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _immutable = _interopRequireDefault(require("immutable")); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _processor = _interopRequireDefault(require("./processor")); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _indexedevent = _interopRequireDefault(require("../indexedevent")); -var _createClass3 = _interopRequireDefault(_createClass2); +var _timerangeevent = _interopRequireDefault(require("../timerangeevent")); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _pipeline = require("../pipeline"); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _util = _interopRequireDefault(require("../base/util")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ -var _inherits3 = _interopRequireDefault(_inherits2); +/*eslint no-console: 0 */ -var _underscore = require("underscore"); +/** + * Simple processor generate the Rate of two Event objects and + * emit them as a TimeRangeEvent. Can be used alone or chained + * with the Align processor for snmp rates, etc. + */ +class Derivator extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Derivator) { + var other = arg1; + this._fieldSpec = other._fieldSpec; + this._allowNegative = other._allowNegative; + } else if ((0, _pipeline.isPipeline)(arg1)) { + var { + fieldSpec, + allowNegative + } = options; + this._fieldSpec = fieldSpec; + this._allowNegative = allowNegative; + } else { + throw new Error("Unknown arg to Derivator constructor", arg1); + } // + // Internal members + // + + + this._previous = null; // work out field specs + + if (_underscore.default.isString(this._fieldSpec)) { + this._fieldSpec = [this._fieldSpec]; + } else if (!this._fieldSpec) { + this._fieldSpec = ["value"]; + } + } -var _underscore2 = _interopRequireDefault(_underscore); + clone() { + return new Derivator(this); + } + /** + * Generate a new TimeRangeEvent containing the rate per second + * between two events. + */ -var _immutable = require("immutable"); -var _immutable2 = _interopRequireDefault(_immutable); + getRate(event) { + var d = new _immutable.default.Map(); -var _processor = require("./processor"); + var previousTime = this._previous.timestamp().getTime(); -var _processor2 = _interopRequireDefault(_processor); + var currentTime = event.timestamp().getTime(); + var deltaTime = (currentTime - previousTime) / 1000; -var _indexedevent = require("../indexedevent"); + this._fieldSpec.forEach(path => { + var fieldPath = _util.default.fieldPathToArray(path); -var _indexedevent2 = _interopRequireDefault(_indexedevent); + var ratePath = fieldPath.slice(); + ratePath[ratePath.length - 1] += "_rate"; -var _timerangeevent = require("../timerangeevent"); + var previousVal = this._previous.get(fieldPath); -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); + var currentVal = event.get(fieldPath); + var rate = null; -var _pipeline = require("../pipeline"); + if (!_underscore.default.isNumber(previousVal) || !_underscore.default.isNumber(currentVal)) { + console.warn("Path ".concat(fieldPath, " contains a non-numeric value or does not exist")); + } else { + rate = (currentVal - previousVal) / deltaTime; + } -var _util = require("../base/util"); + if (this._allowNegative === false && rate < 0) { + // don't allow negative differentials in certain cases + d = d.setIn(ratePath, null); + } else { + d = d.setIn(ratePath, rate); + } + }); -var _util2 = _interopRequireDefault(_util); + return new _timerangeevent.default([previousTime, currentTime], d); + } + /** + * Perform the fill operation on the event and emit. + */ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -/** - * Simple processor generate the Rate of two Event objects and - * emit them as a TimeRangeEvent. Can be used alone or chained - * with the Align processor for snmp rates, etc. - */ -var Derivator = function (_Processor) { - (0, _inherits3.default)(Derivator, _Processor); - - function Derivator(arg1, options) { - (0, _classCallCheck3.default)(this, Derivator); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Derivator.__proto__ || (0, _getPrototypeOf2.default)(Derivator)).call(this, arg1, options)); - - if (arg1 instanceof Derivator) { - var other = arg1; - _this._fieldSpec = other._fieldSpec; - _this._allowNegative = other._allowNegative; - } else if ((0, _pipeline.isPipeline)(arg1)) { - var fieldSpec = options.fieldSpec, - allowNegative = options.allowNegative; - - _this._fieldSpec = fieldSpec; - _this._allowNegative = allowNegative; - } else { - throw new Error("Unknown arg to Derivator constructor", arg1); - } - - // - // Internal members - // - _this._previous = null; - - // work out field specs - if (_underscore2.default.isString(_this._fieldSpec)) { - _this._fieldSpec = [_this._fieldSpec]; - } else if (!_this._fieldSpec) { - _this._fieldSpec = ["value"]; - } - return _this; + addEvent(event) { + if (event instanceof _timerangeevent.default || event instanceof _indexedevent.default) { + throw new Error("TimeRangeEvent and IndexedEvent series can not be aligned."); } - (0, _createClass3.default)(Derivator, [{ - key: "clone", - value: function clone() { - return new Derivator(this); - } - - /** - * Generate a new TimeRangeEvent containing the rate per second - * between two events. - */ - - }, { - key: "getRate", - value: function getRate(event) { - var _this2 = this; - - var d = new _immutable2.default.Map(); - - var previousTime = this._previous.timestamp().getTime(); - var currentTime = event.timestamp().getTime(); - var deltaTime = (currentTime - previousTime) / 1000; - - this._fieldSpec.forEach(function (path) { - var fieldPath = _util2.default.fieldPathToArray(path); - var ratePath = fieldPath.slice(); - ratePath[ratePath.length - 1] += "_rate"; - - var previousVal = _this2._previous.get(fieldPath); - var currentVal = event.get(fieldPath); - - var rate = null; - if (!_underscore2.default.isNumber(previousVal) || !_underscore2.default.isNumber(currentVal)) { - console.warn("Path " + fieldPath + " contains a non-numeric value or does not exist"); - } else { - rate = (currentVal - previousVal) / deltaTime; - } - - if (_this2._allowNegative === false && rate < 0) { - // don't allow negative differentials in certain cases - d = d.setIn(ratePath, null); - } else { - d = d.setIn(ratePath, rate); - } - }); - - return new _timerangeevent2.default([previousTime, currentTime], d); - } - - /** - * Perform the fill operation on the event and emit. - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (event instanceof _timerangeevent2.default || event instanceof _indexedevent2.default) { - throw new Error("TimeRangeEvent and IndexedEvent series can not be aligned."); - } - - if (this.hasObservers()) { - if (!this._previous) { - this._previous = event; - return; - } - - var outputEvent = this.getRate(event); - this.emit(outputEvent); - - // The current event now becomes the previous event - this._previous = event; - } - } - }]); - return Derivator; -}(_processor2.default); /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + if (this.hasObservers()) { + if (!this._previous) { + this._previous = event; + return; + } -/*eslint no-console: 0 */ + var outputEvent = this.getRate(event); + this.emit(outputEvent); // The current event now becomes the previous event + + this._previous = event; + } + } + +} exports.default = Derivator; \ No newline at end of file diff --git a/lib/lib/processors/filler.js b/lib/lib/processors/filler.js index b0d1bc8..dec36c3 100644 --- a/lib/lib/processors/filler.js +++ b/lib/lib/processors/filler.js @@ -1,500 +1,378 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); +var _underscore = _interopRequireDefault(require("underscore")); -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); +var _processor = _interopRequireDefault(require("./processor")); -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); +var _pipeline = require("../pipeline"); -var _getIterator3 = _interopRequireDefault(_getIterator2); +var _util = _interopRequireDefault(require("../base/util")); -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); +/*eslint no-console: 0 */ -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +/** + * A processor that fills missing/invalid values in the event with + * new values (zero, interpolated or padded). + * + * When doing a linear fill, Filler instances should be chained. + * + * If no fieldSpec is supplied, the default field "value" will be used. + */ +class Filler extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Filler) { + var other = arg1; + this._fieldSpec = other._fieldSpec; + this._method = other._method; + this._limit = other._limit; + } else if ((0, _pipeline.isPipeline)(arg1)) { + var { + fieldSpec = null, + method = "zero", + limit = null + } = options; + this._fieldSpec = fieldSpec; + this._method = method; + this._limit = limit; + } else { + throw new Error("Unknown arg to Filler constructor", arg1); + } // + // Internal members + // + // state for pad to refer to previous event + + + this._previousEvent = null; // key count for zero and pad fill + + this._keyCount = {}; // special state for linear fill + + this._lastGoodLinear = null; // cache of events pending linear fill + + this._linearFillCache = []; // + // Sanity checks + // + + if (!_underscore.default.contains(["zero", "pad", "linear"], this._method)) { + throw new Error("Unknown method ".concat(this._method, " passed to Filler")); + } -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); + if (this._limit && !_underscore.default.isNumber(this._limit)) { + throw new Error("Limit supplied to fill() should be a number"); + } -var _createClass2 = require("babel-runtime/helpers/createClass"); + if (_underscore.default.isString(this._fieldSpec)) { + this._fieldSpec = [this._fieldSpec]; + } else if (_underscore.default.isNull(this._fieldSpec)) { + this._fieldSpec = ["value"]; + } // Special case: when using linear mode, only a single + // column will be processed per instance -var _createClass3 = _interopRequireDefault(_createClass2); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); + if (this._method === "linear" && this._fieldSpec.length > 1) { + throw new Error("Linear fill takes a path to a single column"); + } + } -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); + clone() { + return new Filler(this); + } + /** + * Process and fill the values at the paths as apropos when the fill + * method is either pad or zero. + */ -var _get2 = require("babel-runtime/helpers/get"); -var _get3 = _interopRequireDefault(_get2); + constFill(data) { + var newData = data; -var _inherits2 = require("babel-runtime/helpers/inherits"); + for (var path of this._fieldSpec) { + var fieldPath = _util.default.fieldPathToArray(path); -var _inherits3 = _interopRequireDefault(_inherits2); + var pathKey = fieldPath.join(":"); //initialize a counter for this column -var _underscore = require("underscore"); + if (!_underscore.default.has(this._keyCount, pathKey)) { + this._keyCount[pathKey] = 0; + } // this is pointing at a path that does not exist -var _underscore2 = _interopRequireDefault(_underscore); -var _processor = require("./processor"); + if (!newData.hasIn(fieldPath)) { + continue; + } // Get the next value using the fieldPath -var _processor2 = _interopRequireDefault(_processor); -var _pipeline = require("../pipeline"); + var val = newData.getIn(fieldPath); -var _util = require("../base/util"); + if (_util.default.isMissing(val)) { + // Have we hit the limit? + if (this._limit && this._keyCount[pathKey] >= this._limit) { + continue; + } -var _util2 = _interopRequireDefault(_util); + if (this._method === "zero") { + // set to zero + newData = newData.setIn(fieldPath, 0); + this._keyCount[pathKey]++; + } else if (this._method === "pad") { + // set to previous value + if (!_underscore.default.isNull(this._previousEvent)) { + var prevVal = this._previousEvent.data().getIn(fieldPath); + + if (!_util.default.isMissing(prevVal)) { + newData = newData.setIn(fieldPath, prevVal); + this._keyCount[pathKey]++; + } + } + } else if (this._method === "linear") {//noop + } + } else { + this._keyCount[pathKey] = 0; + } + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + return newData; + } + /** + * Check to see if an event has good values when doing + * linear fill since we need to keep a completely intact + * event for the values. + * While we are inspecting the data payload, make a note if + * any of the paths are pointing at a list. Then it + * will trigger that filling code later. + */ -/** - * A processor that fills missing/invalid values in the event with - * new values (zero, interpolated or padded). - * - * When doing a linear fill, Filler instances should be chained. - * - * If no fieldSpec is supplied, the default field "value" will be used. - */ -/** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ -/*eslint no-console: 0 */ + isValidLinearEvent(event) { + var valid = true; -var Filler = function (_Processor) { - (0, _inherits3.default)(Filler, _Processor); - - function Filler(arg1, options) { - (0, _classCallCheck3.default)(this, Filler); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Filler.__proto__ || (0, _getPrototypeOf2.default)(Filler)).call(this, arg1, options)); - - if (arg1 instanceof Filler) { - var other = arg1; - _this._fieldSpec = other._fieldSpec; - _this._method = other._method; - _this._limit = other._limit; - } else if ((0, _pipeline.isPipeline)(arg1)) { - var _options$fieldSpec = options.fieldSpec, - fieldSpec = _options$fieldSpec === undefined ? null : _options$fieldSpec, - _options$method = options.method, - method = _options$method === undefined ? "zero" : _options$method, - _options$limit = options.limit, - limit = _options$limit === undefined ? null : _options$limit; - - _this._fieldSpec = fieldSpec; - _this._method = method; - _this._limit = limit; - } else { - throw new Error("Unknown arg to Filler constructor", arg1); - } + var fieldPath = _util.default.fieldPathToArray(this._fieldSpec[0]); // Detect path that doesn't exist - // - // Internal members - // - // state for pad to refer to previous event - _this._previousEvent = null; - // key count for zero and pad fill - _this._keyCount = {}; + if (!event.data().hasIn(fieldPath)) { + console.warn("path does not exist: ".concat(fieldPath)); + return valid; + } - // special state for linear fill - _this._lastGoodLinear = null; + var val = event.data().getIn(fieldPath); // Detect if missing or not a number - // cache of events pending linear fill - _this._linearFillCache = []; + if (_util.default.isMissing(val) || !_underscore.default.isNumber(val)) { + valid = false; + } - // - // Sanity checks - // - if (!_underscore2.default.contains(["zero", "pad", "linear"], _this._method)) { - throw new Error("Unknown method " + _this._method + " passed to Filler"); - } + return valid; + } + /** + * This handles the linear filling. It returns a list of + * zero or more events to be emitted. + * + * If an event is valid - it has valid values for all of + * the field paths - it is cached as "last good" and + * returned to be emitted. The return value is then a list + * of one event. + * + * If an event has invalid values, it is cached to be + * processed later and an empty list is returned. + * + * Additional invalid events will continue to be cached until + * a new valid value is seen, then the cached events will + * be filled and returned. That will be a list of indeterminate + * length. + */ + + + linearFill(event) { + // See if the event is valid and also if it has any + // list values to be filled. + var isValidEvent = this.isValidLinearEvent(event); + var events = []; + + if (isValidEvent && !this._linearFillCache.length) { + // Valid event, no cached events, use as last good val + this._lastGoodLinear = event; + events.push(event); + } else if (!isValidEvent && !_underscore.default.isNull(this._lastGoodLinear)) { + this._linearFillCache.push(event); // Check limit + + + if (!_underscore.default.isNull(this._limit) && this._linearFillCache.length >= this._limit) { + // Flush the cache now because limit is reached + this._linearFillCache.forEach(e => { + this.emit(e); + }); // Reset + + + this._linearFillCache = []; + this._lastGoodLinear = null; + } + } else if (!isValidEvent && _underscore.default.isNull(this._lastGoodLinear)) { + // + // An invalid event but we have not seen a good + // event yet so there is nothing to start filling "from" + // so just return and live with it. + // + events.push(event); + } else if (isValidEvent && this._linearFillCache) { + // Linear interpolation between last good and this event + var eventList = [this._lastGoodLinear, ...this._linearFillCache, event]; + var interpolatedEvents = this.interpolateEventList(eventList); // + // The first event in the returned list from interpolatedEvents + // is our last good event. This event has already been emitted so + // it is sliced off. + // + + interpolatedEvents.slice(1).forEach(e => { + events.push(e); + }); // Reset + + this._linearFillCache = []; + this._lastGoodLinear = event; + } - if (_this._limit && !_underscore2.default.isNumber(_this._limit)) { - throw new Error("Limit supplied to fill() should be a number"); - } + return events; + } + /** + * The fundamental linear interpolation workhorse code. Process + * a list of events and return a new list. Does a pass for + * every fieldSpec. + * + * This is abstracted out like this because we probably want + * to interpolate a list of events not tied to a Collection. + * A Pipeline result list, etc etc. + * + **/ - if (_underscore2.default.isString(_this._fieldSpec)) { - _this._fieldSpec = [_this._fieldSpec]; - } else if (_underscore2.default.isNull(_this._fieldSpec)) { - _this._fieldSpec = ["value"]; - } - // Special case: when using linear mode, only a single - // column will be processed per instance - if (_this._method === "linear" && _this._fieldSpec.length > 1) { - throw new Error("Linear fill takes a path to a single column"); - } - return _this; - } + interpolateEventList(events) { + var prevValue; + var prevTime; // new array of interpolated events for each field path - (0, _createClass3.default)(Filler, [{ - key: "clone", - value: function clone() { - return new Filler(this); - } + var newEvents = []; - /** - * Process and fill the values at the paths as apropos when the fill - * method is either pad or zero. - */ - - }, { - key: "constFill", - value: function constFill(data) { - var newData = data; - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(this._fieldSpec), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var path = _step.value; - - var fieldPath = _util2.default.fieldPathToArray(path); - var pathKey = fieldPath.join(":"); - - //initialize a counter for this column - if (!_underscore2.default.has(this._keyCount, pathKey)) { - this._keyCount[pathKey] = 0; - } - - // this is pointing at a path that does not exist - if (!newData.hasIn(fieldPath)) { - continue; - } - - // Get the next value using the fieldPath - var val = newData.getIn(fieldPath); - - if (_util2.default.isMissing(val)) { - // Have we hit the limit? - if (this._limit && this._keyCount[pathKey] >= this._limit) { - continue; - } - - if (this._method === "zero") { - // set to zero - newData = newData.setIn(fieldPath, 0); - this._keyCount[pathKey]++; - } else if (this._method === "pad") { - // set to previous value - if (!_underscore2.default.isNull(this._previousEvent)) { - var prevVal = this._previousEvent.data().getIn(fieldPath); - - if (!_util2.default.isMissing(prevVal)) { - newData = newData.setIn(fieldPath, prevVal); - this._keyCount[pathKey]++; - } - } - } else if (this._method === "linear") { - //noop - } - } else { - this._keyCount[pathKey] = 0; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } + var fieldPath = _util.default.fieldPathToArray(this._fieldSpec[0]); // setup done, loop through the events - return newData; - } - /** - * Check to see if an event has good values when doing - * linear fill since we need to keep a completely intact - * event for the values. - * While we are inspecting the data payload, make a note if - * any of the paths are pointing at a list. Then it - * will trigger that filling code later. - */ - - }, { - key: "isValidLinearEvent", - value: function isValidLinearEvent(event) { - var valid = true; - var fieldPath = _util2.default.fieldPathToArray(this._fieldSpec[0]); - - // Detect path that doesn't exist - if (!event.data().hasIn(fieldPath)) { - console.warn("path does not exist: " + fieldPath); - return valid; - } + for (var i = 0; i < events.length; i++) { + var e = events[i]; // Can't interpolate first or last event so just save it + // as is and move on. - var val = event.data().getIn(fieldPath); + if (i === 0) { + prevValue = e.get(fieldPath); + prevTime = e.timestamp().getTime(); + newEvents.push(e); + continue; + } - // Detect if missing or not a number - if (_util2.default.isMissing(val) || !_underscore2.default.isNumber(val)) { - valid = false; - } - return valid; - } + if (i === events.length - 1) { + newEvents.push(e); + continue; + } // Detect non-numeric value - /** - * This handles the linear filling. It returns a list of - * zero or more events to be emitted. - * - * If an event is valid - it has valid values for all of - * the field paths - it is cached as "last good" and - * returned to be emitted. The return value is then a list - * of one event. - * - * If an event has invalid values, it is cached to be - * processed later and an empty list is returned. - * - * Additional invalid events will continue to be cached until - * a new valid value is seen, then the cached events will - * be filled and returned. That will be a list of indeterminate - * length. - */ - - }, { - key: "linearFill", - value: function linearFill(event) { - var _this2 = this; - - // See if the event is valid and also if it has any - // list values to be filled. - var isValidEvent = this.isValidLinearEvent(event); - - var events = []; - if (isValidEvent && !this._linearFillCache.length) { - // Valid event, no cached events, use as last good val - this._lastGoodLinear = event; - events.push(event); - } else if (!isValidEvent && !_underscore2.default.isNull(this._lastGoodLinear)) { - this._linearFillCache.push(event); - - // Check limit - if (!_underscore2.default.isNull(this._limit) && this._linearFillCache.length >= this._limit) { - // Flush the cache now because limit is reached - this._linearFillCache.forEach(function (e) { - _this2.emit(e); - }); - - // Reset - this._linearFillCache = []; - this._lastGoodLinear = null; - } - } else if (!isValidEvent && _underscore2.default.isNull(this._lastGoodLinear)) { - // - // An invalid event but we have not seen a good - // event yet so there is nothing to start filling "from" - // so just return and live with it. - // - events.push(event); - } else if (isValidEvent && this._linearFillCache) { - // Linear interpolation between last good and this event - var eventList = [this._lastGoodLinear].concat((0, _toConsumableArray3.default)(this._linearFillCache), [event]); - var interpolatedEvents = this.interpolateEventList(eventList); - - // - // The first event in the returned list from interpolatedEvents - // is our last good event. This event has already been emitted so - // it is sliced off. - // - interpolatedEvents.slice(1).forEach(function (e) { - events.push(e); - }); - - // Reset - this._linearFillCache = []; - this._lastGoodLinear = event; - } - return events; - } + if (!_util.default.isMissing(e.get(fieldPath)) && !_underscore.default.isNumber(e.get(fieldPath))) { + console.warn("linear requires numeric values - skipping this field_spec"); + return events; + } // Found a missing value so start calculating. - /** - * The fundamental linear interpolation workhorse code. Process - * a list of events and return a new list. Does a pass for - * every fieldSpec. - * - * This is abstracted out like this because we probably want - * to interpolate a list of events not tied to a Collection. - * A Pipeline result list, etc etc. - * - **/ - - }, { - key: "interpolateEventList", - value: function interpolateEventList(events) { - var prevValue = void 0; - var prevTime = void 0; - - // new array of interpolated events for each field path - var newEvents = []; - - var fieldPath = _util2.default.fieldPathToArray(this._fieldSpec[0]); - - // setup done, loop through the events - for (var i = 0; i < events.length; i++) { - var e = events[i]; - - // Can't interpolate first or last event so just save it - // as is and move on. - if (i === 0) { - prevValue = e.get(fieldPath); - prevTime = e.timestamp().getTime(); - newEvents.push(e); - continue; - } - - if (i === events.length - 1) { - newEvents.push(e); - continue; - } - - // Detect non-numeric value - if (!_util2.default.isMissing(e.get(fieldPath)) && !_underscore2.default.isNumber(e.get(fieldPath))) { - console.warn("linear requires numeric values - skipping this field_spec"); - return events; - } - - // Found a missing value so start calculating. - if (_util2.default.isMissing(e.get(fieldPath))) { - // Find the next valid value in the original events - var ii = i + 1; - var nextValue = null; - var nextTime = null; - while (_underscore2.default.isNull(nextValue) && ii < events.length) { - var val = events[ii].get(fieldPath); - if (!_util2.default.isMissing(val)) { - nextValue = val; - // exits loop - nextTime = events[ii].timestamp().getTime(); - } - ii++; - } - - // Interpolate a new value to fill - if (!_underscore2.default.isNull(prevValue) && ~_underscore2.default.isNull(nextValue)) { - var currentTime = e.timestamp().getTime(); - if (nextTime === prevTime) { - // If times are the same, just avg - var newValue = (prevValue + nextValue) / 2; - newEvents.push(e.setData(newValue)); - } else { - var f = (currentTime - prevTime) / (nextTime - prevTime); - var _newValue = prevValue + f * (nextValue - prevValue); - var d = e.data().setIn(fieldPath, _newValue); - newEvents.push(e.setData(d)); - } - } else { - newEvents.push(e); - } - } else { - newEvents.push(e); - } - } - return newEvents; - } + if (_util.default.isMissing(e.get(fieldPath))) { + // Find the next valid value in the original events + var ii = i + 1; + var nextValue = null; + var nextTime = null; - /** - * Perform the fill operation on the event and emit. - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - var emitList = []; - var d = event.data(); - if (this._method === "zero" || this._method === "pad") { - var dd = this.constFill(d); - var e = event.setData(dd); - emitList.push(e); - this._previousEvent = e; - } else if (this._method === "linear") { - this.linearFill(event).forEach(function (e) { - emitList.push(e); - }); - } - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = (0, _getIterator3.default)(emitList), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var _event = _step2.value; - - this.emit(_event); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - } - } - }, { - key: "flush", - value: function flush() { - if (this.hasObservers() && this._method == "linear") { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = (0, _getIterator3.default)(this._linearFillCache), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var event = _step3.value; - - this.emit(event); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - } - (0, _get3.default)(Filler.prototype.__proto__ || (0, _getPrototypeOf2.default)(Filler.prototype), "flush", this).call(this); + while (_underscore.default.isNull(nextValue) && ii < events.length) { + var val = events[ii].get(fieldPath); + + if (!_util.default.isMissing(val)) { + nextValue = val; // exits loop + + nextTime = events[ii].timestamp().getTime(); + } + + ii++; + } // Interpolate a new value to fill + + + if (!_underscore.default.isNull(prevValue) && ~_underscore.default.isNull(nextValue)) { + var currentTime = e.timestamp().getTime(); + + if (nextTime === prevTime) { + // If times are the same, just avg + var newValue = (prevValue + nextValue) / 2; + newEvents.push(e.setData(newValue)); + } else { + var f = (currentTime - prevTime) / (nextTime - prevTime); + + var _newValue = prevValue + f * (nextValue - prevValue); + + var d = e.data().setIn(fieldPath, _newValue); + newEvents.push(e.setData(d)); + } + } else { + newEvents.push(e); } - }]); - return Filler; -}(_processor2.default); + } else { + newEvents.push(e); + } + } + + return newEvents; + } + /** + * Perform the fill operation on the event and emit. + */ + + + addEvent(event) { + if (this.hasObservers()) { + var emitList = []; + var d = event.data(); + + if (this._method === "zero" || this._method === "pad") { + var dd = this.constFill(d); + var e = event.setData(dd); + emitList.push(e); + this._previousEvent = e; + } else if (this._method === "linear") { + this.linearFill(event).forEach(e => { + emitList.push(e); + }); + } + + for (var _event of emitList) { + this.emit(_event); + } + } + } + + flush() { + if (this.hasObservers() && this._method == "linear") { + for (var event of this._linearFillCache) { + this.emit(event); + } + } + + super.flush(); + } + +} exports.default = Filler; \ No newline at end of file diff --git a/lib/lib/processors/filter.js b/lib/lib/processors/filter.js index 7e2f72f..7ba18c5 100644 --- a/lib/lib/processors/filter.js +++ b/lib/lib/processors/filter.js @@ -1,42 +1,16 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); +var _processor = _interopRequireDefault(require("./processor")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * A processor which takes an operator as its only option - * and uses that to either output the event or skip the - * event - */ /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -47,46 +21,41 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * LICENSE file in the root directory of this source tree. */ -var Filter = function (_Processor) { - (0, _inherits3.default)(Filter, _Processor); +/** + * A processor which takes an operator as its only option + * and uses that to either output the event or skip the + * event + */ +class Filter extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Filter) { + var other = arg1; + this._op = other._op; + } else if ((0, _pipeline.isPipeline)(arg1)) { + this._op = options.op; + } else { + throw new Error("Unknown arg to Filter constructor", arg1); + } + } - function Filter(arg1, options) { - (0, _classCallCheck3.default)(this, Filter); + clone() { + return new Filter(this); + } + /** + * Output an event that is offset + */ - var _this = (0, _possibleConstructorReturn3.default)(this, (Filter.__proto__ || (0, _getPrototypeOf2.default)(Filter)).call(this, arg1, options)); - if (arg1 instanceof Filter) { - var other = arg1; - _this._op = other._op; - } else if ((0, _pipeline.isPipeline)(arg1)) { - _this._op = options.op; - } else { - throw new Error("Unknown arg to Filter constructor", arg1); - } - return _this; + addEvent(event) { + if (this.hasObservers()) { + if (this._op(event)) { + this.emit(event); + } } + } - (0, _createClass3.default)(Filter, [{ - key: "clone", - value: function clone() { - return new Filter(this); - } - - /** - * Output an event that is offset - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - if (this._op(event)) { - this.emit(event); - } - } - } - }]); - return Filter; -}(_processor2.default); +} exports.default = Filter; \ No newline at end of file diff --git a/lib/lib/processors/mapper.js b/lib/lib/processors/mapper.js index 55693d4..ae5cf74 100644 --- a/lib/lib/processors/mapper.js +++ b/lib/lib/processors/mapper.js @@ -1,41 +1,16 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); +var _processor = _interopRequireDefault(require("./processor")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * A processor which takes an operator as its only option - * and uses that to either output a new event - */ /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -46,44 +21,38 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * LICENSE file in the root directory of this source tree. */ -var Mapper = function (_Processor) { - (0, _inherits3.default)(Mapper, _Processor); +/** + * A processor which takes an operator as its only option + * and uses that to either output a new event + */ +class Mapper extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Mapper) { + var other = arg1; + this._op = other._op; + } else if ((0, _pipeline.isPipeline)(arg1)) { + this._op = options.op; + } else { + throw new Error("Unknown arg to Mapper constructor", arg1); + } + } - function Mapper(arg1, options) { - (0, _classCallCheck3.default)(this, Mapper); + clone() { + return new Mapper(this); + } + /** + * Output an event that is remapped + */ - var _this = (0, _possibleConstructorReturn3.default)(this, (Mapper.__proto__ || (0, _getPrototypeOf2.default)(Mapper)).call(this, arg1, options)); - if (arg1 instanceof Mapper) { - var other = arg1; - _this._op = other._op; - } else if ((0, _pipeline.isPipeline)(arg1)) { - _this._op = options.op; - } else { - throw new Error("Unknown arg to Mapper constructor", arg1); - } - return _this; + addEvent(event) { + if (this.hasObservers()) { + this.emit(this._op(event)); } + } - (0, _createClass3.default)(Mapper, [{ - key: "clone", - value: function clone() { - return new Mapper(this); - } - - /** - * Output an event that is remapped - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - this.emit(this._op(event)); - } - } - }]); - return Mapper; -}(_processor2.default); +} exports.default = Mapper; \ No newline at end of file diff --git a/lib/lib/processors/offset.js b/lib/lib/processors/offset.js index 1c2d63d..0f736c5 100644 --- a/lib/lib/processors/offset.js +++ b/lib/lib/processors/offset.js @@ -1,48 +1,20 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); +var _underscore = _interopRequireDefault(require("underscore")); -var _event = require("../event"); +var _processor = _interopRequireDefault(require("./processor")); -var _event2 = _interopRequireDefault(_event); +var _event = _interopRequireDefault(require("../event")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * A simple processor used by the testing code to verify Pipeline behavior - */ /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -53,56 +25,49 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * LICENSE file in the root directory of this source tree. */ -var Offset = function (_Processor) { - (0, _inherits3.default)(Offset, _Processor); - - function Offset(arg1, options) { - (0, _classCallCheck3.default)(this, Offset); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Offset.__proto__ || (0, _getPrototypeOf2.default)(Offset)).call(this, arg1, options)); - - if (arg1 instanceof Offset) { - var other = arg1; - _this._by = other._by; - _this._fieldSpec = other._fieldSpec; - } else if ((0, _pipeline.isPipeline)(arg1)) { - _this._by = options.by || 1; - _this._fieldSpec = options.fieldSpec; - } else { - throw new Error("Unknown arg to Offset constructor", arg1); - } - return _this; +/** + * A simple processor used by the testing code to verify Pipeline behavior + */ +class Offset extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Offset) { + var other = arg1; + this._by = other._by; + this._fieldSpec = other._fieldSpec; + } else if ((0, _pipeline.isPipeline)(arg1)) { + this._by = options.by || 1; + this._fieldSpec = options.fieldSpec; + } else { + throw new Error("Unknown arg to Offset constructor", arg1); + } + } + + clone() { + return new Offset(this); + } + /** + * Output an event that is offset + */ + + + addEvent(event) { + if (this.hasObservers()) { + var selected = _event.default.selector(event, this._fieldSpec); + + var data = {}; + + _underscore.default.each(selected.data().toJSON(), (value, key) => { + var offsetValue = value + this._by; + data[key] = offsetValue; + }); + + var outputEvent = event.setData(data); + this.emit(outputEvent); } + } - (0, _createClass3.default)(Offset, [{ - key: "clone", - value: function clone() { - return new Offset(this); - } - - /** - * Output an event that is offset - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - var _this2 = this; - - if (this.hasObservers()) { - var selected = _event2.default.selector(event, this._fieldSpec); - var data = {}; - _underscore2.default.each(selected.data().toJSON(), function (value, key) { - var offsetValue = value + _this2._by; - data[key] = offsetValue; - }); - var outputEvent = event.setData(data); - - this.emit(outputEvent); - } - } - }]); - return Offset; -}(_processor2.default); +} exports.default = Offset; \ No newline at end of file diff --git a/lib/lib/processors/processor.js b/lib/lib/processors/processor.js index 235a955..303be62 100644 --- a/lib/lib/processors/processor.js +++ b/lib/lib/processors/processor.js @@ -1,41 +1,16 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _get2 = require("babel-runtime/helpers/get"); - -var _get3 = _interopRequireDefault(_get2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _observable = require("../base/observable"); - -var _observable2 = _interopRequireDefault(_observable); +var _observable = _interopRequireDefault(require("../base/observable")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - /** * Copyright (c) 2016-2017, The Regents of the University of California, * through Lawrence Berkeley National Laboratory (subject to receipt @@ -45,64 +20,55 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ - function addPrevToChain(n, chain) { - chain.push(n); - if ((0, _pipeline.isPipeline)(n.prev())) { - chain.push(n.prev().in()); - return chain; - } else { - return addPrevToChain(n.prev(), chain); - } + chain.push(n); + + if ((0, _pipeline.isPipeline)(n.prev())) { + chain.push(n.prev().in()); + return chain; + } else { + return addPrevToChain(n.prev(), chain); + } } - /** * Base class for all Pipeline processors */ -var Processor = function (_Observable) { - (0, _inherits3.default)(Processor, _Observable); - function Processor(arg1, options) { - (0, _classCallCheck3.default)(this, Processor); +class Processor extends _observable.default { + constructor(arg1, options) { + super(); + + if ((0, _pipeline.isPipeline)(arg1)) { + this._pipeline = arg1; + this._prev = options.prev; + } + } - var _this = (0, _possibleConstructorReturn3.default)(this, (Processor.__proto__ || (0, _getPrototypeOf2.default)(Processor)).call(this)); + prev() { + return this._prev; + } - if ((0, _pipeline.isPipeline)(arg1)) { - _this._pipeline = arg1; - _this._prev = options.prev; - } - return _this; + pipeline() { + return this._pipeline; + } + + chain() { + var chain = [this]; + + if ((0, _pipeline.isPipeline)(this.prev())) { + chain.push(this.prev().in()); + return chain; + } else { + return addPrevToChain(this.prev(), chain); } + } + + flush() { + super.flush(); + } + +} - (0, _createClass3.default)(Processor, [{ - key: "prev", - value: function prev() { - return this._prev; - } - }, { - key: "pipeline", - value: function pipeline() { - return this._pipeline; - } - }, { - key: "chain", - value: function chain() { - var chain = [this]; - if ((0, _pipeline.isPipeline)(this.prev())) { - chain.push(this.prev().in()); - return chain; - } else { - return addPrevToChain(this.prev(), chain); - } - } - }, { - key: "flush", - value: function flush() { - (0, _get3.default)(Processor.prototype.__proto__ || (0, _getPrototypeOf2.default)(Processor.prototype), "flush", this).call(this); - } - }]); - return Processor; -}(_observable2.default); - -exports.default = Processor; \ No newline at end of file +var _default = Processor; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/processors/selector.js b/lib/lib/processors/selector.js index ce2b957..c57ed99 100644 --- a/lib/lib/processors/selector.js +++ b/lib/lib/processors/selector.js @@ -1,86 +1,56 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _processor = _interopRequireDefault(require("./processor")); -var _inherits3 = _interopRequireDefault(_inherits2); - -var _processor = require("./processor"); - -var _processor2 = _interopRequireDefault(_processor); - -var _event = require("../event"); - -var _event2 = _interopRequireDefault(_event); +var _event = _interopRequireDefault(require("../event")); var _pipeline = require("../pipeline"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * A processor which takes a fieldSpec as its only argument * and returns a new event with only those selected columns */ -var Selector = function (_Processor) { - (0, _inherits3.default)(Selector, _Processor); - - function Selector(arg1, options) { - (0, _classCallCheck3.default)(this, Selector); +class Selector extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Selector) { + var other = arg1; + this._fieldSpec = other._fieldSpec; + } else if ((0, _pipeline.isPipeline)(arg1)) { + this._fieldSpec = options.fieldSpec; + } else { + throw new Error("Unknown arg to filter constructor", arg1); + } + } - var _this = (0, _possibleConstructorReturn3.default)(this, (Selector.__proto__ || (0, _getPrototypeOf2.default)(Selector)).call(this, arg1, options)); + clone() { + return new Selector(this); + } - if (arg1 instanceof Selector) { - var other = arg1; - _this._fieldSpec = other._fieldSpec; - } else if ((0, _pipeline.isPipeline)(arg1)) { - _this._fieldSpec = options.fieldSpec; - } else { - throw new Error("Unknown arg to filter constructor", arg1); - } - return _this; + addEvent(event) { + if (this.hasObservers()) { + this.emit(_event.default.selector(event, this._fieldSpec)); } + } - (0, _createClass3.default)(Selector, [{ - key: "clone", - value: function clone() { - return new Selector(this); - } - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - this.emit(_event2.default.selector(event, this._fieldSpec)); - } - } - }]); - return Selector; -}(_processor2.default); /** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ +} exports.default = Selector; \ No newline at end of file diff --git a/lib/lib/processors/taker.js b/lib/lib/processors/taker.js index 89d620f..4cc3a93 100644 --- a/lib/lib/processors/taker.js +++ b/lib/lib/processors/taker.js @@ -1,136 +1,98 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _underscore = _interopRequireDefault(require("underscore")); -var _createClass3 = _interopRequireDefault(_createClass2); +var _processor = _interopRequireDefault(require("./processor")); -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _index = _interopRequireDefault(require("../index")); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _get2 = require("babel-runtime/helpers/get"); +var _pipeline = require("../pipeline"); -var _get3 = _interopRequireDefault(_get2); +/** + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ -var _inherits2 = require("babel-runtime/helpers/inherits"); +/** + * A processor which takes an operator as its only option + * and uses that to either output the event or skip the + * event + */ +class Taker extends _processor.default { + constructor(arg1, options) { + super(arg1, options); + + if (arg1 instanceof Taker) { + var other = arg1; + this._limit = other._limit; + this._windowType = other._windowType; + this._windowDuration = other._windowDuration; + this._groupBy = other._groupBy; + } else if ((0, _pipeline.isPipeline)(arg1)) { + var pipeline = arg1; + this._limit = options.limit; + this._windowType = pipeline.getWindowType(); + this._windowDuration = pipeline.getWindowDuration(); + this._groupBy = pipeline.getGroupBy(); + } else { + throw new Error("Unknown arg to Taker constructor", arg1); + } -var _inherits3 = _interopRequireDefault(_inherits2); + this._count = {}; + } -var _underscore = require("underscore"); + clone() { + return new Taker(this); + } -var _underscore2 = _interopRequireDefault(_underscore); + flush() { + super.flush(); + } + /** + * Output an event that is offset + */ -var _processor = require("./processor"); -var _processor2 = _interopRequireDefault(_processor); + addEvent(event) { + if (this.hasObservers()) { + var timestamp = event.timestamp(); + var windowType = this._windowType; + var windowKey; -var _index = require("../index"); + if (windowType === "fixed") { + windowKey = _index.default.getIndexString(this._windowDuration, timestamp); + } else { + windowKey = windowType; + } -var _index2 = _interopRequireDefault(_index); + var groupByKey = this._groupBy(event); -var _pipeline = require("../pipeline"); + var collectionKey = groupByKey ? "".concat(windowKey, "::").concat(groupByKey) : windowKey; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + if (!_underscore.default.has(this._count, collectionKey)) { + this._count[collectionKey] = 0; + } -/** - * A processor which takes an operator as its only option - * and uses that to either output the event or skip the - * event - */ -/** - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ + if (this._count[collectionKey] < this._limit) { + this.emit(event); + } -var Taker = function (_Processor) { - (0, _inherits3.default)(Taker, _Processor); - - function Taker(arg1, options) { - (0, _classCallCheck3.default)(this, Taker); - - var _this = (0, _possibleConstructorReturn3.default)(this, (Taker.__proto__ || (0, _getPrototypeOf2.default)(Taker)).call(this, arg1, options)); - - if (arg1 instanceof Taker) { - var other = arg1; - _this._limit = other._limit; - _this._windowType = other._windowType; - _this._windowDuration = other._windowDuration; - _this._groupBy = other._groupBy; - } else if ((0, _pipeline.isPipeline)(arg1)) { - var pipeline = arg1; - _this._limit = options.limit; - _this._windowType = pipeline.getWindowType(); - _this._windowDuration = pipeline.getWindowDuration(); - _this._groupBy = pipeline.getGroupBy(); - } else { - throw new Error("Unknown arg to Taker constructor", arg1); - } - - _this._count = {}; - return _this; + this._count[collectionKey]++; } + } - (0, _createClass3.default)(Taker, [{ - key: "clone", - value: function clone() { - return new Taker(this); - } - }, { - key: "flush", - value: function flush() { - (0, _get3.default)(Taker.prototype.__proto__ || (0, _getPrototypeOf2.default)(Taker.prototype), "flush", this).call(this); - } - - /** - * Output an event that is offset - */ - - }, { - key: "addEvent", - value: function addEvent(event) { - if (this.hasObservers()) { - var timestamp = event.timestamp(); - - var windowType = this._windowType; - var windowKey = void 0; - if (windowType === "fixed") { - windowKey = _index2.default.getIndexString(this._windowDuration, timestamp); - } else { - windowKey = windowType; - } - var groupByKey = this._groupBy(event); - var collectionKey = groupByKey ? windowKey + "::" + groupByKey : windowKey; - - if (!_underscore2.default.has(this._count, collectionKey)) { - this._count[collectionKey] = 0; - } - - if (this._count[collectionKey] < this._limit) { - this.emit(event); - } - - this._count[collectionKey]++; - } - } - }]); - return Taker; -}(_processor2.default); +} exports.default = Taker; \ No newline at end of file diff --git a/lib/lib/timeevent.js b/lib/lib/timeevent.js index aef6bcc..e8bd690 100644 --- a/lib/lib/timeevent.js +++ b/lib/lib/timeevent.js @@ -1,54 +1,29 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _event = require("./event"); +var _underscore = _interopRequireDefault(require("underscore")); -var _event2 = _interopRequireDefault(_event); +var _immutable = _interopRequireDefault(require("immutable")); -var _util = require("./base/util"); +var _event = _interopRequireDefault(require("./event")); -var _util2 = _interopRequireDefault(_util); +var _util = _interopRequireDefault(require("./base/util")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2015, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * The creation of an TimeEvent is done by combining two parts: @@ -68,148 +43,128 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * const event1 = new TimeEvent(t, { a: 5, b: 6 }); * ``` */ -/* - * Copyright (c) 2015, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -var TimeEvent = function (_Event) { - (0, _inherits3.default)(TimeEvent, _Event); - - /** - * The creation of an TimeEvent is done by combining two parts: - * the timestamp and the data. - * - * To construct you specify the timestamp as either: - * - Javascript Date object - * - a Moment, or - * - millisecond timestamp: the number of ms since the UNIX epoch - * - * To specify the data you can supply either: - * - a Javascript object containing key values pairs - * - an Immutable.Map, or - * - a simple type such as an integer. In the case of the simple type - * this is a shorthand for supplying {"value": v}. - */ - function TimeEvent(arg1, arg2) { - (0, _classCallCheck3.default)(this, TimeEvent); - - var _this = (0, _possibleConstructorReturn3.default)(this, (TimeEvent.__proto__ || (0, _getPrototypeOf2.default)(TimeEvent)).call(this)); - - if (arg1 instanceof TimeEvent) { - var other = arg1; - _this._d = other._d; - return (0, _possibleConstructorReturn3.default)(_this); - } else if (arg1 instanceof _immutable2.default.Map && arg1.has("time") && arg1.has("data")) { - _this._d = arg1; - return (0, _possibleConstructorReturn3.default)(_this); - } - var time = _util2.default.timestampFromArg(arg1); - var data = _util2.default.dataFromArg(arg2); - _this._d = new _immutable2.default.Map({ time: time, data: data }); - return _this; +class TimeEvent extends _event.default { + /** + * The creation of an TimeEvent is done by combining two parts: + * the timestamp and the data. + * + * To construct you specify the timestamp as either: + * - Javascript Date object + * - a Moment, or + * - millisecond timestamp: the number of ms since the UNIX epoch + * + * To specify the data you can supply either: + * - a Javascript object containing key values pairs + * - an Immutable.Map, or + * - a simple type such as an integer. In the case of the simple type + * this is a shorthand for supplying {"value": v}. + */ + constructor(arg1, arg2) { + super(); + + if (arg1 instanceof TimeEvent) { + var other = arg1; + this._d = other._d; + return; + } else if (arg1 instanceof _immutable.default.Map && arg1.has("time") && arg1.has("data")) { + this._d = arg1; + return; } - /** - * Returns the timestamp (as ms since the epoch) - */ - - - (0, _createClass3.default)(TimeEvent, [{ - key: "key", - value: function key() { - return this.timestamp().getTime(); - } - - /** - * Returns the Event as a JSON object, essentially: - * {time: t, data: {key: value, ...}} - * @return {Object} The event as JSON. - */ - - }, { - key: "toJSON", - value: function toJSON() { - return { time: this.timestamp().getTime(), data: this.data().toJSON() }; - } - - /** - * Returns a flat array starting with the timestamp, followed by the values. - */ - - }, { - key: "toPoint", - value: function toPoint() { - return [this.timestamp().getTime()].concat((0, _toConsumableArray3.default)(_underscore2.default.values(this.data().toJSON()))); - } - - /** - * The timestamp of this data, in UTC time, as a string. - */ - - }, { - key: "timestampAsUTCString", - value: function timestampAsUTCString() { - return this.timestamp().toUTCString(); - } - - /** - * The timestamp of this data, in Local time, as a string. - */ - - }, { - key: "timestampAsLocalString", - value: function timestampAsLocalString() { - return this.timestamp().toString(); - } - - /** - * The timestamp of this data - */ - - }, { - key: "timestamp", - value: function timestamp() { - return this._d.get("time"); - } - - /** - * The begin time of this Event, which will be just the timestamp - */ - - }, { - key: "begin", - value: function begin() { - return this.timestamp(); - } - - /** - * The end time of this Event, which will be just the timestamp - */ - - }, { - key: "end", - value: function end() { - return this.timestamp(); - } - - /** - * Turn the Collection data into a string - * @return {string} The collection as a string - */ - - }, { - key: "stringify", - value: function stringify() { - return (0, _stringify2.default)(this.data()); - } - }]); - return TimeEvent; -}(_event2.default); - -exports.default = TimeEvent; \ No newline at end of file + var time = _util.default.timestampFromArg(arg1); + + var data = _util.default.dataFromArg(arg2); + + this._d = new _immutable.default.Map({ + time, + data + }); + } + /** + * Returns the timestamp (as ms since the epoch) + */ + + + key() { + return this.timestamp().getTime(); + } + /** + * Returns the Event as a JSON object, essentially: + * {time: t, data: {key: value, ...}} + * @return {Object} The event as JSON. + */ + + + toJSON() { + return { + time: this.timestamp().getTime(), + data: this.data().toJSON() + }; + } + /** + * Returns a flat array starting with the timestamp, followed by the values. + */ + + + toPoint(columns) { + var values = []; + columns.forEach(c => { + var v = this.data().get(c); + values.push(v === "undefined" ? null : v); + }); + return [this.timestamp().getTime(), ...values]; + } + /** + * The timestamp of this data, in UTC time, as a string. + */ + + + timestampAsUTCString() { + return this.timestamp().toUTCString(); + } + /** + * The timestamp of this data, in Local time, as a string. + */ + + + timestampAsLocalString() { + return this.timestamp().toString(); + } + /** + * The timestamp of this data + */ + + + timestamp() { + return this._d.get("time"); + } + /** + * The begin time of this Event, which will be just the timestamp + */ + + + begin() { + return this.timestamp(); + } + /** + * The end time of this Event, which will be just the timestamp + */ + + + end() { + return this.timestamp(); + } + /** + * Turn the Collection data into a string + * @return {string} The collection as a string + */ + + + stringify() { + return JSON.stringify(this.data()); + } + +} + +var _default = TimeEvent; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/timerange.js b/lib/lib/timerange.js index 74c6c65..f458da0 100644 --- a/lib/lib/timerange.js +++ b/lib/lib/timerange.js @@ -1,34 +1,27 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); +var _underscore = _interopRequireDefault(require("underscore")); -var _immutable = require("immutable"); +var _immutable = _interopRequireDefault(require("immutable")); -var _immutable2 = _interopRequireDefault(_immutable); +var _moment = _interopRequireDefault(require("moment")); -var _moment = require("moment"); - -var _moment2 = _interopRequireDefault(_moment); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2015-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** A time range is a simple representation of a begin and end time, used @@ -53,404 +46,343 @@ var range = new TimeRange([1326309060000, 1329941520000]); ``` */ -var TimeRange = function () { - /** - * Builds a new TimeRange which may be of several different formats: - * - Another TimeRange (copy constructor) - * - An Immutable.List containing two Dates. - * - A Javascript array containing two Date or ms timestamps - * - Two arguments, begin and end, each of which may be a Data, - * a Moment, or a ms timestamp. - */ - function TimeRange(arg1, arg2) { - (0, _classCallCheck3.default)(this, TimeRange); - - if (arg1 instanceof TimeRange) { - var other = arg1; - this._range = other._range; - } else if (arg1 instanceof _immutable2.default.List) { - var rangeList = arg1; - this._range = rangeList; - } else if (_underscore2.default.isArray(arg1)) { - var rangeArray = arg1; - this._range = new _immutable2.default.List([new Date(rangeArray[0]), new Date(rangeArray[1])]); - } else { - var b = arg1; - var e = arg2; - if (_underscore2.default.isDate(b) && _underscore2.default.isDate(e)) { - this._range = new _immutable2.default.List([new Date(b.getTime()), new Date(e.getTime())]); - } else if (_moment2.default.isMoment(b) && _moment2.default.isMoment(e)) { - this._range = new _immutable2.default.List([new Date(b.valueOf()), new Date(e.valueOf())]); - } else if (_underscore2.default.isNumber(b) && _underscore2.default.isNumber(e)) { - this._range = new _immutable2.default.List([new Date(b), new Date(e)]); - } - } +class TimeRange { + /** + * Builds a new TimeRange which may be of several different formats: + * - Another TimeRange (copy constructor) + * - An Immutable.List containing two Dates. + * - A Javascript array containing two Date or ms timestamps + * - Two arguments, begin and end, each of which may be a Data, + * a Moment, or a ms timestamp. + */ + constructor(arg1, arg2) { + if (arg1 instanceof TimeRange) { + var other = arg1; + this._range = other._range; + } else if (arg1 instanceof _immutable.default.List) { + var rangeList = arg1; + this._range = rangeList; + } else if (_underscore.default.isArray(arg1)) { + var rangeArray = arg1; + this._range = new _immutable.default.List([new Date(rangeArray[0]), new Date(rangeArray[1])]); + } else { + var b = arg1; + var e = arg2; + + if (_underscore.default.isDate(b) && _underscore.default.isDate(e)) { + this._range = new _immutable.default.List([new Date(b.getTime()), new Date(e.getTime())]); + } else if (_moment.default.isMoment(b) && _moment.default.isMoment(e)) { + this._range = new _immutable.default.List([new Date(b.valueOf()), new Date(e.valueOf())]); + } else if (_underscore.default.isNumber(b) && _underscore.default.isNumber(e)) { + this._range = new _immutable.default.List([new Date(b), new Date(e)]); + } + } + } + /** + * Returns the internal range, which is an Immutable List containing + * begin and end times. + * + * @return {Immutable.List} List containing the begin and end of the time range. + */ + + + range() { + return this._range; + } // + // Serialize + // + + /** + * Returns the TimeRange as JSON, which will be a Javascript array + * of two ms timestamps. + * + * @return {number[]} JSON representation of the TimeRange + */ + + + toJSON() { + return [this.begin().getTime(), this.end().getTime()]; + } + /** + * Returns the TimeRange as a string, useful for serialization. + * + * @return {string} String representation of the TimeRange + */ + + + toString() { + return JSON.stringify(this.toJSON()); + } + /** + * Returns the TimeRange as a string expressed in local time + * + * @return {string} String representation of the TimeRange + */ + + + toLocalString() { + return "[".concat(this.begin(), ", ").concat(this.end(), "]"); + } + /** + * Returns the TimeRange as a string expressed in UTC time + * + * @return {string} String representation of the TimeRange + */ + + + toUTCString() { + return "[".concat(this.begin().toUTCString(), ", ").concat(this.end().toUTCString(), "]"); + } + /** + * Returns a human friendly version of the TimeRange, e.g. + * "Aug 1, 2014 05:19:59 am to Aug 1, 2014 07:41:06 am" + * + * @return {string} Human friendly string representation of the TimeRange + */ + + + humanize() { + var begin = (0, _moment.default)(this.begin()); + var end = (0, _moment.default)(this.end()); + var beginStr = begin.format("MMM D, YYYY hh:mm:ss a"); + var endStr = end.format("MMM D, YYYY hh:mm:ss a"); + return "".concat(beginStr, " to ").concat(endStr); + } + /** + * Returns a human friendly version of the TimeRange + * @example + * "a few seconds ago to a month ago" + * + * @return {string} Human friendly string representation of the TimeRange + */ + + + relativeString() { + var begin = (0, _moment.default)(this.begin()); + var end = (0, _moment.default)(this.end()); + return "".concat(begin.fromNow(), " to ").concat(end.fromNow()); + } + /** + * Returns the begin time of the TimeRange. + * + * @return {Date} The begin time of the TimeRange + */ + + + begin() { + return this._range.get(0); + } + /** + * Returns the end time of the TimeRange. + * + * @return {Date} The end time of the TimeRange + */ + + + end() { + return this._range.get(1); + } + /** + * Sets a new begin time on the TimeRange. The result will be + * a new TimeRange. + * + * @param {Date} t Time to set the begin time to + * @return {TimeRange} The new mutated TimeRange + */ + + + setBegin(t) { + return new TimeRange(this._range.set(0, t)); + } + /** + * Sets a new end time on the TimeRange. The result will be + * a new TimeRange. + * + * @param {Date} t Time to set the end time to + * @return {TimeRange} The new mutated TimeRange + */ + + + setEnd(t) { + return new TimeRange(this._range.set(1, t)); + } + /** + * Returns if the two TimeRanges can be considered equal, + * in that they have the same times. + * + * @param {TimeRange} other The TimeRange to compare to + * @return {boolean} Result + */ + + + equals(other) { + return this.begin().getTime() === other.begin().getTime() && this.end().getTime() === other.end().getTime(); + } + /** + * Returns true if other is completely inside this. + * + * @param {TimeRange} other The TimeRange to compare to + * @return {boolean} Result + */ + + + contains(other) { + if (_underscore.default.isDate(other)) { + return this.begin() <= other && this.end() >= other; + } else { + return this.begin() <= other.begin() && this.end() >= other.end(); + } + + return false; + } + /** + * Returns true if this TimeRange is completely within the supplied + * other TimeRange. + * + * @param {TimeRange} other The TimeRange to compare to + * @return {boolean} Result + */ + + + within(other) { + return this.begin() >= other.begin() && this.end() <= other.end(); + } + /** + * Returns true if the passed in other TimeRange overlaps this time Range. + * + * @param {TimeRange} other The TimeRange to compare to + * @return {boolean} Result + */ + + + overlaps(other) { + if (this.contains(other.begin()) && !this.contains(other.end()) || this.contains(other.end()) && !this.contains(other.begin())) { + return true; + } else { + return false; + } + } + /** + * Returns true if the passed in other Range in no way + * overlaps this time Range. + * + * @param {TimeRange} other The TimeRange to compare to + * @return {boolean} Result + */ + + + disjoint(other) { + return this.end() < other.begin() || this.begin() > other.end(); + } + /** + * @param {TimeRange} other The TimeRange to extend with + * @return {TimeRange} a new Timerange which covers the extents of this and + * other combined. + */ + + + extents(other) { + var b = this.begin() < other.begin() ? this.begin() : other.begin(); + var e = this.end() > other.end() ? this.end() : other.end(); + return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); + } + /** + * @param {TimeRange} other The TimeRange to intersect with + * @return {TimeRange} A new TimeRange which represents the intersection + * (overlapping) part of this and other. + */ + + + intersection(other) { + if (this.disjoint(other)) { + return undefined; } - /** - * Returns the internal range, which is an Immutable List containing - * begin and end times. - * - * @return {Immutable.List} List containing the begin and end of the time range. - */ - - - (0, _createClass3.default)(TimeRange, [{ - key: "range", - value: function range() { - return this._range; - } - - // - // Serialize - // - /** - * Returns the TimeRange as JSON, which will be a Javascript array - * of two ms timestamps. - * - * @return {number[]} JSON representation of the TimeRange - */ - - }, { - key: "toJSON", - value: function toJSON() { - return [this.begin().getTime(), this.end().getTime()]; - } - - /** - * Returns the TimeRange as a string, useful for serialization. - * - * @return {string} String representation of the TimeRange - */ - - }, { - key: "toString", - value: function toString() { - return (0, _stringify2.default)(this.toJSON()); - } - - /** - * Returns the TimeRange as a string expressed in local time - * - * @return {string} String representation of the TimeRange - */ - - }, { - key: "toLocalString", - value: function toLocalString() { - return "[" + this.begin() + ", " + this.end() + "]"; - } - - /** - * Returns the TimeRange as a string expressed in UTC time - * - * @return {string} String representation of the TimeRange - */ - - }, { - key: "toUTCString", - value: function toUTCString() { - return "[" + this.begin().toUTCString() + ", " + this.end().toUTCString() + "]"; - } - - /** - * Returns a human friendly version of the TimeRange, e.g. - * "Aug 1, 2014 05:19:59 am to Aug 1, 2014 07:41:06 am" - * - * @return {string} Human friendly string representation of the TimeRange - */ - - }, { - key: "humanize", - value: function humanize() { - var begin = (0, _moment2.default)(this.begin()); - var end = (0, _moment2.default)(this.end()); - var beginStr = begin.format("MMM D, YYYY hh:mm:ss a"); - var endStr = end.format("MMM D, YYYY hh:mm:ss a"); - - return beginStr + " to " + endStr; - } - - /** - * Returns a human friendly version of the TimeRange - * @example - * "a few seconds ago to a month ago" - * - * @return {string} Human friendly string representation of the TimeRange - */ - - }, { - key: "relativeString", - value: function relativeString() { - var begin = (0, _moment2.default)(this.begin()); - var end = (0, _moment2.default)(this.end()); - return begin.fromNow() + " to " + end.fromNow(); - } - - /** - * Returns the begin time of the TimeRange. - * - * @return {Date} The begin time of the TimeRange - */ - - }, { - key: "begin", - value: function begin() { - return this._range.get(0); - } - - /** - * Returns the end time of the TimeRange. - * - * @return {Date} The end time of the TimeRange - */ - - }, { - key: "end", - value: function end() { - return this._range.get(1); - } - - /** - * Sets a new begin time on the TimeRange. The result will be - * a new TimeRange. - * - * @param {Date} t Time to set the begin time to - * @return {TimeRange} The new mutated TimeRange - */ - - }, { - key: "setBegin", - value: function setBegin(t) { - return new TimeRange(this._range.set(0, t)); - } - - /** - * Sets a new end time on the TimeRange. The result will be - * a new TimeRange. - * - * @param {Date} t Time to set the end time to - * @return {TimeRange} The new mutated TimeRange - */ - - }, { - key: "setEnd", - value: function setEnd(t) { - return new TimeRange(this._range.set(1, t)); - } - - /** - * Returns if the two TimeRanges can be considered equal, - * in that they have the same times. - * - * @param {TimeRange} other The TimeRange to compare to - * @return {boolean} Result - */ - - }, { - key: "equals", - value: function equals(other) { - return this.begin().getTime() === other.begin().getTime() && this.end().getTime() === other.end().getTime(); - } - - /** - * Returns true if other is completely inside this. - * - * @param {TimeRange} other The TimeRange to compare to - * @return {boolean} Result - */ - - }, { - key: "contains", - value: function contains(other) { - if (_underscore2.default.isDate(other)) { - return this.begin() <= other && this.end() >= other; - } else { - return this.begin() <= other.begin() && this.end() >= other.end(); - } - return false; - } - - /** - * Returns true if this TimeRange is completely within the supplied - * other TimeRange. - * - * @param {TimeRange} other The TimeRange to compare to - * @return {boolean} Result - */ - - }, { - key: "within", - value: function within(other) { - return this.begin() >= other.begin() && this.end() <= other.end(); - } - - /** - * Returns true if the passed in other TimeRange overlaps this time Range. - * - * @param {TimeRange} other The TimeRange to compare to - * @return {boolean} Result - */ - - }, { - key: "overlaps", - value: function overlaps(other) { - if (this.contains(other.begin()) && !this.contains(other.end()) || this.contains(other.end()) && !this.contains(other.begin())) { - return true; - } else { - return false; - } - } - - /** - * Returns true if the passed in other Range in no way - * overlaps this time Range. - * - * @param {TimeRange} other The TimeRange to compare to - * @return {boolean} Result - */ - - }, { - key: "disjoint", - value: function disjoint(other) { - return this.end() < other.begin() || this.begin() > other.end(); - } - - /** - * @param {TimeRange} other The TimeRange to extend with - * @return {TimeRange} a new Timerange which covers the extents of this and - * other combined. - */ - - }, { - key: "extents", - value: function extents(other) { - var b = this.begin() < other.begin() ? this.begin() : other.begin(); - var e = this.end() > other.end() ? this.end() : other.end(); - return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); - } - - /** - * @param {TimeRange} other The TimeRange to intersect with - * @return {TimeRange} A new TimeRange which represents the intersection - * (overlapping) part of this and other. - */ - - }, { - key: "intersection", - value: function intersection(other) { - if (this.disjoint(other)) { - return undefined; - } - var b = this.begin() > other.begin() ? this.begin() : other.begin(); - var e = this.end() < other.end() ? this.end() : other.end(); - return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); - } - - /** - * @return {number} The duration of the TimeRange in milliseconds - */ - - }, { - key: "duration", - value: function duration() { - return this.end().getTime() - this.begin().getTime(); - } - - /** - * @return {string} A user friendly version of the duration. - */ - - }, { - key: "humanizeDuration", - value: function humanizeDuration() { - return _moment2.default.duration(this.duration()).humanize(); - } - - // - // Static TimeRange creators - // - /** - * @return {TimeRange} The last day, as a TimeRange - */ - - }], [{ - key: "lastDay", - value: function lastDay() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(24, "hours"); - return new TimeRange(beginTime, endTime); - } - - /** - * @return {TimeRange} The last seven days, as a TimeRange - */ - - }, { - key: "lastSevenDays", - value: function lastSevenDays() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(7, "days"); - return new TimeRange(beginTime, endTime); - } - - /** - * @return {TimeRange} The last thirty days, as a TimeRange - */ - - }, { - key: "lastThirtyDays", - value: function lastThirtyDays() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(30, "days"); - return new TimeRange(beginTime, endTime); - } - - /** - * @return {TimeRange} The last month, as a TimeRange - */ - - }, { - key: "lastMonth", - value: function lastMonth() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(1, "month"); - return new TimeRange(beginTime, endTime); - } - - /** - * @return {TimeRange} The last 90 days, as a TimeRange - */ - - }, { - key: "lastNinetyDays", - value: function lastNinetyDays() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(90, "days"); - return new TimeRange(beginTime, endTime); - } - - /** - * @return {TimeRange} The last year, as a TimeRange - */ - - }, { - key: "lastYear", - value: function lastYear() { - var endTime = (0, _moment2.default)(); - var beginTime = endTime.clone().subtract(1, "year"); - return new TimeRange(beginTime, endTime); - } - }]); - return TimeRange; -}(); /* - * Copyright (c) 2015-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -exports.default = TimeRange; \ No newline at end of file + var b = this.begin() > other.begin() ? this.begin() : other.begin(); + var e = this.end() < other.end() ? this.end() : other.end(); + return new TimeRange(new Date(b.getTime()), new Date(e.getTime())); + } + /** + * @return {number} The duration of the TimeRange in milliseconds + */ + + + duration() { + return this.end().getTime() - this.begin().getTime(); + } + /** + * @return {string} A user friendly version of the duration. + */ + + + humanizeDuration() { + return _moment.default.duration(this.duration()).humanize(); + } // + // Static TimeRange creators + // + + /** + * @return {TimeRange} The last day, as a TimeRange + */ + + + static lastDay() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(24, "hours"); + return new TimeRange(beginTime, endTime); + } + /** + * @return {TimeRange} The last seven days, as a TimeRange + */ + + + static lastSevenDays() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(7, "days"); + return new TimeRange(beginTime, endTime); + } + /** + * @return {TimeRange} The last thirty days, as a TimeRange + */ + + + static lastThirtyDays() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(30, "days"); + return new TimeRange(beginTime, endTime); + } + /** + * @return {TimeRange} The last month, as a TimeRange + */ + + + static lastMonth() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(1, "month"); + return new TimeRange(beginTime, endTime); + } + /** + * @return {TimeRange} The last 90 days, as a TimeRange + */ + + + static lastNinetyDays() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(90, "days"); + return new TimeRange(beginTime, endTime); + } + /** + * @return {TimeRange} The last year, as a TimeRange + */ + + + static lastYear() { + var endTime = (0, _moment.default)(); + var beginTime = endTime.clone().subtract(1, "year"); + return new TimeRange(beginTime, endTime); + } + +} + +var _default = TimeRange; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/timerangeevent.js b/lib/lib/timerangeevent.js index f7b48a4..e54049e 100644 --- a/lib/lib/timerangeevent.js +++ b/lib/lib/timerangeevent.js @@ -1,50 +1,29 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _createClass2 = require("babel-runtime/helpers/createClass"); - -var _createClass3 = _interopRequireDefault(_createClass2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); +var _underscore = _interopRequireDefault(require("underscore")); -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); +var _immutable = _interopRequireDefault(require("immutable")); -var _inherits2 = require("babel-runtime/helpers/inherits"); +var _event = _interopRequireDefault(require("./event")); -var _inherits3 = _interopRequireDefault(_inherits2); +var _util = _interopRequireDefault(require("./base/util")); -var _underscore = require("underscore"); - -var _underscore2 = _interopRequireDefault(_underscore); - -var _immutable = require("immutable"); - -var _immutable2 = _interopRequireDefault(_immutable); - -var _event = require("./event"); - -var _event2 = _interopRequireDefault(_event); - -var _util = require("./base/util"); - -var _util2 = _interopRequireDefault(_util); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* + * Copyright (c) 2016-2017, The Regents of the University of California, + * through Lawrence Berkeley National Laboratory (subject to receipt + * of any required approvals from the U.S. Dept. of Energy). + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ /** * A `TimeRangeEvent` uses a `TimeRange` to specify the range over @@ -118,162 +97,137 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * outageEvent.get("title") // "STAR-CR5 - Outage" * ``` */ -/* - * Copyright (c) 2016-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -var TimeRangeEvent = function (_Event) { - (0, _inherits3.default)(TimeRangeEvent, _Event); - - /** - * The creation of an TimeRangeEvent is done by combining two parts: - * the timerange and the data. - * - * To construct you specify a TimeRange, along with the data. - * - * To specify the data you can supply either: - * - a Javascript object containing key values pairs - * - an Immutable.Map, or - * - a simple type such as an integer. In the case of the simple type - * this is a shorthand for supplying {"value": v}. - */ - function TimeRangeEvent(arg1, arg2) { - (0, _classCallCheck3.default)(this, TimeRangeEvent); - - var _this = (0, _possibleConstructorReturn3.default)(this, (TimeRangeEvent.__proto__ || (0, _getPrototypeOf2.default)(TimeRangeEvent)).call(this)); - - if (arg1 instanceof TimeRangeEvent) { - var other = arg1; - _this._d = other._d; - return (0, _possibleConstructorReturn3.default)(_this); - } else if (arg1 instanceof _immutable2.default.Map) { - _this._d = arg1; - return (0, _possibleConstructorReturn3.default)(_this); - } - var range = _util2.default.timeRangeFromArg(arg1); - var data = _util2.default.dataFromArg(arg2); - _this._d = new _immutable2.default.Map({ range: range, data: data }); - return _this; +class TimeRangeEvent extends _event.default { + /** + * The creation of an TimeRangeEvent is done by combining two parts: + * the timerange and the data. + * + * To construct you specify a TimeRange, along with the data. + * + * To specify the data you can supply either: + * - a Javascript object containing key values pairs + * - an Immutable.Map, or + * - a simple type such as an integer. In the case of the simple type + * this is a shorthand for supplying {"value": v}. + */ + constructor(arg1, arg2) { + super(); + + if (arg1 instanceof TimeRangeEvent) { + var other = arg1; + this._d = other._d; + return; + } else if (arg1 instanceof _immutable.default.Map) { + this._d = arg1; + return; } - /** - * Returns the timerange as a string - */ - - - (0, _createClass3.default)(TimeRangeEvent, [{ - key: "key", - value: function key() { - return +this.timerange().begin() + "," + +this.timerange().end(); - } - - /** - * Returns the TimeRangeEvent as a JSON object, converting all - * Immutable structures in the process. - */ - - }, { - key: "toJSON", - value: function toJSON() { - return { - timerange: this.timerange().toJSON(), - data: this.data().toJSON() - }; - } - - /** - * Returns a flat array starting with the timestamp, followed by the values. - */ - - }, { - key: "toPoint", - value: function toPoint() { - return [this.timerange().toJSON()].concat((0, _toConsumableArray3.default)(_underscore2.default.values(this.data().toJSON()))); - } - - /** - * The timerange of this data as a `TimeRange` object - * @return {TimeRange} TimeRange of this data. - */ - - }, { - key: "timerange", - value: function timerange() { - return this._d.get("range"); - } - - /** - * The TimeRange of this event, in UTC, as a string. - * @return {string} TimeRange of this data. - */ - - }, { - key: "timerangeAsUTCString", - value: function timerangeAsUTCString() { - return this.timerange().toUTCString(); - } - - /** - * The TimeRange of this event, in Local time, as a string. - * @return {string} TimeRange of this data. - */ - - }, { - key: "timerangeAsLocalString", - value: function timerangeAsLocalString() { - return this.timerange().toLocalString(); - } - - /** - * The begin time of this Event - * @return {Data} Begin time - */ - - }, { - key: "begin", - value: function begin() { - return this.timerange().begin(); - } - - /** - * The end time of this Event - * @return {Data} End time - */ - - }, { - key: "end", - value: function end() { - return this.timerange().end(); - } - - /** - * Alias for the begin() time. - * @return {Data} Time representing this Event - */ - - }, { - key: "timestamp", - value: function timestamp() { - return this.begin(); - } - - /** - * A human friendly version of the duration of this event - */ - - }, { - key: "humanizeDuration", - value: function humanizeDuration() { - return this.timerange().humanizeDuration(); - } - }]); - return TimeRangeEvent; -}(_event2.default); - -exports.default = TimeRangeEvent; \ No newline at end of file + var range = _util.default.timeRangeFromArg(arg1); + + var data = _util.default.dataFromArg(arg2); + + this._d = new _immutable.default.Map({ + range, + data + }); + } + /** + * Returns the timerange as a string + */ + + + key() { + return "".concat(+this.timerange().begin(), ",").concat(+this.timerange().end()); + } + /** + * Returns the TimeRangeEvent as a JSON object, converting all + * Immutable structures in the process. + */ + + + toJSON() { + return { + timerange: this.timerange().toJSON(), + data: this.data().toJSON() + }; + } + /** + * Returns a flat array starting with the timestamp, followed by the values. + */ + + + toPoint(columns) { + var values = []; + columns.forEach(c => { + var v = this.data().get(c); + values.push(v === "undefined" ? null : v); + }); + return [this.timerange().toJSON(), ...values]; + } + /** + * The timerange of this data as a `TimeRange` object + * @return {TimeRange} TimeRange of this data. + */ + + + timerange() { + return this._d.get("range"); + } + /** + * The TimeRange of this event, in UTC, as a string. + * @return {string} TimeRange of this data. + */ + + + timerangeAsUTCString() { + return this.timerange().toUTCString(); + } + /** + * The TimeRange of this event, in Local time, as a string. + * @return {string} TimeRange of this data. + */ + + + timerangeAsLocalString() { + return this.timerange().toLocalString(); + } + /** + * The begin time of this Event + * @return {Data} Begin time + */ + + + begin() { + return this.timerange().begin(); + } + /** + * The end time of this Event + * @return {Data} End time + */ + + + end() { + return this.timerange().end(); + } + /** + * Alias for the begin() time. + * @return {Data} Time representing this Event + */ + + + timestamp() { + return this.begin(); + } + /** + * A human friendly version of the duration of this event + */ + + + humanizeDuration() { + return this.timerange().humanizeDuration(); + } + +} + +var _default = TimeRangeEvent; +exports.default = _default; \ No newline at end of file diff --git a/lib/lib/timeseries.js b/lib/lib/timeseries.js index 2a2b471..b21d502 100644 --- a/lib/lib/timeseries.js +++ b/lib/lib/timeseries.js @@ -1,105 +1,60 @@ "use strict"; +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + Object.defineProperty(exports, "__esModule", { - value: true + value: true }); +exports.default = void 0; -var _extends2 = require("babel-runtime/helpers/extends"); - -var _extends3 = _interopRequireDefault(_extends2); - -var _regenerator = require("babel-runtime/regenerator"); - -var _regenerator2 = _interopRequireDefault(_regenerator); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _toConsumableArray2 = require("babel-runtime/helpers/toConsumableArray"); - -var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); - -var _toArray2 = require("babel-runtime/helpers/toArray"); - -var _toArray3 = _interopRequireDefault(_toArray2); - -var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties"); +var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); -var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); +var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); +var _underscore = _interopRequireDefault(require("underscore")); -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); +var _immutable = _interopRequireDefault(require("immutable")); -var _createClass2 = require("babel-runtime/helpers/createClass"); +var _collection = _interopRequireDefault(require("./collection")); -var _createClass3 = _interopRequireDefault(_createClass2); +var _index = _interopRequireDefault(require("./index")); -var _underscore = require("underscore"); +var _event = _interopRequireDefault(require("./event")); -var _underscore2 = _interopRequireDefault(_underscore); +var _timeevent = _interopRequireDefault(require("./timeevent")); -var _immutable = require("immutable"); +var _timerangeevent = _interopRequireDefault(require("./timerangeevent")); -var _immutable2 = _interopRequireDefault(_immutable); +var _indexedevent = _interopRequireDefault(require("./indexedevent")); -var _collection = require("./collection"); - -var _collection2 = _interopRequireDefault(_collection); - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -var _event = require("./event"); - -var _event2 = _interopRequireDefault(_event); - -var _timeevent = require("./timeevent"); - -var _timeevent2 = _interopRequireDefault(_timeevent); +var _pipeline = require("./pipeline.js"); -var _timerangeevent = require("./timerangeevent"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } -var _timerangeevent2 = _interopRequireDefault(_timerangeevent); +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } -var _indexedevent = require("./indexedevent"); +function buildMetaData(meta) { + var d = meta ? meta : {}; // Name -var _indexedevent2 = _interopRequireDefault(_indexedevent); + d.name = meta.name ? meta.name : ""; // Index -var _pipeline = require("./pipeline.js"); + if (meta.index) { + if (_underscore.default.isString(meta.index)) { + d.index = new _index.default(meta.index); + } else if (meta.index instanceof _index.default) { + d.index = meta.index; + } + } // UTC or Local time -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -function buildMetaData(meta) { - var d = meta ? meta : {}; - - // Name - d.name = meta.name ? meta.name : ""; - - // Index - if (meta.index) { - if (_underscore2.default.isString(meta.index)) { - d.index = new _index2.default(meta.index); - } else if (meta.index instanceof _index2.default) { - d.index = meta.index; - } - } + d.utc = true; - // UTC or Local time - d.utc = true; - if (_underscore2.default.isBoolean(meta.utc)) { - d.utc = meta.utc; - } + if (_underscore.default.isBoolean(meta.utc)) { + d.utc = meta.utc; + } - return new _immutable2.default.Map(d); + return new _immutable.default.Map(d); } - /** * A `TimeSeries` represents a series of events, with each event being a combination of: * @@ -201,1644 +156,1421 @@ function buildMetaData(meta) { * series.avg("NASA_north", d => d.in); // 250 * ``` */ -/* - * Copyright (c) 2015-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -var TimeSeries = function () { - function TimeSeries(arg) { - (0, _classCallCheck3.default)(this, TimeSeries); - - this._collection = null; - // Collection - this._data = null; - - // Meta data - if (arg instanceof TimeSeries) { - // - // Copy another TimeSeries - // - var other = arg; - this._data = other._data; - this._collection = other._collection; - } else if (_underscore2.default.isObject(arg)) { - // - // TimeSeries(object data) where data may be: - // { "events": [event-1, event-2, ..., event-n]} - // or - // { "columns": [time|timerange|index, column-1, ..., column-n] - // "points": [ - // [t1, v1, v2, ..., v2], - // [t2, v1, v2, ..., vn], - // ... - // ] - // } - var obj = arg; - - if (_underscore2.default.has(obj, "events")) { - // - // Initialized from an event list - // - var events = obj.events, - meta1 = (0, _objectWithoutProperties3.default)(obj, ["events"]); - //eslint-disable-line - - this._collection = new _collection2.default(events); - this._data = buildMetaData(meta1); - } else if (_underscore2.default.has(obj, "collection")) { - // - // Initialized from a Collection - // - var collection = obj.collection, - meta3 = (0, _objectWithoutProperties3.default)(obj, ["collection"]); - //eslint-disable-line - - this._collection = collection; - this._data = buildMetaData(meta3); - } else if (_underscore2.default.has(obj, "columns") && _underscore2.default.has(obj, "points")) { - // - // Initialized from the wire format - // - var columns = obj.columns, - points = obj.points, - _obj$utc = obj.utc, - utc = _obj$utc === undefined ? true : _obj$utc, - meta2 = (0, _objectWithoutProperties3.default)(obj, ["columns", "points", "utc"]); - //eslint-disable-line - - var _columns = (0, _toArray3.default)(columns), - eventKey = _columns[0], - eventFields = _columns.slice(1); - - var _events = points.map(function (point) { - var _point = (0, _toArray3.default)(point), - t = _point[0], - eventValues = _point.slice(1); - - var d = _underscore2.default.object(eventFields, eventValues); - var options = utc; - switch (eventKey) { - case "time": - return new _timeevent2.default(t, d, options); - case "index": - return new _indexedevent2.default(t, d, options); - case "timerange": - return new _timerangeevent2.default(t, d, options); - default: - throw new Error("Unknown event type"); - } - }); - - this._collection = new _collection2.default(_events); - this._data = buildMetaData(meta2); - } - - if (!this._collection.isChronological()) { - throw new Error("TimeSeries was passed non-chronological events"); - } - } - } - // - // Serialize - // - /** - * Turn the TimeSeries into regular javascript objects - */ - - - (0, _createClass3.default)(TimeSeries, [{ - key: "toJSON", - value: function toJSON() { - var e = this.atFirst(); - if (!e) { - return; - } - - var columns = void 0; - if (e instanceof _timeevent2.default) { - columns = ["time"].concat((0, _toConsumableArray3.default)(this.columns())); - } else if (e instanceof _timerangeevent2.default) { - columns = ["timerange"].concat((0, _toConsumableArray3.default)(this.columns())); - } else if (e instanceof _indexedevent2.default) { - columns = ["index"].concat((0, _toConsumableArray3.default)(this.columns())); - } - - var points = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = (0, _getIterator3.default)(this._collection.events()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _e = _step.value; - - points.push(_e.toPoint()); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - return _underscore2.default.extend(this._data.toJSON(), { columns: columns, points: points }); - } - - /** - * Represent the TimeSeries as a string - */ - - }, { - key: "toString", - value: function toString() { - return (0, _stringify2.default)(this.toJSON()); - } - - /** - * Returns the extents of the TimeSeries as a TimeRange. - */ - - }, { - key: "timerange", - value: function timerange() { - return this._collection.range(); - } - - /** - * Alias for `timerange()` - */ - - }, { - key: "range", - value: function range() { - return this.timerange(); - } - - /** - * Gets the earliest time represented in the TimeSeries. - * - * @return {Date} Begin time - */ - - }, { - key: "begin", - value: function begin() { - return this.range().begin(); - } - - /** - * Gets the latest time represented in the TimeSeries. - * - * @return {Date} End time - */ - - }, { - key: "end", - value: function end() { - return this.range().end(); - } - - /** - * Access a specific TimeSeries event via its position - * - * @param {number} pos The event position - */ - - }, { - key: "at", - value: function at(pos) { - return this._collection.at(pos); - } - - /** - * Returns an event in the series by its time. This is the same - * as calling `bisect` first and then using `at` with the index. - * - * @param {Date} time The time of the event. - * @return {TimeEvent|IndexedEvent|TimeRangeEvent} - */ - - }, { - key: "atTime", - value: function atTime(time) { - var pos = this.bisect(time); - if (pos >= 0 && pos < this.size()) { - return this.at(pos); - } - } - - /** - * Returns the first event in the series. - * - * @return {TimeEvent|IndexedEvent|TimeRangeEvent} - */ - - }, { - key: "atFirst", - value: function atFirst() { - return this._collection.atFirst(); - } - - /** - * Returns the last event in the series. - * - * @return {TimeEvent|IndexedEvent|TimeRangeEvent} - */ - - }, { - key: "atLast", - value: function atLast() { - return this._collection.atLast(); - } - - /** - * Generator to return all the events in the series - * - * @example - * ``` - * for (let event of series.events()) { - * console.log(event.toString()); - * } - * ``` - */ - - }, { - key: "events", - value: _regenerator2.default.mark(function events() { - var i; - return _regenerator2.default.wrap(function events$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - i = 0; - - case 1: - if (!(i < this.size())) { - _context.next = 7; - break; - } - - _context.next = 4; - return this.at(i); - - case 4: - i++; - _context.next = 1; - break; - - case 7: - case "end": - return _context.stop(); - } - } - }, events, this); - }) - - /** - * Sets a new underlying collection for this TimeSeries. - * - * @param {Collection} collection The new collection - * @param {boolean} isChronological Causes the chronological - * order of the events to - * not be checked - * - * @return {TimeSeries} A new TimeSeries - */ - - }, { - key: "setCollection", - value: function setCollection(collection) { - var isChronological = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (!isChronological && !collection.isChronological()) { - throw new Error("Collection supplied is not chronological"); - } - var result = new TimeSeries(this); - if (collection) { - result._collection = collection; - } else { - result._collection = new _collection2.default(); - } - return result; - } - - /** - * Returns the index that bisects the TimeSeries at the time specified. - * - * @param {Date} t The time to bisect the TimeSeries with - * @param {number} b The position to begin searching at - * - * @return {number} The row number that is the greatest, but still below t. - */ - - }, { - key: "bisect", - value: function bisect(t, b) { - var tms = t.getTime(); - var size = this.size(); - var i = b || 0; - - if (!size) { - return undefined; - } - - for (; i < size; i++) { - var ts = this.at(i).timestamp().getTime(); - if (ts > tms) { - return i - 1 >= 0 ? i - 1 : 0; - } else if (ts === tms) { - return i; - } - } - return i - 1; - } - - /** - * Perform a slice of events within the TimeSeries, returns a new - * TimeSeries representing a portion of this TimeSeries from - * begin up to but not including end. - * - * @param {Number} begin The position to begin slicing - * @param {Number} end The position to end slicing - * - * @return {TimeSeries} The new, sliced, TimeSeries. - */ - - }, { - key: "slice", - value: function slice(begin, end) { - var sliced = this._collection.slice(begin, end); - return this.setCollection(sliced, true); - } - - /** - * Crop the TimeSeries to the specified TimeRange and - * return a new TimeSeries. - * - * @param {TimeRange} timerange The bounds of the new TimeSeries - * - * @return {TimeSeries} The new, cropped, TimeSeries. - */ - - }, { - key: "crop", - value: function crop(timerange) { - var beginPos = this.bisect(timerange.begin()); - var endPos = this.bisect(timerange.end(), beginPos); - return this.slice(beginPos, endPos); - } - - /** - * Returns a new TimeSeries by testing the fieldPath - * values for being valid (not NaN, null or undefined). - * - * The resulting TimeSeries will be clean (for that fieldPath). - * - * @param {string} fieldPath Name of value to look up. If not supplied, - * defaults to ['value']. "Deep" syntax is - * ['deep', 'value'] or 'deep.value' - * - * @return {TimeSeries} A new, modified, TimeSeries. - */ - - }, { - key: "clean", - value: function clean(fieldSpec) { - var cleaned = this._collection.clean(fieldSpec); - return this.setCollection(cleaned, true); - } - - /** - * Generator to return all the events in the collection. - * - * @example - * ``` - * for (let event of timeseries.events()) { - * console.log(event.toString()); - * } - * ``` - */ - - }, { - key: "events", - value: _regenerator2.default.mark(function events() { - var i; - return _regenerator2.default.wrap(function events$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - i = 0; - - case 1: - if (!(i < this.size())) { - _context2.next = 7; - break; - } - - _context2.next = 4; - return this.at(i); - - case 4: - i++; - _context2.next = 1; - break; - - case 7: - case "end": - return _context2.stop(); - } - } - }, events, this); - }) +class TimeSeries { + constructor(arg) { + this._collection = null; // Collection + + this._data = null; // Meta data + + if (arg instanceof TimeSeries) { + // + // Copy another TimeSeries + // + var other = arg; + this._data = other._data; + this._collection = other._collection; + } else if (_underscore.default.isObject(arg)) { + // + // TimeSeries(object data) where data may be: + // { "events": [event-1, event-2, ..., event-n]} + // or + // { "columns": [time|timerange|index, column-1, ..., column-n] + // "points": [ + // [t1, v1, v2, ..., v2], + // [t2, v1, v2, ..., vn], + // ... + // ] + // } + var obj = arg; + + if (_underscore.default.has(obj, "events")) { // - // Access meta data about the series + // Initialized from an event list // - /** - * Fetch the timeseries name - * - * @return {string} The name given to this TimeSeries - */ - - }, { - key: "name", - value: function name() { - return this._data.get("name"); - } - - /** - * Rename the timeseries - */ - - }, { - key: "setName", - value: function setName(name) { - return this.setMeta("name", name); - } - - /** - * Fetch the timeseries Index, if it has one. - * - * @return {Index} The Index given to this TimeSeries - */ - - }, { - key: "index", - value: function index() { - return this._data.get("index"); - } - - /** - * Fetch the timeseries Index, as a string, if it has one. - * - * @return {string} The Index, as a string, given to this TimeSeries - */ - - }, { - key: "indexAsString", - value: function indexAsString() { - return this.index() ? this.index().asString() : undefined; - } - - /** - * Fetch the timeseries `Index`, as a `TimeRange`, if it has one. - * - * @return {TimeRange} The `Index`, as a `TimeRange`, given to this `TimeSeries` - */ - - }, { - key: "indexAsRange", - value: function indexAsRange() { - return this.index() ? this.index().asTimerange() : undefined; - } - - /** - * Fetch the UTC flag, i.e. are the events in this `TimeSeries` in - * UTC or local time (if they are `IndexedEvent`s an event might be - * "2014-08-31". The actual time range of that representation - * depends on where you are. Pond supports thinking about that in - * either as a UTC day, or a local day). - * - * @return {TimeRange} The Index, as a TimeRange, given to this TimeSeries - */ - - }, { - key: "isUTC", - value: function isUTC() { - return this._data.get("utc"); - } - - /** - * Fetch the list of column names. This is determined by - * traversing though the events and collecting the set. - * - * Note: the order is not defined - * - * @return {array} List of columns - */ - - }, { - key: "columns", - value: function columns() { - var c = {}; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = (0, _getIterator3.default)(this._collection.events()), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var e = _step2.value; - - var d = e.toJSON().data; - _underscore2.default.each(d, function (val, key) { - c[key] = true; - }); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return _underscore2.default.keys(c); - } - - /** - * Returns the internal `Collection` of events for this `TimeSeries` - * - * @return {Collection} The collection backing this `TimeSeries` - */ - - }, { - key: "collection", - value: function collection() { - return this._collection; - } - - /** - * Returns the meta data about this TimeSeries as a JSON object. - * Any extra data supplied to the TimeSeries constructor will be - * placed in the meta data object. This returns either all of that - * data as a JSON object, or a specific key if `key` is supplied. - * - * @param {string} key Optional specific part of the meta data - * @return {object} The meta data - */ - - }, { - key: "meta", - value: function meta(key) { - if (!key) { - return this._data.toJSON(); - } else { - return this._data.get(key); - } - } - - /** - * Set new meta data for the TimeSeries. The result will - * be a new TimeSeries. - */ - - }, { - key: "setMeta", - value: function setMeta(key, value) { - var newTimeSeries = new TimeSeries(this); - var d = newTimeSeries._data; - var dd = d.set(key, value); - newTimeSeries._data = dd; - return newTimeSeries; - } - + var { + events + } = obj, + meta1 = (0, _objectWithoutProperties2.default)(obj, ["events"]); //eslint-disable-line + + this._collection = new _collection.default(events); + this._data = buildMetaData(meta1); + } else if (_underscore.default.has(obj, "collection")) { + // + // Initialized from a Collection + // + var { + collection + } = obj, + meta3 = (0, _objectWithoutProperties2.default)(obj, ["collection"]); //eslint-disable-line + + this._collection = collection; + this._data = buildMetaData(meta3); + } else if (_underscore.default.has(obj, "columns") && _underscore.default.has(obj, "points")) { // - // Access the series itself + // Initialized from the wire format // - /** - * Returns the number of events in this TimeSeries - * - * @return {number} Count of events - */ - - }, { - key: "size", - value: function size() { - return this._collection ? this._collection.size() : 0; - } - - /** - * Returns the number of valid items in this TimeSeries. - * - * Uses the fieldSpec to look up values in all events. - * It then counts the number that are considered valid, which - * specifically are not NaN, undefined or null. - * - * @return {number} Count of valid events - */ - - }, { - key: "sizeValid", - value: function sizeValid(fieldSpec) { - return this._collection.sizeValid(fieldSpec); - } - - /** - * Returns the number of events in this TimeSeries. Alias - * for size(). - * - * @return {number} Count of events - */ - - }, { - key: "count", - value: function count() { - return this.size(); - } - - /** - * Returns the sum for the fieldspec - * - * @param {string} fieldPath Column to find the stdev of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The sum - */ - - }, { - key: "sum", - value: function sum(fieldPath, filter) { - return this._collection.sum(fieldPath, filter); - } - - /** - * Aggregates the events down to their maximum value - * - * @param {string} fieldPath Column to find the max of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * - * @return {number} The max value for the field - */ - - }, { - key: "max", - value: function max(fieldPath, filter) { - return this._collection.max(fieldPath, filter); - } - - /** - * Aggregates the events down to their minimum value - * - * @param {string} fieldPath Column to find the min of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The min value for the field - */ - - }, { - key: "min", - value: function min(fieldPath, filter) { - return this._collection.min(fieldPath, filter); - } - - /** - * Aggregates the events in the TimeSeries down to their average - * - * @param {string} fieldPath Column to find the avg of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The average - */ - - }, { - key: "avg", - value: function avg(fieldPath, filter) { - return this._collection.avg(fieldPath, filter); - } - - /** - * Aggregates the events in the TimeSeries down to their mean (same as avg) - * - * @param {string} fieldPath Column to find the mean of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The mean - */ - - }, { - key: "mean", - value: function mean(fieldPath, filter) { - return this._collection.mean(fieldPath, filter); - } - - /** - * Aggregates the events down to their medium value - * - * @param {string} fieldPath Column to find the median of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The resulting median value - */ - - }, { - key: "median", - value: function median(fieldPath, filter) { - return this._collection.median(fieldPath, filter); - } - - /** - * Aggregates the events down to their stdev - * - * @param {string} fieldPath Column to find the stdev of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The resulting stdev value - */ - - }, { - key: "stdev", - value: function stdev(fieldPath, filter) { - return this._collection.stdev(fieldPath, filter); - } - - /** - * Gets percentile q within the TimeSeries. This works the same way as numpy. - * - * @param {integer} q The percentile (should be between 0 and 100) - * - * @param {string} fieldPath Column to find the qth percentile of. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * - * @param {string} interp Specifies the interpolation method - * to use when the desired quantile lies between - * two data points. Options are: "linear", "lower", "higher", - * "nearest", "midpoint" - * @param {function} filter Optional filter function used to clean data before aggregating - * - * @return {number} The percentile - */ - - }, { - key: "percentile", - value: function percentile(q, fieldPath) { - var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; - var filter = arguments[3]; - - return this._collection.percentile(q, fieldPath, interp, filter); - } - - /** - * Aggregates the events down using a user defined function to - * do the reduction. - * - * @param {function} func User defined reduction function. Will be - * passed a list of values. Should return a - * singe value. - * @param {string} fieldPath Column to aggregate over. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * - * @return {number} The resulting value - */ - - }, { - key: "aggregate", - value: function aggregate(func, fieldPath) { - return this._collection.aggregate(func, fieldPath); - } - - /** - * Gets n quantiles within the TimeSeries. This works the same way as numpy's percentile(). - * For example `timeseries.quantile(4)` would be the same as using percentile with q = 0.25, 0.5 and 0.75. - * - * @param {integer} n The number of quantiles to divide the - * TimeSeries into. - * @param {string} fieldPath Column to calculate over. A deep value can - * be referenced with a string.like.this. If not supplied - * the `value` column will be aggregated. - * @param {string} interp Specifies the interpolation method - * to use when the desired quantile lies between - * two data points. Options are: "linear", "lower", "higher", - * "nearest", "midpoint". - * @return {array} An array of n quantiles - */ - - }, { - key: "quantile", - value: function quantile(quantity) { - var fieldPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; - var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; - - return this._collection.quantile(quantity, fieldPath, interp); - } - - /** - * Returns a new Pipeline with input source being initialized to - * this TimeSeries collection. This allows pipeline operations - * to be chained directly onto the TimeSeries to produce a new - * TimeSeries or event result. - * - * @example - * - * ``` - * timeseries.pipeline() - * .offsetBy(1) - * .offsetBy(2) - * .to(CollectionOut, c => out = c); - * ``` - * - * @return {Pipeline} The Pipeline. - */ - - }, { - key: "pipeline", - value: function pipeline() { - return new _pipeline.Pipeline().from(this._collection); - } - - /** - * Takes an operator that is used to remap events from this TimeSeries to - * a new set of events. - * - * @param {function} operator An operator which will be passed each - * event and which should return a new event. - * @return {TimeSeries} A TimeSeries containing the remapped events - */ - - }, { - key: "map", - value: function map(op) { - var collections = this.pipeline().map(op).toKeyedCollections(); - return this.setCollection(collections["all"], true); - } - - /** - * Takes a fieldSpec (list of column names) and outputs to the callback just those - * columns in a new TimeSeries. - * - * @example - * - * ``` - * const ts = timeseries.select({fieldSpec: ["uptime", "notes"]}); - * ``` - * - * @param options An object containing options for the command - * @param {string|array} options.fieldSpec Column or columns to select into the new TimeSeries. - * If you need to retrieve multiple deep nested values - * that ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * - * @return {TimeSeries} The resulting TimeSeries with renamed columns - */ - - }, { - key: "select", - value: function select(options) { - var fieldSpec = options.fieldSpec; - - var collections = this.pipeline().select(fieldSpec).toKeyedCollections(); - return this.setCollection(collections["all"], true); - } - - /** - * Takes a `fieldSpecList` (list of column names) and collapses - * them to a new column named `name` which is the reduction (using - * the `reducer` function) of the matched columns in the `fieldSpecList`. - * - * The column may be appended to the existing columns, or replace them, - * based on the `append` boolean. - * - * @example - * - * ``` - * const sums = ts.collapse({ - * name: "sum_series", - * fieldSpecList: ["in", "out"], - * reducer: sum(), - * append: false - * }); - * ``` - * - * @param options An object containing options: - * @param {array} options.fieldSpecList The list of columns to collapse. (required) - * @param {string} options.name The resulting collapsed column name (required) - * @param {function} options.reducer The reducer function (required) - * @param {bool} options.append Append the collapsed column, rather - * than replace - * - * @return {TimeSeries} The resulting collapsed TimeSeries - */ - - }, { - key: "collapse", - value: function collapse(options) { - var fieldSpecList = options.fieldSpecList, - name = options.name, - reducer = options.reducer, - append = options.append; - - var collections = this.pipeline().collapse(fieldSpecList, name, reducer, append).toKeyedCollections(); - return this.setCollection(collections["all"], true); - } - - /** - * Rename columns in the underlying events. - * - * Takes a object of columns to rename. Returns a new `TimeSeries` containing - * new events. Columns not in the dict will be retained and not renamed. - * - * @example - * ``` - * new_ts = ts.renameColumns({ - * renameMap: {in: "new_in", out: "new_out"} - * }); - * ``` - * - * @note As the name implies, this will only rename the main - * "top level" (ie: non-deep) columns. If you need more - * extravagant renaming, roll your own using `TimeSeries.map()`. - * - * @param options An object containing options: - * @param {Object} options.renameMap Columns to rename. - * - * @return {TimeSeries} The resulting TimeSeries with renamed columns - */ - - }, { - key: "renameColumns", - value: function renameColumns(options) { - var renameMap = options.renameMap; - - return this.map(function (event) { - var eventType = event.type(); - var d = event.data().mapKeys(function (key) { - return renameMap[key] || key; - }); - return new eventType(event.key(), d); - }); - } - - /** - * Take the data in this TimeSeries and "fill" any missing or invalid - * values. This could be setting `null` values to zero so mathematical - * operations will succeed, interpolate a new value, or pad with the - * previously given value. - * - * The `fill()` method takes a single `options` arg. - * - * @example - * ``` - * const filled = timeseries.fill({ - * fieldSpec: ["direction.in", "direction.out"], - * method: "zero", - * limit: 3 - * }); - * ``` - * - * @param options An object containing options: - * @param {string|array} options.fieldSpec Column or columns to fill. If you need to - * retrieve multiple deep nested values - * that ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * @param {string} options.method "linear" or "pad" or "zero" style interpolation - * @param {number} options.limit The maximum number of points which should be - * interpolated onto missing points. You might set this to - * 2 if you are willing to fill 2 new points, - * and then beyond that leave data with missing values. - * - * @return {TimeSeries} The resulting filled TimeSeries - */ - - }, { - key: "fill", - value: function fill(options) { - var _options$fieldSpec = options.fieldSpec, - fieldSpec = _options$fieldSpec === undefined ? null : _options$fieldSpec, - _options$method = options.method, - method = _options$method === undefined ? "zero" : _options$method, - _options$limit = options.limit, - limit = _options$limit === undefined ? null : _options$limit; - - - var pipeline = this.pipeline(); - - if (method === "zero" || method === "pad") { - pipeline = pipeline.fill({ fieldSpec: fieldSpec, method: method, limit: limit }); - } else if (method === "linear" && _underscore2.default.isArray(fieldSpec)) { - fieldSpec.forEach(function (fieldPath) { - pipeline = pipeline.fill({ - fieldSpec: fieldPath, - method: method, - limit: limit - }); - }); - } else { - throw new Error("Invalid fill method:", method); - } - - var collections = pipeline.toKeyedCollections(); - - return this.setCollection(collections["all"], true); - } - - /** - * Align event values to regular time boundaries. The value at - * the boundary is interpolated. Only the new interpolated - * points are returned. If limit is reached nulls will be - * returned at each boundary position. - * - * One use case for this is to modify irregular data (i.e. data - * that falls at slightly irregular times) so that it falls into a - * sequence of evenly spaced values. We use this to take data we - * get from the network which is approximately every 30 second - * (:32, 1:02, 1:34, ...) and output data on exact 30 second - * boundaries (:30, 1:00, 1:30, ...). - * - * Another use case is data that might be already aligned to - * some regular interval, but that contains missing points. - * While `fill()` can be used to replace `null` values, `align()` - * can be used to add in missing points completely. Those points - * can have an interpolated value, or by setting limit to 0, - * can be filled with nulls. This is really useful when downstream - * processing depends on complete sequences. - * - * @example - * ``` - * const aligned = ts.align({ - * fieldSpec: "value", - * period: "1m", - * method: "linear" - * }); - * ``` - * - * @param options An object containing options: - * @param {string|array} options.fieldSpec Column or columns to align. If you need to - * retrieve multiple deep nested values - * that ['can.be', 'done.with', 'this.notation']. - * A single deep value with a string.like.this. - * @param {string} options.period Spacing of aligned values. e.g. "6h" or "5m" - * @param {string} options.method "linear" or "pad" style interpolation to boundaries. - * @param {number} options.limit The maximum number of points which should be - * interpolated onto boundaries. You might set this to - * 2 if you are willing to interpolate 2 new points, - * and then beyond that just emit nulls on the boundaries. - * - * @return {TimeSeries} The resulting aligned TimeSeries - */ - - }, { - key: "align", - value: function align(options) { - var _options$fieldSpec2 = options.fieldSpec, - fieldSpec = _options$fieldSpec2 === undefined ? "value" : _options$fieldSpec2, - _options$period = options.period, - period = _options$period === undefined ? "5m" : _options$period, - _options$method2 = options.method, - method = _options$method2 === undefined ? "linear" : _options$method2, - _options$limit2 = options.limit, - limit = _options$limit2 === undefined ? null : _options$limit2; - - var collection = this.pipeline().align(fieldSpec, period, method, limit).toKeyedCollections(); - - return this.setCollection(collection["all"], true); - } - - /** - * Returns the derivative of the TimeSeries for the given columns. The result will - * be per second. Optionally you can substitute in `null` values if the rate - * is negative. This is useful when a negative rate would be considered invalid. - * - * @param options An object containing options: - * @param {string|array} options.fieldSpec Column or columns to get the rate of. If you - * need to retrieve multiple deep nested values - * that ['can.be', 'done.with', 'this.notation']. - * @param {bool} options.allowNegative Will output null values for negative rates. - * This is useful if you are getting the rate - * of a counter that always goes up, except - * when perhaps it rolls around or resets. - * - * @return {TimeSeries} The resulting `TimeSeries` containing calculated rates. - */ - - }, { - key: "rate", - value: function rate() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var _options$fieldSpec3 = options.fieldSpec, - fieldSpec = _options$fieldSpec3 === undefined ? "value" : _options$fieldSpec3, - _options$allowNegativ = options.allowNegative, - allowNegative = _options$allowNegativ === undefined ? true : _options$allowNegativ; - - var collection = this.pipeline().rate(fieldSpec, allowNegative).toKeyedCollections(); - - return this.setCollection(collection["all"], true); - } - - /** - * Builds a new TimeSeries by dividing events within the TimeSeries - * across multiple fixed windows of size `windowSize`. - * - * Note that these are windows defined relative to Jan 1st, 1970, - * and are UTC, so this is best suited to smaller window sizes - * (hourly, 5m, 30s, 1s etc), or in situations where you don't care - * about the specific window, just that the data is smaller. - * - * Each window then has an aggregation specification applied as - * `aggregation`. This specification describes a mapping of output - * fieldNames to aggregation functions and their fieldPath. For example: - * ``` - * { in_avg: { in: avg() }, out_avg: { out: avg() } } - * ``` - * will aggregate both "in" and "out" using the average aggregation - * function and return the result as in_avg and out_avg. - * - * Note that each aggregation function, such as `avg()` also can take a - * filter function to apply before the aggregation. A set of filter functions - * exists to do common data cleanup such as removing bad values. For example: - * ``` - * { value_avg: { value: avg(filter.ignoreMissing) } } - * ``` - * - * @example - * ``` - * const timeseries = new TimeSeries(data); - * const dailyAvg = timeseries.fixedWindowRollup({ - * windowSize: "1d", - * aggregation: {value: {value: avg()}} - * }); - * ``` - * - * @param options An object containing options: - * @param {string} options.windowSize The size of the window. e.g. "6h" or "5m" - * @param {object} options.aggregation The aggregation specification (see description above) - * @param {bool} options.toTimeEvents Output as `TimeEvent`s, rather than `IndexedEvent`s - * @return {TimeSeries} The resulting rolled up `TimeSeries` - */ - - }, { - key: "fixedWindowRollup", - value: function fixedWindowRollup(options) { - var windowSize = options.windowSize, - aggregation = options.aggregation, - _options$toTimeEvents = options.toTimeEvents, - toTimeEvents = _options$toTimeEvents === undefined ? false : _options$toTimeEvents; - - if (!windowSize) { - throw new Error("windowSize must be supplied, for example '5m' for five minute rollups"); - } - - if (!aggregation || !_underscore2.default.isObject(aggregation)) { - throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); - } - - var aggregatorPipeline = this.pipeline().windowBy(windowSize).emitOn("discard").aggregate(aggregation); - - var eventTypePipeline = toTimeEvents ? aggregatorPipeline.asTimeEvents() : aggregatorPipeline; - - var collections = eventTypePipeline.clearWindow().toKeyedCollections(); - - return this.setCollection(collections["all"], true); - } - - /** - * Builds a new TimeSeries by dividing events into hours. - * - * Each window then has an aggregation specification `aggregation` - * applied. This specification describes a mapping of output - * fieldNames to aggregation functions and their fieldPath. For example: - * ``` - * {in_avg: {in: avg()}, out_avg: {out: avg()}} - * ``` - * - * @param options An object containing options: - * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it - * will be returned as a `TimeSeries` of `IndexedEvent`s. - * @param {object} options.aggregation The aggregation specification (see description above) - * - * @return {TimeSeries} The resulting rolled up TimeSeries - */ - - }, { - key: "hourlyRollup", - value: function hourlyRollup(options) { - var aggregation = options.aggregation, - _options$toTimeEvents2 = options.toTimeEvents, - toTimeEvents = _options$toTimeEvents2 === undefined ? false : _options$toTimeEvents2; - - - if (!aggregation || !_underscore2.default.isObject(aggregation)) { - throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); - } - - return this.fixedWindowRollup("1h", aggregation, toTimeEvents); - } - - /** - * Builds a new TimeSeries by dividing events into days. - * - * Each window then has an aggregation specification `aggregation` - * applied. This specification describes a mapping of output - * fieldNames to aggregation functions and their fieldPath. For example: - * ``` - * {in_avg: {in: avg()}, out_avg: {out: avg()}} - * ``` - * - * @param options An object containing options: - * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it - * will be returned as a `TimeSeries` of `IndexedEvent`s. - * @param {object} options.aggregation The aggregation specification (see description above) - * - * @return {TimeSeries} The resulting rolled up TimeSeries - */ - - }, { - key: "dailyRollup", - value: function dailyRollup(options) { - var aggregation = options.aggregation, - _options$toTimeEvents3 = options.toTimeEvents, - toTimeEvents = _options$toTimeEvents3 === undefined ? false : _options$toTimeEvents3; - - - if (!aggregation || !_underscore2.default.isObject(aggregation)) { - throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); - } - - return this._rollup("daily", aggregation, toTimeEvents); - } - - /** - * Builds a new TimeSeries by dividing events into months. - * - * Each window then has an aggregation specification `aggregation` - * applied. This specification describes a mapping of output - * fieldNames to aggregation functions and their fieldPath. For example: - * ``` - * {in_avg: {in: avg()}, out_avg: {out: avg()}} - * ``` - * - * @param options An object containing options: - * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it - * will be returned as a `TimeSeries` of `IndexedEvent`s. - * @param {object} options.aggregation The aggregation specification (see description above) - * - * @return {TimeSeries} The resulting rolled up `TimeSeries` - */ - - }, { - key: "monthlyRollup", - value: function monthlyRollup(options) { - var aggregation = options.aggregation, - _options$toTimeEvents4 = options.toTimeEvents, - toTimeEvents = _options$toTimeEvents4 === undefined ? false : _options$toTimeEvents4; - - - if (!aggregation || !_underscore2.default.isObject(aggregation)) { - throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); - } - - return this._rollup("monthly", aggregation, toTimeEvents); - } - - /** - * Builds a new TimeSeries by dividing events into years. - * - * Each window then has an aggregation specification `aggregation` - * applied. This specification describes a mapping of output - * fieldNames to aggregation functions and their fieldPath. For example: - * - * ``` - * {in_avg: {in: avg()}, out_avg: {out: avg()}} - * ``` - * - * @param options An object containing options: - * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it - * will be returned as a `TimeSeries` of `IndexedEvent`s. - * @param {object} options.aggregation The aggregation specification (see description above) - * - * @return {TimeSeries} The resulting rolled up `TimeSeries` - */ - - }, { - key: "yearlyRollup", - value: function yearlyRollup(options) { - var aggregation = options.aggregation, - _options$toTimeEvents5 = options.toTimeEvents, - toTimeEvents = _options$toTimeEvents5 === undefined ? false : _options$toTimeEvents5; - - - if (!aggregation || !_underscore2.default.isObject(aggregation)) { - throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); - } - - return this._rollup("yearly", aggregation, toTimeEvents); - } - - /** - * @private - * - * Internal function to build the TimeSeries rollup functions using - * an aggregator Pipeline. - */ - - }, { - key: "_rollup", - value: function _rollup(type, aggregation) { - var toTimeEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var aggregatorPipeline = this.pipeline().windowBy(type).emitOn("discard").aggregate(aggregation); - - var eventTypePipeline = toTimeEvents ? aggregatorPipeline.asTimeEvents() : aggregatorPipeline; - - var collections = eventTypePipeline.clearWindow().toKeyedCollections(); - - return this.setCollection(collections["all"], true); - } - - /** - * Builds multiple `Collection`s, each collects together - * events within a window of size `windowSize`. Note that these - * are windows defined relative to Jan 1st, 1970, and are UTC. - * - * @example - * ``` - * const timeseries = new TimeSeries(data); - * const collections = timeseries.collectByFixedWindow({windowSize: "1d"}); - * console.log(collections); // {1d-16314: Collection, 1d-16315: Collection, ...} - * ``` - * - * @param options An object containing options: - * @param {bool} options.windowSize The size of the window. e.g. "6h" or "5m" - * - * @return {map} The result is a mapping from window index to a Collection. - */ - - }, { - key: "collectByFixedWindow", - value: function collectByFixedWindow(_ref) { - var windowSize = _ref.windowSize; - - return this.pipeline().windowBy(windowSize).emitOn("discard").toKeyedCollections(); - } - - /* - * STATIC - */ - /** - * Defines the event type contained in this TimeSeries. The default here - * is to use the supplied type (time, timerange or index) to build either - * a TimeEvent, TimeRangeEvent or IndexedEvent. However, you can also - * subclass the TimeSeries and reimplement this to return another event - * type. - */ - - }], [{ - key: "event", - value: function event(eventKey) { - switch (eventKey) { - case "time": - return _timeevent2.default; - case "timerange": - return _timerangeevent2.default; - case "index": - return _indexedevent2.default; - default: - throw new Error("Unknown event type: " + eventKey); - } - } - - /** - * Static function to compare two TimeSeries to each other. If the TimeSeries - * are of the same instance as each other then equals will return true. - * @param {TimeSeries} series1 - * @param {TimeSeries} series2 - * @return {bool} result - */ - - }, { - key: "equal", - value: function equal(series1, series2) { - return series1._data === series2._data && series1._collection === series2._collection; - } - - /** - * Static function to compare two TimeSeries to each other. If the TimeSeries - * are of the same value as each other then equals will return true. - * @param {TimeSeries} series1 - * @param {TimeSeries} series2 - * @return {bool} result - */ - - }, { - key: "is", - value: function is(series1, series2) { - return _immutable2.default.is(series1._data, series2._data) && _collection2.default.is(series1._collection, series2._collection); - } - - /** - * Reduces a list of TimeSeries objects using a reducer function. This works - * by taking each event in each TimeSeries and collecting them together - * based on timestamp. All events for a given time are then merged together - * using the reducer function to produce a new event. The reducer function is - * applied to all columns in the fieldSpec. Those new events are then - * collected together to form a new TimeSeries. - * - * @example - * - * For example you might have three TimeSeries with columns "in" and "out" which - * corresponds to two measurements per timestamp. You could use this function to - * obtain a new TimeSeries which was the sum of the the three measurements using - * the `sum()` reducer function and an ["in", "out"] fieldSpec. - * - * ``` - * const totalSeries = TimeSeries.timeSeriesListReduce({ - * name: "totals", - * seriesList: [inTraffic, outTraffic], - * reducer: sum(), - * fieldSpec: [ "in", "out" ] - * }); - * ``` - * - * @param options An object containing options. Additional key - * values in the options will be added as meta data - * to the resulting TimeSeries. - * @param {array} options.seriesList A list of `TimeSeries` (required) - * @param {function} options.reducer The reducer function e.g. `max()` (required) - * @param {array | string} options.fieldSpec Column or columns to reduce. If you - * need to retrieve multiple deep - * nested values that ['can.be', 'done.with', - * 'this.notation']. A single deep value with a - * string.like.this. - * - * @return {TimeSeries} The reduced TimeSeries - */ - - }, { - key: "timeSeriesListReduce", - value: function timeSeriesListReduce(options) { - var fieldSpec = options.fieldSpec, - reducer = options.reducer, - data = (0, _objectWithoutProperties3.default)(options, ["fieldSpec", "reducer"]); - - var combiner = _event2.default.combiner(fieldSpec, reducer); - return TimeSeries.timeSeriesListEventReduce((0, _extends3.default)({ - fieldSpec: fieldSpec, - reducer: combiner - }, data)); - } - - /** - * Takes a list of TimeSeries and merges them together to form a new - * Timeseries. - * - * Merging will produce a new Event; - only when events are conflict free, so - * it is useful in the following cases: - * * to combine multiple TimeSeries which have different time ranges, essentially - * concatenating them together - * * combine TimeSeries which have different columns, for example inTraffic has - * a column "in" and outTraffic has a column "out" and you want to produce a merged - * trafficSeries with columns "in" and "out". - * - * @example - * ``` - * const inTraffic = new TimeSeries(trafficDataIn); - * const outTraffic = new TimeSeries(trafficDataOut); - * const trafficSeries = TimeSeries.timeSeriesListMerge({ - * name: "traffic", - * seriesList: [inTraffic, outTraffic] - * }); - * ``` - * - * @param options An object containing options. Additional key - * values in the options will be added as meta data - * to the resulting TimeSeries. - * @param {array} options.seriesList A list of `TimeSeries` (required) - * @param {array | string} options.fieldSpec Column or columns to merge. If you - * need to retrieve multiple deep - * nested values that ['can.be', 'done.with', - * 'this.notation']. A single deep value with a - * string.like.this. - * - * @return {TimeSeries} The merged TimeSeries - */ - - }, { - key: "timeSeriesListMerge", - value: function timeSeriesListMerge(options) { - var fieldSpec = options.fieldSpec, - data = (0, _objectWithoutProperties3.default)(options, ["fieldSpec"]); - - var merger = _event2.default.merger(fieldSpec); - return TimeSeries.timeSeriesListEventReduce((0, _extends3.default)({ - fieldSpec: fieldSpec, - reducer: merger - }, data)); - } - - /** - * @private - */ - - }, { - key: "timeSeriesListEventReduce", - value: function timeSeriesListEventReduce(options) { - var seriesList = options.seriesList, - fieldSpec = options.fieldSpec, - reducer = options.reducer, - data = (0, _objectWithoutProperties3.default)(options, ["seriesList", "fieldSpec", "reducer"]); - - - if (!seriesList || !_underscore2.default.isArray(seriesList)) { - throw new Error("A list of TimeSeries must be supplied to reduce"); - } - - if (!reducer || !_underscore2.default.isFunction(reducer)) { - throw new Error("reducer function must be supplied, for example avg()"); - } - - // for each series, make a map from timestamp to the - // list of events with that timestamp - var eventList = []; - seriesList.forEach(function (series) { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = (0, _getIterator3.default)(series.events()), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var event = _step3.value; - - eventList.push(event); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - }); - - var events = reducer(eventList, fieldSpec); - - // Make a collection. If the events are out of order, sort them. - // It's always possible that events are out of order here, depending - // on the start times of the series, along with it the series - // have missing data, so I think we don't have a choice here. - var collection = new _collection2.default(events); - if (!collection.isChronological()) { - collection = collection.sortByTime(); - } - - var timeseries = new TimeSeries((0, _extends3.default)({}, data, { collection: collection })); - - return timeseries; - } - }]); - return TimeSeries; -}(); - -exports.default = TimeSeries; \ No newline at end of file + var { + columns, + points, + utc = true + } = obj, + meta2 = (0, _objectWithoutProperties2.default)(obj, ["columns", "points", "utc"]); //eslint-disable-line + + var [eventKey, ...eventFields] = columns; + + var _events = points.map(point => { + var [t, ...eventValues] = point; + + var d = _underscore.default.object(eventFields, eventValues); + + var options = utc; + + switch (eventKey) { + case "time": + return new _timeevent.default(t, d, options); + + case "index": + return new _indexedevent.default(t, d, options); + + case "timerange": + return new _timerangeevent.default(t, d, options); + + default: + throw new Error("Unknown event type"); + } + }); + + this._collection = new _collection.default(_events); + this._data = buildMetaData(meta2); + } + + if (!this._collection.isChronological()) { + throw new Error("TimeSeries was passed non-chronological events"); + } + } + } // + // Serialize + // + + /** + * Turn the TimeSeries into regular javascript objects + */ + + + toJSON() { + var e = this.atFirst(); + + if (!e) { + return; + } + + var columnList = this.columns(); + var columns; + + if (e instanceof _timeevent.default) { + columns = ["time", ...columnList]; + } else if (e instanceof _timerangeevent.default) { + columns = ["timerange", ...columnList]; + } else if (e instanceof _indexedevent.default) { + columns = ["index", ...columnList]; + } + + var points = []; + + for (var _e of this._collection.events()) { + points.push(_e.toPoint(columnList)); + } + + return _underscore.default.extend(this._data.toJSON(), { + columns, + points + }); + } + /** + * Represent the TimeSeries as a string + */ + + + toString() { + return JSON.stringify(this.toJSON()); + } + /** + * Returns the extents of the TimeSeries as a TimeRange. + */ + + + timerange() { + return this._collection.range(); + } + /** + * Alias for `timerange()` + */ + + + range() { + return this.timerange(); + } + /** + * Gets the earliest time represented in the TimeSeries. + * + * @return {Date} Begin time + */ + + + begin() { + return this.range().begin(); + } + /** + * Gets the latest time represented in the TimeSeries. + * + * @return {Date} End time + */ + + + end() { + return this.range().end(); + } + /** + * Access a specific TimeSeries event via its position + * + * @param {number} pos The event position + */ + + + at(pos) { + return this._collection.at(pos); + } + /** + * Returns an event in the series by its time. This is the same + * as calling `bisect` first and then using `at` with the index. + * + * @param {Date} time The time of the event. + * @return {TimeEvent|IndexedEvent|TimeRangeEvent} + */ + + + atTime(time) { + var pos = this.bisect(time); + + if (pos >= 0 && pos < this.size()) { + return this.at(pos); + } + } + /** + * Returns the first event in the series. + * + * @return {TimeEvent|IndexedEvent|TimeRangeEvent} + */ + + + atFirst() { + return this._collection.atFirst(); + } + /** + * Returns the last event in the series. + * + * @return {TimeEvent|IndexedEvent|TimeRangeEvent} + */ + + + atLast() { + return this._collection.atLast(); + } + /** + * Generator to return all the events in the series + * + * @example + * ``` + * for (let event of series.events()) { + * console.log(event.toString()); + * } + * ``` + */ + + + *events() { + for (var i = 0; i < this.size(); i++) { + yield this.at(i); + } + } + /** + * Sets a new underlying collection for this TimeSeries. + * + * @param {Collection} collection The new collection + * @param {boolean} isChronological Causes the chronological + * order of the events to + * not be checked + * + * @return {TimeSeries} A new TimeSeries + */ + + + setCollection(collection) { + var isChronological = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + if (!isChronological && !collection.isChronological()) { + throw new Error("Collection supplied is not chronological"); + } + + var result = new TimeSeries(this); + + if (collection) { + result._collection = collection; + } else { + result._collection = new _collection.default(); + } + + return result; + } + /** + * Returns the index that bisects the TimeSeries at the time specified. + * + * @param {Date} t The time to bisect the TimeSeries with + * @param {number} b The position to begin searching at + * + * @return {number} The row number that is the greatest, but still below t. + */ + + + bisect(t, b) { + var tms = t.getTime(); + var size = this.size(); + var i = b || 0; + + if (!size) { + return undefined; + } + + for (; i < size; i++) { + var ts = this.at(i).timestamp().getTime(); + + if (ts > tms) { + return i - 1 >= 0 ? i - 1 : 0; + } else if (ts === tms) { + return i; + } + } + + return i - 1; + } + /** + * Perform a slice of events within the TimeSeries, returns a new + * TimeSeries representing a portion of this TimeSeries from + * begin up to but not including end. + * + * @param {Number} begin The position to begin slicing + * @param {Number} end The position to end slicing + * + * @return {TimeSeries} The new, sliced, TimeSeries. + */ + + + slice(begin, end) { + var sliced = this._collection.slice(begin, end); + + return this.setCollection(sliced, true); + } + /** + * Crop the TimeSeries to the specified TimeRange and + * return a new TimeSeries. + * + * @param {TimeRange} timerange The bounds of the new TimeSeries + * + * @return {TimeSeries} The new, cropped, TimeSeries. + */ + + + crop(timerange) { + var timerangeBegin = timerange.begin(); + var beginPos = this.bisect(timerangeBegin); + var bisectedEventOutsideRange = this.at(beginPos).timestamp() < timerangeBegin; + beginPos = bisectedEventOutsideRange ? beginPos + 1 : beginPos; + var endPos = this.bisect(timerange.end(), beginPos); + return this.slice(beginPos, endPos + 1); + } + /** + * Returns a new TimeSeries by testing the fieldPath + * values for being valid (not NaN, null or undefined). + * + * The resulting TimeSeries will be clean (for that fieldPath). + * + * @param {string} fieldPath Name of value to look up. If not supplied, + * defaults to ['value']. "Deep" syntax is + * ['deep', 'value'] or 'deep.value' + * + * @return {TimeSeries} A new, modified, TimeSeries. + */ + + + clean(fieldSpec) { + var cleaned = this._collection.clean(fieldSpec); + + return this.setCollection(cleaned, true); + } + /** + * Generator to return all the events in the collection. + * + * @example + * ``` + * for (let event of timeseries.events()) { + * console.log(event.toString()); + * } + * ``` + */ + + + *events() { + for (var i = 0; i < this.size(); i++) { + yield this.at(i); + } + } // + // Access meta data about the series + // + + /** + * Fetch the timeseries name + * + * @return {string} The name given to this TimeSeries + */ + + + name() { + return this._data.get("name"); + } + /** + * Rename the timeseries + */ + + + setName(name) { + return this.setMeta("name", name); + } + /** + * Fetch the timeseries Index, if it has one. + * + * @return {Index} The Index given to this TimeSeries + */ + + + index() { + return this._data.get("index"); + } + /** + * Fetch the timeseries Index, as a string, if it has one. + * + * @return {string} The Index, as a string, given to this TimeSeries + */ + + + indexAsString() { + return this.index() ? this.index().asString() : undefined; + } + /** + * Fetch the timeseries `Index`, as a `TimeRange`, if it has one. + * + * @return {TimeRange} The `Index`, as a `TimeRange`, given to this `TimeSeries` + */ + + + indexAsRange() { + return this.index() ? this.index().asTimerange() : undefined; + } + /** + * Fetch the UTC flag, i.e. are the events in this `TimeSeries` in + * UTC or local time (if they are `IndexedEvent`s an event might be + * "2014-08-31". The actual time range of that representation + * depends on where you are. Pond supports thinking about that in + * either as a UTC day, or a local day). + * + * @return {TimeRange} The Index, as a TimeRange, given to this TimeSeries + */ + + + isUTC() { + return this._data.get("utc"); + } + /** + * Fetch the list of column names. This is determined by + * traversing though the events and collecting the set. + * + * Note: the order is not defined + * + * @return {array} List of columns + */ + + + columns() { + var c = {}; + + for (var e of this._collection.events()) { + var d = e.toJSON().data; + + _underscore.default.each(d, (val, key) => { + c[key] = true; + }); + } + + return _underscore.default.keys(c); + } + /** + * Returns the internal `Collection` of events for this `TimeSeries` + * + * @return {Collection} The collection backing this `TimeSeries` + */ + + + collection() { + return this._collection; + } + /** + * Returns the meta data about this TimeSeries as a JSON object. + * Any extra data supplied to the TimeSeries constructor will be + * placed in the meta data object. This returns either all of that + * data as a JSON object, or a specific key if `key` is supplied. + * + * @param {string} key Optional specific part of the meta data + * @return {object} The meta data + */ + + + meta(key) { + if (!key) { + return this._data.toJSON(); + } else { + return this._data.get(key); + } + } + /** + * Set new meta data for the TimeSeries. The result will + * be a new TimeSeries. + */ + + + setMeta(key, value) { + var newTimeSeries = new TimeSeries(this); + var d = newTimeSeries._data; + var dd = d.set(key, value); + newTimeSeries._data = dd; + return newTimeSeries; + } // + // Access the series itself + // + + /** + * Returns the number of events in this TimeSeries + * + * @return {number} Count of events + */ + + + size() { + return this._collection ? this._collection.size() : 0; + } + /** + * Returns the number of valid items in this TimeSeries. + * + * Uses the fieldSpec to look up values in all events. + * It then counts the number that are considered valid, which + * specifically are not NaN, undefined or null. + * + * @return {number} Count of valid events + */ + + + sizeValid(fieldSpec) { + return this._collection.sizeValid(fieldSpec); + } + /** + * Returns the number of events in this TimeSeries. Alias + * for size(). + * + * @return {number} Count of events + */ + + + count() { + return this.size(); + } + /** + * Returns the sum for the fieldspec + * + * @param {string} fieldPath Column to find the stdev of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The sum + */ + + + sum(fieldPath, filter) { + return this._collection.sum(fieldPath, filter); + } + /** + * Aggregates the events down to their maximum value + * + * @param {string} fieldPath Column to find the max of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * + * @return {number} The max value for the field + */ + + + max(fieldPath, filter) { + return this._collection.max(fieldPath, filter); + } + /** + * Aggregates the events down to their minimum value + * + * @param {string} fieldPath Column to find the min of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The min value for the field + */ + + + min(fieldPath, filter) { + return this._collection.min(fieldPath, filter); + } + /** + * Aggregates the events in the TimeSeries down to their average + * + * @param {string} fieldPath Column to find the avg of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The average + */ + + + avg(fieldPath, filter) { + return this._collection.avg(fieldPath, filter); + } + /** + * Aggregates the events in the TimeSeries down to their mean (same as avg) + * + * @param {string} fieldPath Column to find the mean of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The mean + */ + + + mean(fieldPath, filter) { + return this._collection.mean(fieldPath, filter); + } + /** + * Aggregates the events down to their medium value + * + * @param {string} fieldPath Column to find the median of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The resulting median value + */ + + + median(fieldPath, filter) { + return this._collection.median(fieldPath, filter); + } + /** + * Aggregates the events down to their stdev + * + * @param {string} fieldPath Column to find the stdev of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The resulting stdev value + */ + + + stdev(fieldPath, filter) { + return this._collection.stdev(fieldPath, filter); + } + /** + * Gets percentile q within the TimeSeries. This works the same way as numpy. + * + * @param {integer} q The percentile (should be between 0 and 100) + * + * @param {string} fieldPath Column to find the qth percentile of. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * + * @param {string} interp Specifies the interpolation method + * to use when the desired quantile lies between + * two data points. Options are: "linear", "lower", "higher", + * "nearest", "midpoint" + * @param {function} filter Optional filter function used to clean data before aggregating + * + * @return {number} The percentile + */ + + + percentile(q, fieldPath) { + var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; + var filter = arguments.length > 3 ? arguments[3] : undefined; + return this._collection.percentile(q, fieldPath, interp, filter); + } + /** + * Aggregates the events down using a user defined function to + * do the reduction. + * + * @param {function} func User defined reduction function. Will be + * passed a list of values. Should return a + * singe value. + * @param {string} fieldPath Column to aggregate over. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * + * @return {number} The resulting value + */ + + + aggregate(func, fieldPath) { + return this._collection.aggregate(func, fieldPath); + } + /** + * Gets n quantiles within the TimeSeries. This works the same way as numpy's percentile(). + * For example `timeseries.quantile(4)` would be the same as using percentile with q = 0.25, 0.5 and 0.75. + * + * @param {integer} n The number of quantiles to divide the + * TimeSeries into. + * @param {string} fieldPath Column to calculate over. A deep value can + * be referenced with a string.like.this. If not supplied + * the `value` column will be aggregated. + * @param {string} interp Specifies the interpolation method + * to use when the desired quantile lies between + * two data points. Options are: "linear", "lower", "higher", + * "nearest", "midpoint". + * @return {array} An array of n quantiles + */ + + + quantile(quantity) { + var fieldPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "value"; + var interp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "linear"; + return this._collection.quantile(quantity, fieldPath, interp); + } + /** + * Returns a new Pipeline with input source being initialized to + * this TimeSeries collection. This allows pipeline operations + * to be chained directly onto the TimeSeries to produce a new + * TimeSeries or event result. + * + * @example + * + * ``` + * timeseries.pipeline() + * .offsetBy(1) + * .offsetBy(2) + * .to(CollectionOut, c => out = c); + * ``` + * + * @return {Pipeline} The Pipeline. + */ + + + pipeline() { + return new _pipeline.Pipeline().from(this._collection); + } + /** + * Takes an operator that is used to remap events from this TimeSeries to + * a new set of events. + * + * @param {function} operator An operator which will be passed each + * event and which should return a new event. + * @return {TimeSeries} A TimeSeries containing the remapped events + */ + + + map(op) { + var collections = this.pipeline().map(op).toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Takes a fieldSpec (list of column names) and outputs to the callback just those + * columns in a new TimeSeries. + * + * @example + * + * ``` + * const ts = timeseries.select({fieldSpec: ["uptime", "notes"]}); + * ``` + * + * @param options An object containing options for the command + * @param {string|array} options.fieldSpec Column or columns to select into the new TimeSeries. + * If you need to retrieve multiple deep nested values + * that ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * + * @return {TimeSeries} The resulting TimeSeries with renamed columns + */ + + + select(options) { + var { + fieldSpec + } = options; + var collections = this.pipeline().select(fieldSpec).toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Takes a `fieldSpecList` (list of column names) and collapses + * them to a new column named `name` which is the reduction (using + * the `reducer` function) of the matched columns in the `fieldSpecList`. + * + * The column may be appended to the existing columns, or replace them, + * based on the `append` boolean. + * + * @example + * + * ``` + * const sums = ts.collapse({ + * name: "sum_series", + * fieldSpecList: ["in", "out"], + * reducer: sum(), + * append: false + * }); + * ``` + * + * @param options An object containing options: + * @param {array} options.fieldSpecList The list of columns to collapse. (required) + * @param {string} options.name The resulting collapsed column name (required) + * @param {function} options.reducer The reducer function (required) + * @param {bool} options.append Append the collapsed column, rather + * than replace + * + * @return {TimeSeries} The resulting collapsed TimeSeries + */ + + + collapse(options) { + var { + fieldSpecList, + name, + reducer, + append + } = options; + var collections = this.pipeline().collapse(fieldSpecList, name, reducer, append).toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Rename columns in the underlying events. + * + * Takes a object of columns to rename. Returns a new `TimeSeries` containing + * new events. Columns not in the dict will be retained and not renamed. + * + * @example + * ``` + * new_ts = ts.renameColumns({ + * renameMap: {in: "new_in", out: "new_out"} + * }); + * ``` + * + * @note As the name implies, this will only rename the main + * "top level" (ie: non-deep) columns. If you need more + * extravagant renaming, roll your own using `TimeSeries.map()`. + * + * @param options An object containing options: + * @param {Object} options.renameMap Columns to rename. + * + * @return {TimeSeries} The resulting TimeSeries with renamed columns + */ + + + renameColumns(options) { + var { + renameMap + } = options; + return this.map(event => { + var eventType = event.type(); + var d = event.data().mapKeys(key => renameMap[key] || key); + return new eventType(event.key(), d); + }); + } + /** + * Take the data in this TimeSeries and "fill" any missing or invalid + * values. This could be setting `null` values to zero so mathematical + * operations will succeed, interpolate a new value, or pad with the + * previously given value. + * + * The `fill()` method takes a single `options` arg. + * + * @example + * ``` + * const filled = timeseries.fill({ + * fieldSpec: ["direction.in", "direction.out"], + * method: "zero", + * limit: 3 + * }); + * ``` + * + * @param options An object containing options: + * @param {string|array} options.fieldSpec Column or columns to fill. If you need to + * retrieve multiple deep nested values + * that ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * @param {string} options.method "linear" or "pad" or "zero" style interpolation + * @param {number} options.limit The maximum number of points which should be + * interpolated onto missing points. You might set this to + * 2 if you are willing to fill 2 new points, + * and then beyond that leave data with missing values. + * + * @return {TimeSeries} The resulting filled TimeSeries + */ + + + fill(options) { + var { + fieldSpec = null, + method = "zero", + limit = null + } = options; + var pipeline = this.pipeline(); + + if (method === "zero" || method === "pad") { + pipeline = pipeline.fill({ + fieldSpec, + method, + limit + }); + } else if (method === "linear" && _underscore.default.isArray(fieldSpec)) { + fieldSpec.forEach(fieldPath => { + pipeline = pipeline.fill({ + fieldSpec: fieldPath, + method, + limit + }); + }); + } else { + throw new Error("Invalid fill method:", method); + } + + var collections = pipeline.toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Align event values to regular time boundaries. The value at + * the boundary is interpolated. Only the new interpolated + * points are returned. If limit is reached nulls will be + * returned at each boundary position. + * + * One use case for this is to modify irregular data (i.e. data + * that falls at slightly irregular times) so that it falls into a + * sequence of evenly spaced values. We use this to take data we + * get from the network which is approximately every 30 second + * (:32, 1:02, 1:34, ...) and output data on exact 30 second + * boundaries (:30, 1:00, 1:30, ...). + * + * Another use case is data that might be already aligned to + * some regular interval, but that contains missing points. + * While `fill()` can be used to replace `null` values, `align()` + * can be used to add in missing points completely. Those points + * can have an interpolated value, or by setting limit to 0, + * can be filled with nulls. This is really useful when downstream + * processing depends on complete sequences. + * + * @example + * ``` + * const aligned = ts.align({ + * fieldSpec: "value", + * period: "1m", + * method: "linear" + * }); + * ``` + * + * @param options An object containing options: + * @param {string|array} options.fieldSpec Column or columns to align. If you need to + * retrieve multiple deep nested values + * that ['can.be', 'done.with', 'this.notation']. + * A single deep value with a string.like.this. + * @param {string} options.period Spacing of aligned values. e.g. "6h" or "5m" + * @param {string} options.method "linear" or "pad" style interpolation to boundaries. + * @param {number} options.limit The maximum number of points which should be + * interpolated onto boundaries. You might set this to + * 2 if you are willing to interpolate 2 new points, + * and then beyond that just emit nulls on the boundaries. + * + * @return {TimeSeries} The resulting aligned TimeSeries + */ + + + align(options) { + var { + fieldSpec = "value", + period = "5m", + method = "linear", + limit = null + } = options; + var collection = this.pipeline().align(fieldSpec, period, method, limit).toKeyedCollections(); + return this.setCollection(collection["all"], true); + } + /** + * Returns the derivative of the TimeSeries for the given columns. The result will + * be per second. Optionally you can substitute in `null` values if the rate + * is negative. This is useful when a negative rate would be considered invalid. + * + * @param options An object containing options: + * @param {string|array} options.fieldSpec Column or columns to get the rate of. If you + * need to retrieve multiple deep nested values + * that ['can.be', 'done.with', 'this.notation']. + * @param {bool} options.allowNegative Will output null values for negative rates. + * This is useful if you are getting the rate + * of a counter that always goes up, except + * when perhaps it rolls around or resets. + * + * @return {TimeSeries} The resulting `TimeSeries` containing calculated rates. + */ + + + rate() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var { + fieldSpec = "value", + allowNegative = true + } = options; + var collection = this.pipeline().rate(fieldSpec, allowNegative).toKeyedCollections(); + return this.setCollection(collection["all"], true); + } + /** + * Builds a new TimeSeries by dividing events within the TimeSeries + * across multiple fixed windows of size `windowSize`. + * + * Note that these are windows defined relative to Jan 1st, 1970, + * and are UTC, so this is best suited to smaller window sizes + * (hourly, 5m, 30s, 1s etc), or in situations where you don't care + * about the specific window, just that the data is smaller. + * + * Each window then has an aggregation specification applied as + * `aggregation`. This specification describes a mapping of output + * fieldNames to aggregation functions and their fieldPath. For example: + * ``` + * { in_avg: { in: avg() }, out_avg: { out: avg() } } + * ``` + * will aggregate both "in" and "out" using the average aggregation + * function and return the result as in_avg and out_avg. + * + * Note that each aggregation function, such as `avg()` also can take a + * filter function to apply before the aggregation. A set of filter functions + * exists to do common data cleanup such as removing bad values. For example: + * ``` + * { value_avg: { value: avg(filter.ignoreMissing) } } + * ``` + * + * @example + * ``` + * const timeseries = new TimeSeries(data); + * const dailyAvg = timeseries.fixedWindowRollup({ + * windowSize: "1d", + * aggregation: {value: {value: avg()}} + * }); + * ``` + * + * @param options An object containing options: + * @param {string} options.windowSize The size of the window. e.g. "6h" or "5m" + * @param {object} options.aggregation The aggregation specification (see description above) + * @param {bool} options.toTimeEvents Output as `TimeEvent`s, rather than `IndexedEvent`s + * @return {TimeSeries} The resulting rolled up `TimeSeries` + */ + + + fixedWindowRollup(options) { + var { + windowSize, + aggregation, + toTimeEvents = false + } = options; + + if (!windowSize) { + throw new Error("windowSize must be supplied, for example '5m' for five minute rollups"); + } + + if (!aggregation || !_underscore.default.isObject(aggregation)) { + throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); + } + + var aggregatorPipeline = this.pipeline().windowBy(windowSize).emitOn("discard").aggregate(aggregation); + var eventTypePipeline = toTimeEvents ? aggregatorPipeline.asTimeEvents() : aggregatorPipeline; + var collections = eventTypePipeline.clearWindow().toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Builds a new TimeSeries by dividing events into hours. + * + * Each window then has an aggregation specification `aggregation` + * applied. This specification describes a mapping of output + * fieldNames to aggregation functions and their fieldPath. For example: + * ``` + * {in_avg: {in: avg()}, out_avg: {out: avg()}} + * ``` + * + * @param options An object containing options: + * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it + * will be returned as a `TimeSeries` of `IndexedEvent`s. + * @param {object} options.aggregation The aggregation specification (see description above) + * + * @return {TimeSeries} The resulting rolled up TimeSeries + */ + + + hourlyRollup(options) { + var { + aggregation, + toTimeEvents = false + } = options; + + if (!aggregation || !_underscore.default.isObject(aggregation)) { + throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); + } + + return this.fixedWindowRollup("1h", aggregation, toTimeEvents); + } + /** + * Builds a new TimeSeries by dividing events into days. + * + * Each window then has an aggregation specification `aggregation` + * applied. This specification describes a mapping of output + * fieldNames to aggregation functions and their fieldPath. For example: + * ``` + * {in_avg: {in: avg()}, out_avg: {out: avg()}} + * ``` + * + * @param options An object containing options: + * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it + * will be returned as a `TimeSeries` of `IndexedEvent`s. + * @param {object} options.aggregation The aggregation specification (see description above) + * + * @return {TimeSeries} The resulting rolled up TimeSeries + */ + + + dailyRollup(options) { + var { + aggregation, + toTimeEvents = false + } = options; + + if (!aggregation || !_underscore.default.isObject(aggregation)) { + throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); + } + + return this._rollup("daily", aggregation, toTimeEvents); + } + /** + * Builds a new TimeSeries by dividing events into months. + * + * Each window then has an aggregation specification `aggregation` + * applied. This specification describes a mapping of output + * fieldNames to aggregation functions and their fieldPath. For example: + * ``` + * {in_avg: {in: avg()}, out_avg: {out: avg()}} + * ``` + * + * @param options An object containing options: + * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it + * will be returned as a `TimeSeries` of `IndexedEvent`s. + * @param {object} options.aggregation The aggregation specification (see description above) + * + * @return {TimeSeries} The resulting rolled up `TimeSeries` + */ + + + monthlyRollup(options) { + var { + aggregation, + toTimeEvents = false + } = options; + + if (!aggregation || !_underscore.default.isObject(aggregation)) { + throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); + } + + return this._rollup("monthly", aggregation, toTimeEvents); + } + /** + * Builds a new TimeSeries by dividing events into years. + * + * Each window then has an aggregation specification `aggregation` + * applied. This specification describes a mapping of output + * fieldNames to aggregation functions and their fieldPath. For example: + * + * ``` + * {in_avg: {in: avg()}, out_avg: {out: avg()}} + * ``` + * + * @param options An object containing options: + * @param {bool} options.toTimeEvents Convert the rollup events to `TimeEvent`s, otherwise it + * will be returned as a `TimeSeries` of `IndexedEvent`s. + * @param {object} options.aggregation The aggregation specification (see description above) + * + * @return {TimeSeries} The resulting rolled up `TimeSeries` + */ + + + yearlyRollup(options) { + var { + aggregation, + toTimeEvents = false + } = options; + + if (!aggregation || !_underscore.default.isObject(aggregation)) { + throw new Error("aggregation object must be supplied, for example: {value: {value: avg()}}"); + } + + return this._rollup("yearly", aggregation, toTimeEvents); + } + /** + * @private + * + * Internal function to build the TimeSeries rollup functions using + * an aggregator Pipeline. + */ + + + _rollup(type, aggregation) { + var toTimeEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var aggregatorPipeline = this.pipeline().windowBy(type).emitOn("discard").aggregate(aggregation); + var eventTypePipeline = toTimeEvents ? aggregatorPipeline.asTimeEvents() : aggregatorPipeline; + var collections = eventTypePipeline.clearWindow().toKeyedCollections(); + return this.setCollection(collections["all"], true); + } + /** + * Builds multiple `Collection`s, each collects together + * events within a window of size `windowSize`. Note that these + * are windows defined relative to Jan 1st, 1970, and are UTC. + * + * @example + * ``` + * const timeseries = new TimeSeries(data); + * const collections = timeseries.collectByFixedWindow({windowSize: "1d"}); + * console.log(collections); // {1d-16314: Collection, 1d-16315: Collection, ...} + * ``` + * + * @param options An object containing options: + * @param {bool} options.windowSize The size of the window. e.g. "6h" or "5m" + * + * @return {map} The result is a mapping from window index to a Collection. + */ + + + collectByFixedWindow(_ref) { + var { + windowSize + } = _ref; + return this.pipeline().windowBy(windowSize).emitOn("discard").toKeyedCollections(); + } + /* + * STATIC + */ + + /** + * Defines the event type contained in this TimeSeries. The default here + * is to use the supplied type (time, timerange or index) to build either + * a TimeEvent, TimeRangeEvent or IndexedEvent. However, you can also + * subclass the TimeSeries and reimplement this to return another event + * type. + */ + + + static event(eventKey) { + switch (eventKey) { + case "time": + return _timeevent.default; + + case "timerange": + return _timerangeevent.default; + + case "index": + return _indexedevent.default; + + default: + throw new Error("Unknown event type: ".concat(eventKey)); + } + } + /** + * Static function to compare two TimeSeries to each other. If the TimeSeries + * are of the same instance as each other then equals will return true. + * @param {TimeSeries} series1 + * @param {TimeSeries} series2 + * @return {bool} result + */ + + + static equal(series1, series2) { + return series1._data === series2._data && series1._collection === series2._collection; + } + /** + * Static function to compare two TimeSeries to each other. If the TimeSeries + * are of the same value as each other then equals will return true. + * @param {TimeSeries} series1 + * @param {TimeSeries} series2 + * @return {bool} result + */ + + + static is(series1, series2) { + return _immutable.default.is(series1._data, series2._data) && _collection.default.is(series1._collection, series2._collection); + } + /** + * Reduces a list of TimeSeries objects using a reducer function. This works + * by taking each event in each TimeSeries and collecting them together + * based on timestamp. All events for a given time are then merged together + * using the reducer function to produce a new event. The reducer function is + * applied to all columns in the fieldSpec. Those new events are then + * collected together to form a new TimeSeries. + * + * @example + * + * For example you might have three TimeSeries with columns "in" and "out" which + * corresponds to two measurements per timestamp. You could use this function to + * obtain a new TimeSeries which was the sum of the the three measurements using + * the `sum()` reducer function and an ["in", "out"] fieldSpec. + * + * ``` + * const totalSeries = TimeSeries.timeSeriesListReduce({ + * name: "totals", + * seriesList: [inTraffic, outTraffic], + * reducer: sum(), + * fieldSpec: [ "in", "out" ] + * }); + * ``` + * + * @param options An object containing options. Additional key + * values in the options will be added as meta data + * to the resulting TimeSeries. + * @param {array} options.seriesList A list of `TimeSeries` (required) + * @param {function} options.reducer The reducer function e.g. `max()` (required) + * @param {array | string} options.fieldSpec Column or columns to reduce. If you + * need to retrieve multiple deep + * nested values that ['can.be', 'done.with', + * 'this.notation']. A single deep value with a + * string.like.this. + * + * @return {TimeSeries} The reduced TimeSeries + */ + + + static timeSeriesListReduce(options) { + var { + fieldSpec, + reducer + } = options, + data = (0, _objectWithoutProperties2.default)(options, ["fieldSpec", "reducer"]); + + var combiner = _event.default.combiner(fieldSpec, reducer); + + return TimeSeries.timeSeriesListEventReduce(_objectSpread({ + fieldSpec, + reducer: combiner + }, data)); + } + /** + * Takes a list of TimeSeries and merges them together to form a new + * Timeseries. + * + * Merging will produce a new Event; + only when events are conflict free, so + * it is useful in the following cases: + * * to combine multiple TimeSeries which have different time ranges, essentially + * concatenating them together + * * combine TimeSeries which have different columns, for example inTraffic has + * a column "in" and outTraffic has a column "out" and you want to produce a merged + * trafficSeries with columns "in" and "out". + * + * @example + * ``` + * const inTraffic = new TimeSeries(trafficDataIn); + * const outTraffic = new TimeSeries(trafficDataOut); + * const trafficSeries = TimeSeries.timeSeriesListMerge({ + * name: "traffic", + * seriesList: [inTraffic, outTraffic] + * }); + * ``` + * + * @param options An object containing options. Additional key + * values in the options will be added as meta data + * to the resulting TimeSeries. + * @param {array} options.seriesList A list of `TimeSeries` (required) + * @param {array | string} options.fieldSpec Column or columns to merge. If you + * need to retrieve multiple deep + * nested values that ['can.be', 'done.with', + * 'this.notation']. A single deep value with a + * string.like.this. + * + * @return {TimeSeries} The merged TimeSeries + */ + + + static timeSeriesListMerge(options) { + var { + fieldSpec + } = options, + data = (0, _objectWithoutProperties2.default)(options, ["fieldSpec"]); + + var merger = _event.default.merger(fieldSpec); + + return TimeSeries.timeSeriesListEventReduce(_objectSpread({ + fieldSpec, + reducer: merger + }, data)); + } + /** + * @private + */ + + + static timeSeriesListEventReduce(options) { + var { + seriesList, + fieldSpec, + reducer + } = options, + data = (0, _objectWithoutProperties2.default)(options, ["seriesList", "fieldSpec", "reducer"]); + + if (!seriesList || !_underscore.default.isArray(seriesList)) { + throw new Error("A list of TimeSeries must be supplied to reduce"); + } + + if (!reducer || !_underscore.default.isFunction(reducer)) { + throw new Error("reducer function must be supplied, for example avg()"); + } // for each series, make a map from timestamp to the + // list of events with that timestamp + + + var eventList = []; + seriesList.forEach(series => { + for (var event of series.events()) { + eventList.push(event); + } + }); + var events = reducer(eventList, fieldSpec); // Make a collection. If the events are out of order, sort them. + // It's always possible that events are out of order here, depending + // on the start times of the series, along with it the series + // have missing data, so I think we don't have a choice here. + + var collection = new _collection.default(events); + + if (!collection.isChronological()) { + collection = collection.sortByTime(); + } + + var timeseries = new TimeSeries(_objectSpread({}, data, { + collection + })); + return timeseries; + } + +} + +var _default = TimeSeries; +exports.default = _default; \ No newline at end of file diff --git a/package.json b/package.json index d668c93..3772633 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,34 @@ { - "name": "pondjs", - "version": "0.8.8", - "main": "lib/entry", - "types": "src/index.d.ts", - "description": "A timeseries library build on top of immutable.js", - "homepage": "http://software.es.net/pond", - "scripts": { - "lint": "eslint src website/modules/*.jsx", - "test": "react-scripts test", - "docs": "rm -f /src/website/docs/* && node ./scripts/renderdocs.js", - "build": ". ./scripts/build.sh", - "start-website": "react-scripts start", - "build-website": "echo \"*** Building website\n\" && rm -rf docs && react-scripts build && mv build docs" - }, - "pre-commit": [ - "build" - ], - "license": "BSD-3-Clause-LBNL", - "dependencies": { - "babel-polyfill": "^6.9.1", - "babel-runtime": "^6.5.0", - "immutable": "^3.6.4", - "immutable-devtools": "0.0.4", - "moment": "^2.9.0", - "underscore": "^1.8.2" - }, - "devDependencies": { - "anybar-webpack": "^1.2.0", - "babel-cli": "^6.5.1", - "babel-core": "^6.5.2", - "babel-eslint": "^6.0.0", - "babel-plugin-transform-runtime": "^6.7.5", - "babel-preset-es2015": "^6.6.0", - "babel-preset-stage-0": "^6.5.0", - "collect-json": "^1.0.8", - "coveralls": "^2.11.12", - "dmd": "^1.4.2", - "eslint": "^1.10.0", - "eslint-config-esnet": "^0.1.0", - "eslint-plugin-babel": "^2.1.1", - "eslint-plugin-react": "^3.9.0", - "history": "^2.0.2", - "jsdoc": "^3.4.0", - "jsdoc-to-markdown": "^1.3.4", - "pre-commit": "^1.1.2", - "raw-loader": "^0.5.1", - "react": "^0.14.3", - "react-dom": "^0.14.3", - "react-markdown": "^1.0.5", - "react-router": "^2.2.4", - "react-scripts": "0.4.1", - "scroll-behavior": "^0.3.0" - }, - "keywords": [ - "timeseries", - "immutable" - ] + "name": "pondjs", + "version": "0.9.0", + "main": "lib/entry", + "types": "src/index.d.ts", + "description": "A timeseries library build on top of immutable.js", + "homepage": "http://software.es.net/pond", + "scripts": { + "test": "jest --testEnvironment node ", + "build": ". ./scripts/build.sh" + }, + "license": "BSD-3-Clause-LBNL", + "dependencies": { + "@babel/polyfill": "^7.7.0", + "immutable": "^3.6.4", + "immutable-devtools": "0.0.4", + "moment": "^2.24.0", + "underscore": "^1.9.1" + }, + "devDependencies": { + "@babel/cli": "^7.7.0", + "@babel/core": "^7.7.2", + "@babel/plugin-proposal-export-default-from": "^7.5.2", + "@babel/plugin-transform-runtime": "^7.6.2", + "@babel/preset-env": "^7.7.1", + "babel-jest": "^24.9.0", + "jest": "^24.9.0", + "pre-commit": "^1.2.2" + }, + "keywords": [ + "timeseries", + "immutable" + ] } diff --git a/scripts/build.sh b/scripts/build.sh index 49fc456..11d5997 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -4,7 +4,7 @@ rm -rf lib/* ./node_modules/.bin/babel --version echo "" -./node_modules/.bin/babel src/pond/ --ignore __tests__ --plugins 'transform-runtime' --out-dir ./lib +./node_modules/.bin/babel src/pond/ --ignore __tests__ --plugins '@babel/transform-runtime,@babel/plugin-proposal-export-default-from' --out-dir ./lib echo "" echo "> Complete transpiling" \ No newline at end of file diff --git a/src/index.d.ts b/src/index.d.ts index 24bb437..62daa68 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -225,7 +225,7 @@ declare module "pondjs" { /** * Given the time range, return a list of strings of index values every tick. */ - static getIndexStringList(): string; + static getIndexStringList(win: string, date: Date): string; /** * Generate an index string with day granularity. @@ -1060,6 +1060,11 @@ declare module "pondjs" { */ timerange(): TimeRange; + /** + * Alias for `timerange()` + */ + range(): TimeRange; + /** * Gets the earliest time represented in the TimeSeries. */ diff --git a/src/pond/lib/__tests__/align.test.js b/src/pond/lib/__tests__/align.test.js index b699c9d..4abe6b5 100644 --- a/src/pond/lib/__tests__/align.test.js +++ b/src/pond/lib/__tests__/align.test.js @@ -10,8 +10,8 @@ /* eslint-disable */ -import TimeSeries from "../timeseries"; import { Pipeline } from "../pipeline"; +import TimeSeries from "../timeseries"; const SIMPLE_GAP_DATA = { name: "traffic", @@ -69,57 +69,51 @@ it("can do basic alignment using TimeSeries.align()", done => { done(); }); -it( - "can do basic hold alignment with TimeSeries.align() and method hold", - done => { - const ts = new TimeSeries(SIMPLE_GAP_DATA); - const aligned = ts.align({ - fieldSpec: "value", - period: "1m", - method: "hold" - }); - - expect(aligned.size()).toBe(8); - expect(aligned.at(0).get()).toBe(0.75); - expect(aligned.at(1).get()).toBe(2); - expect(aligned.at(2).get()).toBe(2); - expect(aligned.at(3).get()).toBe(1); - expect(aligned.at(4).get()).toBe(1); - expect(aligned.at(5).get()).toBe(1); - expect(aligned.at(6).get()).toBe(1); - expect(aligned.at(7).get()).toBe(1); - - done(); - } -); - -it( - "can do alignment with TimeSeries.align() with a limit and hold interpolation", - done => { - const ts = new TimeSeries(SIMPLE_GAP_DATA); - const aligned = ts.align({ - fieldSpec: "value", - period: "1m", - method: "hold", - limit: 2 - }); - - expect(aligned.size()).toBe(8); - expect(aligned.at(0).get()).toBe(0.75); - expect(aligned.at(1).get()).toBe(2); - expect(aligned.at(2).get()).toBe(2); - expect(aligned.at(3).get()).toBeNull(); - // over limit fill with null - expect(aligned.at(4).get()).toBeNull(); - // over limit fill with null - expect(aligned.at(5).get()).toBeNull(); - // over limit fill with null - expect(aligned.at(6).get()).toBe(1); - expect(aligned.at(7).get()).toBe(1); - - done(); - } -); +it("can do basic hold alignment with TimeSeries.align() and method hold", done => { + const ts = new TimeSeries(SIMPLE_GAP_DATA); + const aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "hold" + }); + + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(0.75); + expect(aligned.at(1).get()).toBe(2); + expect(aligned.at(2).get()).toBe(2); + expect(aligned.at(3).get()).toBe(1); + expect(aligned.at(4).get()).toBe(1); + expect(aligned.at(5).get()).toBe(1); + expect(aligned.at(6).get()).toBe(1); + expect(aligned.at(7).get()).toBe(1); + + done(); +}); + +it("can do alignment with TimeSeries.align() with a limit and hold interpolation", done => { + const ts = new TimeSeries(SIMPLE_GAP_DATA); + const aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "hold", + limit: 2 + }); + + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(0.75); + expect(aligned.at(1).get()).toBe(2); + expect(aligned.at(2).get()).toBe(2); + expect(aligned.at(3).get()).toBeNull(); + // over limit fill with null + expect(aligned.at(4).get()).toBeNull(); + // over limit fill with null + expect(aligned.at(5).get()).toBeNull(); + // over limit fill with null + expect(aligned.at(6).get()).toBe(1); + expect(aligned.at(7).get()).toBe(1); + + done(); +}); it("can do align with a limit and linear interpolation", done => { const ts = new TimeSeries(SIMPLE_GAP_DATA); @@ -146,46 +140,38 @@ it("can do align with a limit and linear interpolation", done => { done(); }); -it( - "can do alignment with TimeSeries.align() on a TimeSeries with invalid points", - done => { - const ts = new TimeSeries(SIMPLE_GAP_DATA_BAD); - - console.warn = jest.genMockFn(); - - const aligned = ts.align({ - fieldSpec: "value", - period: "1m", - method: "linear" - }); - - expect(console.warn.mock.calls.length).toBe(2); - - expect(aligned.size()).toBe(8); - expect(aligned.at(0).get()).toBe(1.25); - expect(aligned.at(1).get()).toBe(1.8571428571428572); - expect(aligned.at(2).get()).toBe(1.2857142857142856); - expect(aligned.at(3).get()).toBe(1.0); - expect(aligned.at(4).get()).toBe(1.0); - expect(aligned.at(5).get()).toBe(1.0); - expect(aligned.at(6).get()).toBeNull(); - // bad value - expect(aligned.at(7).get()).toBeNull(); - // bad value - done(); - } -); +it("can do alignment with TimeSeries.align() on a TimeSeries with invalid points", done => { + const ts = new TimeSeries(SIMPLE_GAP_DATA_BAD); + + // console.warn = jest.genMockFn(); + + const aligned = ts.align({ + fieldSpec: "value", + period: "1m", + method: "linear" + }); + + // expect(console.warn.mock.calls.length).toBe(2); + + expect(aligned.size()).toBe(8); + expect(aligned.at(0).get()).toBe(1.25); + expect(aligned.at(1).get()).toBe(1.8571428571428572); + expect(aligned.at(2).get()).toBe(1.2857142857142856); + expect(aligned.at(3).get()).toBe(1.0); + expect(aligned.at(4).get()).toBe(1.0); + expect(aligned.at(5).get()).toBe(1.0); + expect(aligned.at(6).get()).toBeNull(); + // bad value + expect(aligned.at(7).get()).toBeNull(); + // bad value + done(); +}); it("can do alignment on an already aligned timeseries", () => { const ts = new TimeSeries({ name: "traffic", columns: ["time", "value"], - points: [ - [1473490770000, 10], - [1473490800000, 20], - [1473490830000, 30], - [1473490860000, 40] - ] + points: [[1473490770000, 10], [1473490800000, 20], [1473490830000, 30], [1473490860000, 40]] }); const result = Pipeline() @@ -195,15 +181,35 @@ it("can do alignment on an already aligned timeseries", () => { const timeseries = result["all"]; - expect(timeseries.at(0).timestamp().getTime()).toEqual(1473490770000); + expect( + timeseries + .at(0) + .timestamp() + .getTime() + ).toEqual(1473490770000); expect(timeseries.at(0).value()).toEqual(10); - expect(timeseries.at(1).timestamp().getTime()).toEqual(1473490800000); + expect( + timeseries + .at(1) + .timestamp() + .getTime() + ).toEqual(1473490800000); expect(timeseries.at(1).value()).toEqual(20); - expect(timeseries.at(2).timestamp().getTime()).toEqual(1473490830000); + expect( + timeseries + .at(2) + .timestamp() + .getTime() + ).toEqual(1473490830000); expect(timeseries.at(2).value()).toEqual(30); - expect(timeseries.at(3).timestamp().getTime()).toEqual(1473490860000); + expect( + timeseries + .at(3) + .timestamp() + .getTime() + ).toEqual(1473490860000); expect(timeseries.at(3).value()).toEqual(40); }); diff --git a/src/pond/lib/__tests__/timeseries.fill.test.js b/src/pond/lib/__tests__/timeseries.fill.test.js index a08dd1d..807d936 100644 --- a/src/pond/lib/__tests__/timeseries.fill.test.js +++ b/src/pond/lib/__tests__/timeseries.fill.test.js @@ -89,94 +89,73 @@ it("can use the TimeSeries.fill() to fill missing values with zero", () => { limit: 4 }); - expect(newTS2.at(1).get("direction.in"), 0); - expect(newTS2.at(3).get("direction.in"), 0); + expect(newTS2.at(1).get("direction.in")).toEqual(0); + expect(newTS2.at(3).get("direction.in")).toEqual(0); expect(newTS2.at(0).get("direction.out")).toBeNull(); expect(newTS2.at(2).get("direction.out")).toBeNull(); }); -it( - "can use TimeSeries.fill() on a more complex example with nested paths", - () => { - const ts = new TimeSeries({ - name: "traffic", - columns: ["time", "direction"], - points: [ - [ - 1400425947000, - { in: { tcp: 1, udp: 3 }, out: { tcp: 2, udp: 3 } } - ], - [ - 1400425948000, - { in: { tcp: 3, udp: null }, out: { tcp: 4, udp: 3 } } - ], - [ - 1400425949000, - { in: { tcp: 5, udp: null }, out: { tcp: null, udp: 3 } } - ], - [ - 1400425950000, - { in: { tcp: 7, udp: null }, out: { tcp: null, udp: 3 } } - ], - [ - 1400425960000, - { in: { tcp: 9, udp: 4 }, out: { tcp: 6, udp: 3 } } - ], - [ - 1400425970000, - { in: { tcp: 11, udp: 5 }, out: { tcp: 8, udp: 3 } } - ] - ] - }); +it("can use TimeSeries.fill() on a more complex example with nested paths", () => { + const ts = new TimeSeries({ + name: "traffic", + columns: ["time", "direction"], + points: [ + [1400425947000, { in: { tcp: 1, udp: 3 }, out: { tcp: 2, udp: 3 } }], + [1400425948000, { in: { tcp: 3, udp: null }, out: { tcp: 4, udp: 3 } }], + [1400425949000, { in: { tcp: 5, udp: null }, out: { tcp: null, udp: 3 } }], + [1400425950000, { in: { tcp: 7, udp: null }, out: { tcp: null, udp: 3 } }], + [1400425960000, { in: { tcp: 9, udp: 4 }, out: { tcp: 6, udp: 3 } }], + [1400425970000, { in: { tcp: 11, udp: 5 }, out: { tcp: 8, udp: 3 } }] + ] + }); - const newTS = ts.fill({ - fieldSpec: ["direction.out.tcp", "direction.in.udp"] - }); + const newTS = ts.fill({ + fieldSpec: ["direction.out.tcp", "direction.in.udp"] + }); - expect(newTS.at(0).get("direction.in.udp")).toBe(3); - expect(newTS.at(1).get("direction.in.udp")).toBe(0); - // fill - expect(newTS.at(2).get("direction.in.udp")).toBe(0); - // fill - expect(newTS.at(3).get("direction.in.udp")).toBe(0); - // fill - expect(newTS.at(4).get("direction.in.udp")).toBe(4); - expect(newTS.at(5).get("direction.in.udp")).toBe(5); - - expect(newTS.at(0).get("direction.out.tcp")).toBe(2); - expect(newTS.at(1).get("direction.out.tcp")).toBe(4); - expect(newTS.at(2).get("direction.out.tcp")).toBe(0); - // fill - expect(newTS.at(3).get("direction.out.tcp")).toBe(0); - // fill - expect(newTS.at(4).get("direction.out.tcp")).toBe(6); - expect(newTS.at(5).get("direction.out.tcp")).toBe(8); - - // - // do it again, but only fill the out.tcp - // - const newTS2 = ts.fill({ fieldSpec: ["direction.out.tcp"] }); - - expect(newTS2.at(0).get("direction.out.tcp")).toBe(2); - expect(newTS2.at(1).get("direction.out.tcp")).toBe(4); - expect(newTS2.at(2).get("direction.out.tcp")).toBe(0); - // fill - expect(newTS2.at(3).get("direction.out.tcp")).toBe(0); - // fill - expect(newTS2.at(4).get("direction.out.tcp")).toBe(6); - expect(newTS2.at(5).get("direction.out.tcp")).toBe(8); - - expect(newTS2.at(0).get("direction.in.udp")).toBe(3); - expect(newTS2.at(1).get("direction.in.udp")).toBeNull(); - // no fill - expect(newTS2.at(2).get("direction.in.udp")).toBeNull(); - // no fill - expect(newTS2.at(3).get("direction.in.udp")).toBeNull(); - // no fill - expect(newTS2.at(4).get("direction.in.udp")).toBe(4); - expect(newTS2.at(5).get("direction.in.udp")).toBe(5); - } -); + expect(newTS.at(0).get("direction.in.udp")).toBe(3); + expect(newTS.at(1).get("direction.in.udp")).toBe(0); + // fill + expect(newTS.at(2).get("direction.in.udp")).toBe(0); + // fill + expect(newTS.at(3).get("direction.in.udp")).toBe(0); + // fill + expect(newTS.at(4).get("direction.in.udp")).toBe(4); + expect(newTS.at(5).get("direction.in.udp")).toBe(5); + + expect(newTS.at(0).get("direction.out.tcp")).toBe(2); + expect(newTS.at(1).get("direction.out.tcp")).toBe(4); + expect(newTS.at(2).get("direction.out.tcp")).toBe(0); + // fill + expect(newTS.at(3).get("direction.out.tcp")).toBe(0); + // fill + expect(newTS.at(4).get("direction.out.tcp")).toBe(6); + expect(newTS.at(5).get("direction.out.tcp")).toBe(8); + + // + // do it again, but only fill the out.tcp + // + const newTS2 = ts.fill({ fieldSpec: ["direction.out.tcp"] }); + + expect(newTS2.at(0).get("direction.out.tcp")).toBe(2); + expect(newTS2.at(1).get("direction.out.tcp")).toBe(4); + expect(newTS2.at(2).get("direction.out.tcp")).toBe(0); + // fill + expect(newTS2.at(3).get("direction.out.tcp")).toBe(0); + // fill + expect(newTS2.at(4).get("direction.out.tcp")).toBe(6); + expect(newTS2.at(5).get("direction.out.tcp")).toBe(8); + + expect(newTS2.at(0).get("direction.in.udp")).toBe(3); + expect(newTS2.at(1).get("direction.in.udp")).toBeNull(); + // no fill + expect(newTS2.at(2).get("direction.in.udp")).toBeNull(); + // no fill + expect(newTS2.at(3).get("direction.in.udp")).toBeNull(); + // no fill + expect(newTS2.at(4).get("direction.in.udp")).toBe(4); + expect(newTS2.at(5).get("direction.in.udp")).toBe(5); +}); it("can use TimeSeries.fill() with limit pad and zero filling", () => { const ts = new TimeSeries({ @@ -329,95 +308,89 @@ it("can do linear interpolation fill (test_linear)", () => { expect(result.at(5).get("direction.out")).toBe(12); }); -it( - "can do linear interpolation fill with a pipeline (test_linear_list)", - () => { - const ts = new TimeSeries({ - name: "traffic", - columns: ["time", "direction"], - points: [ - [1400425947000, { in: 1, out: 2 }], - [1400425948000, { in: null, out: null }], - [1400425949000, { in: null, out: null }], - [1400425950000, { in: 3, out: null }], - [1400425960000, { in: null, out: null }], - [1400425970000, { in: 5, out: 12 }], - [1400425980000, { in: 6, out: 13 }] - ] - }); +it("can do linear interpolation fill with a pipeline (test_linear_list)", () => { + const ts = new TimeSeries({ + name: "traffic", + columns: ["time", "direction"], + points: [ + [1400425947000, { in: 1, out: 2 }], + [1400425948000, { in: null, out: null }], + [1400425949000, { in: null, out: null }], + [1400425950000, { in: 3, out: null }], + [1400425960000, { in: null, out: null }], + [1400425970000, { in: 5, out: 12 }], + [1400425980000, { in: 6, out: 13 }] + ] + }); - const result = Pipeline() - .from(ts) - .fill({ fieldSpec: "direction.in", method: "linear" }) - .fill({ fieldSpec: "direction.out", method: "linear" }) - .toEventList(); - - expect(result.length).toBe(7); - - expect(result[0].get("direction.in")).toBe(1); - expect(result[1].get("direction.in")).toBe(1.6666666666666665); - // filled - expect(result[2].get("direction.in")).toBe(2.333333333333333); - // filled - expect(result[3].get("direction.in")).toBe(3); - expect(result[4].get("direction.in")).toBe(4.0); - // filled - expect(result[5].get("direction.in")).toBe(5); - - expect(result[0].get("direction.out")).toBe(2); - expect(result[1].get("direction.out")).toBe(2.4347826086956523); - // filled - expect(result[2].get("direction.out")).toBe(2.869565217391304); - // filled - expect(result[3].get("direction.out")).toBe(3.3043478260869565); - // filled - expect(result[4].get("direction.out")).toBe(7.652173913043478); - // filled - expect(result[5].get("direction.out")).toBe(12); - } -); - -it( - "can do assymetric linear interpolation (test_assymetric_linear_fill)", - () => { - const ts = new TimeSeries({ - name: "traffic", - columns: ["time", "direction"], - points: [ - [1400425947000, { in: 1, out: null }], - [1400425948000, { in: null, out: null }], - [1400425949000, { in: null, out: null }], - [1400425950000, { in: 3, out: 8 }], - [1400425960000, { in: null, out: null }], - [1400425970000, { in: 5, out: 12 }], - [1400425980000, { in: 6, out: 13 }] - ] - }); + const result = Pipeline() + .from(ts) + .fill({ fieldSpec: "direction.in", method: "linear" }) + .fill({ fieldSpec: "direction.out", method: "linear" }) + .toEventList(); - const result = ts.fill({ - fieldSpec: ["direction.in", "direction.out"], - method: "linear" - }); + expect(result.length).toBe(7); - expect(result.at(0).get("direction.in")).toBe(1); - expect(result.at(1).get("direction.in")).toBe(1.6666666666666665); - // filled - expect(result.at(2).get("direction.in")).toBe(2.333333333333333); - // filled - expect(result.at(3).get("direction.in")).toBe(3); - expect(result.at(4).get("direction.in")).toBe(4.0); - // filled - expect(result.at(5).get("direction.in")).toBe(5); - - expect(result.at(0).get("direction.out")).toBeNull(); - expect(result.at(1).get("direction.out")).toBeNull(); - expect(result.at(2).get("direction.out")).toBeNull(); - expect(result.at(3).get("direction.out")).toBe(8); - expect(result.at(4).get("direction.out")).toBe(10); - // filled - expect(result.at(5).get("direction.out")).toBe(12); - } -); + expect(result[0].get("direction.in")).toBe(1); + expect(result[1].get("direction.in")).toBe(1.6666666666666665); + // filled + expect(result[2].get("direction.in")).toBe(2.333333333333333); + // filled + expect(result[3].get("direction.in")).toBe(3); + expect(result[4].get("direction.in")).toBe(4.0); + // filled + expect(result[5].get("direction.in")).toBe(5); + + expect(result[0].get("direction.out")).toBe(2); + expect(result[1].get("direction.out")).toBe(2.4347826086956523); + // filled + expect(result[2].get("direction.out")).toBe(2.869565217391304); + // filled + expect(result[3].get("direction.out")).toBe(3.3043478260869565); + // filled + expect(result[4].get("direction.out")).toBe(7.652173913043478); + // filled + expect(result[5].get("direction.out")).toBe(12); +}); + +it("can do assymetric linear interpolation (test_assymetric_linear_fill)", () => { + const ts = new TimeSeries({ + name: "traffic", + columns: ["time", "direction"], + points: [ + [1400425947000, { in: 1, out: null }], + [1400425948000, { in: null, out: null }], + [1400425949000, { in: null, out: null }], + [1400425950000, { in: 3, out: 8 }], + [1400425960000, { in: null, out: null }], + [1400425970000, { in: 5, out: 12 }], + [1400425980000, { in: 6, out: 13 }] + ] + }); + + const result = ts.fill({ + fieldSpec: ["direction.in", "direction.out"], + method: "linear" + }); + + expect(result.at(0).get("direction.in")).toBe(1); + expect(result.at(1).get("direction.in")).toBe(1.6666666666666665); + // filled + expect(result.at(2).get("direction.in")).toBe(2.333333333333333); + // filled + expect(result.at(3).get("direction.in")).toBe(3); + expect(result.at(4).get("direction.in")).toBe(4.0); + // filled + expect(result.at(5).get("direction.in")).toBe(5); + + expect(result.at(0).get("direction.out")).toBeNull(); + expect(result.at(1).get("direction.out")).toBeNull(); + expect(result.at(2).get("direction.out")).toBeNull(); + expect(result.at(3).get("direction.out")).toBe(8); + expect(result.at(4).get("direction.out")).toBe(10); + // filled + expect(result.at(5).get("direction.out")).toBe(12); +}); it("can do streaming fill (test_linear_stream)", done => { const events = [ diff --git a/src/pond/lib/__tests__/timeseries.perform.test.js b/src/pond/lib/__tests__/timeseries.perform.test.js deleted file mode 100644 index 5ee0aab..0000000 --- a/src/pond/lib/__tests__/timeseries.perform.test.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2015-2017, The Regents of the University of California, - * through Lawrence Berkeley National Laboratory (subject to receipt - * of any required approvals from the U.S. Dept. of Energy). - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -/* eslint-disable */ - -import _ from "underscore"; -import TimeSeries from "../timeseries"; -import { sum } from "../base/functions"; - -import data from "./interfaces.json"; - -it("can take 80 interfaces and sum them together in less than 2 sec", () => { - const interfaceListData = data.data.networkEntity.interfaces; - const interfaces = interfaceListData - .map(iface => JSON.parse(iface.traffic)) - .map(traffic => new TimeSeries(traffic)); - - const list = []; - for (let i = 0; i < 10; i++) { - interfaces.forEach(timeseries => list.push(timeseries)); - } - - const begin = new Date().getTime(); - const result = TimeSeries.timeSeriesListReduce({ - name: "sum", - seriesList: list, - reducer: sum(), - fieldSpec: ["in", "out"] - }); - const end = new Date().getTime(); - //console.log("Time", (end - begin)/1000, "sec"); - // Disabled this test because there's no way to get this consistent on travis - //expect(result.avg("in")).toEqual(115466129590.72786); - //expect(result.avg("out")).toEqual(120824846698.03258); - //expect((end - begin) / 1000).toBeLessThan(2.0); -}); - -it("can take 80 interfaces and sum them together in less than 2 sec", () => { - const interfaceListData = data.data.networkEntity.interfaces; - const interfaces = interfaceListData - .map(iface => JSON.parse(iface.traffic)) - .map(traffic => new TimeSeries(traffic)); - - // Split an interface into 24 1 hour timeseries - const tileMap = interfaces[0].collectByFixedWindow({ windowSize: "1h" }); - const tileList = _.map(tileMap, tile => tile); - - // Now merge them - const begin = new Date().getTime(); - const trafficSeries = TimeSeries.timeSeriesListMerge({ - name: "traffic", - seriesList: tileList - }); - const end = new Date().getTime(); - //console.log("Time", (end - begin), "msec", trafficSeries.size()); - // Disabled this test because there's no way to get this consistent on travis - //expect(end - begin).toBeLessThan(120); -}); diff --git a/src/pond/lib/timeseries.js b/src/pond/lib/timeseries.js index aa73fa3..623e6cf 100644 --- a/src/pond/lib/timeseries.js +++ b/src/pond/lib/timeseries.js @@ -232,18 +232,20 @@ class TimeSeries { return; } + const columnList = this.columns(); + let columns; if (e instanceof TimeEvent) { - columns = ["time", ...this.columns()]; + columns = ["time", ...columnList]; } else if (e instanceof TimeRangeEvent) { - columns = ["timerange", ...this.columns()]; + columns = ["timerange", ...columnList]; } else if (e instanceof IndexedEvent) { - columns = ["index", ...this.columns()]; + columns = ["index", ...columnList]; } const points = []; for (const e of this._collection.events()) { - points.push(e.toPoint(this.columns())); + points.push(e.toPoint(columnList)); } return _.extend(this._data.toJSON(), { columns, points }); @@ -386,7 +388,9 @@ class TimeSeries { } for (; i < size; i++) { - const ts = this.at(i).timestamp().getTime(); + const ts = this.at(i) + .timestamp() + .getTime(); if (ts > tms) { return i - 1 >= 0 ? i - 1 : 0; } else if (ts === tms) { @@ -796,7 +800,9 @@ class TimeSeries { * @return {TimeSeries} A TimeSeries containing the remapped events */ map(op) { - const collections = this.pipeline().map(op).toKeyedCollections(); + const collections = this.pipeline() + .map(op) + .toKeyedCollections(); return this.setCollection(collections["all"], true); } @@ -820,7 +826,9 @@ class TimeSeries { */ select(options) { const { fieldSpec } = options; - const collections = this.pipeline().select(fieldSpec).toKeyedCollections(); + const collections = this.pipeline() + .select(fieldSpec) + .toKeyedCollections(); return this.setCollection(collections["all"], true); } @@ -1016,7 +1024,9 @@ class TimeSeries { */ rate(options = {}) { const { fieldSpec = "value", allowNegative = true } = options; - const collection = this.pipeline().rate(fieldSpec, allowNegative).toKeyedCollections(); + const collection = this.pipeline() + .rate(fieldSpec, allowNegative) + .toKeyedCollections(); return this.setCollection(collection["all"], true); } @@ -1038,7 +1048,7 @@ class TimeSeries { * ``` * will aggregate both "in" and "out" using the average aggregation * function and return the result as in_avg and out_avg. - * + * * Note that each aggregation function, such as `avg()` also can take a * filter function to apply before the aggregation. A set of filter functions * exists to do common data cleanup such as removing bad values. For example: @@ -1245,19 +1255,22 @@ class TimeSeries { * @return {map} The result is a mapping from window index to a Collection. */ collectByFixedWindow({ windowSize }) { - return this.pipeline().windowBy(windowSize).emitOn("discard").toKeyedCollections(); + return this.pipeline() + .windowBy(windowSize) + .emitOn("discard") + .toKeyedCollections(); } /* * STATIC */ /** - * Defines the event type contained in this TimeSeries. The default here - * is to use the supplied type (time, timerange or index) to build either - * a TimeEvent, TimeRangeEvent or IndexedEvent. However, you can also - * subclass the TimeSeries and reimplement this to return another event - * type. - */ + * Defines the event type contained in this TimeSeries. The default here + * is to use the supplied type (time, timerange or index) to build either + * a TimeEvent, TimeRangeEvent or IndexedEvent. However, you can also + * subclass the TimeSeries and reimplement this to return another event + * type. + */ static event(eventKey) { switch (eventKey) { case "time": @@ -1272,23 +1285,23 @@ class TimeSeries { } /** - * Static function to compare two TimeSeries to each other. If the TimeSeries - * are of the same instance as each other then equals will return true. - * @param {TimeSeries} series1 - * @param {TimeSeries} series2 - * @return {bool} result - */ + * Static function to compare two TimeSeries to each other. If the TimeSeries + * are of the same instance as each other then equals will return true. + * @param {TimeSeries} series1 + * @param {TimeSeries} series2 + * @return {bool} result + */ static equal(series1, series2) { return series1._data === series2._data && series1._collection === series2._collection; } /** - * Static function to compare two TimeSeries to each other. If the TimeSeries - * are of the same value as each other then equals will return true. - * @param {TimeSeries} series1 - * @param {TimeSeries} series2 - * @return {bool} result - */ + * Static function to compare two TimeSeries to each other. If the TimeSeries + * are of the same value as each other then equals will return true. + * @param {TimeSeries} series1 + * @param {TimeSeries} series2 + * @return {bool} result + */ static is(series1, series2) { return ( Immutable.is(series1._data, series2._data) && diff --git a/yarn.lock b/yarn.lock index 8099993..1883c91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7095 +2,4426 @@ # yarn lockfile v1 -Base64@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" - -abab@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" +"@babel/cli@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.0.tgz#8d10c9acb2acb362d7614a9493e1791c69100d89" + integrity sha512-jECEqAq6Ngf3pOhLSg7od9WKyrIacyh1oNNYtRXNn+ummSHCTXBamGywOAtiae34Vk7zKuQNnLvo2BKTMCoV4A== + dependencies: + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0", "@babel/core@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" + integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helpers" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.7.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -abbrev@1, abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" +"@babel/generator@^7.4.0", "@babel/generator@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.2.tgz#2f4852d04131a5e17ea4f6645488b5da66ebf3af" + integrity sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ== + dependencies: + "@babel/types" "^7.7.2" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" -accepts@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e" + integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg== dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" + "@babel/types" "^7.7.0" -acorn-globals@^1.0.4: - version "1.0.9" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz#32dd9551d6ed3a5fc2edc50d6912852aa18274d9" + integrity sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw== dependencies: - acorn "^2.1.0" + "@babel/helper-explode-assignable-expression" "^7.7.0" + "@babel/types" "^7.7.0" -acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" +"@babel/helper-call-delegate@^7.4.4": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz#df8942452c2c1a217335ca7e393b9afc67f668dc" + integrity sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw== dependencies: - acorn "^3.0.4" + "@babel/helper-hoist-variables" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" -acorn@^2.1.0, acorn@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" +"@babel/helper-create-regexp-features-plugin@^7.7.0": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz#6f20443778c8fce2af2ff4206284afc0ced65db6" + integrity sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ== + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529" + integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA== + dependencies: + "@babel/helper-function-name" "^7.7.0" + "@babel/types" "^7.7.0" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz#db2a6705555ae1f9f33b4b8212a546bc7f9dc3ef" + integrity sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg== + dependencies: + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-function-name@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3" + integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q== + dependencies: + "@babel/helper-get-function-arity" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" -acorn@^3.0.0, acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +"@babel/helper-get-function-arity@^7.0.0", "@babel/helper-get-function-arity@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d" + integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-hoist-variables@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81" + integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-member-expression-to-functions@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a" + integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d" + integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786" + integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ== + dependencies: + "@babel/helper-module-imports" "^7.7.0" + "@babel/helper-simple-access" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365" + integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7" + integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.0" + "@babel/helper-wrap-function" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-replace-supers@^7.5.5", "@babel/helper-replace-supers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512" + integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.0" + "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-simple-access@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d" + integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helper-split-export-declaration@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300" + integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA== + dependencies: + "@babel/types" "^7.7.0" + +"@babel/helper-wrap-function@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74" + integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w== + dependencies: + "@babel/helper-function-name" "^7.7.0" + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/helpers@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.0.tgz#359bb5ac3b4726f7c1fde0ec75f64b3f4275d60b" + integrity sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g== + dependencies: + "@babel/template" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" -ajv-keywords@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c" +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.2.tgz#ea8334dc77416bfd9473eb470fd00d8245b3943b" + integrity sha512-DDaR5e0g4ZTb9aP7cpSZLkACEBdoLGwJDWgHtBhrGX7Q1RjhdoMOfexICj5cqTAtpowjGQWfcvfnQG7G2kAB5w== -ajv@^4.7.0: - version "4.10.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.3.tgz#3e4fea9675b157de7888b80dd0ed735b83f28e11" +"@babel/plugin-proposal-async-generator-functions@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971" + integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" +"@babel/plugin-proposal-dynamic-import@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f" + integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" -alter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" +"@babel/plugin-proposal-export-default-from@^7.5.2": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz#2c0ac2dcc36e3b2443fead2c3c5fc796fb1b5145" + integrity sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg== dependencies: - stable "~0.1.3" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.2.0" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escape-sequences@^2.2.1, ansi-escape-sequences@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz#174c78d6f8b7de75f8957ae81c7f72210c701635" +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== dependencies: - array-back "^1.0.2" - collect-all "~0.2.1" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" -ansi-escape-sequences@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz#1c18394b6af9b76ff9a63509fa497669fd2ce53e" +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== dependencies: - array-back "^1.0.3" - -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - -anybar-webpack@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/anybar-webpack/-/anybar-webpack-1.2.0.tgz#28fdebdaede7614e352fa159bc031c0dd91ee91d" +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== dependencies: - node-notifier "^4.3.1" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" +"@babel/plugin-proposal-unicode-property-regex@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d" + integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw== dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" + "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" -app-usage-stats@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/app-usage-stats/-/app-usage-stats-0.4.0.tgz#f98dd1c1adfc665d22345111a2583db36f824ed6" +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== dependencies: - array-back "^1.0.3" - core-js "^2.4.1" - feature-detect-es6 "^1.3.1" - home-path "^1.0.3" - test-value "^2.1.0" - usage-stats "^0.8.2" - -append-transform@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.3.0.tgz#d6933ce4a85f09445d9ccc4cc119051b7381a813" - -aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + "@babel/helper-plugin-utils" "^7.0.0" -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" +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + "@babel/helper-plugin-utils" "^7.0.0" -argparse@^1.0.2, argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" +"@babel/plugin-syntax-export-default-from@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820" + integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw== dependencies: - sprintf-js "~1.0.2" + "@babel/helper-plugin-utils" "^7.0.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== dependencies: - arr-flatten "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-back@^1.0.2, array-back@^1.0.3, array-back@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== dependencies: - typical "^2.6.0" + "@babel/helper-plugin-utils" "^7.0.0" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" +"@babel/plugin-syntax-top-level-await@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d" + integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-tools@^1.0.6, array-tools@^1.1.0, array-tools@^1.1.4, array-tools@^1.8.4: - version "1.8.6" - resolved "https://registry.yarnpkg.com/array-tools/-/array-tools-1.8.6.tgz#145771f7f9c94e98cc5ea4196a99b8323aee18ae" - dependencies: - object-tools "^1.6.1" - typical "^2.1" - -array-tools@^2: - version "2.0.9" - resolved "https://registry.yarnpkg.com/array-tools/-/array-tools-2.0.9.tgz#5a511de7a41be0eec9ffdcd4912d0af9f0caca35" - dependencies: - ansi-escape-sequences "^2.2.2" - array-back "^1.0.2" - collect-json "^1.0.7" - filter-where "^1.0.1" - object-get "^2.0.0" - reduce-extract "^1.0.0" - reduce-flatten "^1.0.0" - reduce-unique "^1.0.0" - reduce-without "^1.0.0" - sort-array "^1.0.0" - test-value "^1.0.1" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" +"@babel/plugin-transform-async-to-generator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492" + integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw== dependencies: - array-uniq "^1.0.1" + "@babel/helper-module-imports" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.0" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +"@babel/plugin-transform-block-scoping@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" + integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +"@babel/plugin-transform-classes@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a" + integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.0" + "@babel/helper-define-map" "^7.7.0" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-optimise-call-expression" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + globals "^11.1.0" -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +"@babel/plugin-transform-dotall-regex@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b" + integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== dependencies: - util "0.10.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -ast-traverse@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6" +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -ast-types@0.8.12: - version "0.8.12" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" +"@babel/plugin-transform-function-name@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a" + integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA== + dependencies: + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" -ast-types@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -ast-types@0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.2.tgz#2cc19979d15c655108bf565323b8e7ee38751f6b" +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -async@1.x, async@^1.3.0, async@^1.4.0, async@^1.4.2, async@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +"@babel/plugin-transform-modules-commonjs@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3" + integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg== + dependencies: + "@babel/helper-module-transforms" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.7.0" + babel-plugin-dynamic-import-node "^2.3.0" -async@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" +"@babel/plugin-transform-modules-systemjs@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417" + integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg== + dependencies: + "@babel/helper-hoist-variables" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -async@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" +"@babel/plugin-transform-modules-umd@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966" + integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA== dependencies: - lodash "^4.14.0" + "@babel/helper-module-transforms" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf" + integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -autoprefixer@6.4.0, autoprefixer@^6.3.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.4.0.tgz#4db60af585a303616bb896b50b30bbdd5858d2e3" +"@babel/plugin-transform-object-super@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" + integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== dependencies: - browserslist "~1.3.5" - caniuse-db "^1.0.30000515" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.1.1" - postcss-value-parser "^3.2.3" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" -avsc@^4.1.11: - version "4.1.11" - resolved "https://registry.yarnpkg.com/avsc/-/avsc-4.1.11.tgz#d251352a283b7ec0e29413127c99eafea39b6f78" +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc" + integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-runtime@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.2.tgz#2669f67c1fae0ae8d8bf696e4263ad52cb98b6f8" + integrity sha512-cqULw/QB4yl73cS5Y0TZlQSjDvNkzDbu0FurTZyHlJpWE5T3PCMdnyV+xXoH1opr1ldyHODe3QAX3OMAii5NxA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3" + integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/polyfill@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.7.0.tgz#e1066e251e17606ec7908b05617f9b7f8180d8f3" + integrity sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.2" + +"@babel/preset-env@^7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" + integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== + dependencies: + "@babel/helper-module-imports" "^7.7.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.0" + "@babel/plugin-proposal-dynamic-import" "^7.7.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-top-level-await" "^7.7.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.7.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.6.3" + "@babel/plugin-transform-classes" "^7.7.0" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.7.0" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.7.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.7.0" + "@babel/plugin-transform-modules-systemjs" "^7.7.0" + "@babel/plugin-transform-modules-umd" "^7.7.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.5.5" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.7.0" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.7.0" + "@babel/types" "^7.7.1" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/template@^7.4.0", "@babel/template@^7.7.0": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0" + integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/types" "^7.7.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.2.tgz#ef0a65e07a2f3c550967366b3d9b62a2dcbeae09" + integrity sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.7.2" + "@babel/helper-function-name" "^7.7.0" + "@babel/helper-split-export-declaration" "^7.7.0" + "@babel/parser" "^7.7.2" + "@babel/types" "^7.7.2" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.0", "@babel/types@^7.7.1", "@babel/types@^7.7.2": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.2.tgz#550b82e5571dcd174af576e23f0adba7ffc683f7" + integrity sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@types/babel__core@^7.1.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" + integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" + integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== -babel-cli@^6.5.1: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186" +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== dependencies: - babel-core "^6.18.0" - babel-polyfill "^6.16.0" - babel-register "^6.18.0" - babel-runtime "^6.9.0" - commander "^2.8.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.0.0" - glob "^5.0.5" - lodash "^4.2.0" - output-file-sync "^1.1.0" - path-is-absolute "^1.0.0" - slash "^1.0.0" - source-map "^0.5.0" - v8flags "^2.0.10" - optionalDependencies: - chokidar "^1.0.0" + "@types/istanbul-lib-coverage" "*" -babel-code-frame@^6.11.0, babel-code-frame@^6.20.0, babel-code-frame@^6.8.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^2.0.0" - -babel-core@6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.14.0.tgz#c9e13ed4e2f97329215496fd9fb48f2b3bcb9b42" - dependencies: - babel-code-frame "^6.8.0" - babel-generator "^6.14.0" - babel-helpers "^6.8.0" - babel-messages "^6.8.0" - babel-register "^6.14.0" - babel-runtime "^6.9.1" - babel-template "^6.14.0" - babel-traverse "^6.14.0" - babel-types "^6.14.0" - babylon "^6.9.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.4.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-exists "^1.0.0" - path-is-absolute "^1.0.0" - private "^0.1.6" - shebang-regex "^1.0.0" - slash "^1.0.0" - source-map "^0.5.0" + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" -babel-core@^5.5.8: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" - dependencies: - babel-plugin-constant-folding "^1.0.1" - babel-plugin-dead-code-elimination "^1.0.2" - babel-plugin-eval "^1.0.1" - babel-plugin-inline-environment-variables "^1.0.1" - babel-plugin-jscript "^1.0.4" - babel-plugin-member-expression-literals "^1.0.1" - babel-plugin-property-literals "^1.0.1" - babel-plugin-proto-to-assign "^1.0.3" - babel-plugin-react-constant-elements "^1.0.3" - babel-plugin-react-display-name "^1.0.3" - babel-plugin-remove-console "^1.0.1" - babel-plugin-remove-debugger "^1.0.1" - babel-plugin-runtime "^1.0.7" - babel-plugin-undeclared-variables-check "^1.0.2" - babel-plugin-undefined-to-void "^1.1.6" - babylon "^5.8.38" - bluebird "^2.9.33" - chalk "^1.0.0" - convert-source-map "^1.1.0" - core-js "^1.0.0" - debug "^2.1.1" - detect-indent "^3.0.0" - esutils "^2.0.0" - fs-readdir-recursive "^0.1.0" - globals "^6.4.0" - home-or-tmp "^1.0.0" - is-integer "^1.0.4" - js-tokens "1.0.1" - json5 "^0.4.0" - lodash "^3.10.0" - minimatch "^2.0.3" - output-file-sync "^1.1.0" - path-exists "^1.0.0" - path-is-absolute "^1.0.0" - private "^0.1.6" - regenerator "0.8.40" - regexpu "^1.3.0" - repeating "^1.1.2" - resolve "^1.1.6" - shebang-regex "^1.0.0" - slash "^1.0.0" - source-map "^0.5.0" - source-map-support "^0.2.10" - to-fast-properties "^1.0.0" - trim-right "^1.0.0" - try-resolve "^1.0.0" - -babel-core@^6.0.0, babel-core@^6.11.4, babel-core@^6.14.0, babel-core@^6.18.0, babel-core@^6.5.2: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" - dependencies: - babel-code-frame "^6.20.0" - babel-generator "^6.21.0" - babel-helpers "^6.16.0" - babel-messages "^6.8.0" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.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" - slash "^1.0.0" - source-map "^0.5.0" +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -babel-eslint@6.1.2, babel-eslint@^6.0.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-6.1.2.tgz#5293419fe3672d66598d327da9694567ba6a5f2f" - dependencies: - babel-traverse "^6.0.20" - babel-types "^6.0.19" - babylon "^6.0.18" - lodash.assign "^4.0.0" - lodash.pickby "^4.0.0" - -babel-generator@^6.14.0, babel-generator@^6.18.0, babel-generator@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494" - dependencies: - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" +"@types/yargs-parser@*": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== -babel-helper-bindify-decorators@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5" +"@types/yargs@^13.0.0": + version "13.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" + integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" - dependencies: - babel-helper-explode-assignable-expression "^6.18.0" - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-builder-react-jsx@^6.8.0: - version "6.21.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.21.1.tgz#c4a24208655be9dc1cccf14d366da176f20645e4" - dependencies: - babel-runtime "^6.9.0" - babel-types "^6.21.0" - esutils "^2.0.0" - lodash "^4.2.0" - -babel-helper-call-delegate@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" - dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" - dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.9.0" - babel-types "^6.18.0" - lodash "^4.2.0" - -babel-helper-explode-assignable-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" - dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-explode-class@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb" - dependencies: - babel-helper-bindify-decorators "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" - dependencies: - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helper-get-function-arity@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-hoist-variables@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-optimise-call-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-helper-regex@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" - dependencies: - babel-runtime "^6.9.0" - babel-types "^6.18.0" - lodash "^4.2.0" - -babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: - version "6.20.3" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.20.3.tgz#9dd3b396f13e35ef63e538098500adc24c63c4e7" - dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.20.0" - babel-types "^6.20.0" - -babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" - dependencies: - babel-helper-optimise-call-expression "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - -babel-helpers@^6.16.0, babel-helpers@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" - dependencies: - babel-runtime "^6.0.0" - babel-template "^6.16.0" - -babel-jest@15.0.0, babel-jest@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-15.0.0.tgz#6a9e2e3999f241383db9ab1e2ef6704401d74242" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^2.0.0" - babel-preset-jest "^15.0.0" - -babel-loader@6.2.5: - version "6.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.5.tgz#576d548520689a5e6b70c65b85d76af1ffedd005" - dependencies: - loader-utils "^0.2.11" - mkdirp "^0.5.1" - object-assign "^4.0.1" + "@types/yargs-parser" "*" -babel-messages@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" - dependencies: - babel-runtime "^6.0.0" +abab@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.2.tgz#a2fba1b122c69a85caa02d10f9270c7219709a9d" + integrity sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg== -babel-plugin-check-es2015-constants@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" - dependencies: - babel-runtime "^6.0.0" +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -babel-plugin-constant-folding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e" +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" -babel-plugin-dead-code-elimination@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -babel-plugin-eval@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da" +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -babel-plugin-inline-environment-variables@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe" +acorn@^6.0.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -babel-plugin-istanbul@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz#266b304b9109607d60748474394676982f660df4" +ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: - find-up "^1.1.2" - istanbul-lib-instrument "^1.1.4" - object-assign "^4.1.0" - test-exclude "^2.1.1" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -babel-plugin-jest-hoist@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-15.0.0.tgz#7b2fdbd0cd12fc36a84d3f5ff001ec504262bb59" +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -babel-plugin-jscript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -babel-plugin-member-expression-literals@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -babel-plugin-property-literals@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336" +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -babel-plugin-proto-to-assign@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - lodash "^3.9.3" + color-convert "^1.9.0" -babel-plugin-react-constant-elements@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" -babel-plugin-react-display-name@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -babel-plugin-remove-console@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7" +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" -babel-plugin-remove-debugger@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -babel-plugin-runtime@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf" +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" -babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -babel-plugin-syntax-do-expressions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -babel-plugin-syntax-function-bind@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-plugin-syntax-trailing-function-commas@^6.3.13, babel-plugin-syntax-trailing-function-commas@^6.8.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.20.0.tgz#442835e19179f45b87e92d477d70b9f1f18b5c4f" - -babel-plugin-transform-async-generator-functions@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" - dependencies: - babel-helper-remap-async-to-generator "^6.16.2" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.0.0" - -babel-plugin-transform-async-to-generator@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" - dependencies: - babel-helper-remap-async-to-generator "^6.16.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -babel-plugin-transform-class-constructor-call@^6.3.13: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz#80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== dependencies: - babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" + object.assign "^4.1.0" -babel-plugin-transform-class-properties@6.11.5: - version "6.11.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.11.5.tgz#429c7a4e7d8ac500448eb14ec502604bc568c91c" +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== dependencies: - babel-helper-function-name "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" -babel-plugin-transform-class-properties@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== dependencies: - babel-helper-function-name "^6.18.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" - babel-template "^6.15.0" + "@types/babel__traverse" "^7.0.6" -babel-plugin-transform-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== dependencies: - babel-helper-define-map "^6.8.0" - babel-helper-explode-class "^6.8.0" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-types "^6.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" -babel-plugin-transform-do-expressions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" - dependencies: - babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.0.0" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" -babel-plugin-transform-es2015-arrow-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: - babel-runtime "^6.0.0" + tweetnacl "^0.14.3" -babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" - dependencies: - babel-runtime "^6.0.0" +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -babel-plugin-transform-es2015-block-scoping@^6.14.0, babel-plugin-transform-es2015-block-scoping@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.21.0.tgz#e840687f922e70fb2c42bb13501838c174a115ed" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: - babel-runtime "^6.20.0" - babel-template "^6.15.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - lodash "^4.2.0" + balanced-match "^1.0.0" + concat-map "0.0.1" -babel-plugin-transform-es2015-classes@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" - dependencies: - babel-helper-define-map "^6.18.0" - babel-helper-function-name "^6.18.0" - babel-helper-optimise-call-expression "^6.18.0" - babel-helper-replace-supers "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-template "^6.14.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" -babel-plugin-transform-es2015-computed-properties@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" - dependencies: - babel-helper-define-map "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== -babel-plugin-transform-es2015-destructuring@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533" +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: - babel-runtime "^6.9.0" + resolve "1.1.7" -babel-plugin-transform-es2015-duplicate-keys@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" +browserslist@^4.6.0, browserslist@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" + integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== dependencies: - babel-runtime "^6.0.0" - babel-types "^6.8.0" + caniuse-lite "^1.0.30001004" + electron-to-chromium "^1.3.295" + node-releases "^1.1.38" -babel-plugin-transform-es2015-for-of@^6.18.0, babel-plugin-transform-es2015-for-of@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" +bser@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: - babel-runtime "^6.0.0" + node-int64 "^0.4.0" -babel-plugin-transform-es2015-function-name@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" - dependencies: - babel-helper-function-name "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.9.0" +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -babel-plugin-transform-es2015-literals@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" - dependencies: - babel-runtime "^6.0.0" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -babel-plugin-transform-es2015-modules-amd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -babel-plugin-transform-es2015-modules-commonjs@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" - dependencies: - babel-plugin-transform-strict-mode "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-types "^6.18.0" +caniuse-lite@^1.0.30001004: + version "1.0.30001008" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001008.tgz#b8841b1df78a9f5ed9702537ef592f1f8772c0d9" + integrity sha512-b8DJyb+VVXZGRgJUa30cbk8gKHZ3LOZTBLaUEEVr2P4xpmFigOCc62CO4uzquW641Ouq1Rm9N+rWLWdSYDaDIw== -babel-plugin-transform-es2015-modules-systemjs@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6" +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.11.6" - babel-template "^6.14.0" + rsvp "^4.8.4" -babel-plugin-transform-es2015-modules-umd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -babel-plugin-transform-es2015-object-super@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - babel-helper-replace-supers "^6.8.0" - babel-runtime "^6.0.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -babel-plugin-transform-es2015-parameters@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.21.0.tgz#46a655e6864ef984091448cdf024d87b60b2a7d8" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: - babel-helper-call-delegate "^6.18.0" - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.9.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" -babel-plugin-transform-es2015-shorthand-properties@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== -babel-plugin-transform-es2015-spread@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" - dependencies: - babel-runtime "^6.0.0" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -babel-plugin-transform-es2015-sticky-regex@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" - babel-types "^6.8.0" + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" -babel-plugin-transform-es2015-template-literals@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - babel-runtime "^6.0.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" -babel-plugin-transform-es2015-typeof-symbol@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" - dependencies: - babel-runtime "^6.0.0" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -babel-plugin-transform-es2015-unicode-regex@^6.3.13: - version "6.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" - dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" - regexpu-core "^2.0.0" +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -babel-plugin-transform-exponentiation-operator@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.0.0" + map-visit "^1.0.0" + object-visit "^1.0.0" -babel-plugin-transform-export-extensions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.0.0" + color-name "1.1.3" -babel-plugin-transform-flow-strip-types@^6.3.13: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.21.0.tgz#2eea3f8b5bb234339b47283feac155cfb237b948" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.0.0" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -babel-plugin-transform-function-bind@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: - babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.0.0" + delayed-stream "~1.0.0" -babel-plugin-transform-object-rest-spread@6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.8.0.tgz#03d1308e257a9d8e1a815ae1fd3db21bdebf08d9" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.0.0" +commander@^2.8.1, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -babel-plugin-transform-object-rest-spread@^6.16.0: - version "6.20.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.20.2.tgz#e816c55bba77b14c16365d87e2ae48c8fd18fc2e" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.20.0" +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -babel-plugin-transform-react-constant-elements@6.9.1: - version "6.9.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.9.1.tgz#125b86d96cb322e2139b607fd749ad5fbb17f005" - dependencies: - babel-runtime "^6.9.1" +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -babel-plugin-transform-react-display-name@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" +concat-stream@^1.4.7: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: - babel-runtime "^6.0.0" + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" -babel-plugin-transform-react-jsx-self@^6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.9.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" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -babel-plugin-transform-react-jsx-source@^6.3.13: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.9.0" + safe-buffer "~5.1.1" -babel-plugin-transform-react-jsx@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" - dependencies: - babel-helper-builder-react-jsx "^6.8.0" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.0.0" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -babel-plugin-transform-regenerator@6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.14.0.tgz#119119b20c8b4283f6c77f0170d404c3c654bec8" +core-js-compat@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.0.tgz#2a47c51d3dc026d290018cacd987495f68a47c75" + integrity sha512-pgQUcgT2+v9/yxHgMynYjNj7nmxLRXv3UC39rjCjDwpe63ev2rioQTju1PKLYUBbPCQQvZNWvQC8tBJd65q11g== dependencies: - babel-core "^6.14.0" - babel-plugin-syntax-async-functions "^6.8.0" - babel-plugin-transform-es2015-block-scoping "^6.14.0" - babel-plugin-transform-es2015-for-of "^6.8.0" - babel-runtime "^6.9.0" - babel-traverse "^6.14.0" - babel-types "^6.14.0" - babylon "^6.9.0" - private "~0.1.5" + browserslist "^4.7.2" + semver "^6.3.0" -babel-plugin-transform-regenerator@^6.16.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.21.0.tgz#75d0c7e7f84f379358f508451c68a2c5fa5a9703" - dependencies: - regenerator-transform "0.9.8" +core-js@^2.6.5: + version "2.6.10" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" + integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== -babel-plugin-transform-runtime@6.15.0, babel-plugin-transform-runtime@^6.7.5: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" - dependencies: - babel-runtime "^6.9.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" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -babel-plugin-transform-strict-mode@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" - -babel-plugin-undeclared-variables-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee" + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: - leven "^1.0.2" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" -babel-plugin-undefined-to-void@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" - -babel-polyfill@^6.13.0, babel-polyfill@^6.16.0, babel-polyfill@^6.9.1: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7" - dependencies: - babel-runtime "^6.20.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-es2015@^6.14.0, babel-preset-es2015@^6.6.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" - dependencies: - babel-plugin-check-es2015-constants "^6.3.13" - babel-plugin-transform-es2015-arrow-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoping "^6.18.0" - babel-plugin-transform-es2015-classes "^6.18.0" - babel-plugin-transform-es2015-computed-properties "^6.3.13" - babel-plugin-transform-es2015-destructuring "^6.18.0" - babel-plugin-transform-es2015-duplicate-keys "^6.6.0" - babel-plugin-transform-es2015-for-of "^6.18.0" - babel-plugin-transform-es2015-function-name "^6.9.0" - babel-plugin-transform-es2015-literals "^6.3.13" - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-plugin-transform-es2015-modules-systemjs "^6.18.0" - babel-plugin-transform-es2015-modules-umd "^6.18.0" - babel-plugin-transform-es2015-object-super "^6.3.13" - babel-plugin-transform-es2015-parameters "^6.18.0" - babel-plugin-transform-es2015-shorthand-properties "^6.18.0" - babel-plugin-transform-es2015-spread "^6.3.13" - babel-plugin-transform-es2015-sticky-regex "^6.3.13" - babel-plugin-transform-es2015-template-literals "^6.6.0" - babel-plugin-transform-es2015-typeof-symbol "^6.18.0" - babel-plugin-transform-es2015-unicode-regex "^6.3.13" - babel-plugin-transform-regenerator "^6.16.0" - -babel-preset-es2016@^6.11.3: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.16.0.tgz#c7daf5feedeee99c867813bdf0d573d94ca12812" - dependencies: - babel-plugin-transform-exponentiation-operator "^6.3.13" - -babel-preset-es2017@^6.14.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.16.0.tgz#536c6287778a758948ddd092b466b6ef50b786fa" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.8.0" - babel-plugin-transform-async-to-generator "^6.16.0" - -babel-preset-jest@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-15.0.0.tgz#f23988f1f918673ff9b470fdfd60fcc19bc618f5" - dependencies: - babel-plugin-jest-hoist "^15.0.0" - -babel-preset-latest@6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.14.0.tgz#1684ace816c998ce72d20e5c5f710329d40f9246" - dependencies: - babel-preset-es2015 "^6.14.0" - babel-preset-es2016 "^6.11.3" - babel-preset-es2017 "^6.14.0" - -babel-preset-react@6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.11.1.tgz#98ac2bd3c1b76f3062ae082580eade154a19b590" - dependencies: - babel-plugin-syntax-flow "^6.3.13" - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-flow-strip-types "^6.3.13" - babel-plugin-transform-react-display-name "^6.3.13" - babel-plugin-transform-react-jsx "^6.3.13" - babel-plugin-transform-react-jsx-self "^6.11.0" - babel-plugin-transform-react-jsx-source "^6.3.13" - -babel-preset-stage-0@^6.5.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" - dependencies: - babel-plugin-transform-do-expressions "^6.3.13" - babel-plugin-transform-function-bind "^6.3.13" - babel-preset-stage-1 "^6.16.0" - -babel-preset-stage-1@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" - dependencies: - babel-plugin-transform-class-constructor-call "^6.3.13" - babel-plugin-transform-export-extensions "^6.3.13" - babel-preset-stage-2 "^6.16.0" - -babel-preset-stage-2@^6.16.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-decorators "^6.13.0" - babel-preset-stage-3 "^6.17.0" - -babel-preset-stage-3@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.3.13" - babel-plugin-transform-async-generator-functions "^6.17.0" - babel-plugin-transform-async-to-generator "^6.16.0" - babel-plugin-transform-exponentiation-operator "^6.3.13" - babel-plugin-transform-object-rest-spread "^6.16.0" - -babel-register@^6.14.0, babel-register@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" - dependencies: - babel-core "^6.18.0" - babel-runtime "^6.11.6" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -babel-runtime@6.11.6: - version "6.11.6" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.9.5" + cssom "0.3.x" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.5.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" + assert-plus "^1.0.0" -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: - babel-runtime "^6.9.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" - babylon "^6.11.0" - lodash "^4.2.0" + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" -babel-traverse@^6.0.20, babel-traverse@^6.14.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad" +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: - babel-code-frame "^6.20.0" - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" - babylon "^6.11.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" + ms "2.0.0" -babel-types@^6.0.19, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.8.0, babel-types@^6.9.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2" +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: - babel-runtime "^6.20.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^5.8.38: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" - -babylon@^6.0.18, babylon@^6.11.0, babylon@^6.13.0, babylon@^6.9.0: - version "6.14.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" + ms "^2.1.1" -balanced-match@^0.4.1, balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -base62@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.1.2.tgz#22ced6a49913565bc0b8d9a11563a465c084124c" +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" -base64-js@^1.0.2: +decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" - dependencies: - tweetnacl "^0.14.3" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -big.js@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: - readable-stream "~2.0.5" + is-descriptor "^0.1.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: - inherits "~2.0.0" + is-descriptor "^1.0.0" -bluebird@^2.9.33: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" -bluebird@^3.4.1, bluebird@~3.4.6: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -boolbase@~1.0.0: +delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -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" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" + webidl-conversions "^4.0.2" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" + jsbn "~0.1.0" + safer-buffer "^2.1.0" -breakable@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" +electron-to-chromium@^1.3.295: + version "1.3.305" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.305.tgz#64f38c2986277b15c7b2c81954171ed22bee249b" + integrity sha512-jBEhRZ3eeJWf3eAnGYB1vDy09uBQpZWshC5fxiiIRofA9L3vkpa3SxsXleVS2MvuYir15oTVxzWPsOwj7KBzUw== -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== -browserify-zlib@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - pako "~0.2.0" + once "^1.4.0" -browserslist@~1.3.5: - version "1.3.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.3.6.tgz#952ff48d56463d3b538f85ef2f8eaddfd284b133" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: - caniuse-db "^1.0.30000525" + is-arrayish "^0.2.1" -bser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" +es-abstract@^1.5.1: + version "1.16.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" + integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: - node-int64 "^0.4.0" + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +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" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -buffer@^4.9.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" +escodegen@^1.9.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -bytes@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -cache-point@~0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/cache-point/-/cache-point-0.3.4.tgz#152db502c6bb23b5aa3f663e230d5de8ec4e4f3f" - dependencies: - array-back "^1.0.3" - core-js "^2.4.1" - feature-detect-es6 "^1.3.1" - fs-then-native "^1.0.2" - mkdirp "~0.5.1" +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" +exec-sh@^0.3.2: + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -camel-case@^1.1.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-1.2.2.tgz#1aca7c4d195359a2ce9955793433c6e5542511f2" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: - sentence-case "^1.1.1" - upper-case "^1.1.1" + is-extendable "^0.1.0" -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" + assign-symbols "^1.0.0" + is-extendable "^1.0.1" -camelcase@^1.0.2, camelcase@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -caniuse-db@^1.0.30000515, caniuse-db@^1.0.30000525: - version "1.0.30000604" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000604.tgz#bc139270a777564d19c0aadcd832b491d093bda5" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= -case-sensitive-paths-webpack-plugin@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.3.tgz#7ec42bf899a868a5e38021604049f59fef90e9cb" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -catharsis@~0.8.8: - version "0.8.8" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.8.tgz#693479f43aac549d806bd73e924cd0d944951a06" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= dependencies: - underscore-contrib "~0.3.0" + bser "^2.0.0" -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -change-case@2.3.x: - version "2.3.1" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-2.3.1.tgz#2c4fde3f063bb41d00cd68e0d5a09db61cbe894f" - dependencies: - camel-case "^1.1.1" - constant-case "^1.1.0" - dot-case "^1.1.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - param-case "^1.1.0" - pascal-case "^1.1.0" - path-case "^1.1.0" - sentence-case "^1.1.1" - snake-case "^1.1.0" - swap-case "^1.1.0" - title-case "^1.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - -change-case@3.0.x: +find-up@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.0.tgz#6c9c8e35f8790870a82b6b0745be8c3cbef9b081" - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.2.0" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - -chokidar@^1.0.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" + locate-path "^3.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" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -clap@^1.0.9: - version "1.1.2" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed" - dependencies: - chalk "^1.1.3" +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -clean-css@3.4.x: - version "3.4.23" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.23.tgz#604fbbca24c12feb59b02f00b84f1fb7ded6d001" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: - commander "2.8.x" - source-map "0.4.x" + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" -cli-commands@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cli-commands/-/cli-commands-0.1.0.tgz#c57cacc406bbcf9ee21646607161ed432ef5a05a" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: - ansi-escape-sequences "^3.0.0" - command-line-args "^3.0.1" - command-line-commands "^1.0.4" - command-line-usage "^3.0.5" + map-cache "^0.2.2" -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - restore-cursor "^1.0.1" + minipass "^2.6.0" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== -cli-usage@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - marked "^0.3.6" - marked-terminal "^1.6.2" + nan "^2.12.1" + node-pre-gyp "^0.12.0" -cli-width@^1.0.1: +function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + wide-align "^1.1.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: - q "^1.1.2" + pump "^3.0.0" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -collect-all@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-1.0.2.tgz#39450f1e7aa6086570a006bce93ccf1218a77ea1" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: - stream-connect "^1.0.2" - stream-via "^1.0.3" + assert-plus "^1.0.0" -collect-all@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-0.2.1.tgz#7225fb4585c22d4ffac886f0abaf5abc563a1a6a" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: - stream-connect "^1.0.1" - stream-via "~0.1.0" - typical "^2.3.0" + is-glob "^3.1.0" + path-dirname "^1.0.0" -collect-json@^1.0.1, collect-json@^1.0.7, collect-json@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/collect-json/-/collect-json-1.0.8.tgz#aa2fa52b4d1d9444ce690f07a1e3617ab74bb827" +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: - collect-all "^1.0.2" - stream-connect "^1.0.2" - stream-via "^1.0.3" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -color-convert@^1.3.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339" - dependencies: - color-name "^1.1.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -color-name@^1.0.0, color-name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - dependencies: - color-name "^1.0.0" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" +handlebars@^4.1.2: + version "4.5.1" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.1.tgz#8a01c382c180272260d07f2d1aa3ae745715c7ba" + integrity sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA== dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" + ajv "^6.5.5" + har-schema "^2.0.0" -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -column-layout@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/column-layout/-/column-layout-2.1.4.tgz#ed2857092ccf8338026fe538379d9672d70b3641" - dependencies: - ansi-escape-sequences "^2.2.2" - array-back "^1.0.3" - collect-json "^1.0.8" - command-line-args "^2.1.6" - core-js "^2.4.0" - deep-extend "~0.4.1" - feature-detect-es6 "^1.2.0" - object-tools "^2.0.6" - typical "^2.4.2" - wordwrapjs "^1.2.0" - -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" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -command-line-args@^2.1.4, command-line-args@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-2.1.6.tgz#f197d6eaff34c9085577484b2864375b294f5697" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: - array-back "^1.0.2" - command-line-usage "^2" - core-js "^2.0.1" - feature-detect-es6 "^1.2.0" - find-replace "^1" - typical "^2.3.0" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" -command-line-args@^3.0.0, command-line-args@^3.0.1: - version "3.0.5" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-3.0.5.tgz#5bd4ad45e7983e5c1344918e40280ee2693c5ac0" +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: - array-back "^1.0.4" - feature-detect-es6 "^1.3.1" - find-replace "^1.0.2" - typical "^2.6.0" + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" -command-line-commands@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/command-line-commands/-/command-line-commands-1.0.4.tgz#034f9b167b5188afbdcf6b2efbb150fc8442c32b" - dependencies: - array-back "^1.0.3" - feature-detect-es6 "^1.3.1" +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= -command-line-tool@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.1.0.tgz#91a11ba48ac63a4a687554367980f7c6423c149d" +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: - ansi-escape-sequences "^2.2.1" - array-back "^1.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" -command-line-tool@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.5.2.tgz#f87d6977f56bbdd2d5dfcf946345dd2cd9c6a53a" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - ansi-escape-sequences "^2.2.2" - array-back "^1.0.3" - command-line-args "^3.0.0" - command-line-usage "^3.0.3" - feature-detect-es6 "^1.3.0" - typical "^2.4.2" + function-bind "^1.1.1" -command-line-usage@^2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-2.0.5.tgz#f80c35ca5e8624841923ea3be3b9bfbf4f7be27b" +hosted-git-info@^2.1.4: + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: - ansi-escape-sequences "^2.2.2" - array-back "^1.0.3" - column-layout "^2.1.1" - feature-detect-es6 "^1.2.0" - typical "^2.4.2" - wordwrapjs "^1.2.0" + whatwg-encoding "^1.0.1" -command-line-usage@^3.0.3, command-line-usage@^3.0.5: - version "3.0.8" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-3.0.8.tgz#b6a20978c1b383477f5c11a529428b880bfe0f4d" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: - ansi-escape-sequences "^3.0.0" - array-back "^1.0.3" - feature-detect-es6 "^1.3.1" - table-layout "^0.3.0" - typical "^2.6.0" + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" -commander@2.8.x, commander@~2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: - graceful-readlink ">= 1.0.0" + safer-buffer ">= 2.1.2 < 3" -commander@2.9.x, commander@^2.5.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" +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: - graceful-readlink ">= 1.0.0" + minimatch "^3.0.4" -common-sequence@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-1.0.2.tgz#30e07f3f8f6f7f9b3dee854f20b2d39eee086de8" +immutable-devtools@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/immutable-devtools/-/immutable-devtools-0.0.4.tgz#1e7e87f2c7a4f0533955bc4c2922d124bf9129dd" + integrity sha1-Hn6H8sek8FM5VbxMKSLRJL+RKd0= -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +immutable@^3.6.4: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= -commoner@^0.10.1, commoner@~0.10.3: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - -commonmark-react-renderer@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/commonmark-react-renderer/-/commonmark-react-renderer-2.2.0.tgz#359b3c013f875395545512210ea102c3acb6f000" + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" -commonmark@0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/commonmark/-/commonmark-0.22.0.tgz#c7358a11edd6b0b559bb5a911dcb34ab5cd194e8" - dependencies: - entities "~ 1.1.1" - mdurl "~ 1.0.0" - string.prototype.repeat "^0.2.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -compressible@~2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: - mime-db ">= 1.24.0 < 2" + once "^1.3.0" + wrappy "1" -compression@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" - dependencies: - accepts "~1.3.3" - bytes "2.3.0" - compressible "~2.0.8" - debug "~2.2.0" - on-headers "~1.0.1" - vary "~1.1.0" +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -concat-stream@1.5.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" + loose-envify "^1.0.0" -concat-stream@^1.4.6, concat-stream@^1.4.7: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-master@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/config-master/-/config-master-2.0.4.tgz#e749505c5d3f946f2fad3c76dfe71fca689751dc" - dependencies: - babel-polyfill "^6.13.0" - feature-detect-es6 "^1.3.1" - walk-back "^2.0.1" - -connect-history-api-fallback@1.3.0, connect-history-api-fallback@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -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" - -constant-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-1.1.2.tgz#8ec2ca5ba343e00aa38dbf4e200fd5ac907efd63" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: - snake-case "^1.1.0" - upper-case "^1.1.1" + kind-of "^3.0.2" -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - -constants-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" + kind-of "^6.0.0" -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -content-disposition@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -content-type-parser@^1.0.1: +is-binary-path@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" - -content-type@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" - -convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -core-js@^2.0.1, core-js@^2.4.0, core-js@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -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" - -coveralls@^2.11.12: - version "2.11.15" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" - dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.75.0" - -cross-spawn@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.0.tgz#8254774ab4786b8c5b3cf4dfba66ce563932c252" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.0.1.tgz#a3bbb302db2297cbea3c04edf36941f4613aa399" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -crypto-browserify@~3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189" - dependencies: - pbkdf2-compat "2.0.1" - ripemd160 "0.2.0" - sha.js "2.2.6" - -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-loader@0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.24.0.tgz#7afaafb4c0fb2f90b335ed10a1c77b34d64843fe" - dependencies: - babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.6.0" - cssnano ">=2.6.1 <4" - loader-utils "~0.2.2" - lodash.camelcase "^3.0.1" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - source-list-map "^0.1.4" - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" - -css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -"cssnano@>=2.6.1 <4": - version "3.9.1" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.9.1.tgz#41422bb5390d85a94ad4db03cc1a188bf68744fe" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.2.1.tgz#51fbb5347e50e81e6ed51668a48490ae6fe2afe2" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - -cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3" - -"cssstyle@>= 0.2.36 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: - cssom "0.3.x" + binary-extensions "^1.0.0" -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" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -damerau-levenshtein@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - assert-plus "^1.0.0" + ci-info "^2.0.0" -date-now@^0.1.4: +is-data-descriptor@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -ddata@~0.1.25: - version "0.1.28" - resolved "https://registry.yarnpkg.com/ddata/-/ddata-0.1.28.tgz#53138fafa3f01749ea2451d12b6b6dd9df1d5b1f" - dependencies: - array-back "^1.0.3" - core-js "^2.4.1" - handlebars "^3.0.3" - marked "~0.3.6" - object-get "^2.1.0" - reduce-flatten "^1.0.1" - string-tools "^1.0.0" - test-value "^2.0.0" - -debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" - dependencies: - ms "0.7.2" - -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" - -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, deep-extend@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -defer-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defer-promise/-/defer-promise-1.0.0.tgz#43c94a8a3e1e2699a114ea86a18fa9d5f83bca85" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -defs@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2" - dependencies: - alter "~0.2.0" - ast-traverse "~0.1.1" - breakable "~1.0.0" - esprima-fb "~15001.1001.0-dev-harmony-fb" - simple-fmt "~0.1.0" - simple-is "~0.2.0" - stringmap "~0.2.2" - stringset "~0.2.1" - tryor "~0.1.2" - yargs "~3.27.0" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - repeating "^1.1.0" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: - repeating "^2.0.0" + kind-of "^3.0.2" -detect-port@1.0.0: +is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.0.0.tgz#10d0e0bf0179862c553187273f7a3b45e7a90607" - dependencies: - commander "~2.8.1" - -detective@^4.3.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.3.2.tgz#77697e2e7947ac3fe7c8e26a6d6f115235afa91c" - dependencies: - acorn "^3.1.0" - defined "^1.0.0" - -diff@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -dmd@^1.4.1, dmd@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/dmd/-/dmd-1.4.2.tgz#b1304b98a5700a6bfe5dcf91be657c981700a4bc" - dependencies: - array-back "^1.0.3" - command-line-tool "~0.5.0" - common-sequence "^1.0.2" - ddata "~0.1.25" - file-set "^1.0.0" - handlebars-array "^0.2.0" - handlebars-comparison "^2.0.0" - handlebars-json "^1.0.0" - handlebars-regexp "^1.0.0" - handlebars-string "^2.0.1" - object-tools "^2.0.6" - reduce-unique "^1.0.0" - reduce-without "^1.0.1" - stream-handlebars "~0.1.6" - string-tools "^1.0.0" - walk-back "^2.0.1" - -doctrine@1.2.x: - version "1.2.3" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.2.3.tgz#6aec6bbd62cf89dd498cae70c0ed9f49da873a6a" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" - dependencies: - esutils "^1.1.6" - isarray "0.0.1" - -doctrine@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" - dependencies: - utila "~0.3" - -dom-helpers@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-2.4.0.tgz#9bb4b245f637367b1fa670274272aa28fe06c367" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -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: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: - domelementtype "1" + kind-of "^6.0.0" -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" - 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" +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" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= -dot-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-1.1.2.tgz#1e73826900de28d6de5480bc1de31d0842b06bec" +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: - sentence-case "^1.1.2" + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" -dot-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.0.tgz#4b43dd0d7403c34cb645424add397e80bfe85ca6" +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: - no-case "^2.2.0" - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" -ecc-jsbn@~0.1.1: +is-extendable@^0.1.0, is-extendable@^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" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= -encodeurl@~1.0.1: +is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" - -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" - -"entities@~ 1.1.1", entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -envify@^3.0.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" - dependencies: - jstransform "^11.0.3" - through "~2.3.4" - -"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: - prr "~0.0.0" + is-plain-object "^2.0.4" -error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" - dependencies: - is-arrayish "^0.2.1" +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: - version "0.10.12" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: - es6-iterator "2" - es6-symbol "~3.1" + number-is-nan "^1.0.0" -es6-iterator@2: +is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" - dependencies: - d "^0.1.1" - es5-ext "^0.10.7" - es6-symbol "3" - -es6-map@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" - dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-set "~0.1.3" - es6-symbol "~3.1.0" - event-emitter "~0.3.4" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -es6-set@^0.1.4, es6-set@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" - dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-symbol "3" - event-emitter "~0.3.4" +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: +is-glob@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" - dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - -es6-templates@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - dependencies: - recast "~0.11.12" - through "~2.3.6" - -es6-weak-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" - dependencies: - d "^0.1.1" - es5-ext "^0.10.8" - es6-iterator "2" - es6-symbol "3" - -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.2, 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" - -escodegen@1.8.x, escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -escope@^3.3.0, escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-esnet@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-esnet/-/eslint-config-esnet-0.1.0.tgz#0daca4c65e334f4c4ceb5bf6ddad68a7f580e70a" - -eslint-import-resolver-node@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" - dependencies: - debug "^2.2.0" - object-assign "^4.0.1" - resolve "^1.1.6" - -eslint-loader@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.5.0.tgz#824b7c9911a633fc1260f863c6ea571224d10412" - dependencies: - find-cache-dir "^0.1.1" - loader-utils "^0.2.7" - object-assign "^4.0.1" - -eslint-plugin-babel@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-2.2.0.tgz#46b57afbae3161485bb88897a3b1a7c205e1326e" - dependencies: - babel-core "^5.5.8" - -eslint-plugin-flowtype@2.11.4: - version "2.11.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.11.4.tgz#78878df0bcd147c0d1888d05ed005177a5b2f176" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - lodash "^4.15.0" + is-extglob "^2.1.0" -eslint-plugin-import@1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-1.12.0.tgz#11307eb08179f43692fa845ba8542e82fa333e21" - dependencies: - builtin-modules "^1.1.1" - contains-path "^0.1.0" - debug "^2.2.0" - doctrine "1.2.x" - es6-map "^0.1.3" - es6-set "^0.1.4" - eslint-import-resolver-node "^0.2.0" - lodash.cond "^4.3.0" - lodash.endswith "^4.0.1" - lodash.find "^4.3.0" - lodash.findindex "^4.3.0" - object-assign "^4.0.1" - pkg-dir "^1.0.0" - pkg-up "^1.0.0" - -eslint-plugin-jsx-a11y@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.1.tgz#1919fab212cd73a95eab2ac12a028793f37e4196" +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: - damerau-levenshtein "^1.0.0" - jsx-ast-utils "^1.0.0" - object-assign "^4.0.1" + is-extglob "^2.1.1" -eslint-plugin-react@5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz#7db068e1f5487f6871e4deef36a381c303eac161" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: - doctrine "^1.2.2" - jsx-ast-utils "^1.2.1" - -eslint-plugin-react@^3.9.0: - version "3.16.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-3.16.1.tgz#262d96b77d7c4a42af809a73c0e527a58612293c" - -eslint@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.4.0.tgz#af5984007bd3f1fb1b3b6b01a0a22eda0ec7a9f4" - dependencies: - chalk "^1.1.3" - concat-stream "^1.4.6" - debug "^2.1.1" - doctrine "^1.2.2" - escope "^3.6.0" - espree "^3.1.6" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.2.0" - ignore "^3.1.5" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" - natural-compare "^1.4.0" - optionator "^0.8.1" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.6.0" - strip-bom "^3.0.0" - strip-json-comments "~1.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - -eslint@^1.10.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-1.10.3.tgz#fb19a91b13c158082bbca294b17d979bc8353a0a" - dependencies: - chalk "^1.0.0" - concat-stream "^1.4.6" - debug "^2.1.1" - doctrine "^0.7.1" - escape-string-regexp "^1.0.2" - escope "^3.3.0" - espree "^2.2.4" - estraverse "^4.1.1" - estraverse-fb "^1.3.1" - esutils "^2.0.2" - file-entry-cache "^1.1.1" - glob "^5.0.14" - globals "^8.11.0" - handlebars "^4.0.0" - inquirer "^0.11.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "3.4.5" - json-stable-stringify "^1.0.0" - lodash.clonedeep "^3.0.1" - lodash.merge "^3.3.2" - lodash.omit "^3.1.0" - minimatch "^3.0.0" - mkdirp "^0.5.0" - object-assign "^4.0.1" - optionator "^0.6.0" - path-is-absolute "^1.0.0" - path-is-inside "^1.0.1" - shelljs "^0.5.3" - strip-json-comments "~1.0.1" - text-table "~0.2.0" - user-home "^2.0.0" - xml-escape "~1.0.0" - -espree@^2.2.4: - version "2.2.5" - resolved "https://registry.yarnpkg.com/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" - -espree@^3.1.6, 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-jsx "^3.0.0" - -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - -esprima-fb@~15001.1001.0-dev-harmony-fb: - version "15001.1001.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" - -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" - -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" - dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse-fb@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/estraverse-fb/-/estraverse-fb-1.3.1.tgz#160e75a80e605b08ce894bcce2fe3e429abf92bf" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -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@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" - -event-emitter@~0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" - dependencies: - d "~0.1.1" - es5-ext "~0.10.7" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@~0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -express@^4.13.3: - version "4.14.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" - dependencies: - accepts "~1.3.3" - array-flatten "1.1.1" - content-disposition "0.5.1" - content-type "~1.0.2" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "~2.2.0" - depd "~1.1.0" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.7.0" - finalhandler "0.5.0" - fresh "0.3.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.1" - path-to-regexp "0.1.7" - proxy-addr "~1.1.2" - qs "6.2.0" - range-parser "~1.2.0" - send "0.14.1" - serve-static "~1.11.1" - type-is "~1.6.13" - utils-merge "1.0.0" - vary "~1.1.0" - -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extract-text-webpack-plugin@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c" - dependencies: - async "^1.5.0" - loader-utils "^0.2.3" - webpack-sources "^0.1.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -fast-levenshtein@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.0.0, fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.0.tgz#d9ccf0e789e7db725d74bc4877d23aa42972ac50" - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^1.8.0, fb-watchman@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec" - dependencies: - bser "^1.0.2" - -fbjs@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" - dependencies: - core-js "^1.0.0" - loose-envify "^1.0.0" - promise "^7.0.3" - ua-parser-js "^0.7.9" - whatwg-fetch "^0.9.0" - -feature-detect-es6@^1.2.0, feature-detect-es6@^1.3.0, feature-detect-es6@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz#f888736af9cb0c91f55663bfa4762eb96ee7047f" - dependencies: - array-back "^1.0.3" - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^1.1.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-loader@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42" - dependencies: - loader-utils "~0.2.5" - -file-set@^1.0.0, file-set@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/file-set/-/file-set-1.1.1.tgz#d3ec70c080ec8f18f204ba1de106780c9056926b" - dependencies: - array-back "^1.0.3" - glob "^7.1.0" - -file-set@~0.2.1: - version "0.2.8" - resolved "https://registry.yarnpkg.com/file-set/-/file-set-0.2.8.tgz#73a6571e9cbe51ac5926c88bd567d111f836f178" - dependencies: - array-tools "^2" - glob "^4" - -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -filter-where@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/filter-where/-/filter-where-1.0.1.tgz#1b042569edce36bc1c4e9f73740d2c4e2feef77d" - dependencies: - test-value "^1.0.1" - -finalhandler@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" - dependencies: - debug "~2.2.0" - escape-html "~1.0.3" - on-finished "~2.3.0" - statuses "~1.3.0" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-replace@^1, find-replace@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.2.tgz#a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98" - dependencies: - array-back "^1.0.2" - test-value "^2.0.0" - -find-up@^1.0.0, find-up@^1.1.2: - 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" - -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" - -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" - -for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" - dependencies: - for-in "^0.1.5" - -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.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -forwarded@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" - -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" - -fs-extra@0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-readdir-recursive@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" - -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" - -fs-then-native@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fs-then-native/-/fs-then-native-1.0.2.tgz#ac8d3807c9f1bbd1279607fb228e0ab649bb41fe" - dependencies: - feature-detect-es6 "^1.3.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@1.0.14, fsevents@^1.0.0: - version "1.0.14" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -fstream-ignore@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" - -gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - supports-color "^0.2.0" - wide-align "^1.1.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-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-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob@^4: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - -glob@^5.0.14, glob@^5.0.15, glob@^5.0.5: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.0: - 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 "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" - -globals@^8.11.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" - -globals@^9.0.0, globals@^9.2.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growly@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gzip-size@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - dependencies: - duplexer "^0.1.1" - -handlebars-array@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/handlebars-array/-/handlebars-array-0.2.1.tgz#dd58395a5261d661988e8d77520ebbfaadc6bd24" - dependencies: - array-tools "^1.1.4" - -handlebars-comparison@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handlebars-comparison/-/handlebars-comparison-2.0.1.tgz#b17b95d2c298578e4aead38f5fac46e8f6005855" - dependencies: - array-tools "^1.1.0" - -handlebars-json@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/handlebars-json/-/handlebars-json-1.0.1.tgz#2ef87bb782551cd645bb4691b824e9653ec02504" - -handlebars-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/handlebars-regexp/-/handlebars-regexp-1.0.1.tgz#5f47f067260e9ba8e52f1a280917f70de39f11e4" - -handlebars-string@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/handlebars-string/-/handlebars-string-2.0.2.tgz#b9f92208a979cfcf51ff4a90defa183dc62942ca" - dependencies: - array-tools "^1.0.6" - string-tools "^0.1.4" - -handlebars@^3.0.0, handlebars@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-3.0.3.tgz#0e09651a2f0fb3c949160583710d551f92e6d2ad" - dependencies: - optimist "^0.6.1" - source-map "^0.1.40" - optionalDependencies: - uglify-js "~2.3" - -handlebars@^4.0.0, handlebars@^4.0.1, handlebars@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^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" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -he@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.0.0.tgz#6da5b265d7f2c3b5e480749168e0e159d05728da" - -he@1.1.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" - -header-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.0.tgz#d9e335909505d56051ec16a0106821889e910781" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - -history@^2.0.2, history@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/history/-/history-2.1.2.tgz#4aa2de897a0e4867e4539843be6ecdb2986bfdec" - dependencies: - deep-equal "^1.0.0" - invariant "^2.0.0" - query-string "^3.0.0" - warning "^2.0.0" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoist-non-react-statics@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" - -home-or-tmp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" - dependencies: - os-tmpdir "^1.0.1" - user-home "^1.1.1" - -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" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -home-path@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.3.tgz#9ece59fec3f032e6d10b5434fee264df4c2de32f" - -hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" - -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" - dependencies: - whatwg-encoding "^1.0.1" - -html-loader@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.4.3.tgz#ee11786b04818967cd6c679ca055e38f9d9721e7" - dependencies: - es6-templates "^0.2.2" - fastparse "^1.0.0" - html-minifier "^1.0.0" - loader-utils "~0.2.2" - object-assign "^4.0.1" - -html-minifier@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-1.5.0.tgz#beb05fd9cc340945865c10f40aedf469af4b1534" - dependencies: - change-case "2.3.x" - clean-css "3.4.x" - commander "2.9.x" - concat-stream "1.5.x" - he "1.0.x" - ncname "1.0.x" - relateurl "0.2.x" - uglify-js "2.6.x" - -html-minifier@^2.1.6: - version "2.1.7" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-2.1.7.tgz#9051d6fcbbcf214ed307e1ad74f432bb9ad655cc" - dependencies: - change-case "3.0.x" - clean-css "3.4.x" - commander "2.9.x" - he "1.1.x" - ncname "1.0.x" - relateurl "0.2.x" - uglify-js "2.6.x" - -html-webpack-plugin@2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.22.0.tgz#7eb02ff9039da84e5ba71004d4693c04b92d2905" - dependencies: - bluebird "^3.4.1" - html-minifier "^2.1.6" - loader-utils "^0.2.15" - lodash "^4.13.1" - pretty-error "^2.0.0" - toposort "^1.0.0" - -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" - dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" - -http-browserify@^1.3.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" - dependencies: - Base64 "~0.2.0" - inherits "~2.0.1" - -http-errors@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" - dependencies: - inherits "2.0.3" - setprototypeof "1.0.2" - statuses ">= 1.3.1 < 2" - -http-proxy-middleware@0.17.1, http-proxy-middleware@~0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.1.tgz#e2b847aa9962d8ce312cc82a3f443d5039cf197a" - dependencies: - http-proxy "^1.14.0" - is-glob "^2.0.1" - lodash "^4.14.2" - micromatch "^2.3.11" - -http-proxy@^1.14.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd" - -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" - -iconv-lite@^0.4.13, iconv-lite@^0.4.5: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - -icss-replace-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - -ignore@^3.1.5: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" - -immutable-devtools@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/immutable-devtools/-/immutable-devtools-0.0.4.tgz#1e7e87f2c7a4f0533955bc4c2922d124bf9129dd" - -immutable@^3.6.4: - version "3.8.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - -inquirer@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.11.4.tgz#81e3374e8361beaff2d97016206d359d0b32fa4d" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^1.0.1" - figures "^1.3.5" - lodash "^3.3.1" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -interpret@^0.6.4: - version "0.6.6" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" - -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ipaddr.js@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-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-integer@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.6.tgz#5273819fada880d123e1ac00a938e7172dd8d95e" - dependencies: - is-finite "^1.0.0" - -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - dependencies: - lower-case "^1.1.0" - -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.0.2, 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-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" - -is-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" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -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-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - dependencies: - html-comment-regex "^1.1.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - dependencies: - upper-case "^1.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -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" - -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.0.0-aplha.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.0.tgz#fb3f62edd5bfc6ae09da09453ded6e10ae7e483b" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-hook "^1.0.0-alpha.4" - istanbul-lib-instrument "^1.3.0" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.1.0" - istanbul-reports "^1.0.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" - -istanbul-lib-hook@^1.0.0-alpha.4: - version "1.0.0-alpha.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz#8c5bb9f6fbd8526e0ae6cf639af28266906b938f" - dependencies: - append-transform "^0.3.0" - -istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4, istanbul-lib-instrument@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.1.tgz#112c25a4f2f9bc361d13d14bbff992331b974e52" - 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" - 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" - dependencies: - async "^1.4.2" - istanbul-lib-coverage "^1.0.0-alpha" - 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" - dependencies: - istanbul-lib-coverage "^1.0.0-alpha.0" - mkdirp "^0.5.1" - rimraf "^2.4.4" - source-map "^0.5.3" - -istanbul-reports@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777" - dependencies: - handlebars "^4.0.3" - -istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -jasmine-check@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/jasmine-check/-/jasmine-check-0.1.5.tgz#dbad7eec56261c4b3d175ada55fe59b09ac9e415" - dependencies: - testcheck "^0.1.0" - -jest-changed-files@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-15.0.0.tgz#3ac99d97dc4ac045ad4adae8d967cc1317382571" - -jest-cli@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-15.1.1.tgz#53f271281f90d3b4043eca9ce9af69dd04bbda3e" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.1" - graceful-fs "^4.1.6" - istanbul-api "^1.0.0-aplha.10" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-instrument "^1.1.1" - jest-changed-files "^15.0.0" - jest-config "^15.1.1" - jest-environment-jsdom "^15.1.1" - jest-file-exists "^15.0.0" - jest-haste-map "^15.0.1" - jest-jasmine2 "^15.1.1" - jest-mock "^15.0.0" - jest-resolve "^15.0.1" - jest-resolve-dependencies "^15.0.1" - jest-runtime "^15.1.1" - jest-snapshot "^15.1.1" - jest-util "^15.1.1" - json-stable-stringify "^1.0.0" - node-notifier "^4.6.1" - sane "~1.4.1" - which "^1.1.1" - worker-farm "^1.3.1" - yargs "^5.0.0" - -jest-config@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-15.1.1.tgz#abdbe5b4a49a404d04754d42d7d88b94e58009f7" - dependencies: - chalk "^1.1.1" - istanbul "^0.4.5" - jest-environment-jsdom "^15.1.1" - jest-environment-node "^15.1.1" - jest-jasmine2 "^15.1.1" - jest-mock "^15.0.0" - jest-resolve "^15.0.1" - jest-util "^15.1.1" - json-stable-stringify "^1.0.0" - -jest-diff@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-15.1.0.tgz#bda40ad77c6beec1e6b8b5e46e3bbaed6e81c9f4" - dependencies: - chalk "^1.1.3" - diff "^3.0.0" - jest-matcher-utils "^15.1.0" - pretty-format "^3.7.0" - -jest-environment-jsdom@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-15.1.1.tgz#f0368c13e8e0b81adad123a051b94294338b97e0" - dependencies: - jest-util "^15.1.1" - jsdom "^9.4.0" - -jest-environment-node@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-15.1.1.tgz#7a8d4868e027e5d16026468e248dd5946fe43c04" - dependencies: - jest-util "^15.1.1" - -jest-file-exists@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-15.0.0.tgz#b7fefdd3f4b227cb686bb156ecc7661ee6935a88" - -jest-haste-map@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-15.0.1.tgz#1d1c342fa6f6d62d9bc2af76428d2e20f74a44d3" - dependencies: - fb-watchman "^1.9.0" - graceful-fs "^4.1.6" - multimatch "^2.1.0" - worker-farm "^1.3.1" - -jest-jasmine2@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-15.1.1.tgz#cac8b016ab6ce16d95b291875773c2494a1b4672" - dependencies: - graceful-fs "^4.1.6" - jasmine-check "^0.1.4" - jest-matchers "^15.1.1" - jest-snapshot "^15.1.1" - jest-util "^15.1.1" - -jest-matcher-utils@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-15.1.0.tgz#2c506ab9f396d286afa74872f2a3afe3ff454986" - dependencies: - chalk "^1.1.3" - -jest-matchers@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-15.1.1.tgz#faff50acbbf9743323ec2270a24743cb59d638f0" - dependencies: - jest-diff "^15.1.0" - jest-matcher-utils "^15.1.0" - jest-util "^15.1.1" - -jest-mock@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-15.0.0.tgz#b6639699eb0f021aa3648803432ebd950f75dc02" - -jest-resolve-dependencies@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-15.0.1.tgz#43ebc69b7d81d2cdc70474d4bf634304b06ea411" - dependencies: - jest-file-exists "^15.0.0" - jest-resolve "^15.0.1" - -jest-resolve@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-15.0.1.tgz#18a32d5ebfb7883c2eac16830917a37c5102ffa1" - dependencies: - browser-resolve "^1.11.2" - jest-file-exists "^15.0.0" - jest-haste-map "^15.0.1" - resolve "^1.1.6" - -jest-runtime@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-15.1.1.tgz#3907b8d46e5fe21b4395f3f884031fae22267191" - dependencies: - babel-core "^6.11.4" - babel-jest "^15.0.0" - babel-plugin-istanbul "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.6" - jest-config "^15.1.1" - jest-file-exists "^15.0.0" - jest-haste-map "^15.0.1" - jest-mock "^15.0.0" - jest-resolve "^15.0.1" - jest-snapshot "^15.1.1" - jest-util "^15.1.1" - json-stable-stringify "^1.0.0" - multimatch "^2.1.0" - yargs "^5.0.0" - -jest-snapshot@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-15.1.1.tgz#95d0d2729512d64d1a1a42724ca551c1d2079a71" - dependencies: - jest-diff "^15.1.0" - jest-file-exists "^15.0.0" - jest-util "^15.1.1" - pretty-format "^3.7.0" - -jest-util@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-15.1.1.tgz#5e19edab2c573f992c9d45ba118fa8d90f9d220e" - dependencies: - chalk "^1.1.1" - diff "^3.0.0" - graceful-fs "^4.1.6" - jest-file-exists "^15.0.0" - jest-mock "^15.0.0" - mkdirp "^0.5.1" - -jest@15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-15.1.1.tgz#d02972b3ba27067b7713e44219b4731aa48540a6" - dependencies: - jest-cli "^15.1.1" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -js-base64@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" - -js-tokens@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" - -js-tokens@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" - -js-yaml@3.4.5: - version "3.4.5" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - -js-yaml@3.6.1, js-yaml@^3.5.1, js-yaml@~3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -js-yaml@3.x, js-yaml@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -js2xmlparser@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-1.0.0.tgz#5a170f2e8d6476ce45405e04823242513782fe30" - -jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" - -jsdoc-75lb@^3.5.6: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jsdoc-75lb/-/jsdoc-75lb-3.6.0.tgz#a807119528b4009ccbcab49b7522f63fec6cd0bd" - 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" - -jsdoc-api@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/jsdoc-api/-/jsdoc-api-1.2.4.tgz#5012235927bfad1e27bc88d07b0ddddb2d3a8a59" - dependencies: - array-back "^1.0.3" - cache-point "~0.3.3" - collect-all "^1.0.2" - core-js "^2.4.1" - feature-detect-es6 "^1.3.1" - file-set "^1.0.1" - jsdoc-75lb "^3.5.6" - object-to-spawn-args "^1.1.0" - promise.prototype.finally "^1.0.1" - temp-path "^1.0.0" - then-fs "^2.0.0" - walk-back "^2.0.1" - -jsdoc-parse@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/jsdoc-parse/-/jsdoc-parse-1.2.7.tgz#54b7481b3cd6bcb7c173dc4fa69ee92735ea2525" - dependencies: - ansi-escape-sequences "^2.2.1" - array-tools "^2" - collect-json "^1.0.1" - command-line-args "^2.1.4" - command-line-tool "^0.1.0" - core-js "^2.0.1" - feature-detect-es6 "^1.2.0" - file-set "~0.2.1" - jsdoc-api "^1.0.0" - object-tools "^2" - stream-connect "^1.0.1" - test-value "^1.0.1" - -jsdoc-to-markdown@^1.3.4: - version "1.3.9" - resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-1.3.9.tgz#774c0ece0ebd0bcc3261b2c9a2aa8d1399a61472" - dependencies: - ansi-escape-sequences "^3.0.0" - command-line-args "^3.0.1" - command-line-usage "^3.0.5" - config-master "^2.0.4" - dmd "^1.4.1" - jsdoc-parse "^1.2.7" - jsdoc2md-stats "^1.0.3" - object-tools "^2.0.6" - stream-connect "^1.0.2" - -jsdoc2md-stats@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/jsdoc2md-stats/-/jsdoc2md-stats-1.0.6.tgz#dc0e002aebbd0fbae5123534f92732afbc651fbf" - dependencies: - app-usage-stats "^0.4.0" - feature-detect-es6 "^1.3.1" - -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" - -jsdom@^9.4.0: - version "9.9.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.9.1.tgz#84f3972ad394ab963233af8725211bce4d01bfd5" - dependencies: - abab "^1.0.0" - acorn "^2.4.0" - acorn-globals "^1.0.4" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.0 < 0.4.0" - cssstyle ">= 0.2.36 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - iconv-lite "^0.4.13" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.55.0" - sax "^1.1.4" - symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^2.3.1" - webidl-conversions "^3.0.1" - whatwg-encoding "^1.0.1" - whatwg-url "^4.1.0" - xml-name-validator ">= 2.0.1 < 3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-loader@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -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" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" - dependencies: - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - -jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.2.1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz#9ba6297198d9f754594d62e59496ffb923778dd4" - dependencies: - acorn-jsx "^3.0.1" - object-assign "^4.1.0" - -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -klaw@^1.0.0, 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" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -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" - -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - -leven@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -levn@~0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" - dependencies: - prelude-ls "~1.1.0" - type-check "~0.3.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" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.3, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5: - version "0.2.16" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._arraymap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz#1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66" - -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._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^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._basedifference@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" - dependencies: - lodash._baseindexof "^3.0.0" - lodash._cacheindexof "^3.0.0" - lodash._createcache "^3.0.0" - -lodash._baseflatten@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._baseindexof@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._cacheindexof@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - -lodash._createcache@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - -lodash._createcompounder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" - dependencies: - lodash.deburr "^3.0.0" - lodash.words "^3.0.0" - -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._pickbyarray@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5" - -lodash._pickbycallback@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a" - dependencies: - lodash._basefor "^3.0.0" - lodash.keysin "^3.0.0" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.assign@^4.0.0, lodash.assign@^4.1.0, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.camelcase@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" - dependencies: - lodash._createcompounder "^3.0.0" - -lodash.clonedeep@^3.0.0, lodash.clonedeep@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - -lodash.deburr@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" - dependencies: - lodash._root "^3.0.0" - -lodash.endswith@^4.0.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" - -lodash.find@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" - -lodash.findindex@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.findindex/-/lodash.findindex-4.6.0.tgz#a3245dee61fb9b6e0624b535125624bb69c11106" - -lodash.indexof@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isplainobject@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" - dependencies: - lodash._basefor "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.istypedarray@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" - -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.keysin@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.merge@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._createassigner "^3.0.0" - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.isplainobject "^3.0.0" - lodash.istypedarray "^3.0.0" - lodash.keys "^3.0.0" - lodash.keysin "^3.0.0" - lodash.toplainobject "^3.0.0" - -lodash.omit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-3.1.0.tgz#897fe382e6413d9ac97c61f78ed1e057a00af9f3" - dependencies: - lodash._arraymap "^3.0.0" - lodash._basedifference "^3.0.0" - lodash._baseflatten "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._pickbyarray "^3.0.0" - lodash._pickbycallback "^3.0.0" - lodash.keysin "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.pickby@^4.0.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.toplainobject@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.words@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" - dependencies: - lodash._root "^3.0.0" - -lodash@^3.10.0, lodash@^3.3.1, lodash@^3.9.3: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.14.2, lodash@^4.15.0, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0, loose-envify@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8" - dependencies: - js-tokens "^2.0.0" - -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" - -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.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -marked-terminal@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" - dependencies: - cardinal "^1.0.0" - chalk "^1.1.3" - cli-table "^0.3.1" - lodash.assign "^4.2.0" - node-emoji "^1.4.1" - -marked@^0.3.6, marked@~0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - -math-expression-evaluator@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab" - dependencies: - lodash.indexof "^4.0.5" - -"mdurl@~ 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -memory-fs@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" - -memory-fs@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -"mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" - -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" - dependencies: - mime-db "~1.25.0" - -mime@1.2.x: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" - -mime@1.3.4, mime@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -minimatch@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -"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" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^2.0.1, minimatch@^2.0.3: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - 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.2.0, minimist@^1.1.0, minimist@^1.1.1, 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: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -moment@^2.9.0: - version "2.17.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" - -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" - -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" - -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.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -ncname@1.0.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" - dependencies: - xml-char-classes "^1.0.0" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -no-case@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164" - dependencies: - lower-case "^1.1.1" - -node-emoji@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.4.3.tgz#5272f70b823c4df6d7c39f84fd8203f35b3e5d36" - dependencies: - string.prototype.codepointat "^0.2.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-libs-browser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c" - dependencies: - assert "^1.1.1" - browserify-zlib "~0.1.4" - buffer "^4.9.0" - console-browserify "^1.1.0" - constants-browserify "0.0.1" - crypto-browserify "~3.2.6" - domain-browser "^1.1.1" - events "^1.0.0" - http-browserify "^1.3.2" - https-browserify "0.0.0" - os-browserify "~0.1.2" - path-browserify "0.0.0" - process "^0.11.0" - punycode "^1.2.4" - querystring-es3 "~0.2.0" - readable-stream "^1.1.13" - stream-browserify "^1.0.0" - string_decoder "~0.10.25" - timers-browserify "^1.0.1" - tty-browserify "0.0.0" - url "~0.10.1" - util "~0.10.3" - vm-browserify "0.0.4" - -node-notifier@^4.3.1, node-notifier@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" - dependencies: - cli-usage "^0.1.1" - growly "^1.2.0" - lodash.clonedeep "^3.0.0" - minimist "^1.1.1" - semver "^5.1.0" - shellwords "^0.1.0" - which "^1.0.5" - -node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" - -node-uuid@~1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - -nopt@3.x, nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" - 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-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - -normalize-url@^1.4.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.8.0.tgz#a9550b079aa3523c85d78df24eef1959fce359ab" - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -npmlog@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - -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" - -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@4.1.0, object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - -object-get@^2.0.0, object-get@^2.0.2, object-get@^2.0.4, object-get@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.0.tgz#722bbdb60039efa47cad3c6dc2ce51a85c02c5ae" - -object-to-spawn-args@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-to-spawn-args/-/object-to-spawn-args-1.1.0.tgz#031a200e37db2c3dfc9b98074a0d69a5be253c1c" - -object-tools@^1.2.1, object-tools@^1.6.1: - version "1.6.7" - resolved "https://registry.yarnpkg.com/object-tools/-/object-tools-1.6.7.tgz#52d400fc875250993dbbb3ba298d7c79bb0698d0" - dependencies: - array-tools "^1.8.4" - typical "^2.2" - -object-tools@^2, object-tools@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object-tools/-/object-tools-2.0.6.tgz#f3fe1c350cda4a6f5d99d9646dc4892a02476ddd" - dependencies: - array-back "^1.0.2" - collect-json "^1.0.7" - object-get "^2.0.2" - test-value "^1.1.0" - typical "^2.4.2" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@1.x, once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - -open@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" - -opn@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - -optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optimist@~0.3.5: - version "0.3.7" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" - dependencies: - wordwrap "~0.0.2" - -optionator@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.6.0.tgz#b63ecbbf0e315fad4bc9827b45dc7ba45284fcb6" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~1.0.6" - levn "~0.2.5" - prelude-ls "~1.1.1" - type-check "~0.3.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" - dependencies: - url-parse "1.0.x" - -os-browserify@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" - -os-homedir@^1.0.0: - 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" - dependencies: - lcid "^1.0.0" - -os-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - -os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -output-file-sync@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" - dependencies: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.0" - -pako@~0.2.0: - version "0.2.9" - resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" - -param-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-1.1.2.tgz#dcb091a43c259b9228f1c341e7b6a44ea0bf9743" - dependencies: - sentence-case "^1.1.2" -param-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - no-case "^2.2.0" + isobject "^3.0.1" -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" + has "^1.0.1" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: - error-ex "^1.2.0" + has-symbols "^1.0.0" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -pascal-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-1.1.2.tgz#3e5d64a20043830a7c49344c2d74b41be0c9c99b" - dependencies: - camel-case "^1.1.1" - upper-case-first "^1.1.0" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -pascal-case@^2.0.0: +isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.0.tgz#39c248bde5a8dc02d5160696bdb01e044d016ee1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" + isarray "1.0.0" -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -path-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-1.1.2.tgz#50ce6ba0d3bed3dd0b5c2a9c4553697434409514" - dependencies: - sentence-case "^1.1.2" +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -path-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.0.tgz#5ac491de642936e5dfe0e18d16c461b8be8cf073" +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== dependencies: - no-case "^2.2.0" + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" -path-exists@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + dependencies: + handlebars "^4.1.2" + +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== + dependencies: + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== + dependencies: + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + jsdom "^11.5.1" + +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" + +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== + dependencies: + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== + dependencies: + import-local "^2.0.0" + jest-cli "^24.9.0" + +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -path-exists@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: - pinkie-promise "^2.0.0" + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -path-is-inside@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -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" +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" +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" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" + minimist "^1.2.0" -pbkdf2-compat@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: - pinkie "^2.0.0" + is-buffer "^1.1.5" -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" - dependencies: - find-up "^1.0.0" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" + prelude-ls "~1.1.2" + type-check "~0.3.2" -postcss-colormin@^2.1.8: - version "2.2.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.1.tgz#dc5421b6ae6f779ef6bfd47352b94abe59d0316b" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" -postcss-convert-values@^2.3.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.0.tgz#08c6d06130fe58a91a21ff50829e1aad6a3a1acc" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" + p-locate "^3.0.0" + path-exists "^3.0.0" -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.13, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - postcss "^5.0.14" + js-tokens "^3.0.0 || ^4.0.0" -postcss-discard-duplicates@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: - postcss "^5.0.4" + pseudomap "^1.0.2" + yallist "^2.1.2" -postcss-discard-empty@^2.0.1: +make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: - postcss "^5.0.14" + pify "^4.0.1" + semver "^5.6.0" -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: - postcss "^5.0.16" + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" + object-visit "^1.0.0" -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -postcss-loader@0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-0.11.1.tgz#c4eb0054269ec32695fd5682fbd7e654cdcac636" +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: - babel-code-frame "^6.11.0" - loader-utils "^0.2.15" - postcss "^5.1.2" + safe-buffer "^5.1.2" + yallist "^3.0.0" -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" + minipass "^2.9.0" -postcss-merge-longhand@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.1.tgz#ff59b5dec6d586ce2cea183138f55c5876fa9cdc" +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: - postcss "^5.0.4" + for-in "^1.0.2" + is-extendable "^1.0.1" -postcss-merge-rules@^2.0.3: - version "2.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.11.tgz#c5d7c8de5056a7377aea0dff2fd83f92cafb9b8a" +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: - postcss "^5.0.4" - vendors "^1.0.0" + minimist "0.0.8" -postcss-message-helpers@^2.0.0: +moment@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + +ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" - dependencies: - postcss "^5.0.4" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -postcss-modules-local-by-default@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" - dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -postcss-modules-scope@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" - dependencies: - css-selector-tokenizer "^0.6.0" - postcss "^5.0.4" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -postcss-modules-values@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: - icss-replace-symbols "^1.0.2" - postcss "^5.0.14" + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: - postcss "^5.0.5" + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" +node-releases@^1.1.38: + version "1.1.39" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" + integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" + semver "^6.3.0" -postcss-ordered-values@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.2.tgz#be8b511741fab2dac8e614a2302e9d10267b0771" +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" + abbrev "1" + osenv "^0.1.4" -postcss-reduce-idents@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.1.tgz#024e8e219f52773313408573db9645ba62d2d2fe" +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: - postcss "^5.0.4" + remove-trailing-separator "^1.0.1" -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -postcss-selector-parser@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" +npm-packlist@^1.1.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" + integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" -postcss-unique-selectors@^2.0.2: +npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" + path-key "^2.0.0" -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.1.1, postcss@^5.1.2: - version "5.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.8.tgz#05720c49df23c79bda51fd01daeb1e9222e94390" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.1.2" + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" -pre-commit@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" - dependencies: - cross-spawn "^5.0.1" - spawn-sync "^1.0.15" - which "1.2.x" +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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" +nwsapi@^2.0.7: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -pretty-error@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.0.2.tgz#a7db19cbb529ca9f0af3d3a2f77d5caf8e5dec23" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: - renderkid "~2.0.0" - utila "~0.4" + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" -pretty-format@^3.7.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== -private@^0.1.6, private@~0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" -process@^0.11.0, process@~0.11.0: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" -promise.prototype.finally@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-1.0.1.tgz#91182f91c92486995740fa05e0da942ac986befa" +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" -promise@7.1.1, "promise@>=3.2 <8", promise@^7.0.3: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: - asap "~2.0.3" + minimist "~0.0.1" + wordwrap "~0.0.2" -proxy-addr@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: - forwarded "~0.1.0" - ipaddr.js "1.1.1" + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= -pseudomap@^1.0.1: +os-tmpdir@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -q@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" -qs@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" -qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -query-string@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-3.0.3.tgz#ae2e14b4d05071d4e9b9eb4873c35b0dcd42e638" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: - strict-uri-encode "^1.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" -query-string@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -raw-loader@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~1.0.4" + pify "^3.0.0" -react-dom@^0.14.3: - version "0.14.8" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.8.tgz#0f1c547514263f771bd31814a739e5306575069e" - -react-markdown@^1.0.5: - version "1.2.4" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-1.2.4.tgz#ef0841a8eac35684aef25ae4f80366e1f6046689" - dependencies: - commonmark "0.22.0" - commonmark-react-renderer "2.2.0" - in-publish "^2.0.0" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -react-router@^2.2.4: - version "2.8.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-2.8.1.tgz#73e9491f6ceb316d0f779829081863e378ee4ed7" - dependencies: - history "^2.1.2" - hoist-non-react-statics "^1.2.0" - invariant "^2.2.1" - loose-envify "^1.2.0" - warning "^3.0.0" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -react-scripts@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-0.4.1.tgz#ae6d58d6627af5ffc97c9a2ebb0cb6570a4a29e5" - dependencies: - autoprefixer "6.4.0" - babel-core "6.14.0" - babel-eslint "6.1.2" - babel-jest "15.0.0" - babel-loader "6.2.5" - babel-plugin-transform-class-properties "6.11.5" - babel-plugin-transform-object-rest-spread "6.8.0" - babel-plugin-transform-react-constant-elements "6.9.1" - babel-plugin-transform-regenerator "6.14.0" - babel-plugin-transform-runtime "6.15.0" - babel-preset-latest "6.14.0" - babel-preset-react "6.11.1" - babel-runtime "6.11.6" - case-sensitive-paths-webpack-plugin "1.1.3" - chalk "1.1.3" - connect-history-api-fallback "1.3.0" - cross-spawn "4.0.0" - css-loader "0.24.0" - detect-port "1.0.0" - eslint "3.4.0" - eslint-loader "1.5.0" - eslint-plugin-flowtype "2.11.4" - eslint-plugin-import "1.12.0" - eslint-plugin-jsx-a11y "2.2.1" - eslint-plugin-react "5.2.2" - extract-text-webpack-plugin "1.0.1" - file-loader "0.9.0" - filesize "3.3.0" - fs-extra "0.30.0" - gzip-size "3.0.0" - html-loader "0.4.3" - html-webpack-plugin "2.22.0" - http-proxy-middleware "0.17.1" - jest "15.1.1" - json-loader "0.5.4" - object-assign "4.1.0" - opn "4.0.2" - path-exists "3.0.0" - postcss-loader "0.11.1" - promise "7.1.1" - recursive-readdir "2.0.0" - rimraf "2.5.4" - strip-ansi "3.0.1" - style-loader "0.13.1" - url-loader "0.5.7" - webpack "1.13.2" - webpack-dev-server "1.15.1" - whatwg-fetch "1.0.0" - optionalDependencies: - fsevents "1.0.14" +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -react@^0.14.3: - version "0.14.8" - resolved "https://registry.yarnpkg.com/react/-/react-0.14.8.tgz#078dfa454d4745bcc54a9726311c2bf272c23684" +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: - envify "^3.0.0" - fbjs "^0.6.1" + node-modules-regexp "^1.0.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + find-up "^3.0.0" -read-pkg@^1.0.0: +pn@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -readable-stream@1.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" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -readable-stream@^1.0.27-1, readable-stream@^1.1.13: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" +pre-commit@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" + integrity sha1-287g7p3nI15X95xW186UZBpp7sY= dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + cross-spawn "^5.0.1" + spawn-sync "^1.0.15" + which "1.2.x" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -readable-stream@~2.0.0, readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" +prompts@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" + integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" + kleur "^3.0.3" + sisteransi "^1.0.3" -recast@0.10.33: - version "0.10.33" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" - dependencies: - ast-types "0.8.12" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -recast@^0.10.10: - version "0.10.43" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" - dependencies: - ast-types "0.8.15" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" +psl@^1.1.24, psl@^1.1.28: + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== -recast@^0.11.17, recast@~0.11.12: - version "0.11.18" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.18.tgz#07af6257ca769868815209401d4d60eef1b5b947" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: - ast-types "0.9.2" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" + end-of-stream "^1.1.0" + once "^1.3.1" -recursive-readdir@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.0.0.tgz#8c46db7946cbaf3d4ebade1873f33d8cd973131a" - dependencies: - minimatch "0.3.0" +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -redeyed@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" - dependencies: - esprima "~3.0.0" +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -reduce-extract@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/reduce-extract/-/reduce-extract-1.0.0.tgz#67f2385beda65061b5f5f4312662e8b080ca1525" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - test-value "^1.0.1" + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" -reduce-flatten@^1.0.0, reduce-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" +react-is@^16.8.4: + version "16.11.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" + integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== -reduce-function-call@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== dependencies: - balanced-match "^0.4.2" - -reduce-unique@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/reduce-unique/-/reduce-unique-1.0.0.tgz#7e586bcf87a4e32b6d7abd8277fad6cdec9f4803" + find-up "^3.0.0" + read-pkg "^3.0.0" -reduce-without@^1.0.0, reduce-without@^1.0.1: - version "1.0.1" - resolved "http://registry.npmjs.org/reduce-without/-/reduce-without-1.0.1.tgz#68ad0ead11855c9a37d4e8256c15bbf87972fc8c" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: - test-value "^2.0.0" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" -regenerator-runtime@^0.9.5: - version "0.9.6" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" -regenerator@0.8.40: - version "0.8.40" - resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== dependencies: - commoner "~0.10.3" - defs "~1.1.0" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - recast "0.10.33" - through "~2.3.8" + util.promisify "^1.0.0" -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" + regenerate "^1.4.0" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + private "^0.1.6" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + extend-shallow "^3.0.2" + safe-regex "^1.1.0" -regexpu@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d" +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: - esprima "^2.6.0" - recast "^0.10.10" - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - -renderkid@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.0.tgz#1859753e7a5adbf35443aba0d4e4579e78abee85" - dependencies: - css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" - strip-ansi "^3.0.0" - utila "~0.3" +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" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^1.1.0, repeating@^1.1.2: +request-promise-core@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - dependencies: - is-finite "^1.0.0" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - is-finite "^1.0.0" + lodash "^4.17.15" -req-then@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/req-then/-/req-then-0.5.1.tgz#31c6e0b56f4ddd2acd6de0ba1bcea77b6079dfdf" - dependencies: - array-back "^1.0.3" - defer-promise "^1.0.0" - feature-detect-es6 "^1.3.1" - lodash.pick "^4.4.0" - typical "^2.6.0" - -request@2.75.0: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@^2.55.0, request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" +request-promise-native@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -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" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" + resolve-from "^3.0.0" -requires-port@1.0.x, requires-port@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= -requizzle@~0.2.1: +resolve-url@^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-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" - -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@2.5.4, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: - glob "^7.0.5" + path-parse "^1.0.6" -ripemd160@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: - once "^1.3.0" + glob "^7.1.3" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -sane@~1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" - dependencies: - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -sax@^1.1.4, sax@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -scroll-behavior@^0.3.0: - version "0.3.4" - resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.3.4.tgz#ea97ed081a6983402d25c1a3647f3e3d4e32c8ea" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: - dom-helpers "^2.4.0" + ret "~0.1.10" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -send@0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" - dependencies: - debug "~2.2.0" - depd "~1.1.0" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.5.0" - mime "1.3.4" - ms "0.7.1" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.0" - -sentence-case@^1.1.1, sentence-case@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-1.1.3.tgz#8034aafc2145772d3abe1509aa42c9e1042dc139" - dependencies: - lower-case "^1.1.1" +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" -sentence-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.0.tgz#d592fbed457fd1a59e3af0ee17e99f6fd70d7efd" - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -serve-index@^1.7.2: - version "1.8.0" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" - dependencies: - accepts "~1.3.3" - batch "0.5.3" - debug "~2.2.0" - escape-html "~1.0.3" - http-errors "~1.5.0" - mime-types "~2.1.11" - parseurl "~1.3.1" +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -serve-static@~1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" - dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.14.1" +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" - -sha.js@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" - -shelljs@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" - -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" - -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-fmt@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b" - -simple-is@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +sisteransi@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" + integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== -snake-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-1.1.2.tgz#0c2f25e305158d9a18d3d977066187fef8a5a66a" - dependencies: - sentence-case "^1.1.2" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - no-case "^2.2.0" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: - hoek "2.x.x" + kind-of "^3.2.0" -sockjs-client@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.1.tgz#284843e9a9784d7c474b1571b3240fca9dda4bb0" +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: + base "^0.11.1" debug "^2.2.0" - eventsource "~0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.1" - -sockjs@^0.3.15: - version "0.3.18" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" - dependencies: - faye-websocket "^0.10.0" - uuid "^2.0.2" - -sort-array@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-1.1.1.tgz#9032f6f0be284eecb12af98a3db02612828a66d1" - dependencies: - array-back "^1.0.3" - object-get "^2.0.4" - typical "^2.4.2" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" - -source-map-support@^0.2.10: - version "0.2.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" - dependencies: - source-map "0.1.32" - -source-map-support@^0.4.2: - version "0.4.8" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b" - dependencies: - source-map "^0.5.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" -source-map@0.1.32: - version "0.1.32" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: - amdefine ">=0.0.4" + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" -source-map@0.4.x, source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" +source-map-support@^0.5.6: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: - amdefine ">=0.0.4" + buffer-from "^1.0.0" + source-map "^0.6.0" -source-map@^0.1.40, source-map@~0.1.7: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: - 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.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spawn-sync@^1.0.15: version "1.0.15" resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= dependencies: concat-stream "^1.4.7" os-shim "^0.1.2" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== -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" +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" -stable@~0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.5.tgz#08232f60c732e9890784b5bed0734f8b32a887b9" - -"statuses@>= 1.3.1 < 2", statuses@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stream-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" - dependencies: - inherits "~2.0.1" - readable-stream "^1.0.27-1" - -stream-cache@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" - -stream-connect@^1.0.1, stream-connect@^1.0.2: +stack-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/stream-connect/-/stream-connect-1.0.2.tgz#18bc81f2edb35b8b5d9a8009200a985314428a97" - dependencies: - array-back "^1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -stream-handlebars@~0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/stream-handlebars/-/stream-handlebars-0.1.6.tgz#7305b5064203da171608c478acf642a149892a2f" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: - handlebars "^3.0.0" - object-tools "^1.2.1" - -stream-via@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-1.0.3.tgz#cebd32a5a59d74b3b68e3404942e867184ad4ac9" - -stream-via@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-0.1.1.tgz#0cee5df9c959fb1d3f4eda4819f289d5f9205afc" - -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" + define-property "^0.2.5" + object-copy "^0.1.0" -string-tools@^0.1.4: - version "0.1.8" - resolved "https://registry.yarnpkg.com/string-tools/-/string-tools-0.1.8.tgz#70884e86a26ee5103a078bef67033d558d36e337" +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -string-tools@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string-tools/-/string-tools-1.0.0.tgz#c69a9d5788858997da66f1d923ba7113ea466b5a" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" - -string.prototype.codepointat@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" - -string.prototype.repeat@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" + strip-ansi "^4.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" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" -stringmap@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" -stringset@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5" +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" -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: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - is-utf8 "^0.2.0" + ansi-regex "^4.1.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -strip-json-comments@~1.0.1, strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 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" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9" - dependencies: - loader-utils "^0.2.7" - -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.0, supports-color@^3.1.1, 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" - -svgo@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.1.tgz#287320fed972cb097e72c2bb1685f96fe08f8034" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.2.1" - js-yaml "~3.6.1" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - -"symbol-tree@>= 3.1.0 < 4.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.1.tgz#8549dd1d01fa9f893c18cc9ab0b106b4d9b168cb" + has-flag "^3.0.0" -table-layout@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.3.0.tgz#6ee20dc483db371b3e5c87f704ed2f7c799d2c9a" - dependencies: - array-back "^1.0.3" - core-js "^2.4.1" - deep-extend "~0.4.1" - feature-detect-es6 "^1.3.1" - typical "^2.6.0" - wordwrapjs "^2.0.0-0" - -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - -taffydb@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" - -tapable@^0.1.8, tapable@~0.1.8: - version "0.1.10" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" - -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" - dependencies: - debug "~2.2.0" - fstream "~1.0.10" - fstream-ignore "~1.0.5" - once "~1.3.3" - readable-stream "~2.1.4" - rimraf "~2.5.1" - tar "~2.2.1" - uid-number "~0.0.6" - -tar@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -temp-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-path/-/temp-path-1.0.0.tgz#24b1543973ab442896d9ad367dd9cbdbfafe918b" + has-flag "^3.0.0" -test-exclude@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -test-value@^1.0.1, test-value@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/test-value/-/test-value-1.1.0.tgz#a09136f72ec043d27c893707c2b159bfad7de93f" +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: - array-back "^1.0.2" - typical "^2.4.2" + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" -test-value@^2.0.0, test-value@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== dependencies: - array-back "^1.0.3" - typical "^2.6.0" + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" -testcheck@^0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/testcheck/-/testcheck-0.1.4.tgz#90056edd48d11997702616ce6716f197d8190164" +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -then-fs@^2.0.0: +to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/then-fs/-/then-fs-2.0.0.tgz#72f792dd9d31705a91ae19ebfcf8b3f968c81da2" - dependencies: - promise ">=3.2 <8" - -through@^2.3.6, through@~2.3.4, through@~2.3.6, through@~2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: - process "~0.11.0" + kind-of "^3.0.2" -title-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-1.1.2.tgz#fae4a6ae546bfa22d083a0eea910a40d12ed4f5a" +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: - sentence-case "^1.1.1" - upper-case "^1.0.3" + is-number "^3.0.0" + repeat-string "^1.6.1" -title-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.0.tgz#c68ccb4232079ded64f94b91b4941ade91391979" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" -to-fast-properties@^1.0.0, 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" - -toposort@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.0.tgz#b66cf385a1a8a8e68e45b8259e7f55875e8b06ef" +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" -tough-cookie@^2.3.1, 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.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: + psl "^1.1.24" punycode "^1.4.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - -trim-right@^1.0.0: +tr46@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -try-resolve@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" - -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - -tryor@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-check@~0.3.1, type-check@~0.3.2: +type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" -type-is@~1.6.13: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.13" - -typedarray@^0.0.6, typedarray@~0.0.5: +typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typical@^2.1, typical@^2.2, typical@^2.3.0, typical@^2.4.2, typical@^2.5.0, typical@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.0.tgz#89d51554ab139848a65bcc2c8772f8fb450c40ed" - -ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" - -uglify-js@2.6.x, uglify-js@~2.6.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-js@^2.6: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +uglify-js@^3.1.4: + version "3.6.8" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.8.tgz#5edcbcf9d49cbb0403dc49f856fe81530d65145e" + integrity sha512-XhHJ3S3ZyMwP8kY1Gkugqx3CJh2C3O0y8NPiSxtm1tyD/pktLAkFZsFGpuNfTZddKDQ/bbDBLAd2YyA1pbi8HQ== dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" + commander "~2.20.3" + source-map "~0.6.1" -uglify-js@~2.3: - version "2.3.6" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" - dependencies: - async "~0.2.6" - optimist "~0.3.5" - source-map "~0.1.7" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +underscore@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== -uid-number@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -underscore-contrib@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: - underscore "1.6.0" + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -underscore@1.6.0, underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== -underscore@^1.8.2, underscore@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== -uniq@^1.0.1: +union-value@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -uniqid@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.0.tgz#33d9679f65022f48988a03fd24e7dcaf8f109eca" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: - macaddress "^0.2.8" - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" -unpipe@~1.0.0: +unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - -url-loader@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.7.tgz#67e8779759f8000da74994906680c943a9b0925d" - dependencies: - loader-utils "0.2.x" - mime "1.2.x" - -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" - -url-parse@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: - querystringify "0.0.x" - requires-port "1.0.x" + has-value "^0.3.1" + isobject "^3.0.0" -url@~0.10.1: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - dependencies: - punycode "1.3.2" - querystring "0.2.0" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -usage-stats@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/usage-stats/-/usage-stats-0.8.2.tgz#d7be5203682e267f7696b354356c8c376aa12542" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: - array-back "^1.0.3" - cli-commands "0.1.0" - core-js "^2.4.1" - feature-detect-es6 "^1.3.1" - home-path "^1.0.3" - mkdirp "^0.5.1" - req-then "^0.5.1" - typical "^2.6.0" - uuid "^3.0.0" + punycode "^2.1.0" -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -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: - inherits "2.0.1" - -utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - -utils-merge@1.0.0: +util.promisify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" - -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -v8flags@^2.0.10: - version "2.0.11" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: - user-home "^1.1.1" + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" - -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.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" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: - indexof "0.0.1" - -walk-back@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4" + browser-process-hrtime "^0.1.2" -walker@~1.0.5: +walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" -warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" - dependencies: - loose-envify "^1.0.0" - -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -watchpack@^0.2.1: - version "0.2.9" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: - async "^0.9.0" - chokidar "^1.0.0" - graceful-fs "^4.1.2" + iconv-lite "0.4.24" -webidl-conversions@^3.0.0, webidl-conversions@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webpack-core@~0.6.0: - version "0.6.9" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -webpack-dev-middleware@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.9.0.tgz#a1c67a3dfd8a5c5d62740aa0babe61758b4c84aa" +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== dependencies: - memory-fs "~0.4.1" - mime "^1.3.4" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - -webpack-dev-server@1.15.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.15.1.tgz#d9496676a54ffe53ccb8fbb3225b88e21e8eac13" - dependencies: - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - express "^4.13.3" - http-proxy-middleware "~0.17.1" - open "0.0.5" - optimist "~0.6.1" - serve-index "^1.7.2" - sockjs "^0.3.15" - sockjs-client "^1.0.3" - stream-cache "~0.0.1" - strip-ansi "^3.0.0" - supports-color "^3.1.1" - webpack-dev-middleware "^1.4.0" - -webpack-sources@^0.1.0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.3.tgz#15ce2fb79d0a1da727444ba7c757bf164294f310" - dependencies: - source-list-map "~0.1.0" - source-map "~0.5.3" - -webpack@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.2.tgz#f11a96f458eb752970a86abe746c0704fabafaf3" - dependencies: - acorn "^3.0.0" - async "^1.3.0" - clone "^1.0.2" - enhanced-resolve "~0.9.0" - interpret "^0.6.4" - loader-utils "^0.2.11" - memory-fs "~0.3.0" - mkdirp "~0.5.0" - node-libs-browser "^0.6.0" - optimist "~0.6.0" - supports-color "^3.1.0" - tapable "~0.1.8" - uglify-js "~2.6.0" - watchpack "^0.2.1" - webpack-core "~0.6.0" - -websocket-driver@>=0.5.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - dependencies: - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: - iconv-lite "0.4.13" - -whatwg-fetch@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -whatwg-url@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.1.1.tgz#567074923352de781e3500d64a86aa92a971b4a4" +which@1.2.x: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + integrity sha1-mofEN48D6CfOyvGs31bHNsAcFOU= dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + isexe "^2.0.0" -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -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.0.5, which@^1.1.1, which@^1.2.9: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: - isexe "^1.1.1" + 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" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 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.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + string-width "^1.0.2 || 2" -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrapjs@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-1.2.1.tgz#754a5ea0664cfbff50540dc32d67bda3289fc34b" - dependencies: - array-back "^1.0.3" - typical "^2.5.0" - -wordwrapjs@^2.0.0-0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-2.0.0.tgz#ab55f695e6118da93858fdd70c053d1c5e01ac20" - dependencies: - array-back "^1.0.3" - feature-detect-es6 "^1.3.1" - reduce-flatten "^1.0.1" - typical "^2.6.0" - -worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" - dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== dependencies: - mkdirp "^0.5.1" - -xml-char-classes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" -xml-escape@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.0.0.tgz#00963d697b2adf0c185c4e04e73174ba9b288eb2" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" -"xml-name-validator@>= 2.0.1 < 3.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -y18n@^3.2.0, y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f" +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== dependencies: - camelcase "^3.0.0" - lodash.assign "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.2.0" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^3.2.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yargs@~3.27.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" - dependencies: - camelcase "^1.2.1" - cliui "^2.1.0" - decamelize "^1.0.0" - os-locale "^1.4.0" - window-size "^0.1.2" - y18n "^3.2.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1"