<\/div>/
+ );
+ });
+});
diff --git a/extension/test/app/inject/api.spec.js b/extension/test/app/inject/api.spec.js
new file mode 100644
index 00000000..31366a5d
--- /dev/null
+++ b/extension/test/app/inject/api.spec.js
@@ -0,0 +1,98 @@
+import expect from 'expect';
+import { insertScript, listenMessage } from '../../utils/inject';
+import '../../../src/browser/extension/inject/pageScript';
+
+describe('API', () => {
+ it('should get window.__REDUX_DEVTOOLS_EXTENSION__ function', () => {
+ expect(window.__REDUX_DEVTOOLS_EXTENSION__).toBeA('function');
+ });
+
+ it('should notify error', () => {
+ const spy = expect.createSpy(() => {});
+ window.__REDUX_DEVTOOLS_EXTENSION__.notifyErrors(spy);
+ insertScript('hi()');
+ expect(spy).toHaveBeenCalled();
+ });
+
+ it('should open monitor', async () => {
+ let message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.open();
+ });
+ expect(message).toEqual({
+ source: '@devtools-page',
+ type: 'OPEN',
+ position: 'right',
+ });
+
+ message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.open('left');
+ });
+ expect(message).toEqual({
+ source: '@devtools-page',
+ type: 'OPEN',
+ position: 'left',
+ });
+ });
+
+ it('should send message', async () => {
+ let message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.send('hi');
+ });
+ expect(message).toInclude({
+ type: 'ACTION',
+ payload: undefined,
+ instanceId: 1,
+ name: undefined,
+ source: '@devtools-page',
+ });
+ expect(message.action).toMatch(/{"action":{"type":"hi"},"timestamp":\d+}/);
+
+ message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.send(
+ { type: 'hi' },
+ { counter: 1 },
+ 1
+ );
+ });
+ expect(message).toInclude({
+ type: 'ACTION',
+ payload: '{"counter":1}',
+ instanceId: 1,
+ name: undefined,
+ source: '@devtools-page',
+ });
+ expect(message.action).toMatch(/{"action":{"type":"hi"},"timestamp":\d+}/);
+
+ message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.send(
+ { type: 'hi' },
+ { counter: 1 },
+ 1
+ );
+ });
+ expect(message).toInclude({
+ type: 'ACTION',
+ payload: '{"counter":1}',
+ instanceId: 1,
+ name: undefined,
+ source: '@devtools-page',
+ });
+ expect(message.action).toMatch(/{"action":{"type":"hi"},"timestamp":\d+}/);
+
+ message = await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.send(undefined, { counter: 1 }, 1);
+ });
+ expect(message).toEqual({
+ action: undefined,
+ type: 'STATE',
+ payload: { counter: 1 },
+ actionsById: undefined,
+ computedStates: undefined,
+ committedState: false,
+ instanceId: 1,
+ maxAge: undefined,
+ name: undefined,
+ source: '@devtools-page',
+ });
+ });
+});
diff --git a/extension/test/app/inject/enhancer.spec.js b/extension/test/app/inject/enhancer.spec.js
new file mode 100644
index 00000000..4a72c879
--- /dev/null
+++ b/extension/test/app/inject/enhancer.spec.js
@@ -0,0 +1,217 @@
+import '@babel/polyfill';
+import expect from 'expect';
+import { createStore, compose } from 'redux';
+import { insertScript, listenMessage } from '../../utils/inject';
+import '../../../src/browser/extension/inject/pageScript';
+
+function counter(state = 0, action) {
+ switch (action.type) {
+ case 'INCREMENT':
+ return state + 1;
+ case 'DECREMENT':
+ return state - 1;
+ default:
+ return state;
+ }
+}
+
+describe('Redux enhancer', () => {
+ it('should create the store', async () => {
+ const message = await listenMessage(() => {
+ window.store = createStore(
+ counter,
+ window.__REDUX_DEVTOOLS_EXTENSION__()
+ );
+ expect(window.store).toBeA('object');
+ });
+ expect(message.type).toBe('INIT_INSTANCE');
+ expect(window.store.getState()).toBe(0);
+ insertScript('window.devToolsOptions = { serialize: false }');
+ });
+
+ it('should start monitoring', async () => {
+ let message = await listenMessage(() => {
+ window.postMessage({ type: 'START', source: '@devtools-extension' }, '*');
+ });
+ expect(message.type).toBe('START');
+
+ message = await listenMessage();
+ expect(message.type).toBe('STATE');
+ expect(message.actionsById).toInclude(
+ '{"0":{"type":"PERFORM_ACTION","action":{"type":"@@INIT"},"'
+ );
+ expect(message.computedStates).toBe('[{"state":0}]');
+ });
+
+ it('should perform actions', async () => {
+ let message = await listenMessage(() => {
+ window.store.dispatch({ type: 'INCREMENT' });
+ expect(window.store.getState()).toBe(1);
+ });
+ expect(message.type).toBe('ACTION');
+ expect(message.action).toInclude(
+ '{"type":"PERFORM_ACTION","action":{"type":"INCREMENT"},'
+ );
+ expect(message.payload).toBe('1');
+
+ message = await listenMessage(() => {
+ window.store.dispatch({ type: 'INCREMENT' });
+ expect(window.store.getState()).toBe(2);
+ });
+ expect(message.type).toBe('ACTION');
+ expect(message.action).toInclude(
+ '{"type":"PERFORM_ACTION","action":{"type":"INCREMENT"},'
+ );
+ expect(message.payload).toBe('2');
+ });
+
+ it('should dispatch actions remotely', async () => {
+ let message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'ACTION',
+ payload: "{ type: 'INCREMENT' }",
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('ACTION');
+
+ message = await listenMessage();
+ expect(message.type).toBe('ACTION');
+ expect(message.action).toInclude(
+ '{"type":"PERFORM_ACTION","action":{"type":"INCREMENT"},'
+ );
+ expect(message.payload).toBe('3');
+ });
+
+ it('should cancel (toggle) action', async () => {
+ let message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'DISPATCH',
+ payload: { type: 'TOGGLE_ACTION', id: 1 },
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('DISPATCH');
+
+ message = await listenMessage();
+ expect(message.type).toBe('STATE');
+ expect(window.store.getState()).toBe(2);
+
+ message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'DISPATCH',
+ payload: { type: 'TOGGLE_ACTION', id: 1 },
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('DISPATCH');
+
+ message = await listenMessage();
+ expect(message.type).toBe('STATE');
+ expect(window.store.getState()).toBe(3);
+ });
+
+ it('should move back and forward (time travel)', async () => {
+ let message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'DISPATCH',
+ payload: { type: 'JUMP_TO_STATE', index: 2, actionId: 2 },
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('DISPATCH');
+ expect(window.store.getState()).toBe(2);
+
+ message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'DISPATCH',
+ payload: { type: 'JUMP_TO_STATE', index: 3, actionId: 3 },
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('DISPATCH');
+ expect(window.store.getState()).toBe(3);
+ });
+
+ it('should import state history', async () => {
+ let message = await listenMessage(() => {
+ window.postMessage(
+ {
+ type: 'IMPORT',
+ state: JSON.stringify({
+ monitorState: {},
+ actionsById: {
+ '0': { type: 'PERFORM_ACTION', action: { type: '@@INIT' } },
+ '1': { type: 'PERFORM_ACTION', action: { type: 'INCREMENT' } },
+ '2': { type: 'PERFORM_ACTION', action: { type: 'INCREMENT' } },
+ },
+ nextActionId: 3,
+ stagedActionIds: [0, 1, 2],
+ skippedActionIds: [],
+ currentStateIndex: 2,
+ computedStates: [{ state: 0 }, { state: 1 }, { state: 2 }],
+ }),
+ source: '@devtools-extension',
+ },
+ '*'
+ );
+ });
+ expect(message.type).toBe('IMPORT');
+ message = await listenMessage();
+ expect(message.type).toBe('STATE');
+ expect(window.store.getState()).toBe(2);
+ });
+
+ it('should create the store with config parameters', async () => {
+ const message = await listenMessage(() => {
+ window.store = createStore(
+ counter,
+ window.__REDUX_DEVTOOLS_EXTENSION__({
+ actionsBlacklist: ['SOME_ACTION'],
+ statesFilter: (state) => state,
+ serializeState: (key, value) => value,
+ })
+ );
+ expect(window.store).toBeA('object');
+ });
+ expect(message.type).toBe('INIT_INSTANCE');
+ });
+
+ it('should create the store using old Redux api', async () => {
+ const message = await listenMessage(() => {
+ window.store = window.__REDUX_DEVTOOLS_EXTENSION__()(createStore)(
+ counter
+ );
+ expect(window.store).toBeA('object');
+ });
+ expect(message.type).toBe('INIT_INSTANCE');
+ });
+
+ it('should create the store with several enhancers', async () => {
+ const testEnhancer = (next) => (reducer, initialState, enhancer) =>
+ next(reducer, initialState, enhancer);
+ const message = await listenMessage(() => {
+ window.store = createStore(
+ counter,
+ compose(testEnhancer, window.__REDUX_DEVTOOLS_EXTENSION__())
+ );
+ expect(window.store).toBeA('object');
+ });
+ expect(message.type).toBe('INIT_INSTANCE');
+ });
+});
diff --git a/extension/test/app/setup.js b/extension/test/app/setup.js
new file mode 100644
index 00000000..22e32956
--- /dev/null
+++ b/extension/test/app/setup.js
@@ -0,0 +1,31 @@
+require('@babel/register')();
+require('@babel/polyfill');
+global.chrome = require('sinon-chrome');
+var jsdom = require('jsdom').jsdom;
+
+var exposedProperties = ['window', 'navigator', 'document'];
+
+global.document = jsdom('');
+global.window = document.defaultView;
+Object.keys(document.defaultView).forEach((property) => {
+ if (typeof global[property] === 'undefined') {
+ exposedProperties.push(property);
+ global[property] = document.defaultView[property];
+ }
+});
+
+global.navigator = {
+ userAgent: 'gecko',
+};
+
+global.document.createRange = function () {
+ return {
+ setEnd: function () {},
+ setStart: function () {},
+ getBoundingClientRect: function () {
+ return { right: 0 };
+ },
+ };
+};
+
+documentRef = document;
diff --git a/extension/test/chrome/extension.spec.js b/extension/test/chrome/extension.spec.js
new file mode 100644
index 00000000..0a41519f
--- /dev/null
+++ b/extension/test/chrome/extension.spec.js
@@ -0,0 +1,91 @@
+import { resolve } from 'path';
+import webdriver from 'selenium-webdriver';
+import expect from 'expect';
+import chromedriver from 'chromedriver';
+import { switchMonitorTests, delay } from '../utils/e2e';
+
+const port = 9515;
+const path = resolve('build/extension');
+const extensionId = 'lmhkpmbekcpmknklioeibfkpmmfibljd';
+const actionsPattern = /^@@INIT(.|\n)+@@reduxReactRouter\/routerDidChange(.|\n)+@@reduxReactRouter\/initRoutes(.|\n)+$/;
+
+describe('Chrome extension', function () {
+ this.timeout(20000);
+
+ before(async () => {
+ chromedriver.start();
+ await delay(2000);
+ this.driver = new webdriver.Builder()
+ .usingServer(`http://localhost:${port}`)
+ .withCapabilities({
+ chromeOptions: {
+ args: [`load-extension=${path}`],
+ },
+ })
+ .forBrowser('chrome')
+ .build();
+ });
+ after(async () => {
+ await this.driver.quit();
+ chromedriver.stop();
+ });
+
+ it("should open extension's window", async () => {
+ await this.driver.get(`chrome-extension://${extensionId}/window.html#left`);
+ const url = await this.driver.getCurrentUrl();
+ expect(url).toBe(`chrome-extension://${extensionId}/window.html#left`);
+ });
+
+ it('should match document title', async () => {
+ const title = await this.driver.getTitle();
+ expect(title).toBe('Redux DevTools');
+ });
+
+ it("should contain inspector monitor's component", async () => {
+ const val = this.driver
+ .findElement(webdriver.By.xpath('//div[contains(@class, "inspector-")]'))
+ .getText();
+ expect(val).toExist();
+ });
+
+ it('should contain an empty actions list', async () => {
+ const val = await this.driver
+ .findElement(
+ webdriver.By.xpath('//div[contains(@class, "actionListRows-")]')
+ )
+ .getText();
+ expect(val).toBe('');
+ });
+
+ Object.keys(switchMonitorTests).forEach((description) =>
+ it(description, switchMonitorTests[description].bind(this))
+ );
+
+ it('should get actions list', async () => {
+ const url = 'http://zalmoxisus.github.io/examples/router/';
+ await this.driver.executeScript(`window.open('${url}')`);
+ await delay(2000);
+
+ const tabs = await this.driver.getAllWindowHandles();
+
+ await this.driver.switchTo().window(tabs[1]);
+ expect(await this.driver.getCurrentUrl()).toMatch(url);
+ await this.driver.manage().timeouts().pageLoadTimeout(5000);
+
+ await this.driver.switchTo().window(tabs[0]);
+
+ const result = await this.driver.wait(
+ this.driver
+ .findElement(
+ webdriver.By.xpath('//div[contains(@class, "actionListRows-")]')
+ )
+ .getText()
+ .then((val) => {
+ return actionsPattern.test(val);
+ }),
+ 15000,
+ "it doesn't match actions pattern"
+ );
+ expect(result).toBeTruthy();
+ });
+});
diff --git a/extension/test/chrome/setup.js b/extension/test/chrome/setup.js
new file mode 100644
index 00000000..3ebb381d
--- /dev/null
+++ b/extension/test/chrome/setup.js
@@ -0,0 +1,2 @@
+require('@babel/register')();
+require('@babel/polyfill');
diff --git a/extension/test/electron/devpanel.spec.js b/extension/test/electron/devpanel.spec.js
new file mode 100644
index 00000000..70f60e71
--- /dev/null
+++ b/extension/test/electron/devpanel.spec.js
@@ -0,0 +1,112 @@
+import { join } from 'path';
+import webdriver from 'selenium-webdriver';
+import electronPath from 'electron';
+import expect from 'expect';
+import chromedriver from 'chromedriver';
+import { switchMonitorTests, delay } from '../utils/e2e';
+
+const port = 9515;
+const devPanelPath = 'chrome-extension://redux-devtools/devpanel.html';
+
+describe('DevTools panel for Electron', function () {
+ this.timeout(10000);
+
+ before(async () => {
+ chromedriver.start();
+ await delay(1000);
+ this.driver = new webdriver.Builder()
+ .usingServer(`http://localhost:${port}`)
+ .withCapabilities({
+ chromeOptions: {
+ binary: electronPath,
+ args: [`app=${join(__dirname, 'fixture')}`],
+ },
+ })
+ .forBrowser('electron')
+ .build();
+ await this.driver.manage().timeouts().setScriptTimeout(10000);
+ });
+
+ after(async () => {
+ await this.driver.quit();
+ chromedriver.stop();
+ });
+
+ it('should open Redux DevTools tab', async () => {
+ expect(await this.driver.getCurrentUrl()).toMatch(
+ /chrome-devtools:\/\/devtools\/bundled\/inspector.html/
+ );
+
+ await this.driver.manage().timeouts().pageLoadTimeout(5000);
+
+ const id = await this.driver.executeAsyncScript(function (callback) {
+ let attempts = 5;
+ function showReduxPanel() {
+ if (attempts === 0) {
+ return callback('Redux panel not found');
+ }
+ const tabs = UI.inspectorView._tabbedPane._tabs;
+ const idList = tabs.map((tab) => tab.id);
+ const reduxPanelId = 'chrome-extension://redux-devtoolsRedux';
+ if (idList.indexOf(reduxPanelId) !== -1) {
+ UI.inspectorView.showPanel(reduxPanelId);
+ return callback(reduxPanelId);
+ }
+ attempts--;
+ setTimeout(showReduxPanel, 500);
+ }
+ showReduxPanel();
+ });
+ expect(id).toBe('chrome-extension://redux-devtoolsRedux');
+
+ const className = await this.driver
+ .findElement(webdriver.By.className(id))
+ .getAttribute('class');
+ expect(className).toNotMatch(/hidden/); // not hidden
+ });
+
+ it('should have Redux DevTools UI on current tab', async () => {
+ await this.driver
+ .switchTo()
+ .frame(
+ this.driver.findElement(
+ webdriver.By.xpath(`//iframe[@src='${devPanelPath}']`)
+ )
+ );
+ await delay(1000);
+ });
+
+ it('should contain INIT action', async () => {
+ const element = await this.driver.wait(
+ webdriver.until.elementLocated(
+ webdriver.By.xpath('//div[contains(@class, "actionListRows-")]')
+ ),
+ 5000,
+ 'Element not found'
+ );
+ const val = await element.getText();
+ expect(val).toMatch(/@@INIT/);
+ });
+
+ it("should contain Inspector monitor's component", async () => {
+ const val = await this.driver
+ .findElement(webdriver.By.xpath('//div[contains(@class, "inspector-")]'))
+ .getText();
+ expect(val).toExist();
+ });
+
+ Object.keys(switchMonitorTests).forEach((description) =>
+ it(description, switchMonitorTests[description].bind(this))
+ );
+
+ /* it('should be no logs in console of main window', async () => {
+ const handles = await this.driver.getAllWindowHandles();
+ await this.driver.switchTo().window(handles[1]); // Change to main window
+
+ expect(await this.driver.getTitle()).toBe('Electron Test');
+
+ const logs = await this.driver.manage().logs().get(webdriver.logging.Type.BROWSER);
+ expect(logs).toEqual([]);
+ });
+*/
+});
diff --git a/extension/test/electron/fixture/index.html b/extension/test/electron/fixture/index.html
new file mode 100644
index 00000000..06072c5c
--- /dev/null
+++ b/extension/test/electron/fixture/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
Electron Test
+
+
+
0
+
+
+
-
+
+
+
diff --git a/extension/test/electron/fixture/main.js b/extension/test/electron/fixture/main.js
new file mode 100644
index 00000000..43b5927b
--- /dev/null
+++ b/extension/test/electron/fixture/main.js
@@ -0,0 +1,18 @@
+const path = require('path');
+const { app, BrowserWindow } = require('electron');
+
+app.setPath('userData', path.join(__dirname, '../tmp'));
+
+app.on('window-all-closed', app.quit);
+app.on('ready', () => {
+ BrowserWindow.addDevToolsExtension(
+ path.join(__dirname, '../../../build/extension')
+ );
+
+ const mainWindow = new BrowserWindow({
+ width: 150,
+ height: 100,
+ });
+ mainWindow.loadURL(`file://${__dirname}/index.html`);
+ mainWindow.openDevTools({ detach: true });
+});
diff --git a/extension/test/electron/fixture/package.json b/extension/test/electron/fixture/package.json
new file mode 100644
index 00000000..4cb3a0d5
--- /dev/null
+++ b/extension/test/electron/fixture/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "electron-test",
+ "productName": "Electron Test",
+ "main": "main.js",
+ "version": "0.1.0"
+}
diff --git a/extension/test/electron/fixture/renderer.js b/extension/test/electron/fixture/renderer.js
new file mode 100644
index 00000000..574a7bae
--- /dev/null
+++ b/extension/test/electron/fixture/renderer.js
@@ -0,0 +1,34 @@
+const { createStore } = require('redux');
+
+const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
+const DECREMENT_COUNTER = 'DECREMENT_COUNTER';
+
+const initialState = { value: 0 };
+
+const store = createStore(
+ (state, action) => {
+ switch (action.type) {
+ case INCREMENT_COUNTER:
+ return { value: state.value + 1 };
+ case DECREMENT_COUNTER:
+ return { value: state.value - 1 };
+ default:
+ return state;
+ }
+ },
+ initialState,
+ window.__REDUX_DEVTOOLS_EXTENSION__
+ ? window.__REDUX_DEVTOOLS_EXTENSION__()
+ : (noop) => noop
+);
+
+const el = document.getElementById('counter');
+
+store.subscribe(() => {
+ el.innerHTML = store.getState().value;
+});
+
+const increment = document.getElementById('increment');
+const decrement = document.getElementById('decrement');
+increment.onclick = () => store.dispatch({ type: INCREMENT_COUNTER });
+decrement.onclick = () => store.dispatch({ type: DECREMENT_COUNTER });
diff --git a/extension/test/electron/setup.js b/extension/test/electron/setup.js
new file mode 100644
index 00000000..3ebb381d
--- /dev/null
+++ b/extension/test/electron/setup.js
@@ -0,0 +1,2 @@
+require('@babel/register')();
+require('@babel/polyfill');
diff --git a/extension/test/perf/data.js b/extension/test/perf/data.js
new file mode 100644
index 00000000..2f6f3690
--- /dev/null
+++ b/extension/test/perf/data.js
@@ -0,0 +1,3660 @@
+// Source: http://beta.json-generator.com/V1omRaUJG
+/* eslint-disable */
+
+export const bigString = Array(10000000).join('t');
+
+export const bigArray = [
+ {
+ _id: '580ddf0b168ab8fe470be6e0',
+ index: 0,
+ guid: '2ce09bef-e6a5-4894-b720-74c9eb72098d',
+ isActive: true,
+ balance: '$3,164.44',
+ picture: 'http://placehold.it/32x32',
+ age: 30,
+ eyeColor: 'green',
+ name: {
+ first: 'Kenya',
+ last: 'Hoover',
+ },
+ company: 'QUALITERN',
+ email: 'kenya.hoover@qualitern.biz',
+ phone: '+1 (829) 556-2040',
+ address: '605 Glenwood Road, Cherokee, Oklahoma, 8113',
+ about:
+ 'Fugiat dolore ut esse ullamco incididunt culpa qui pariatur mollit nostrud incididunt. Quis pariatur sunt ut ipsum qui consequat sit dolore consequat esse elit consectetur do. Cillum labore cupidatat ipsum laboris. Non nisi minim adipisicing et culpa consectetur mollit incididunt ullamco. Non velit ea irure aute aliqua et incididunt officia laborum.',
+ registered: 'Monday, June 22, 2015 9:38 AM',
+ latitude: '84.835869',
+ longitude: '64.139911',
+ tags: ['eiusmod', 'aute', 'ipsum', 'ad', 'mollit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Alba Bartlett',
+ },
+ {
+ id: 1,
+ name: 'Andrews Mcleod',
+ },
+ {
+ id: 2,
+ name: 'Elise Velazquez',
+ },
+ ],
+ greeting: 'Hello, Kenya! You have 8 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bc26524220b80fa59',
+ index: 1,
+ guid: '80713a26-75b0-4a4e-914d-52f31fade72c',
+ isActive: true,
+ balance: '$1,455.30',
+ picture: 'http://placehold.it/32x32',
+ age: 28,
+ eyeColor: 'blue',
+ name: {
+ first: 'Jami',
+ last: 'Mcfarland',
+ },
+ company: 'LIMAGE',
+ email: 'jami.mcfarland@limage.co.uk',
+ phone: '+1 (944) 566-3918',
+ address: '804 Montgomery Place, Henrietta, Alaska, 9608',
+ about:
+ 'Velit esse ut dolor Lorem laboris esse aute est pariatur tempor esse aute ut ut. In magna esse aute ea cillum qui mollit consectetur minim qui pariatur. Sit consequat fugiat ut veniam non ut deserunt culpa velit ex id laborum tempor. Duis est amet sunt id sunt. Ullamco minim officia irure quis veniam ipsum. Minim proident commodo ea ea dolore. Velit sunt magna commodo quis est dolor eiusmod aliqua occaecat tempor ut.',
+ registered: 'Saturday, October 24, 2015 9:38 AM',
+ latitude: '-39.25774',
+ longitude: '-118.315297',
+ tags: ['voluptate', 'dolor', 'enim', 'reprehenderit', 'et'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Goff Compton',
+ },
+ {
+ id: 1,
+ name: 'Sherry Randall',
+ },
+ {
+ id: 2,
+ name: 'Janell Mcconnell',
+ },
+ ],
+ greeting: 'Hello, Jami! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b8b30c17733f75cf3',
+ index: 2,
+ guid: 'dca38381-500a-4f4e-823a-d95484f9e87d',
+ isActive: false,
+ balance: '$1,451.88',
+ picture: 'http://placehold.it/32x32',
+ age: 27,
+ eyeColor: 'brown',
+ name: {
+ first: 'Jodie',
+ last: 'Holder',
+ },
+ company: 'AVIT',
+ email: 'jodie.holder@avit.us',
+ phone: '+1 (948) 512-2550',
+ address:
+ '371 Stockholm Street, Wattsville, Federated States Of Micronesia, 4778',
+ about:
+ 'Voluptate nisi commodo duis sunt. Magna consectetur minim consectetur esse excepteur adipisicing laboris. Culpa sunt culpa sit exercitation. Duis ea culpa aliqua do exercitation adipisicing ullamco ut officia occaecat incididunt dolore nisi. Tempor est proident cillum nulla do exercitation dolor incididunt. Aute magna aliquip elit irure dolor anim voluptate.',
+ registered: 'Sunday, April 5, 2015 12:27 PM',
+ latitude: '68.671844',
+ longitude: '100.317594',
+ tags: ['Lorem', 'qui', 'do', 'excepteur', 'duis'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Mason Carroll',
+ },
+ {
+ id: 1,
+ name: 'Bonnie Ross',
+ },
+ {
+ id: 2,
+ name: 'Shields Mays',
+ },
+ ],
+ greeting: 'Hello, Jodie! You have 5 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bd7a19dd3361592b6',
+ index: 3,
+ guid: '0c45af75-ee65-427a-a462-e01d5a3d882f',
+ isActive: true,
+ balance: '$1,883.45',
+ picture: 'http://placehold.it/32x32',
+ age: 25,
+ eyeColor: 'brown',
+ name: {
+ first: 'Britney',
+ last: 'Ryan',
+ },
+ company: 'BUNGA',
+ email: 'britney.ryan@bunga.name',
+ phone: '+1 (996) 502-2698',
+ address: '520 Monument Walk, Shindler, Iowa, 1721',
+ about:
+ 'Cupidatat aute est consectetur eiusmod ut veniam qui sit adipisicing Lorem nostrud proident deserunt exercitation. Laborum ullamco minim nisi nulla ullamco fugiat laboris nisi eiusmod ullamco enim aliqua deserunt. Occaecat anim aliquip est sunt voluptate qui dolore. Minim mollit et esse quis tempor eu anim deserunt nostrud. Voluptate amet voluptate eu anim culpa quis. Non do aliqua sit cupidatat eiusmod commodo in sit esse consequat. Cupidatat elit do exercitation ex proident ex nulla ex ad ut.',
+ registered: 'Tuesday, January 19, 2016 12:05 PM',
+ latitude: '-12.692828',
+ longitude: '172.541591',
+ tags: ['fugiat', 'fugiat', 'anim', 'magna', 'in'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Jeanette Paul',
+ },
+ {
+ id: 1,
+ name: 'Jones Sherman',
+ },
+ {
+ id: 2,
+ name: 'Pruitt Gross',
+ },
+ ],
+ greeting: 'Hello, Britney! You have 8 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bdb18815e253438a8',
+ index: 4,
+ guid: '35df48d8-e840-43fc-b99c-f078a0c028d5',
+ isActive: false,
+ balance: '$2,753.26',
+ picture: 'http://placehold.it/32x32',
+ age: 20,
+ eyeColor: 'blue',
+ name: {
+ first: 'West',
+ last: 'Sharp',
+ },
+ company: 'GROK',
+ email: 'west.sharp@grok.info',
+ phone: '+1 (947) 561-3088',
+ address: '217 Clay Street, Fingerville, Puerto Rico, 382',
+ about:
+ 'Tempor ut ex aliqua ipsum. Ipsum fugiat dolor exercitation mollit eiusmod duis nulla occaecat excepteur ea irure minim minim sit. Proident esse id deserunt tempor dolor sit consectetur proident deserunt fugiat excepteur laborum. Incididunt fugiat id fugiat id Lorem est sit aliqua sit officia excepteur nulla mollit. Aliquip nulla nisi ea qui ex non nostrud culpa et anim. Velit labore esse id exercitation ex duis aliquip est ea eu. Sint Lorem mollit deserunt adipisicing do amet laborum velit nostrud commodo enim fugiat anim pariatur.',
+ registered: 'Tuesday, May 10, 2016 2:56 PM',
+ latitude: '6.032735',
+ longitude: '-168.931741',
+ tags: ['non', 'aliquip', 'ullamco', 'ex', 'veniam'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Head Riley',
+ },
+ {
+ id: 1,
+ name: 'Meyer Oneal',
+ },
+ {
+ id: 2,
+ name: 'Molina Tyson',
+ },
+ ],
+ greeting: 'Hello, West! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0ba2234b9e4a2b47b2',
+ index: 5,
+ guid: '16a1e635-f30b-49d7-b0f2-69ee74313900',
+ isActive: true,
+ balance: '$3,982.09',
+ picture: 'http://placehold.it/32x32',
+ age: 40,
+ eyeColor: 'blue',
+ name: {
+ first: 'Manuela',
+ last: 'Henry',
+ },
+ company: 'MEDCOM',
+ email: 'manuela.henry@medcom.io',
+ phone: '+1 (876) 521-2923',
+ address: '112 Clove Road, Cliffside, Kansas, 6979',
+ about:
+ 'Exercitation ea esse aliquip sint nisi consequat dolor adipisicing do pariatur et id est voluptate. In occaecat dolor exercitation do aliquip cillum in. Deserunt nisi deserunt Lorem aliqua adipisicing. Consequat eiusmod occaecat pariatur mollit aliqua non tempor aliquip sint consequat sit enim. Elit consectetur dolor sint ipsum officia in duis laboris irure aliquip ea labore. Aliquip ullamco fugiat dolore fugiat id. Deserunt id amet eiusmod tempor do tempor ut laborum.',
+ registered: 'Wednesday, March 4, 2015 4:00 PM',
+ latitude: '-53.534313',
+ longitude: '101.348892',
+ tags: ['sint', 'voluptate', 'duis', 'laboris', 'nisi'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Beryl Chang',
+ },
+ {
+ id: 1,
+ name: 'Pierce Simpson',
+ },
+ {
+ id: 2,
+ name: 'Sonja Pacheco',
+ },
+ ],
+ greeting: 'Hello, Manuela! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b39bcca5393e6b4a5',
+ index: 6,
+ guid: '4c69c263-a646-4446-adfe-eeac5481ade3',
+ isActive: false,
+ balance: '$1,557.52',
+ picture: 'http://placehold.it/32x32',
+ age: 36,
+ eyeColor: 'green',
+ name: {
+ first: 'Marcy',
+ last: 'Collier',
+ },
+ company: 'KINETICA',
+ email: 'marcy.collier@kinetica.com',
+ phone: '+1 (812) 599-2621',
+ address: '701 Melrose Street, Cloverdale, North Dakota, 8703',
+ about:
+ 'Cupidatat velit cupidatat officia ad. Nulla cupidatat esse velit velit. Officia amet ea cupidatat sint consequat cupidatat. Eiusmod deserunt laborum qui proident tempor ullamco tempor officia laborum cillum ipsum commodo mollit.',
+ registered: 'Sunday, December 7, 2014 11:48 PM',
+ latitude: '19.152716',
+ longitude: '119.251991',
+ tags: ['minim', 'qui', 'exercitation', 'tempor', 'sunt'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Estes Porter',
+ },
+ {
+ id: 1,
+ name: 'Sheila Miller',
+ },
+ {
+ id: 2,
+ name: 'Bell Rosario',
+ },
+ ],
+ greeting: 'Hello, Marcy! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b0887381e90657c23',
+ index: 7,
+ guid: '80b50d03-70cd-4ce5-b6c7-c3d60b9e29ff',
+ isActive: false,
+ balance: '$3,203.72',
+ picture: 'http://placehold.it/32x32',
+ age: 34,
+ eyeColor: 'green',
+ name: {
+ first: 'Esperanza',
+ last: 'Mack',
+ },
+ company: 'FURNAFIX',
+ email: 'esperanza.mack@furnafix.tv',
+ phone: '+1 (948) 511-2731',
+ address: '502 Bliss Terrace, Marenisco, Northern Mariana Islands, 7773',
+ about:
+ 'Proident deserunt ipsum aute irure laboris nisi non velit officia nisi anim. Magna nisi eiusmod deserunt ad veniam sit ullamco sit fugiat officia dolor incididunt id irure. Laborum id fugiat pariatur dolor proident Lorem do ex occaecat.',
+ registered: 'Sunday, April 24, 2016 9:33 AM',
+ latitude: '79.033601',
+ longitude: '138.782377',
+ tags: ['velit', 'sint', 'est', 'proident', 'in'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Roy Clemons',
+ },
+ {
+ id: 1,
+ name: 'Baldwin Glenn',
+ },
+ {
+ id: 2,
+ name: 'Castaneda Combs',
+ },
+ ],
+ greeting: 'Hello, Esperanza! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bee6486345816b9f4',
+ index: 8,
+ guid: '629ee6bb-bbe3-4f7e-9f6c-b8b53761e7b5',
+ isActive: false,
+ balance: '$2,112.11',
+ picture: 'http://placehold.it/32x32',
+ age: 37,
+ eyeColor: 'green',
+ name: {
+ first: 'Bender',
+ last: 'Sheppard',
+ },
+ company: 'PROXSOFT',
+ email: 'bender.sheppard@proxsoft.net',
+ phone: '+1 (986) 490-3036',
+ address: '509 Fuller Place, Dodge, Montana, 1706',
+ about:
+ 'Ullamco dolore fugiat nulla non amet Lorem elit ullamco ipsum. Mollit anim do eiusmod esse sint esse voluptate exercitation ipsum ut nulla. Dolore pariatur eiusmod amet reprehenderit. Ea officia in ipsum laborum officia id tempor quis nostrud id ex id duis. Eiusmod incididunt voluptate duis sint laborum.',
+ registered: 'Sunday, June 19, 2016 8:45 AM',
+ latitude: '-35.720137',
+ longitude: '-49.926356',
+ tags: ['enim', 'cupidatat', 'cupidatat', 'tempor', 'cupidatat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Owens Branch',
+ },
+ {
+ id: 1,
+ name: 'Williams Boone',
+ },
+ {
+ id: 2,
+ name: 'Doris Morrison',
+ },
+ ],
+ greeting: 'Hello, Bender! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b4b41ebbb13abd5d0',
+ index: 9,
+ guid: '54401f5b-ae5f-412c-9149-7a361a73e02f',
+ isActive: true,
+ balance: '$1,483.87',
+ picture: 'http://placehold.it/32x32',
+ age: 26,
+ eyeColor: 'brown',
+ name: {
+ first: 'Summers',
+ last: 'Donaldson',
+ },
+ company: 'ARTIQ',
+ email: 'summers.donaldson@artiq.org',
+ phone: '+1 (972) 486-2456',
+ address: '980 Pierrepont Street, Gerber, Ohio, 9892',
+ about:
+ 'Proident veniam officia sunt esse culpa labore anim quis do. Sunt ullamco elit amet incididunt fugiat magna id do veniam ullamco et anim. Aute labore pariatur ex ea deserunt nulla Lorem adipisicing non ad. Id ea proident voluptate aliqua velit aliquip enim incididunt. Do ipsum ipsum voluptate voluptate aliquip ex officia velit in officia ex esse aute.',
+ registered: 'Tuesday, December 30, 2014 1:21 AM',
+ latitude: '-83.907394',
+ longitude: '10.741994',
+ tags: ['laborum', 'proident', 'occaecat', 'elit', 'occaecat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Love Lott',
+ },
+ {
+ id: 1,
+ name: 'Johnson Clay',
+ },
+ {
+ id: 2,
+ name: 'Nelson Blair',
+ },
+ ],
+ greeting: 'Hello, Summers! You have 8 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0bc2e80831e45b4dc6',
+ index: 10,
+ guid: '0e7ba51d-202e-4e28-a6a5-a9b6ec63abd4',
+ isActive: false,
+ balance: '$3,079.46',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'blue',
+ name: {
+ first: 'Shelby',
+ last: 'Conway',
+ },
+ company: 'ZINCA',
+ email: 'shelby.conway@zinca.me',
+ phone: '+1 (985) 510-2634',
+ address: '955 Seagate Terrace, Verdi, Oregon, 6649',
+ about:
+ 'Incididunt aliqua veniam elit ea cupidatat dolore. Ipsum culpa ut consequat velit sint sint ad. Ex fugiat consequat et sit ex sit esse ullamco magna reprehenderit ea id reprehenderit. Adipisicing et esse commodo sit Lorem ipsum ea fugiat officia do et culpa reprehenderit sunt.',
+ registered: 'Tuesday, March 1, 2016 12:46 PM',
+ latitude: '79.379348',
+ longitude: '-179.029537',
+ tags: ['elit', 'dolore', 'in', 'excepteur', 'sit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Dean Salinas',
+ },
+ {
+ id: 1,
+ name: 'Josie Calhoun',
+ },
+ {
+ id: 2,
+ name: 'Huffman Walton',
+ },
+ ],
+ greeting: 'Hello, Shelby! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b38c03f61248fbb18',
+ index: 11,
+ guid: '004be9ab-5520-4f85-b6e9-806c701faafe',
+ isActive: false,
+ balance: '$3,974.78',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'green',
+ name: {
+ first: 'Reynolds',
+ last: 'Hurley',
+ },
+ company: 'TELLIFLY',
+ email: 'reynolds.hurley@tellifly.ca',
+ phone: '+1 (906) 482-2018',
+ address: '364 Jackson Court, Edmund, Arizona, 5300',
+ about:
+ 'Aute deserunt labore consectetur non anim culpa mollit. Cillum Lorem excepteur esse non anim. Duis aliqua id laborum ex mollit id tempor nisi non voluptate. Nostrud enim in labore consequat id laboris Lorem veniam veniam amet. Laboris nostrud dolore proident labore incididunt elit quis officia elit est exercitation veniam aute.',
+ registered: 'Friday, May 27, 2016 1:32 PM',
+ latitude: '-5.022457',
+ longitude: '96.958037',
+ tags: ['sit', 'laboris', 'Lorem', 'dolor', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Heidi Flores',
+ },
+ {
+ id: 1,
+ name: 'Armstrong Middleton',
+ },
+ {
+ id: 2,
+ name: 'Figueroa Camacho',
+ },
+ ],
+ greeting: 'Hello, Reynolds! You have 9 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b1835b3ed2579bfc0',
+ index: 12,
+ guid: '88c12f0a-23df-4161-8e3a-c6c3101292f2',
+ isActive: false,
+ balance: '$1,419.27',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'blue',
+ name: {
+ first: 'Young',
+ last: 'Santiago',
+ },
+ company: 'GINKLE',
+ email: 'young.santiago@ginkle.biz',
+ phone: '+1 (922) 566-2702',
+ address: '278 Bartlett Place, Tetherow, Vermont, 191',
+ about:
+ 'Est consectetur esse culpa ullamco. Dolore voluptate aute consequat voluptate. Exercitation fugiat est anim qui exercitation nostrud.',
+ registered: 'Tuesday, June 28, 2016 7:18 AM',
+ latitude: '-43.055507',
+ longitude: '45.085776',
+ tags: ['sit', 'Lorem', 'deserunt', 'fugiat', 'cupidatat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Sheryl Smith',
+ },
+ {
+ id: 1,
+ name: 'Felicia Mcintosh',
+ },
+ {
+ id: 2,
+ name: 'Hoover Hardy',
+ },
+ ],
+ greeting: 'Hello, Young! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0bf31dbaaeb3c9cfcd',
+ index: 13,
+ guid: '3a39f0ef-3659-4e01-b2d7-bb537fdd1a3a',
+ isActive: false,
+ balance: '$2,529.26',
+ picture: 'http://placehold.it/32x32',
+ age: 34,
+ eyeColor: 'blue',
+ name: {
+ first: 'Trina',
+ last: 'Decker',
+ },
+ company: 'SULTRAXIN',
+ email: 'trina.decker@sultraxin.co.uk',
+ phone: '+1 (980) 524-2887',
+ address: '874 Llama Court, Klondike, California, 293',
+ about:
+ 'Ad duis Lorem nulla ex. Proident pariatur Lorem pariatur fugiat deserunt duis incididunt esse eiusmod officia. Eiusmod quis pariatur mollit sint exercitation aute. Mollit enim consequat aliqua quis. Fugiat Lorem do duis aute sit dolore.',
+ registered: 'Friday, February 19, 2016 1:30 PM',
+ latitude: '15.917567',
+ longitude: '-1.518009',
+ tags: ['ex', 'sit', 'enim', 'consequat', 'sit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Wyatt Pickett',
+ },
+ {
+ id: 1,
+ name: 'Valarie Barr',
+ },
+ {
+ id: 2,
+ name: 'Pace Best',
+ },
+ ],
+ greeting: 'Hello, Trina! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b3934d0edbaeaba18',
+ index: 14,
+ guid: 'd5f5a79c-de56-4aca-bcc4-1b9df58a2b1d',
+ isActive: false,
+ balance: '$3,670.31',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'green',
+ name: {
+ first: 'Tasha',
+ last: 'Merritt',
+ },
+ company: 'RODEOCEAN',
+ email: 'tasha.merritt@rodeocean.us',
+ phone: '+1 (940) 421-2122',
+ address: '790 Suydam Place, Keyport, Idaho, 2211',
+ about:
+ 'Ad elit cillum laboris laborum ut minim aute non ullamco ipsum incididunt labore officia velit. Cillum sunt do laboris enim eiusmod ad elit nostrud est deserunt quis. Consectetur ea ex consectetur commodo cillum sunt mollit Lorem ea sunt sit ut magna. Quis labore fugiat aliquip non consectetur est. Ut pariatur duis veniam ut exercitation est est. Ullamco dolore nulla est pariatur.',
+ registered: 'Wednesday, October 22, 2014 11:57 PM',
+ latitude: '12.554934',
+ longitude: '-149.800679',
+ tags: ['reprehenderit', 'ex', 'tempor', 'sint', 'exercitation'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Dennis Mills',
+ },
+ {
+ id: 1,
+ name: 'Vargas Guerrero',
+ },
+ {
+ id: 2,
+ name: 'Hollie Chavez',
+ },
+ ],
+ greeting: 'Hello, Tasha! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bafee284452c9a02e',
+ index: 15,
+ guid: 'b35eff37-836a-4928-9a06-701c2bc32881',
+ isActive: true,
+ balance: '$2,931.23',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'blue',
+ name: {
+ first: 'Maryann',
+ last: 'Ewing',
+ },
+ company: 'ASSISTIA',
+ email: 'maryann.ewing@assistia.name',
+ phone: '+1 (911) 512-2851',
+ address: '450 Seeley Street, Winfred, Mississippi, 587',
+ about:
+ 'Aliquip et Lorem aliquip aute adipisicing nisi incididunt deserunt non ipsum irure cillum voluptate. Sunt exercitation irure mollit proident anim ut veniam enim ullamco eiusmod do sint aliqua aliqua. Enim sunt quis exercitation culpa velit. Officia commodo amet enim quis ipsum non Lorem non excepteur. Quis aute elit irure elit sit ullamco cupidatat ullamco enim et cillum id.',
+ registered: 'Friday, June 17, 2016 2:12 PM',
+ latitude: '47.215077',
+ longitude: '81.317216',
+ tags: ['commodo', 'id', 'nulla', 'pariatur', 'exercitation'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Sue Finley',
+ },
+ {
+ id: 1,
+ name: 'Chandler Mccarty',
+ },
+ {
+ id: 2,
+ name: 'Laura Coleman',
+ },
+ ],
+ greeting: 'Hello, Maryann! You have 8 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b5b3b1890b6b64d7b',
+ index: 16,
+ guid: 'ef7682f0-23ff-479d-8a81-54d01e2641ec',
+ isActive: true,
+ balance: '$1,841.30',
+ picture: 'http://placehold.it/32x32',
+ age: 30,
+ eyeColor: 'brown',
+ name: {
+ first: 'Hammond',
+ last: 'Koch',
+ },
+ company: 'CYCLONICA',
+ email: 'hammond.koch@cyclonica.info',
+ phone: '+1 (974) 481-2184',
+ address: '141 Exeter Street, Kipp, Alabama, 643',
+ about:
+ 'Ullamco aliqua id veniam ea do. Commodo dolore fugiat ut aliquip. Est ut qui elit amet. Aliquip mollit occaecat consequat id exercitation eu fugiat voluptate culpa labore eiusmod aliqua cillum. Eu amet consequat deserunt enim qui mollit aliqua nisi ad ut veniam elit pariatur.',
+ registered: 'Sunday, July 13, 2014 10:47 PM',
+ latitude: '8.698118',
+ longitude: '-68.775186',
+ tags: ['id', 'voluptate', 'labore', 'magna', 'Lorem'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Mildred Brewer',
+ },
+ {
+ id: 1,
+ name: 'Buck Potts',
+ },
+ {
+ id: 2,
+ name: 'Kline Valencia',
+ },
+ ],
+ greeting: 'Hello, Hammond! You have 5 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0be6e62a7ef65bf203',
+ index: 17,
+ guid: '2c45743d-dfe7-4621-acc2-7664fc7a39f1',
+ isActive: true,
+ balance: '$3,281.24',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'blue',
+ name: {
+ first: 'Holt',
+ last: 'Pennington',
+ },
+ company: 'NORALEX',
+ email: 'holt.pennington@noralex.io',
+ phone: '+1 (948) 557-3137',
+ address: '483 Woodruff Avenue, Kapowsin, Illinois, 6162',
+ about:
+ 'Nisi non consectetur est deserunt nisi aliqua. Mollit labore dolore ex ex id eu proident nostrud deserunt consequat nostrud. Ad irure duis ex enim commodo proident ullamco esse. Ex sit eiusmod occaecat minim nulla ut Lorem Lorem. Quis est in et est cupidatat fugiat dolor minim voluptate.',
+ registered: 'Saturday, September 20, 2014 3:43 AM',
+ latitude: '-1.585287',
+ longitude: '-32.054323',
+ tags: ['ex', 'adipisicing', 'est', 'aute', 'amet'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Irma Wynn',
+ },
+ {
+ id: 1,
+ name: 'Branch Todd',
+ },
+ {
+ id: 2,
+ name: 'Carey Dejesus',
+ },
+ ],
+ greeting: 'Hello, Holt! You have 7 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bd38a23008f8a6714',
+ index: 18,
+ guid: 'ef07b7c0-ee2e-4163-9c25-829cfcd2b142',
+ isActive: true,
+ balance: '$2,267.65',
+ picture: 'http://placehold.it/32x32',
+ age: 27,
+ eyeColor: 'brown',
+ name: {
+ first: 'Farley',
+ last: 'Jensen',
+ },
+ company: 'CODACT',
+ email: 'farley.jensen@codact.com',
+ phone: '+1 (861) 581-3498',
+ address: '535 Richmond Street, Boomer, Rhode Island, 4214',
+ about:
+ 'Et dolore do qui velit aliquip sit laboris consequat tempor officia pariatur ex. Consectetur adipisicing non exercitation qui culpa deserunt reprehenderit magna qui laboris irure commodo ex excepteur. Do sit eiusmod amet pariatur velit reprehenderit pariatur tempor irure.',
+ registered: 'Thursday, January 21, 2016 10:53 PM',
+ latitude: '57.38679',
+ longitude: '-118.607665',
+ tags: ['esse', 'ipsum', 'nisi', 'tempor', 'veniam'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Roslyn Bush',
+ },
+ {
+ id: 1,
+ name: 'Garrison Good',
+ },
+ {
+ id: 2,
+ name: 'Langley Mccray',
+ },
+ ],
+ greeting: 'Hello, Farley! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b4d770216e6684e75',
+ index: 19,
+ guid: '7d88afe0-cc56-454c-ae62-bebcd97bf1ce',
+ isActive: false,
+ balance: '$2,132.97',
+ picture: 'http://placehold.it/32x32',
+ age: 20,
+ eyeColor: 'green',
+ name: {
+ first: 'Lindsey',
+ last: 'Mccall',
+ },
+ company: 'CENTICE',
+ email: 'lindsey.mccall@centice.tv',
+ phone: '+1 (833) 454-2919',
+ address: '809 Seaview Court, Sexton, New Mexico, 333',
+ about:
+ 'Id minim voluptate ullamco voluptate elit in consectetur irure commodo velit qui eiusmod exercitation. Commodo magna consectetur excepteur eiusmod est minim ipsum occaecat amet. Labore quis anim aliqua Lorem qui. Sint ad cillum cillum excepteur eu nostrud aute.',
+ registered: 'Thursday, February 20, 2014 10:05 AM',
+ latitude: '41.095766',
+ longitude: '-80.580867',
+ tags: ['esse', 'do', 'velit', 'deserunt', 'officia'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Allie Deleon',
+ },
+ {
+ id: 1,
+ name: 'Trudy Miles',
+ },
+ {
+ id: 2,
+ name: 'Lucy Lambert',
+ },
+ ],
+ greeting: 'Hello, Lindsey! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b1cd38dd10da43b88',
+ index: 20,
+ guid: '29e94d5c-de50-4bd1-93bd-ccbb98e2b0b5',
+ isActive: true,
+ balance: '$1,494.27',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'brown',
+ name: {
+ first: 'Schmidt',
+ last: 'Terry',
+ },
+ company: 'ACCUSAGE',
+ email: 'schmidt.terry@accusage.net',
+ phone: '+1 (917) 421-2816',
+ address: '949 Beard Street, Allensworth, Marshall Islands, 5372',
+ about:
+ 'Sint ex aute irure consequat mollit nostrud non. Non laboris ut deserunt nulla commodo id deserunt ut magna duis irure cupidatat. Deserunt eu incididunt exercitation velit ad laborum ad ipsum mollit reprehenderit laboris occaecat ullamco nulla. Consequat culpa id ullamco voluptate esse incididunt sint labore anim minim Lorem quis duis. In officia ex enim enim.',
+ registered: 'Tuesday, January 26, 2016 1:28 PM',
+ latitude: '41.675283',
+ longitude: '-72.234891',
+ tags: ['consequat', 'aliqua', 'nostrud', 'voluptate', 'dolor'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Vonda Byers',
+ },
+ {
+ id: 1,
+ name: 'Ashley Mayer',
+ },
+ {
+ id: 2,
+ name: 'Deborah Fuller',
+ },
+ ],
+ greeting: 'Hello, Schmidt! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0b06efb327eb692d35',
+ index: 21,
+ guid: 'ea02ef2d-6359-47c3-b324-c753511ea778',
+ isActive: false,
+ balance: '$1,009.38',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'brown',
+ name: {
+ first: 'Bradley',
+ last: 'Wyatt',
+ },
+ company: 'PANZENT',
+ email: 'bradley.wyatt@panzent.org',
+ phone: '+1 (875) 520-2168',
+ address: '287 Utica Avenue, Hendersonville, Nebraska, 8366',
+ about:
+ 'Do duis proident qui reprehenderit adipisicing nisi aliquip. Ut proident adipisicing quis proident sunt laboris adipisicing dolor. Non est aute Lorem cupidatat minim ea irure laborum minim eiusmod tempor nulla.',
+ registered: 'Tuesday, May 6, 2014 6:25 PM',
+ latitude: '77.325105',
+ longitude: '-85.665071',
+ tags: ['in', 'laborum', 'irure', 'irure', 'exercitation'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Stacey Banks',
+ },
+ {
+ id: 1,
+ name: 'Kelley Cox',
+ },
+ {
+ id: 2,
+ name: 'Gayle Ochoa',
+ },
+ ],
+ greeting: 'Hello, Bradley! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b39a0426fed8383c6',
+ index: 22,
+ guid: '061746b2-33e4-4f40-b19d-d829a2068d87',
+ isActive: true,
+ balance: '$2,235.00',
+ picture: 'http://placehold.it/32x32',
+ age: 32,
+ eyeColor: 'blue',
+ name: {
+ first: 'Stafford',
+ last: 'Sweet',
+ },
+ company: 'VIRVA',
+ email: 'stafford.sweet@virva.me',
+ phone: '+1 (902) 447-3038',
+ address: '688 Bond Street, Robinette, Pennsylvania, 3883',
+ about:
+ 'Proident minim quis esse excepteur voluptate reprehenderit ea. Adipisicing esse ex aute in exercitation aute enim ut qui fugiat ex tempor eiusmod. Consectetur minim exercitation dolor aliquip pariatur cupidatat deserunt eu reprehenderit anim duis occaecat culpa. Sint aliquip ad mollit ut dolor excepteur duis nulla ipsum.',
+ registered: 'Sunday, March 30, 2014 7:54 PM',
+ latitude: '83.670234',
+ longitude: '-59.354751',
+ tags: ['proident', 'et', 'sit', 'id', 'reprehenderit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Christi Willis',
+ },
+ {
+ id: 1,
+ name: 'Deidre Thompson',
+ },
+ {
+ id: 2,
+ name: 'Torres Kennedy',
+ },
+ ],
+ greeting: 'Hello, Stafford! You have 9 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0bbd300e4bf08c3141',
+ index: 23,
+ guid: '9319b49d-63ef-4a31-bf86-70b0ceb377d9',
+ isActive: false,
+ balance: '$2,151.45',
+ picture: 'http://placehold.it/32x32',
+ age: 25,
+ eyeColor: 'blue',
+ name: {
+ first: 'Clarke',
+ last: 'Rhodes',
+ },
+ company: 'LIQUIDOC',
+ email: 'clarke.rhodes@liquidoc.ca',
+ phone: '+1 (861) 411-3808',
+ address: '276 Gain Court, Downsville, Maine, 6619',
+ about:
+ 'Ullamco eu enim fugiat duis quis eiusmod elit eiusmod aute. Adipisicing anim mollit non cillum irure velit deserunt magna voluptate incididunt ad dolore laboris non. Excepteur aute cillum dolore voluptate mollit quis ut ea non ullamco sint. Ullamco exercitation quis consequat proident ipsum aliqua dolor laboris voluptate dolore excepteur veniam. Nostrud sunt proident officia quis laborum proident elit laboris do.',
+ registered: 'Sunday, February 15, 2015 5:43 AM',
+ latitude: '-81.487322',
+ longitude: '-112.87443',
+ tags: ['velit', 'nostrud', 'enim', 'voluptate', 'et'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Mindy Horne',
+ },
+ {
+ id: 1,
+ name: 'Pamela Logan',
+ },
+ {
+ id: 2,
+ name: 'Peters Mccullough',
+ },
+ ],
+ greeting: 'Hello, Clarke! You have 7 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b736919e3a60cfa05',
+ index: 24,
+ guid: '8e31e6e1-3cc6-4a9f-bfa7-9955ec571776',
+ isActive: true,
+ balance: '$3,542.80',
+ picture: 'http://placehold.it/32x32',
+ age: 25,
+ eyeColor: 'brown',
+ name: {
+ first: 'Simon',
+ last: 'Sellers',
+ },
+ company: 'PEARLESSA',
+ email: 'simon.sellers@pearlessa.biz',
+ phone: '+1 (963) 586-2837',
+ address: '691 Wyona Street, Calvary, West Virginia, 216',
+ about:
+ 'Mollit consequat aliquip ad ut in reprehenderit. Ea aute laborum id dolor labore est adipisicing deserunt sit aliquip culpa culpa eiusmod excepteur. Mollit veniam magna ut mollit. Exercitation elit veniam laboris nostrud deserunt sint aute.',
+ registered: 'Monday, November 9, 2015 12:10 AM',
+ latitude: '-3.493185',
+ longitude: '-172.87793',
+ tags: ['id', 'labore', 'consequat', 'ea', 'occaecat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Lorrie Eaton',
+ },
+ {
+ id: 1,
+ name: 'Puckett Harper',
+ },
+ {
+ id: 2,
+ name: 'Roach Powers',
+ },
+ ],
+ greeting: 'Hello, Simon! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b2d85bc8100e78a3c',
+ index: 25,
+ guid: 'c836a6ee-d898-46a8-82f5-30408c199ed9',
+ isActive: false,
+ balance: '$1,425.17',
+ picture: 'http://placehold.it/32x32',
+ age: 36,
+ eyeColor: 'blue',
+ name: {
+ first: 'Tyler',
+ last: 'Rose',
+ },
+ company: 'ZOGAK',
+ email: 'tyler.rose@zogak.co.uk',
+ phone: '+1 (959) 508-3061',
+ address: '575 Furman Avenue, Zeba, South Dakota, 5624',
+ about:
+ 'Lorem irure eiusmod quis nostrud anim aute consequat mollit est. Fugiat laboris tempor officia voluptate commodo dolore. Aute elit ipsum esse cupidatat laborum anim nisi in exercitation quis duis. Nisi exercitation labore pariatur quis fugiat. Consequat cillum deserunt exercitation officia mollit amet reprehenderit laborum adipisicing id ex cupidatat. Tempor in aliqua irure ad. Cupidatat qui et aliqua sunt sint laboris incididunt in.',
+ registered: 'Friday, November 27, 2015 6:39 PM',
+ latitude: '21.932938',
+ longitude: '-144.979719',
+ tags: ['mollit', 'excepteur', 'deserunt', 'ipsum', 'proident'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Felecia Cantrell',
+ },
+ {
+ id: 1,
+ name: 'Ortega Wilkinson',
+ },
+ {
+ id: 2,
+ name: 'Linda Jennings',
+ },
+ ],
+ greeting: 'Hello, Tyler! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0b0a52937ecb5d0c4d',
+ index: 26,
+ guid: 'a7778e1d-70c3-4f66-ac41-60035653fb5f',
+ isActive: true,
+ balance: '$1,640.96',
+ picture: 'http://placehold.it/32x32',
+ age: 21,
+ eyeColor: 'green',
+ name: {
+ first: 'Greer',
+ last: 'Robbins',
+ },
+ company: 'KYAGURU',
+ email: 'greer.robbins@kyaguru.us',
+ phone: '+1 (925) 443-3311',
+ address: '650 Grant Avenue, Falmouth, Texas, 2573',
+ about:
+ 'Ipsum adipisicing occaecat occaecat deserunt non cupidatat non velit deserunt velit amet velit exercitation sint. Commodo eiusmod nisi velit ea officia laborum cupidatat mollit sunt esse tempor est non. Veniam aliquip dolor est sunt et. Et laboris nostrud reprehenderit nisi dolor aliqua occaecat aute commodo aute duis do. Esse exercitation Lorem adipisicing sunt cillum nisi minim pariatur consectetur. Ipsum amet dolore id voluptate ipsum amet ut cupidatat laboris fugiat ex sunt minim.',
+ registered: 'Wednesday, January 27, 2016 1:24 AM',
+ latitude: '43.532255',
+ longitude: '102.388279',
+ tags: ['non', 'occaecat', 'deserunt', 'exercitation', 'velit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Hogan Powell',
+ },
+ {
+ id: 1,
+ name: 'Valenzuela Chase',
+ },
+ {
+ id: 2,
+ name: 'Lakeisha Ball',
+ },
+ ],
+ greeting: 'Hello, Greer! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b10e85c3f2db6e944',
+ index: 27,
+ guid: '7f5f0c36-a744-4121-81f0-8840fb327754',
+ isActive: true,
+ balance: '$2,977.50',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'green',
+ name: {
+ first: 'Kitty',
+ last: 'Saunders',
+ },
+ company: 'SINGAVERA',
+ email: 'kitty.saunders@singavera.name',
+ phone: '+1 (896) 427-2344',
+ address: '107 Norfolk Street, Noxen, Missouri, 169',
+ about:
+ 'Commodo voluptate consectetur id et occaecat consequat consectetur adipisicing eiusmod commodo. Aute nisi culpa fugiat sunt proident. Aliquip laboris elit veniam quis cillum. Nulla enim proident excepteur magna. Proident do aute tempor exercitation nostrud. Lorem officia id excepteur commodo incididunt et deserunt excepteur qui officia est incididunt mollit ut. Aute dolore cupidatat eu pariatur.',
+ registered: 'Sunday, April 27, 2014 10:20 PM',
+ latitude: '33.543748',
+ longitude: '10.300569',
+ tags: ['id', 'esse', 'voluptate', 'occaecat', 'incididunt'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Webb Hawkins',
+ },
+ {
+ id: 1,
+ name: 'Angie Cline',
+ },
+ {
+ id: 2,
+ name: 'Mathews Juarez',
+ },
+ ],
+ greeting: 'Hello, Kitty! You have 9 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0baf8e44be8a693264',
+ index: 28,
+ guid: '99b20c7a-567f-4810-a793-8470571ce457',
+ isActive: false,
+ balance: '$1,017.55',
+ picture: 'http://placehold.it/32x32',
+ age: 36,
+ eyeColor: 'green',
+ name: {
+ first: 'Faith',
+ last: 'Mendoza',
+ },
+ company: 'XPLOR',
+ email: 'faith.mendoza@xplor.info',
+ phone: '+1 (872) 504-2016',
+ address: '323 Leonard Street, Deltaville, New Hampshire, 5194',
+ about:
+ 'Tempor commodo laborum fugiat sit consequat reprehenderit sint anim voluptate. In velit do non aliquip officia est deserunt incididunt. Officia dolor id incididunt cillum minim dolore aliqua proident duis. Irure excepteur irure culpa commodo veniam culpa quis Lorem aute.',
+ registered: 'Saturday, May 30, 2015 7:01 AM',
+ latitude: '12.428182',
+ longitude: '-166.07543',
+ tags: ['non', 'aute', 'aute', 'sint', 'consequat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Blair Mcknight',
+ },
+ {
+ id: 1,
+ name: 'Mcclain Mcguire',
+ },
+ {
+ id: 2,
+ name: 'Araceli Dorsey',
+ },
+ ],
+ greeting: 'Hello, Faith! You have 8 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0b52e4d918273360dd',
+ index: 29,
+ guid: '8c61aed3-6235-4e09-8ec4-ece4fe285a9c',
+ isActive: false,
+ balance: '$1,182.53',
+ picture: 'http://placehold.it/32x32',
+ age: 36,
+ eyeColor: 'green',
+ name: {
+ first: 'Amie',
+ last: 'Crane',
+ },
+ company: 'RODEOLOGY',
+ email: 'amie.crane@rodeology.io',
+ phone: '+1 (955) 536-3756',
+ address: '578 Box Street, Shelby, Hawaii, 1306',
+ about:
+ 'Ex esse et minim dolore sint pariatur incididunt esse. Aute dolore quis ad dolor minim laborum amet. Aliquip deserunt ad aute fugiat proident mollit adipisicing mollit sit duis.',
+ registered: 'Thursday, June 19, 2014 2:34 PM',
+ latitude: '-19.02611',
+ longitude: '127.57473',
+ tags: ['ad', 'nostrud', 'sit', 'duis', 'adipisicing'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Kirk Stewart',
+ },
+ {
+ id: 1,
+ name: 'Rice Horton',
+ },
+ {
+ id: 2,
+ name: 'Kathy Shaffer',
+ },
+ ],
+ greeting: 'Hello, Amie! You have 7 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c28c0b7bda4325a1d',
+ index: 30,
+ guid: 'ed1385bf-c7d8-41fa-a099-734894807171',
+ isActive: false,
+ balance: '$3,062.06',
+ picture: 'http://placehold.it/32x32',
+ age: 39,
+ eyeColor: 'green',
+ name: {
+ first: 'Best',
+ last: 'Buchanan',
+ },
+ company: 'CONFERIA',
+ email: 'best.buchanan@conferia.com',
+ phone: '+1 (845) 406-3653',
+ address: '742 Miami Court, Wanship, Georgia, 6992',
+ about:
+ 'Officia labore velit non mollit adipisicing sit do anim ullamco ut. Incididunt labore aliquip nostrud irure adipisicing id voluptate nulla ex. Ex duis incididunt eu sit et pariatur ullamco incididunt fugiat ex incididunt ea laboris.',
+ registered: 'Tuesday, December 30, 2014 11:23 AM',
+ latitude: '-14.672379',
+ longitude: '123.40741',
+ tags: ['et', 'deserunt', 'cupidatat', 'pariatur', 'eu'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Hudson Mejia',
+ },
+ {
+ id: 1,
+ name: 'Byers Montoya',
+ },
+ {
+ id: 2,
+ name: 'Patty Spencer',
+ },
+ ],
+ greeting: 'Hello, Best! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c9e948778b2db882e',
+ index: 31,
+ guid: '700b5215-132e-4524-9ca8-1224a746f09b',
+ isActive: true,
+ balance: '$3,891.22',
+ picture: 'http://placehold.it/32x32',
+ age: 29,
+ eyeColor: 'green',
+ name: {
+ first: 'Francine',
+ last: 'Green',
+ },
+ company: 'NUTRALAB',
+ email: 'francine.green@nutralab.tv',
+ phone: '+1 (841) 589-3865',
+ address: '165 Union Street, Hebron, North Carolina, 8094',
+ about:
+ 'Sunt eu irure aute incididunt mollit. Nisi mollit nulla aliquip cupidatat aute culpa cupidatat mollit tempor. Irure magna officia sint officia. Quis adipisicing ullamco non id aliquip. Non velit commodo quis elit nostrud adipisicing nisi incididunt non sint enim. In qui fugiat ullamco irure Lorem veniam pariatur culpa.',
+ registered: 'Tuesday, June 30, 2015 2:52 AM',
+ latitude: '-83.386439',
+ longitude: '-80.298927',
+ tags: ['mollit', 'aliqua', 'dolor', 'tempor', 'sit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Page Beasley',
+ },
+ {
+ id: 1,
+ name: 'Keith Atkinson',
+ },
+ {
+ id: 2,
+ name: 'Hahn Evans',
+ },
+ ],
+ greeting: 'Hello, Francine! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c565d848f7f4b0064',
+ index: 32,
+ guid: '88163664-2ab3-4a01-80f9-10b83ad3dece',
+ isActive: false,
+ balance: '$2,387.41',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'green',
+ name: {
+ first: 'Kelly',
+ last: 'Fowler',
+ },
+ company: 'COMVERGES',
+ email: 'kelly.fowler@comverges.net',
+ phone: '+1 (926) 440-3886',
+ address: '917 Kathleen Court, Outlook, Arkansas, 505',
+ about:
+ 'Esse dolore eiusmod culpa ea velit elit culpa veniam proident culpa consequat cupidatat. Fugiat id proident pariatur est fugiat ea. Esse ex dolor minim cillum incididunt voluptate ipsum. Non dolor amet labore excepteur enim eu duis in qui. Sint dolore minim anim mollit laborum proident ea ipsum officia aliquip. Amet culpa adipisicing nisi occaecat commodo irure in ad veniam ipsum officia labore labore.',
+ registered: 'Friday, April 4, 2014 7:14 PM',
+ latitude: '-24.694221',
+ longitude: '43.274287',
+ tags: ['sunt', 'ex', 'est', 'nisi', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Cash Hull',
+ },
+ {
+ id: 1,
+ name: 'Lorene Michael',
+ },
+ {
+ id: 2,
+ name: 'Rodgers Underwood',
+ },
+ ],
+ greeting: 'Hello, Kelly! You have 9 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0cab9f4bf7a91707f2',
+ index: 33,
+ guid: '7f857967-0524-44fc-a028-14bc9b78be00',
+ isActive: false,
+ balance: '$3,904.91',
+ picture: 'http://placehold.it/32x32',
+ age: 34,
+ eyeColor: 'brown',
+ name: {
+ first: 'Walters',
+ last: 'Bishop',
+ },
+ company: 'CEPRENE',
+ email: 'walters.bishop@ceprene.org',
+ phone: '+1 (955) 536-2146',
+ address: '441 Livonia Avenue, Norvelt, Indiana, 8326',
+ about:
+ 'Enim ad culpa ut aliqua id eiusmod ad aliqua. Cupidatat voluptate enim esse amet anim officia aliquip incididunt ipsum ut. Dolore magna cillum sunt duis duis elit commodo ipsum cillum aliquip proident nisi laboris. Ad Lorem cillum commodo quis tempor consequat laborum velit aliquip et laboris deserunt officia labore. Commodo enim et est id aute nostrud id. Excepteur consequat aliquip laboris ipsum sit aliqua proident esse adipisicing sint consectetur enim aliquip veniam.',
+ registered: 'Sunday, August 2, 2015 11:14 AM',
+ latitude: '-33.507298',
+ longitude: '-177.843777',
+ tags: ['est', 'officia', 'ad', 'fugiat', 'fugiat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Sloan Larson',
+ },
+ {
+ id: 1,
+ name: 'Lora Howe',
+ },
+ {
+ id: 2,
+ name: 'Cheri Cain',
+ },
+ ],
+ greeting: 'Hello, Walters! You have 8 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c41960d0332abb69f',
+ index: 34,
+ guid: 'c179f976-46db-4ceb-97dd-d511c2ff2cba',
+ isActive: false,
+ balance: '$3,922.97',
+ picture: 'http://placehold.it/32x32',
+ age: 36,
+ eyeColor: 'brown',
+ name: {
+ first: 'Jamie',
+ last: 'Justice',
+ },
+ company: 'CEMENTION',
+ email: 'jamie.justice@cemention.me',
+ phone: '+1 (886) 453-3323',
+ address: '534 Downing Street, Coldiron, Louisiana, 2936',
+ about:
+ 'Ad sint ut qui duis commodo magna sit irure duis labore reprehenderit dolor voluptate. Cillum non dolore mollit amet proident. Tempor sunt aliquip pariatur ullamco incididunt laboris. Adipisicing incididunt magna Lorem voluptate.',
+ registered: 'Wednesday, February 25, 2015 4:11 AM',
+ latitude: '-83.79595',
+ longitude: '71.384564',
+ tags: ['quis', 'nisi', 'dolore', 'voluptate', 'fugiat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Harvey Ramos',
+ },
+ {
+ id: 1,
+ name: 'Mays Shannon',
+ },
+ {
+ id: 2,
+ name: 'Ball Mcbride',
+ },
+ ],
+ greeting: 'Hello, Jamie! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c9fb032931aaf922e',
+ index: 35,
+ guid: '2d85869d-f1e0-4f2d-8544-78652740bb11',
+ isActive: true,
+ balance: '$1,468.38',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'green',
+ name: {
+ first: 'Dyer',
+ last: 'Tran',
+ },
+ company: 'COMVEYOR',
+ email: 'dyer.tran@comveyor.ca',
+ phone: '+1 (890) 529-2771',
+ address: '299 Hyman Court, Sims, Colorado, 8328',
+ about:
+ 'Adipisicing dolor velit non tempor incididunt magna magna dolore. Officia pariatur mollit anim Lorem Lorem esse. Occaecat eiusmod ipsum ipsum excepteur ut duis commodo esse incididunt. Veniam non officia consequat amet duis nulla qui qui ex sint veniam.',
+ registered: 'Tuesday, October 11, 2016 7:57 AM',
+ latitude: '-58.389129',
+ longitude: '-86.760618',
+ tags: ['incididunt', 'laboris', 'consectetur', 'voluptate', 'aliqua'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Dominguez Woodard',
+ },
+ {
+ id: 1,
+ name: 'Leach Kramer',
+ },
+ {
+ id: 2,
+ name: 'Cruz Wilder',
+ },
+ ],
+ greeting: 'Hello, Dyer! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0cc5bcf8eb53c8bfdf',
+ index: 36,
+ guid: '6ced7a65-2989-44d3-8d79-7f02fbaf0f4b',
+ isActive: true,
+ balance: '$1,243.22',
+ picture: 'http://placehold.it/32x32',
+ age: 32,
+ eyeColor: 'green',
+ name: {
+ first: 'Maureen',
+ last: 'Ramsey',
+ },
+ company: 'PROFLEX',
+ email: 'maureen.ramsey@proflex.biz',
+ phone: '+1 (966) 547-2724',
+ address: '828 Louise Terrace, Groton, Michigan, 9563',
+ about:
+ 'Enim aliqua qui velit ut dolore Lorem officia. Nisi Lorem aute consequat consectetur reprehenderit tempor. Consectetur velit laboris Lorem do anim ex exercitation. Est deserunt mollit reprehenderit eu amet aute eu reprehenderit mollit voluptate adipisicing excepteur dolor. Cillum commodo laborum in commodo do incididunt excepteur exercitation nostrud. Officia aliquip labore id aliquip sunt officia deserunt. Sunt officia nulla commodo sit velit excepteur dolor ea occaecat commodo eu.',
+ registered: 'Monday, May 18, 2015 11:36 AM',
+ latitude: '35.536999',
+ longitude: '-158.630389',
+ tags: ['qui', 'amet', 'eu', 'eu', 'mollit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Good Spears',
+ },
+ {
+ id: 1,
+ name: 'Gina Rodriguez',
+ },
+ {
+ id: 2,
+ name: 'Snow Harrington',
+ },
+ ],
+ greeting: 'Hello, Maureen! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c4f6c60bdf26873c9',
+ index: 37,
+ guid: '4883e626-07c8-47af-97d4-8ea82f07aa9d',
+ isActive: false,
+ balance: '$2,250.74',
+ picture: 'http://placehold.it/32x32',
+ age: 21,
+ eyeColor: 'blue',
+ name: {
+ first: 'Cannon',
+ last: 'Walters',
+ },
+ company: 'LUNCHPAD',
+ email: 'cannon.walters@lunchpad.co.uk',
+ phone: '+1 (830) 427-3699',
+ address: '202 Clarkson Avenue, Durham, New Jersey, 3075',
+ about:
+ 'Ipsum sint nulla labore do magna fugiat et in irure ex laborum sunt consequat ipsum. Duis et velit nostrud et sit incididunt laborum magna laboris do ex. Reprehenderit culpa nostrud eu qui labore sint ipsum amet reprehenderit dolor incididunt. Nulla proident dolor Lorem culpa officia eu excepteur anim in anim esse id sunt qui. Sit Lorem ea irure id ipsum culpa qui deserunt nulla veniam nisi in. Eiusmod laborum Lorem esse consectetur enim quis minim culpa nostrud.',
+ registered: 'Thursday, October 6, 2016 6:33 PM',
+ latitude: '84.142398',
+ longitude: '15.387476',
+ tags: ['occaecat', 'officia', 'sunt', 'labore', 'consequat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Coleman Hendrix',
+ },
+ {
+ id: 1,
+ name: 'Bridges Benson',
+ },
+ {
+ id: 2,
+ name: 'Anthony Mathews',
+ },
+ ],
+ greeting: 'Hello, Cannon! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0cf09ee09c6eaa88cb',
+ index: 38,
+ guid: 'c54b0b2a-2a0f-4168-b335-bc9a8e0460ca',
+ isActive: true,
+ balance: '$3,203.52',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'brown',
+ name: {
+ first: 'Nannie',
+ last: 'Beard',
+ },
+ company: 'ANIMALIA',
+ email: 'nannie.beard@animalia.us',
+ phone: '+1 (889) 443-3959',
+ address: '225 Jay Street, Datil, Wyoming, 5453',
+ about:
+ 'Esse culpa ipsum duis minim ut ex tempor proident sunt minim consequat commodo ipsum anim. Lorem exercitation cupidatat tempor Lorem quis officia minim qui proident et. Qui esse non ex mollit magna nostrud cillum sit pariatur magna fugiat qui id.',
+ registered: 'Saturday, April 25, 2015 9:25 AM',
+ latitude: '-87.539067',
+ longitude: '63.880414',
+ tags: ['ut', 'et', 'esse', 'cillum', 'nulla'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Francis Barron',
+ },
+ {
+ id: 1,
+ name: 'Pate Aguirre',
+ },
+ {
+ id: 2,
+ name: 'Gay Acosta',
+ },
+ ],
+ greeting: 'Hello, Nannie! You have 10 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0cca904f751c058d2e',
+ index: 39,
+ guid: '7a2ff5cf-270a-4211-a2e8-3509d8884622',
+ isActive: false,
+ balance: '$3,606.94',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'blue',
+ name: {
+ first: 'Lacy',
+ last: 'Beach',
+ },
+ company: 'DATAGEN',
+ email: 'lacy.beach@datagen.name',
+ phone: '+1 (831) 573-3879',
+ address: '984 Adelphi Street, Herbster, Maryland, 4378',
+ about:
+ 'Occaecat do consectetur voluptate veniam id id officia ea deserunt aute anim irure magna quis. Ipsum cupidatat ea commodo dolor ea dolor nisi non. Excepteur irure veniam laborum qui id eu nulla reprehenderit mollit ad aute consectetur elit Lorem.',
+ registered: 'Thursday, March 13, 2014 1:02 PM',
+ latitude: '-9.391908',
+ longitude: '159.065461',
+ tags: ['dolor', 'reprehenderit', 'labore', 'aute', 'voluptate'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Rosa Mercado',
+ },
+ {
+ id: 1,
+ name: 'Fuentes Valenzuela',
+ },
+ {
+ id: 2,
+ name: 'Dixon Singleton',
+ },
+ ],
+ greeting: 'Hello, Lacy! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c1458894607879e9d',
+ index: 40,
+ guid: '45bbc6f7-4183-4eeb-b34a-98ecc8787e7a',
+ isActive: false,
+ balance: '$2,097.65',
+ picture: 'http://placehold.it/32x32',
+ age: 34,
+ eyeColor: 'brown',
+ name: {
+ first: 'Cara',
+ last: 'Lyons',
+ },
+ company: 'VICON',
+ email: 'cara.lyons@vicon.info',
+ phone: '+1 (933) 546-2258',
+ address: '813 Ingraham Street, Riner, Tennessee, 3069',
+ about:
+ 'Commodo quis excepteur nulla qui. Fugiat ullamco ex excepteur tempor. Sint duis aute magna in fugiat. Laborum sit magna est duis reprehenderit elit nulla elit. Mollit Lorem ut incididunt nostrud ad voluptate aliquip et et sint ullamco.',
+ registered: 'Sunday, May 11, 2014 7:13 AM',
+ latitude: '11.108367',
+ longitude: '-144.351099',
+ tags: ['excepteur', 'cillum', 'sunt', 'et', 'duis'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Ayala Black',
+ },
+ {
+ id: 1,
+ name: 'Nichole Sutton',
+ },
+ {
+ id: 2,
+ name: 'Mathis Cash',
+ },
+ ],
+ greeting: 'Hello, Cara! You have 9 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0ca9d8edf2d7811aab',
+ index: 41,
+ guid: 'f4aa6a49-0c71-4ad7-9514-614ecb9cc221',
+ isActive: true,
+ balance: '$2,945.42',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'blue',
+ name: {
+ first: 'Jean',
+ last: 'Copeland',
+ },
+ company: 'KIGGLE',
+ email: 'jean.copeland@kiggle.io',
+ phone: '+1 (841) 470-2173',
+ address: '687 Prospect Place, Welda, New York, 4786',
+ about:
+ 'Quis eiusmod enim ad velit mollit occaecat. Ea aute laborum fugiat consequat. Exercitation laboris aliquip ad tempor culpa. Ipsum aute excepteur in fugiat adipisicing incididunt exercitation non occaecat. Id labore ex occaecat esse dolore sit commodo duis quis incididunt enim reprehenderit. Tempor sit qui irure ut pariatur laborum laboris in nostrud sit excepteur.',
+ registered: 'Monday, June 22, 2015 4:57 AM',
+ latitude: '-36.057061',
+ longitude: '-91.348514',
+ tags: ['occaecat', 'sit', 'id', 'anim', 'elit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Sherman Christian',
+ },
+ {
+ id: 1,
+ name: 'Janna Weiss',
+ },
+ {
+ id: 2,
+ name: 'Janette Nieves',
+ },
+ ],
+ greeting: 'Hello, Jean! You have 8 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c06cac977a4bff550',
+ index: 42,
+ guid: 'e0aacdb6-61dd-44b2-afa5-d23f8b11ff2d',
+ isActive: true,
+ balance: '$2,740.65',
+ picture: 'http://placehold.it/32x32',
+ age: 29,
+ eyeColor: 'blue',
+ name: {
+ first: 'Alfreda',
+ last: 'Duncan',
+ },
+ company: 'BITREX',
+ email: 'alfreda.duncan@bitrex.com',
+ phone: '+1 (903) 491-3912',
+ address: '541 Sunnyside Court, Ryderwood, Virginia, 9259',
+ about:
+ 'Pariatur mollit qui veniam sunt enim Lorem non. Commodo ea deserunt aute dolor id enim anim Lorem occaecat esse nostrud id irure. Aliquip dolore voluptate enim dolore velit adipisicing id est dolore consequat enim. Voluptate ex duis duis elit. Occaecat ex nulla labore ex sit. Proident officia sunt mollit irure non quis commodo sint laboris tempor ut aliquip incididunt. Aliquip ea ad consectetur incididunt.',
+ registered: 'Saturday, March 12, 2016 2:20 PM',
+ latitude: '33.795212',
+ longitude: '-48.161379',
+ tags: ['velit', 'dolore', 'deserunt', 'exercitation', 'nostrud'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Tracie Hendricks',
+ },
+ {
+ id: 1,
+ name: 'Deann Mathis',
+ },
+ {
+ id: 2,
+ name: 'Newman Pace',
+ },
+ ],
+ greeting: 'Hello, Alfreda! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c547ba7b2b5b2ff68',
+ index: 43,
+ guid: '63630a5c-d6b6-4dd9-a096-ae1c81a92bc5',
+ isActive: false,
+ balance: '$2,655.36',
+ picture: 'http://placehold.it/32x32',
+ age: 31,
+ eyeColor: 'green',
+ name: {
+ first: 'Estelle',
+ last: 'Carson',
+ },
+ company: 'GEEKFARM',
+ email: 'estelle.carson@geekfarm.tv',
+ phone: '+1 (829) 551-2574',
+ address: '854 Calder Place, Greer, Nevada, 7137',
+ about:
+ 'Laborum velit deserunt ad magna et qui sint sint sunt elit. Exercitation eiusmod ea deserunt quis consectetur sit cillum tempor eiusmod labore ad consequat. Pariatur tempor sunt Lorem sit tempor elit sint ex exercitation. Aliquip tempor irure aute anim tempor sint exercitation exercitation. Consectetur veniam laboris tempor ipsum duis sit tempor laboris eu aute.',
+ registered: 'Wednesday, June 3, 2015 5:48 PM',
+ latitude: '45.625966',
+ longitude: '-113.836952',
+ tags: ['esse', 'nostrud', 'consectetur', 'est', 'qui'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Albert Conrad',
+ },
+ {
+ id: 1,
+ name: 'Etta Lara',
+ },
+ {
+ id: 2,
+ name: 'James Joseph',
+ },
+ ],
+ greeting: 'Hello, Estelle! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0ce1fbdc13fd921dfa',
+ index: 44,
+ guid: 'bab756db-f4f0-4c20-8819-805f4de1acf1',
+ isActive: false,
+ balance: '$3,043.42',
+ picture: 'http://placehold.it/32x32',
+ age: 28,
+ eyeColor: 'green',
+ name: {
+ first: 'Flowers',
+ last: 'Guthrie',
+ },
+ company: 'GLOBOIL',
+ email: 'flowers.guthrie@globoil.net',
+ phone: '+1 (848) 547-2136',
+ address: '757 Rodney Street, Lupton, Washington, 290',
+ about:
+ 'Nulla sunt ut laboris id consequat id quis excepteur et eu sint esse est. Nostrud voluptate voluptate minim enim exercitation sunt labore ea cillum veniam mollit pariatur enim. Officia ipsum voluptate eu veniam dolor est do. Ullamco minim excepteur aute eu cillum reprehenderit non laborum. Do magna eiusmod veniam eu cillum magna deserunt labore. Nisi culpa nisi proident amet eu et cillum mollit reprehenderit veniam et. Ad elit sint aliquip cupidatat exercitation do ex velit esse nisi sunt nostrud.',
+ registered: 'Wednesday, May 7, 2014 11:25 PM',
+ latitude: '-18.985921',
+ longitude: '-170.937155',
+ tags: ['sunt', 'nostrud', 'ex', 'qui', 'proident'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Holcomb Joyce',
+ },
+ {
+ id: 1,
+ name: 'Dolores Guy',
+ },
+ {
+ id: 2,
+ name: 'Alisa Garrett',
+ },
+ ],
+ greeting: 'Hello, Flowers! You have 8 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0ce0cd552ea52c7f2c',
+ index: 45,
+ guid: 'dea849a7-62f2-4a50-8215-6070082f02e7',
+ isActive: false,
+ balance: '$2,088.13',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'green',
+ name: {
+ first: 'Duran',
+ last: 'Houston',
+ },
+ company: 'ENQUILITY',
+ email: 'duran.houston@enquility.org',
+ phone: '+1 (968) 460-3781',
+ address: '968 Prospect Avenue, Eastmont, Minnesota, 5346',
+ about:
+ 'Irure nisi occaecat quis ipsum exercitation esse minim nulla magna sunt nisi culpa exercitation. Nulla ea ipsum exercitation est culpa consequat nostrud duis ex do incididunt est. Dolore et sit labore ex non do ipsum. Do velit voluptate sint nisi enim sit sunt tempor voluptate aliquip ullamco reprehenderit do. Id sunt cillum ea nisi aute qui do tempor nisi aute nostrud. Ipsum cupidatat laboris elit dolore pariatur tempor mollit exercitation tempor et voluptate laboris eu. Ex Lorem sint sit tempor sunt elit.',
+ registered: 'Saturday, June 11, 2016 4:20 PM',
+ latitude: '18.300079',
+ longitude: '-83.967577',
+ tags: ['labore', 'sunt', 'mollit', 'voluptate', 'duis'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Lori Roach',
+ },
+ {
+ id: 1,
+ name: 'Benita Farley',
+ },
+ {
+ id: 2,
+ name: 'Sheri Hurst',
+ },
+ ],
+ greeting: 'Hello, Duran! You have 9 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c491e46a12015041d',
+ index: 46,
+ guid: '2c10fc4c-47d7-41b0-ab6d-b27348fd3a2c',
+ isActive: false,
+ balance: '$1,874.46',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'green',
+ name: {
+ first: 'Cortez',
+ last: 'Levy',
+ },
+ company: 'OPTICON',
+ email: 'cortez.levy@opticon.me',
+ phone: '+1 (831) 454-3969',
+ address: '707 Lefferts Avenue, Stouchsburg, District Of Columbia, 5615',
+ about:
+ 'Dolor labore exercitation magna eu exercitation veniam culpa ad dolore ut consequat Lorem et officia. Voluptate aliqua laborum amet voluptate consequat id. Laboris tempor dolor cillum ut ullamco voluptate incididunt amet ipsum laboris exercitation tempor. Do quis duis qui magna eu irure sunt.',
+ registered: 'Wednesday, November 4, 2015 7:46 PM',
+ latitude: '5.931545',
+ longitude: '58.787345',
+ tags: ['enim', 'consequat', 'irure', 'sit', 'voluptate'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Marquita Figueroa',
+ },
+ {
+ id: 1,
+ name: 'Justice Stephens',
+ },
+ {
+ id: 2,
+ name: 'Traci Blevins',
+ },
+ ],
+ greeting: 'Hello, Cortez! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c163f106a3d9867a0',
+ index: 47,
+ guid: '2299f9f1-f9c9-4d53-b9f5-829132d1b1f6',
+ isActive: false,
+ balance: '$3,704.08',
+ picture: 'http://placehold.it/32x32',
+ age: 31,
+ eyeColor: 'brown',
+ name: {
+ first: 'Sampson',
+ last: 'Sloan',
+ },
+ company: 'ZAGGLES',
+ email: 'sampson.sloan@zaggles.ca',
+ phone: '+1 (812) 536-2825',
+ address: '921 Beadel Street, Manila, Guam, 2501',
+ about:
+ 'Nisi irure laboris dolore Lorem nulla irure consectetur mollit commodo aliqua pariatur et. Officia magna veniam culpa excepteur ea sint reprehenderit eiusmod. Ex dolor non nisi enim eu et ad occaecat magna id ullamco in occaecat. Commodo labore Lorem aliqua quis amet irure labore. Deserunt proident cillum et do consequat mollit reprehenderit eiusmod voluptate proident sunt ex. Aute aliqua ullamco duis laborum labore et exercitation.',
+ registered: 'Sunday, October 26, 2014 2:43 AM',
+ latitude: '83.228508',
+ longitude: '0.459083',
+ tags: ['tempor', 'exercitation', 'proident', 'exercitation', 'et'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Hannah Schneider',
+ },
+ {
+ id: 1,
+ name: 'White Williamson',
+ },
+ {
+ id: 2,
+ name: 'Annie Moreno',
+ },
+ ],
+ greeting: 'Hello, Sampson! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0ccd1cc56b6ac487a6',
+ index: 48,
+ guid: '857676b3-f998-4efa-9ec8-6762b2468e43',
+ isActive: false,
+ balance: '$3,662.77',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'blue',
+ name: {
+ first: 'Nona',
+ last: 'Nguyen',
+ },
+ company: 'QUARMONY',
+ email: 'nona.nguyen@quarmony.biz',
+ phone: '+1 (921) 562-2588',
+ address: '660 Sutton Street, Eggertsville, American Samoa, 7519',
+ about:
+ 'Et esse sit labore pariatur eu eiusmod eu et non elit adipisicing mollit esse id. Quis dolore magna ipsum do velit cupidatat in officia do dolore voluptate anim laboris aliquip. Lorem amet sunt irure laborum ad sunt commodo cillum minim consectetur. Eiusmod id exercitation occaecat esse enim magna consectetur reprehenderit nostrud quis ea dolor sit incididunt. Ipsum eu quis consequat ad eiusmod amet velit veniam aliquip reprehenderit in ea. Duis et aliquip voluptate dolor proident incididunt eiusmod. Magna eu aliquip aliquip id.',
+ registered: 'Friday, January 22, 2016 1:24 AM',
+ latitude: '45.499893',
+ longitude: '71.913207',
+ tags: ['proident', 'irure', 'eu', 'laborum', 'tempor'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Ross Landry',
+ },
+ {
+ id: 1,
+ name: 'Chan Joyner',
+ },
+ {
+ id: 2,
+ name: 'Richardson Snow',
+ },
+ ],
+ greeting: 'Hello, Nona! You have 5 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c4546f881c8f7555f',
+ index: 49,
+ guid: '28bddafd-23f4-49a2-bae8-643e1e7c9fb3',
+ isActive: false,
+ balance: '$2,081.58',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'brown',
+ name: {
+ first: 'Wendi',
+ last: 'Cleveland',
+ },
+ company: 'EVENTEX',
+ email: 'wendi.cleveland@eventex.co.uk',
+ phone: '+1 (935) 410-2326',
+ address: '737 Ebony Court, Elfrida, Delaware, 5439',
+ about:
+ 'Enim deserunt commodo qui laboris mollit ullamco. Id qui laboris magna do consequat nostrud sint occaecat amet officia. Laboris excepteur Lorem aliqua in est exercitation ut laborum et. Officia nisi eiusmod veniam mollit laborum magna esse labore elit pariatur pariatur. Esse ipsum pariatur pariatur eiusmod est ex tempor non.',
+ registered: 'Sunday, March 9, 2014 5:48 PM',
+ latitude: '88.457536',
+ longitude: '-65.024239',
+ tags: ['aliquip', 'duis', 'tempor', 'ipsum', 'velit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Gabrielle Cote',
+ },
+ {
+ id: 1,
+ name: 'Brandi Downs',
+ },
+ {
+ id: 2,
+ name: 'Rhonda Ellison',
+ },
+ ],
+ greeting: 'Hello, Wendi! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0cec2076eb6d116dfc',
+ index: 50,
+ guid: '39489d24-b8b8-47bc-b7d0-c3481f3ad5bd',
+ isActive: false,
+ balance: '$1,075.68',
+ picture: 'http://placehold.it/32x32',
+ age: 40,
+ eyeColor: 'blue',
+ name: {
+ first: 'Dale',
+ last: 'Douglas',
+ },
+ company: 'DELPHIDE',
+ email: 'dale.douglas@delphide.us',
+ phone: '+1 (977) 457-3984',
+ address: '754 Hicks Street, Vaughn, Palau, 7264',
+ about:
+ 'Ad incididunt proident proident ipsum nisi ipsum cillum consectetur cupidatat aliquip labore duis aliquip est. Esse nulla sit magna ipsum. Proident aliquip sint fugiat dolor sunt elit velit qui tempor officia amet nostrud.',
+ registered: 'Saturday, July 30, 2016 8:55 AM',
+ latitude: '-8.058598',
+ longitude: '-33.314846',
+ tags: ['irure', 'nisi', 'consequat', 'cillum', 'dolor'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Harriett Gamble',
+ },
+ {
+ id: 1,
+ name: 'Hester Pittman',
+ },
+ {
+ id: 2,
+ name: 'Lesley Washington',
+ },
+ ],
+ greeting: 'Hello, Dale! You have 10 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0cd4ecef796970cd3f',
+ index: 51,
+ guid: '52dc9e03-d6bc-4776-975e-22735a673bb9',
+ isActive: false,
+ balance: '$2,094.76',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'green',
+ name: {
+ first: 'Eula',
+ last: 'Huber',
+ },
+ company: 'COMTENT',
+ email: 'eula.huber@comtent.name',
+ phone: '+1 (914) 552-2231',
+ address: '389 Grove Street, Eagletown, Massachusetts, 8524',
+ about:
+ 'Id sunt consectetur nostrud occaecat ea eu reprehenderit excepteur amet nostrud et ea. In ipsum occaecat aliquip est ex aute labore nostrud eu incididunt velit est. Aliquip velit occaecat laborum consectetur dolor.',
+ registered: 'Saturday, June 20, 2015 8:33 AM',
+ latitude: '-27.235963',
+ longitude: '17.691481',
+ tags: ['eu', 'ex', 'exercitation', 'reprehenderit', 'irure'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Melva Coffey',
+ },
+ {
+ id: 1,
+ name: 'Farmer Weaver',
+ },
+ {
+ id: 2,
+ name: 'Watkins Serrano',
+ },
+ ],
+ greeting: 'Hello, Eula! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0ccb817c1dc5c145c8',
+ index: 52,
+ guid: '7ec24512-cb72-4fa5-b411-44c7b7ac0cde',
+ isActive: true,
+ balance: '$3,388.55',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'green',
+ name: {
+ first: 'Lamb',
+ last: 'Contreras',
+ },
+ company: 'COMTRAK',
+ email: 'lamb.contreras@comtrak.info',
+ phone: '+1 (866) 451-3939',
+ address: '403 Himrod Street, Haring, South Carolina, 7598',
+ about:
+ 'Labore labore ipsum non eu quis eiusmod sint fugiat qui tempor sit. Ex exercitation culpa exercitation sunt ipsum nisi et adipisicing proident adipisicing do. Amet cillum amet sit ea dolor. Ex mollit ut eu ad quis consequat cillum ullamco aliquip. Minim enim ut et incididunt occaecat ea. Et dolor nisi sunt eiusmod duis. Reprehenderit aliqua eiusmod amet dolor aliqua.',
+ registered: 'Tuesday, December 23, 2014 11:42 AM',
+ latitude: '-56.076139',
+ longitude: '126.054413',
+ tags: ['nostrud', 'et', 'commodo', 'nisi', 'deserunt'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Kasey Andrews',
+ },
+ {
+ id: 1,
+ name: 'Pearl Bridges',
+ },
+ {
+ id: 2,
+ name: 'Tameka Chandler',
+ },
+ ],
+ greeting: 'Hello, Lamb! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c39b5a56a264d4bcf',
+ index: 53,
+ guid: 'e07bd38e-e79b-4ceb-bcbc-ea60b4b0e740',
+ isActive: false,
+ balance: '$1,011.72',
+ picture: 'http://placehold.it/32x32',
+ age: 28,
+ eyeColor: 'blue',
+ name: {
+ first: 'Angelique',
+ last: 'Barry',
+ },
+ company: 'INSOURCE',
+ email: 'angelique.barry@insource.io',
+ phone: '+1 (983) 464-3474',
+ address: '691 Heyward Street, Bodega, Florida, 4333',
+ about:
+ 'Deserunt voluptate eiusmod sit et quis aliquip eiusmod ex consequat velit. Cillum elit excepteur ex esse officia cupidatat ut. Nostrud pariatur ex et ullamco dolor dolore fugiat excepteur irure exercitation. Id Lorem proident ea quis.',
+ registered: 'Tuesday, April 26, 2016 12:53 PM',
+ latitude: '69.146806',
+ longitude: '-136.72291',
+ tags: ['qui', 'anim', 'anim', 'quis', 'pariatur'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Doyle Tanner',
+ },
+ {
+ id: 1,
+ name: 'Gloria Stevens',
+ },
+ {
+ id: 2,
+ name: 'Sally Chapman',
+ },
+ ],
+ greeting: 'Hello, Angelique! You have 7 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c653a65b1bde5a9af',
+ index: 54,
+ guid: '79ad167a-209e-4ce3-8e84-cc46e9d79702',
+ isActive: true,
+ balance: '$2,652.68',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'blue',
+ name: {
+ first: 'Marissa',
+ last: 'Head',
+ },
+ company: 'BOLAX',
+ email: 'marissa.head@bolax.com',
+ phone: '+1 (919) 411-2094',
+ address: '224 Tampa Court, Harleigh, Virgin Islands, 2507',
+ about:
+ 'Nulla elit do ullamco nulla. Fugiat incididunt culpa deserunt deserunt dolore nisi commodo. Labore exercitation pariatur aliqua id id duis.',
+ registered: 'Saturday, April 9, 2016 11:53 PM',
+ latitude: '12.624239',
+ longitude: '-108.119849',
+ tags: ['labore', 'proident', 'labore', 'eiusmod', 'aute'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Chambers Lester',
+ },
+ {
+ id: 1,
+ name: 'Mckenzie Mcdonald',
+ },
+ {
+ id: 2,
+ name: 'Benson Clark',
+ },
+ ],
+ greeting: 'Hello, Marissa! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0cbbf466925baae126',
+ index: 55,
+ guid: '44384d90-908a-44f7-ac6a-f3e4e9ce3541',
+ isActive: false,
+ balance: '$2,707.40',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'blue',
+ name: {
+ first: 'Avila',
+ last: 'Pena',
+ },
+ company: 'TERASCAPE',
+ email: 'avila.pena@terascape.tv',
+ phone: '+1 (973) 462-2068',
+ address: '393 Story Court, Veguita, Utah, 6716',
+ about:
+ 'Reprehenderit nostrud laborum duis excepteur adipisicing voluptate dolor. Quis aliqua et laborum officia dolor nostrud laborum est. Excepteur aliquip ipsum id eiusmod esse laboris nostrud in excepteur est. Non eiusmod esse non ut.',
+ registered: 'Tuesday, August 11, 2015 11:07 PM',
+ latitude: '-40.827485',
+ longitude: '159.48116',
+ tags: ['et', 'culpa', 'cupidatat', 'ut', 'sunt'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Boone Goodman',
+ },
+ {
+ id: 1,
+ name: 'Jenny Weeks',
+ },
+ {
+ id: 2,
+ name: 'Tracy Franklin',
+ },
+ ],
+ greeting: 'Hello, Avila! You have 10 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c0224b3b46507d00d',
+ index: 56,
+ guid: '7631262c-7af8-4caf-9dd6-9882b20e9ccf',
+ isActive: true,
+ balance: '$3,127.77',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'brown',
+ name: {
+ first: 'Graciela',
+ last: 'Vang',
+ },
+ company: 'EARWAX',
+ email: 'graciela.vang@earwax.net',
+ phone: '+1 (810) 450-2884',
+ address: '620 Tech Place, Glendale, Connecticut, 369',
+ about:
+ 'Cillum laboris elit laboris irure ex aliquip amet aute commodo ea ea sunt nostrud irure. Ex incididunt anim nostrud excepteur in dolore aliqua laboris incididunt consequat officia dolore. Aliqua aliqua minim elit pariatur nulla occaecat aliquip consectetur mollit sit elit proident.',
+ registered: 'Thursday, September 1, 2016 6:03 PM',
+ latitude: '-22.465372',
+ longitude: '174.750198',
+ tags: ['irure', 'amet', 'ad', 'cupidatat', 'consequat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Teresa Dickson',
+ },
+ {
+ id: 1,
+ name: 'Reyna Gonzales',
+ },
+ {
+ id: 2,
+ name: 'Carol Hunt',
+ },
+ ],
+ greeting: 'Hello, Graciela! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c44df164b323518f0',
+ index: 57,
+ guid: '21cf0aae-e2fd-4987-a12a-df9845dfe256',
+ isActive: true,
+ balance: '$2,129.83',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'green',
+ name: {
+ first: 'Kaye',
+ last: 'Whitehead',
+ },
+ company: 'TALKOLA',
+ email: 'kaye.whitehead@talkola.org',
+ phone: '+1 (998) 495-2808',
+ address: '933 Sands Street, Frystown, Wisconsin, 9993',
+ about:
+ 'Laborum id id esse fugiat eu consectetur non nostrud eu sint. Enim dolor aliquip ut elit et. Officia labore labore duis veniam reprehenderit. Ut id nulla minim adipisicing laboris deserunt pariatur. Laborum aute magna laboris quis.',
+ registered: 'Friday, May 2, 2014 8:39 PM',
+ latitude: '5.18003',
+ longitude: '-138.228885',
+ tags: ['elit', 'labore', 'id', 'nisi', 'pariatur'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Leona Soto',
+ },
+ {
+ id: 1,
+ name: 'Cunningham Blankenship',
+ },
+ {
+ id: 2,
+ name: 'Campbell Turner',
+ },
+ ],
+ greeting: 'Hello, Kaye! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0ca827218ce430db2f',
+ index: 58,
+ guid: 'f1cc09e1-4502-4b54-8aa6-272b93335375',
+ isActive: true,
+ balance: '$1,635.66',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'green',
+ name: {
+ first: 'Vickie',
+ last: 'Walsh',
+ },
+ company: 'ZORK',
+ email: 'vickie.walsh@zork.me',
+ phone: '+1 (966) 458-2157',
+ address: '770 Flatlands Avenue, Marion, Oklahoma, 5819',
+ about:
+ 'Velit laboris sint velit elit esse est commodo est officia. Sit do ut eiusmod duis ex ullamco eiusmod proident esse est cupidatat aliqua pariatur veniam. Culpa incididunt Lorem ea ut. Sint nostrud quis et tempor magna voluptate. Aliqua ea irure ad sint. Irure non nostrud non in ad officia officia laboris nostrud eiusmod. Labore commodo sit consequat velit ipsum culpa tempor.',
+ registered: 'Friday, June 24, 2016 6:10 AM',
+ latitude: '-21.293579',
+ longitude: '-171.238054',
+ tags: ['quis', 'dolore', 'sunt', 'sint', 'ut'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Kristie Davenport',
+ },
+ {
+ id: 1,
+ name: 'Sandy Foreman',
+ },
+ {
+ id: 2,
+ name: 'Eve Patel',
+ },
+ ],
+ greeting: 'Hello, Vickie! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0ca320d90456f0650c',
+ index: 59,
+ guid: '7bfed2cf-dbf1-461b-949a-42c300172e0f',
+ isActive: false,
+ balance: '$3,809.61',
+ picture: 'http://placehold.it/32x32',
+ age: 22,
+ eyeColor: 'blue',
+ name: {
+ first: 'Travis',
+ last: 'Carrillo',
+ },
+ company: 'INTERODEO',
+ email: 'travis.carrillo@interodeo.ca',
+ phone: '+1 (820) 527-3349',
+ address: '878 Dekalb Avenue, Jeff, Alaska, 4205',
+ about:
+ 'Sit aliqua aliqua eiusmod aliquip ullamco amet nulla fugiat anim dolor est cillum eiusmod. Proident dolor consectetur officia voluptate do tempor aliquip qui minim. Dolore culpa magna nulla irure. Est ad laborum deserunt amet commodo esse officia incididunt. Sit aute laborum aliqua id excepteur sunt ipsum cupidatat commodo exercitation proident.',
+ registered: 'Saturday, November 7, 2015 11:49 PM',
+ latitude: '59.311122',
+ longitude: '38.059303',
+ tags: ['ex', 'elit', 'voluptate', 'consectetur', 'Lorem'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Velez Daniel',
+ },
+ {
+ id: 1,
+ name: 'Mae Burris',
+ },
+ {
+ id: 2,
+ name: 'Henson Francis',
+ },
+ ],
+ greeting: 'Hello, Travis! You have 10 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c4d57f9870f521abc',
+ index: 60,
+ guid: '6de5e184-4e24-41c1-8071-7fbd2fc184f0',
+ isActive: false,
+ balance: '$3,692.96',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'blue',
+ name: {
+ first: 'Elvia',
+ last: 'Haynes',
+ },
+ company: 'OPTICOM',
+ email: 'elvia.haynes@opticom.biz',
+ phone: '+1 (918) 418-2771',
+ address: '646 Quincy Street, Fedora, Federated States Of Micronesia, 1232',
+ about:
+ 'Occaecat officia amet ipsum ut mollit. Eu qui tempor voluptate sint pariatur id Lorem eiusmod veniam magna sint qui esse proident. Reprehenderit ut est sit ad tempor sit magna veniam consectetur. Id quis aliquip occaecat sint excepteur in nisi voluptate laborum ad anim. Id Lorem in incididunt ut culpa culpa duis aliqua mollit adipisicing.',
+ registered: 'Monday, November 16, 2015 2:49 AM',
+ latitude: '-82.030922',
+ longitude: '-160.684246',
+ tags: ['esse', 'minim', 'nulla', 'eiusmod', 'est'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Mcdowell Maxwell',
+ },
+ {
+ id: 1,
+ name: 'Dawson Gay',
+ },
+ {
+ id: 2,
+ name: 'Herminia Leach',
+ },
+ ],
+ greeting: 'Hello, Elvia! You have 8 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c62a1b2744f05b1a7',
+ index: 61,
+ guid: 'fe9f08a4-cfe5-4cdb-b2e4-9ecfa54d873b',
+ isActive: false,
+ balance: '$3,807.03',
+ picture: 'http://placehold.it/32x32',
+ age: 30,
+ eyeColor: 'blue',
+ name: {
+ first: 'Blackwell',
+ last: 'Benton',
+ },
+ company: 'TUBESYS',
+ email: 'blackwell.benton@tubesys.co.uk',
+ phone: '+1 (897) 452-2584',
+ address: '343 Dupont Street, Blodgett, Iowa, 509',
+ about:
+ 'Ut anim consectetur enim officia. Mollit anim et proident pariatur exercitation consectetur exercitation incididunt. Ullamco pariatur sit enim velit minim aliquip.',
+ registered: 'Thursday, September 25, 2014 1:31 AM',
+ latitude: '50.446336',
+ longitude: '-17.513084',
+ tags: ['ipsum', 'quis', 'et', 'labore', 'est'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Henrietta Santana',
+ },
+ {
+ id: 1,
+ name: 'Carla Cobb',
+ },
+ {
+ id: 2,
+ name: 'Nita Durham',
+ },
+ ],
+ greeting: 'Hello, Blackwell! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0ce6f3ef88019d28bc',
+ index: 62,
+ guid: '62666a91-4a93-404c-bbce-170ab0668ee7',
+ isActive: false,
+ balance: '$3,792.15',
+ picture: 'http://placehold.it/32x32',
+ age: 40,
+ eyeColor: 'brown',
+ name: {
+ first: 'Stanton',
+ last: 'Potter',
+ },
+ company: 'UTARIAN',
+ email: 'stanton.potter@utarian.us',
+ phone: '+1 (965) 569-3822',
+ address: '498 Holmes Lane, Belgreen, Puerto Rico, 1728',
+ about:
+ 'Ullamco esse sunt aliquip incididunt velit mollit aute. Et est eiusmod commodo aliqua cillum sint nostrud in dolor labore fugiat deserunt aliquip nostrud. Velit non incididunt consectetur tempor veniam minim. Magna enim minim dolore labore do magna ea pariatur tempor anim.',
+ registered: 'Thursday, November 20, 2014 7:07 PM',
+ latitude: '13.26351',
+ longitude: '-169.826766',
+ tags: ['dolore', 'commodo', 'ex', 'anim', 'commodo'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Jillian Burnett',
+ },
+ {
+ id: 1,
+ name: 'Evangelina Blackburn',
+ },
+ {
+ id: 2,
+ name: 'Castro Nolan',
+ },
+ ],
+ greeting: 'Hello, Stanton! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c66bd8e3191775b81',
+ index: 63,
+ guid: 'babde8c1-773d-4f96-aeb9-bcf68d233204',
+ isActive: true,
+ balance: '$2,096.56',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'green',
+ name: {
+ first: 'Kerry',
+ last: 'Barnes',
+ },
+ company: 'PYRAMIS',
+ email: 'kerry.barnes@pyramis.name',
+ phone: '+1 (959) 455-2215',
+ address: '676 Roder Avenue, Eden, Kansas, 7602',
+ about:
+ 'Et non et mollit velit proident exercitation velit elit cillum voluptate. Lorem reprehenderit nulla ex sunt adipisicing laborum excepteur in occaecat culpa fugiat enim fugiat proident. Duis minim deserunt aliqua ea. Ea minim ea eiusmod qui elit. Cupidatat quis commodo irure nisi.',
+ registered: 'Wednesday, October 21, 2015 7:02 PM',
+ latitude: '77.232279',
+ longitude: '153.606067',
+ tags: ['in', 'cupidatat', 'Lorem', 'consequat', 'laborum'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Veronica Beck',
+ },
+ {
+ id: 1,
+ name: 'Hull Velez',
+ },
+ {
+ id: 2,
+ name: 'Meghan Wiley',
+ },
+ ],
+ greeting: 'Hello, Kerry! You have 10 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c8e8776857572353b',
+ index: 64,
+ guid: 'd34861fb-ed0e-4fd1-a315-c41e04ec60f3',
+ isActive: true,
+ balance: '$1,081.03',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'green',
+ name: {
+ first: 'Cameron',
+ last: 'Barber',
+ },
+ company: 'FRANSCENE',
+ email: 'cameron.barber@franscene.info',
+ phone: '+1 (849) 484-3425',
+ address: '446 Macon Street, Heil, North Dakota, 4499',
+ about:
+ 'Consectetur elit eu labore adipisicing. Enim dolore sunt sint duis exercitation do quis enim veniam enim incididunt sint nostrud. Est veniam exercitation deserunt irure consectetur non esse ut eu aliqua ad. Occaecat commodo dolore magna labore ad id ipsum. Aliquip ad consectetur incididunt laborum exercitation cillum cillum minim commodo laboris proident in. Sit aliqua consequat sunt dolor veniam.',
+ registered: 'Wednesday, March 25, 2015 12:58 AM',
+ latitude: '-0.119378',
+ longitude: '-52.799542',
+ tags: ['laboris', 'ut', 'nostrud', 'nisi', 'tempor'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Young Bates',
+ },
+ {
+ id: 1,
+ name: 'Rhea Chen',
+ },
+ {
+ id: 2,
+ name: 'Alissa Morin',
+ },
+ ],
+ greeting: 'Hello, Cameron! You have 5 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c3a6582461fb89886',
+ index: 65,
+ guid: '4974e20f-b8df-4cbd-92ce-fe1cfc9c3657',
+ isActive: false,
+ balance: '$1,022.79',
+ picture: 'http://placehold.it/32x32',
+ age: 40,
+ eyeColor: 'blue',
+ name: {
+ first: 'Ashlee',
+ last: 'Randolph',
+ },
+ company: 'SLUMBERIA',
+ email: 'ashlee.randolph@slumberia.io',
+ phone: '+1 (850) 590-3733',
+ address: '539 Wortman Avenue, Rose, Northern Mariana Islands, 4842',
+ about:
+ 'Lorem non commodo ea anim proident reprehenderit id consequat velit laborum deserunt. Veniam ad excepteur anim laboris laboris quis ad in dolor. Minim irure ad mollit reprehenderit dolor voluptate duis dolor incididunt cillum irure.',
+ registered: 'Saturday, March 28, 2015 2:02 AM',
+ latitude: '45.475368',
+ longitude: '-140.783475',
+ tags: ['nulla', 'ea', 'eiusmod', 'adipisicing', 'ea'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Martin Abbott',
+ },
+ {
+ id: 1,
+ name: 'Franco Munoz',
+ },
+ {
+ id: 2,
+ name: 'Briggs Briggs',
+ },
+ ],
+ greeting: 'Hello, Ashlee! You have 8 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c9b9a0708efa913ae',
+ index: 66,
+ guid: 'd7e3871b-05bc-4db9-8ebb-aa136e9349a1',
+ isActive: false,
+ balance: '$1,282.07',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'brown',
+ name: {
+ first: 'Karin',
+ last: 'Mcintyre',
+ },
+ company: 'QIAO',
+ email: 'karin.mcintyre@qiao.com',
+ phone: '+1 (827) 522-3528',
+ address: '476 Kings Place, Rowe, Montana, 1003',
+ about:
+ 'Anim Lorem irure commodo sunt culpa proident velit quis consectetur. Et qui irure et ullamco ut ipsum. In sit dolor cupidatat dolore veniam sunt aliquip elit aliquip incididunt commodo eu in. Quis labore adipisicing officia eu mollit veniam officia ipsum excepteur dolor.',
+ registered: 'Sunday, February 9, 2014 3:39 PM',
+ latitude: '-50.934733',
+ longitude: '80.069751',
+ tags: ['non', 'aliqua', 'deserunt', 'exercitation', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Bradshaw Vega',
+ },
+ {
+ id: 1,
+ name: 'Imelda Barnett',
+ },
+ {
+ id: 2,
+ name: 'Margaret Cross',
+ },
+ ],
+ greeting: 'Hello, Karin! You have 5 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c5e44b5027bec1ac0',
+ index: 67,
+ guid: '4be33215-4b35-4079-9831-c2632a0bfe28',
+ isActive: false,
+ balance: '$2,900.86',
+ picture: 'http://placehold.it/32x32',
+ age: 38,
+ eyeColor: 'blue',
+ name: {
+ first: 'Rowe',
+ last: 'Hogan',
+ },
+ company: 'ISOSURE',
+ email: 'rowe.hogan@isosure.tv',
+ phone: '+1 (925) 401-2733',
+ address: '978 Ditmas Avenue, Herald, Ohio, 4322',
+ about:
+ 'Nostrud commodo deserunt Lorem magna esse nulla eu cillum. Aliquip aute est laborum enim ut irure enim exercitation anim ipsum minim cillum. Qui commodo labore veniam et anim proident anim. Aliquip ut veniam consectetur amet mollit reprehenderit qui.',
+ registered: 'Wednesday, April 13, 2016 6:04 AM',
+ latitude: '38.442477',
+ longitude: '-127.884805',
+ tags: ['et', 'occaecat', 'elit', 'tempor', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Elnora Guzman',
+ },
+ {
+ id: 1,
+ name: 'Talley Townsend',
+ },
+ {
+ id: 2,
+ name: 'Chaney Harvey',
+ },
+ ],
+ greeting: 'Hello, Rowe! You have 8 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c9075ebf36eef4cb0',
+ index: 68,
+ guid: '6cc1ae86-7aa6-4c1f-8338-1cd7b3630ade',
+ isActive: true,
+ balance: '$3,381.58',
+ picture: 'http://placehold.it/32x32',
+ age: 27,
+ eyeColor: 'blue',
+ name: {
+ first: 'Ronda',
+ last: 'Parker',
+ },
+ company: 'BOILCAT',
+ email: 'ronda.parker@boilcat.net',
+ phone: '+1 (888) 404-2571',
+ address: '836 Java Street, Detroit, Oregon, 9319',
+ about:
+ 'Fugiat quis est id anim. Enim nostrud tempor esse in officia enim deserunt. Nisi anim adipisicing nostrud occaecat laboris occaecat. Qui laborum ut exercitation culpa aute veniam exercitation tempor qui adipisicing minim. Dolor ex voluptate pariatur aliquip dolor cillum laborum est. Ex adipisicing mollit ea occaecat ut eu.',
+ registered: 'Friday, August 12, 2016 6:40 AM',
+ latitude: '-67.552112',
+ longitude: '-148.920666',
+ tags: ['enim', 'occaecat', 'ex', 'est', 'magna'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Ora Cannon',
+ },
+ {
+ id: 1,
+ name: 'Mcintosh Carter',
+ },
+ {
+ id: 2,
+ name: 'Glenn Foley',
+ },
+ ],
+ greeting: 'Hello, Ronda! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0cd164eec1663b2d49',
+ index: 69,
+ guid: '03ba15d9-ec37-4820-9833-5191c760dabe',
+ isActive: false,
+ balance: '$3,202.56',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'brown',
+ name: {
+ first: 'Gallegos',
+ last: 'Preston',
+ },
+ company: 'VETRON',
+ email: 'gallegos.preston@vetron.org',
+ phone: '+1 (923) 570-3649',
+ address: '327 Irvington Place, Snelling, Arizona, 5946',
+ about:
+ 'Anim aliquip deserunt commodo id incididunt mollit cillum et fugiat ullamco magna sint fugiat. Minim qui ea sint commodo eiusmod velit cupidatat excepteur eu. Enim cillum est sint incididunt. Culpa deserunt ex sunt labore voluptate. Ad laboris in pariatur dolore laboris dolor duis quis esse do sit velit pariatur dolore.',
+ registered: 'Saturday, July 23, 2016 4:24 AM',
+ latitude: '23.3067',
+ longitude: '26.605291',
+ tags: ['adipisicing', 'aute', 'consequat', 'fugiat', 'elit'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Raquel Dillard',
+ },
+ {
+ id: 1,
+ name: 'Conway Cruz',
+ },
+ {
+ id: 2,
+ name: 'Hope Woods',
+ },
+ ],
+ greeting: 'Hello, Gallegos! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c0282495ae724dd00',
+ index: 70,
+ guid: 'e4e4b345-ccb8-46bd-ad7e-25905e3f887d',
+ isActive: false,
+ balance: '$2,592.79',
+ picture: 'http://placehold.it/32x32',
+ age: 28,
+ eyeColor: 'green',
+ name: {
+ first: 'Scott',
+ last: 'Anderson',
+ },
+ company: 'SCENTRIC',
+ email: 'scott.anderson@scentric.me',
+ phone: '+1 (869) 517-3912',
+ address: '408 Caton Place, Nadine, Vermont, 538',
+ about:
+ 'Do elit sunt eiusmod anim anim eiusmod ex. Ipsum officia velit ipsum non minim enim. Enim culpa nostrud occaecat voluptate sit minim consectetur sit ut eiusmod. Magna voluptate fugiat occaecat id et eiusmod voluptate. Dolore consequat fugiat quis ipsum non deserunt ex culpa ut aliqua officia.',
+ registered: 'Wednesday, February 25, 2015 11:02 AM',
+ latitude: '88.07987',
+ longitude: '157.464013',
+ tags: ['dolore', 'sint', 'amet', 'voluptate', 'nulla'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Browning Brock',
+ },
+ {
+ id: 1,
+ name: 'Goldie Greer',
+ },
+ {
+ id: 2,
+ name: 'Bright Clayton',
+ },
+ ],
+ greeting: 'Hello, Scott! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c997d595f28bed4b2',
+ index: 71,
+ guid: '2e81e82f-097d-4ed9-816b-678f7b5f28f4',
+ isActive: true,
+ balance: '$1,316.05',
+ picture: 'http://placehold.it/32x32',
+ age: 23,
+ eyeColor: 'green',
+ name: {
+ first: 'Clarice',
+ last: 'York',
+ },
+ company: 'SOPRANO',
+ email: 'clarice.york@soprano.ca',
+ phone: '+1 (822) 485-3017',
+ address: '428 Midwood Street, Witmer, California, 4690',
+ about:
+ 'Exercitation adipisicing aute commodo commodo exercitation. Aliquip aliquip minim sit anim cillum. Cupidatat veniam adipisicing mollit duis exercitation eu consequat non nulla proident. Occaecat sunt sunt consectetur occaecat veniam consectetur do minim. Adipisicing reprehenderit eu laboris sunt minim fugiat enim est proident duis consequat laboris ea ut. Officia dolor incididunt exercitation dolore et ut veniam. Minim est incididunt ullamco quis proident velit esse et est Lorem.',
+ registered: 'Friday, October 24, 2014 8:31 AM',
+ latitude: '50.680453',
+ longitude: '-22.267809',
+ tags: ['esse', 'dolore', 'deserunt', 'labore', 'officia'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Madge Battle',
+ },
+ {
+ id: 1,
+ name: 'Francis Dunn',
+ },
+ {
+ id: 2,
+ name: 'Rosario Irwin',
+ },
+ ],
+ greeting: 'Hello, Clarice! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0ce47eee37facdfcc8',
+ index: 72,
+ guid: 'f7880df6-e31a-42ff-971a-82d7ca76bc14',
+ isActive: true,
+ balance: '$2,569.05',
+ picture: 'http://placehold.it/32x32',
+ age: 22,
+ eyeColor: 'green',
+ name: {
+ first: 'Madeleine',
+ last: 'Mann',
+ },
+ company: 'PHORMULA',
+ email: 'madeleine.mann@phormula.biz',
+ phone: '+1 (839) 443-3345',
+ address: '948 McKibben Street, Wyoming, Idaho, 2596',
+ about:
+ 'Amet eiusmod quis sit veniam irure eiusmod eiusmod et. Amet ex consectetur velit aliqua fugiat excepteur commodo in non do anim proident enim. Do nulla minim id cillum cillum non non proident laborum ullamco in nostrud excepteur.',
+ registered: 'Monday, September 7, 2015 9:57 AM',
+ latitude: '1.417271',
+ longitude: '14.344005',
+ tags: ['minim', 'aliqua', 'aliqua', 'velit', 'nisi'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Carole Bond',
+ },
+ {
+ id: 1,
+ name: 'Diann Vaughan',
+ },
+ {
+ id: 2,
+ name: 'Morgan Rojas',
+ },
+ ],
+ greeting: 'Hello, Madeleine! You have 10 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c49e7bdd7ed590e84',
+ index: 73,
+ guid: '7bf69708-15f1-4d35-b71e-17c43001af61',
+ isActive: false,
+ balance: '$3,449.63',
+ picture: 'http://placehold.it/32x32',
+ age: 29,
+ eyeColor: 'green',
+ name: {
+ first: 'Riley',
+ last: 'Moses',
+ },
+ company: 'COMDOM',
+ email: 'riley.moses@comdom.co.uk',
+ phone: '+1 (855) 426-2672',
+ address: '556 Richardson Street, Grazierville, Mississippi, 7295',
+ about:
+ 'Ullamco do reprehenderit duis mollit ad duis aute qui reprehenderit ipsum qui in eiusmod. Officia culpa cillum cupidatat irure ipsum id occaecat. Enim do in dolor veniam laborum dolor est reprehenderit occaecat et minim laboris. Duis sint voluptate deserunt cillum fugiat velit irure. Lorem ullamco laboris reprehenderit dolor aute tempor excepteur. In elit enim aliquip ut in. Nulla et tempor ut mollit reprehenderit dolore ullamco veniam nisi minim.',
+ registered: 'Wednesday, March 18, 2015 5:28 AM',
+ latitude: '-17.956865',
+ longitude: '60.984652',
+ tags: ['quis', 'elit', 'excepteur', 'incididunt', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Jana Knowles',
+ },
+ {
+ id: 1,
+ name: 'Dotson Calderon',
+ },
+ {
+ id: 2,
+ name: 'Stacy Winters',
+ },
+ ],
+ greeting: 'Hello, Riley! You have 10 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c4e5dea19708856e5',
+ index: 74,
+ guid: 'cf4a7bf9-7a0e-4810-b5f5-23dd2bea6a9a',
+ isActive: true,
+ balance: '$1,365.62',
+ picture: 'http://placehold.it/32x32',
+ age: 24,
+ eyeColor: 'brown',
+ name: {
+ first: 'Emilia',
+ last: 'Sanford',
+ },
+ company: 'AQUAZURE',
+ email: 'emilia.sanford@aquazure.us',
+ phone: '+1 (812) 451-2498',
+ address: '649 Guernsey Street, Wedgewood, Alabama, 7660',
+ about:
+ 'Amet cillum esse exercitation enim tempor ut est amet ad anim. Cillum veniam exercitation sit dolor velit irure tempor anim amet quis aliquip. Aliqua dolor cupidatat culpa consequat dolor in qui est tempor aliqua dolor. Mollit tempor dolor ad nisi Lorem anim adipisicing deserunt tempor. Tempor elit eiusmod dolor reprehenderit sint consequat aliqua incididunt dolore aliqua proident exercitation officia. Et velit tempor minim voluptate. Veniam dolor labore laboris ad quis minim tempor est ad cillum nulla.',
+ registered: 'Thursday, May 5, 2016 10:20 PM',
+ latitude: '66.972869',
+ longitude: '26.31688',
+ tags: ['eiusmod', 'sit', 'occaecat', 'nostrud', 'nisi'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Desiree Norman',
+ },
+ {
+ id: 1,
+ name: 'Carlson Meadows',
+ },
+ {
+ id: 2,
+ name: 'Miranda Gutierrez',
+ },
+ ],
+ greeting: 'Hello, Emilia! You have 10 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0cbb2ae9fb9dc2c667',
+ index: 75,
+ guid: 'f814f3d7-fd66-4061-81de-1097a56ddc95',
+ isActive: false,
+ balance: '$2,546.18',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'green',
+ name: {
+ first: 'Cristina',
+ last: 'Carver',
+ },
+ company: 'DOGNOSIS',
+ email: 'cristina.carver@dognosis.name',
+ phone: '+1 (967) 552-2825',
+ address: '293 Metrotech Courtr, Cawood, Illinois, 7748',
+ about:
+ 'Incididunt nulla ut velit in tempor pariatur sit ipsum dolor do laborum elit nostrud ullamco. Quis voluptate minim qui eu enim consectetur. In duis excepteur aute nostrud exercitation proident.',
+ registered: 'Saturday, November 14, 2015 9:50 AM',
+ latitude: '66.369831',
+ longitude: '-113.48546',
+ tags: ['do', 'laborum', 'non', 'velit', 'sunt'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Dianna Armstrong',
+ },
+ {
+ id: 1,
+ name: 'Gena Stafford',
+ },
+ {
+ id: 2,
+ name: 'Clare Allison',
+ },
+ ],
+ greeting: 'Hello, Cristina! You have 10 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c6311ae4dab4a3f34',
+ index: 76,
+ guid: '13d0bb42-7310-486c-9717-a91fe51873e9',
+ isActive: false,
+ balance: '$2,712.28',
+ picture: 'http://placehold.it/32x32',
+ age: 31,
+ eyeColor: 'green',
+ name: {
+ first: 'Rosa',
+ last: 'Cook',
+ },
+ company: 'MATRIXITY',
+ email: 'rosa.cook@matrixity.info',
+ phone: '+1 (937) 505-2696',
+ address: '119 Madison Place, Dola, Rhode Island, 7030',
+ about:
+ 'Veniam laborum mollit dolor nostrud anim ex duis eiusmod ex. Nostrud excepteur laborum officia eu eiusmod aute ea aute ea irure adipisicing. Ex consectetur laboris ex nisi ex esse ea sit cupidatat cupidatat anim labore nostrud Lorem. Esse quis consectetur eiusmod officia sunt cupidatat esse ullamco esse eiusmod tempor enim laborum nulla. Esse occaecat Lorem amet laboris laborum reprehenderit eu eiusmod excepteur qui officia. Nisi irure reprehenderit adipisicing dolor ipsum pariatur sint pariatur.',
+ registered: 'Tuesday, September 29, 2015 7:15 PM',
+ latitude: '47.166257',
+ longitude: '48.962919',
+ tags: ['sint', 'reprehenderit', 'aute', 'velit', 'excepteur'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Nellie Mooney',
+ },
+ {
+ id: 1,
+ name: 'Bridget Rocha',
+ },
+ {
+ id: 2,
+ name: 'Rosie Neal',
+ },
+ ],
+ greeting: 'Hello, Rosa! You have 9 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c3f6b67c114a34891',
+ index: 77,
+ guid: 'a72c60f4-ea12-47ca-a738-dfc886a23fb3',
+ isActive: false,
+ balance: '$3,863.37',
+ picture: 'http://placehold.it/32x32',
+ age: 37,
+ eyeColor: 'brown',
+ name: {
+ first: 'Hallie',
+ last: 'Cherry',
+ },
+ company: 'MAXIMIND',
+ email: 'hallie.cherry@maximind.io',
+ phone: '+1 (883) 445-2642',
+ address: '816 Bridgewater Street, Worcester, New Mexico, 3552',
+ about:
+ 'Ut id cillum mollit excepteur sunt adipisicing sint do nostrud velit nisi Lorem. Incididunt amet tempor aliqua ad. Consequat veniam non exercitation veniam occaecat eu reprehenderit excepteur. In dolor ex sunt deserunt cupidatat in consequat est commodo excepteur ea. Eu ex qui ea exercitation proident est cillum aliqua pariatur amet in anim deserunt.',
+ registered: 'Wednesday, December 16, 2015 1:09 AM',
+ latitude: '-22.963385',
+ longitude: '-18.88522',
+ tags: ['ad', 'tempor', 'adipisicing', 'ea', 'consequat'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Karla Waters',
+ },
+ {
+ id: 1,
+ name: 'Salinas Duran',
+ },
+ {
+ id: 2,
+ name: 'Juliette Bell',
+ },
+ ],
+ greeting: 'Hello, Hallie! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0caf58b7c09ccbbfe0',
+ index: 78,
+ guid: 'a2136e10-0d46-4e2a-9d45-1ad4a7fb6150',
+ isActive: false,
+ balance: '$1,715.46',
+ picture: 'http://placehold.it/32x32',
+ age: 37,
+ eyeColor: 'green',
+ name: {
+ first: 'Hill',
+ last: 'Adams',
+ },
+ company: 'UNI',
+ email: 'hill.adams@uni.com',
+ phone: '+1 (887) 533-2728',
+ address: '341 Union Avenue, Tyro, Marshall Islands, 6939',
+ about:
+ 'Lorem excepteur cupidatat dolor voluptate eu et reprehenderit id nisi eiusmod tempor. Occaecat et reprehenderit tempor est reprehenderit magna elit eu do pariatur laborum dolore fugiat do. Occaecat dolor mollit ea sunt ex ea sint eu culpa irure enim nostrud. Ipsum eu anim elit quis officia anim do laborum velit sunt tempor in. Quis id veniam laborum sint in dolor do.',
+ registered: 'Thursday, August 20, 2015 6:41 PM',
+ latitude: '49.668798',
+ longitude: '48.122152',
+ tags: ['deserunt', 'labore', 'ea', 'reprehenderit', 'dolore'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Dixie Reyes',
+ },
+ {
+ id: 1,
+ name: 'Randall Mason',
+ },
+ {
+ id: 2,
+ name: 'Morrison Church',
+ },
+ ],
+ greeting: 'Hello, Hill! You have 7 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0c120ddc3a2597b83c',
+ index: 79,
+ guid: '5d601f0c-923c-41f2-86ec-2794c25ba07d',
+ isActive: true,
+ balance: '$1,368.60',
+ picture: 'http://placehold.it/32x32',
+ age: 26,
+ eyeColor: 'blue',
+ name: {
+ first: 'Megan',
+ last: 'Grant',
+ },
+ company: 'PURIA',
+ email: 'megan.grant@puria.tv',
+ phone: '+1 (867) 456-2370',
+ address: '688 Jewel Street, Stagecoach, Nebraska, 5430',
+ about:
+ 'Reprehenderit et aliquip sunt nisi aliquip minim ut. Nostrud veniam velit laboris sit consectetur occaecat incididunt nulla officia adipisicing labore commodo qui anim. Sunt sunt mollit Lorem et do magna magna occaecat ea esse sit deserunt deserunt non. Est aliqua cupidatat veniam laboris amet officia ex consequat ullamco fugiat tempor laborum. Irure minim veniam deserunt est mollit. Do elit ipsum ea laborum magna amet id qui ea non veniam. Laboris Lorem ullamco dolore ad dolor anim tempor sint nisi reprehenderit proident tempor.',
+ registered: 'Wednesday, September 10, 2014 7:56 PM',
+ latitude: '62.666152',
+ longitude: '-103.092817',
+ tags: ['officia', 'sit', 'veniam', 'consequat', 'aliqua'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Rush Klein',
+ },
+ {
+ id: 1,
+ name: 'Bruce Bryan',
+ },
+ {
+ id: 2,
+ name: 'Vicki Griffith',
+ },
+ ],
+ greeting: 'Hello, Megan! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c923ee8af5787fc95',
+ index: 80,
+ guid: '27f1d835-7fe3-4ace-8f1c-e9d834d58b51',
+ isActive: true,
+ balance: '$1,120.98',
+ picture: 'http://placehold.it/32x32',
+ age: 22,
+ eyeColor: 'brown',
+ name: {
+ first: 'Kathie',
+ last: 'Adkins',
+ },
+ company: 'ZANILLA',
+ email: 'kathie.adkins@zanilla.net',
+ phone: '+1 (827) 443-2787',
+ address: '225 Stillwell Avenue, Clayville, Pennsylvania, 2403',
+ about:
+ 'Cillum proident cupidatat consectetur aliqua amet ad. Dolor magna anim id aliquip deserunt occaecat do sunt ad est laborum consequat non esse. Nisi magna voluptate sunt magna exercitation officia cupidatat exercitation minim eu Lorem et. Occaecat ex velit fugiat reprehenderit veniam nulla. Consequat laboris eu reprehenderit dolore ea ut anim culpa ipsum ullamco. Amet pariatur dolor dolor non cillum enim elit id. Aute magna dolor ea ea fugiat.',
+ registered: 'Wednesday, January 8, 2014 9:01 AM',
+ latitude: '-57.35919',
+ longitude: '16.081565',
+ tags: ['mollit', 'ut', 'velit', 'eu', 'ea'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Martha Webb',
+ },
+ {
+ id: 1,
+ name: 'Quinn Hampton',
+ },
+ {
+ id: 2,
+ name: 'Phelps Reilly',
+ },
+ ],
+ greeting: 'Hello, Kathie! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c0f013070624983d3',
+ index: 81,
+ guid: 'd20f5d74-7e69-4a38-8afc-f9eafd9eb9b8',
+ isActive: true,
+ balance: '$2,486.01',
+ picture: 'http://placehold.it/32x32',
+ age: 28,
+ eyeColor: 'green',
+ name: {
+ first: 'Reid',
+ last: 'Moon',
+ },
+ company: 'UPLINX',
+ email: 'reid.moon@uplinx.org',
+ phone: '+1 (974) 588-2358',
+ address: '437 Wythe Place, Bergoo, Maine, 2688',
+ about:
+ 'Proident sit nostrud adipisicing fugiat laborum adipisicing commodo est. Eu voluptate dolor ad consequat cillum tempor excepteur. Veniam sit ullamco velit aliquip nulla nisi magna sunt commodo officia tempor mollit. Velit occaecat occaecat culpa in duis dolor enim aute incididunt ipsum adipisicing excepteur adipisicing in. Mollit duis incididunt sit deserunt tempor ullamco sit. Nisi et aliquip aliquip nisi ad cillum deserunt amet Lorem id minim in. Nisi ullamco labore consequat deserunt voluptate sunt nulla commodo quis dolore et do sunt dolor.',
+ registered: 'Wednesday, November 5, 2014 8:41 PM',
+ latitude: '-57.701702',
+ longitude: '98.460257',
+ tags: ['culpa', 'dolore', 'sunt', 'duis', 'sint'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Christina Brennan',
+ },
+ {
+ id: 1,
+ name: 'Joan Key',
+ },
+ {
+ id: 2,
+ name: 'Terrie Colon',
+ },
+ ],
+ greeting: 'Hello, Reid! You have 6 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0cd7d10e075f923c32',
+ index: 82,
+ guid: 'eff18055-8039-4733-8e71-0e8161a9a37f',
+ isActive: true,
+ balance: '$1,703.03',
+ picture: 'http://placehold.it/32x32',
+ age: 27,
+ eyeColor: 'green',
+ name: {
+ first: 'Myra',
+ last: 'Cooper',
+ },
+ company: 'LOTRON',
+ email: 'myra.cooper@lotron.me',
+ phone: '+1 (833) 490-3199',
+ address: '454 Argyle Road, Tilleda, West Virginia, 4341',
+ about:
+ 'Dolor sint commodo est excepteur sunt labore consequat cillum et minim. Id proident id officia aute. Aliquip exercitation nulla esse ad id do adipisicing occaecat ipsum veniam veniam dolor. Voluptate tempor qui dolor ullamco consequat consequat cupidatat nisi elit et non qui non adipisicing. Excepteur consequat minim laborum minim nostrud mollit anim exercitation minim duis ullamco. Minim minim fugiat qui voluptate dolor dolore voluptate non consectetur nulla commodo exercitation do non. Ad commodo sit excepteur adipisicing do ex sunt minim laborum dolore non do elit in.',
+ registered: 'Friday, September 30, 2016 1:21 AM',
+ latitude: '12.698327',
+ longitude: '98.957272',
+ tags: ['et', 'esse', 'sint', 'incididunt', 'esse'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Angelia Roth',
+ },
+ {
+ id: 1,
+ name: 'Vasquez Cole',
+ },
+ {
+ id: 2,
+ name: 'Tanner Hayes',
+ },
+ ],
+ greeting: 'Hello, Myra! You have 10 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c79029337f04c4f74',
+ index: 83,
+ guid: '10fb3103-bb73-42c0-8fac-3fe42121176e',
+ isActive: false,
+ balance: '$3,028.72',
+ picture: 'http://placehold.it/32x32',
+ age: 33,
+ eyeColor: 'green',
+ name: {
+ first: 'Mccarty',
+ last: 'Workman',
+ },
+ company: 'TURNABOUT',
+ email: 'mccarty.workman@turnabout.ca',
+ phone: '+1 (839) 409-3408',
+ address: '138 Rutledge Street, Tivoli, South Dakota, 9041',
+ about:
+ 'Culpa laborum ea magna nulla ipsum velit excepteur incididunt occaecat sit. Ullamco laborum voluptate dolor est proident ex culpa. Ex est sunt aliquip culpa in adipisicing mollit irure magna exercitation.',
+ registered: 'Thursday, December 18, 2014 10:46 AM',
+ latitude: '3.78797',
+ longitude: '-146.349265',
+ tags: ['ut', 'pariatur', 'ad', 'voluptate', 'qui'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Skinner Webster',
+ },
+ {
+ id: 1,
+ name: 'Atkins James',
+ },
+ {
+ id: 2,
+ name: 'Enid Meyer',
+ },
+ ],
+ greeting: 'Hello, Mccarty! You have 9 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0c642e9641a7bfbcee',
+ index: 84,
+ guid: 'a774c4b8-b1d2-42c3-837a-52bce2aa7a94',
+ isActive: false,
+ balance: '$2,539.93',
+ picture: 'http://placehold.it/32x32',
+ age: 34,
+ eyeColor: 'blue',
+ name: {
+ first: 'Davenport',
+ last: 'Small',
+ },
+ company: 'ISOTRACK',
+ email: 'davenport.small@isotrack.biz',
+ phone: '+1 (909) 521-2228',
+ address: '646 Fleet Walk, Dale, Texas, 3140',
+ about:
+ 'Non magna officia veniam velit nostrud elit. Nulla ad cupidatat quis aliquip ut. Adipisicing labore sint nostrud eu veniam sunt dolor consequat pariatur commodo consectetur magna sunt. Tempor dolor consectetur deserunt in quis id proident occaecat sunt. Est minim anim proident occaecat culpa ex minim mollit ea. Enim deserunt tempor ea eu nulla sunt veniam ad. Laborum cillum dolor proident voluptate id sint ut voluptate cillum anim incididunt laboris.',
+ registered: 'Friday, May 1, 2015 11:13 AM',
+ latitude: '-49.904277',
+ longitude: '-35.151297',
+ tags: ['anim', 'labore', 'Lorem', 'anim', 'cillum'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Emerson Gilmore',
+ },
+ {
+ id: 1,
+ name: 'Castillo Wright',
+ },
+ {
+ id: 2,
+ name: 'Marva Stone',
+ },
+ ],
+ greeting: 'Hello, Davenport! You have 10 unread messages.',
+ favoriteFruit: 'strawberry',
+ },
+ {
+ _id: '580ddf0cf681ca1388d97783',
+ index: 85,
+ guid: 'b5860a9d-45ff-47ef-bd87-e43adc9dc8d6',
+ isActive: true,
+ balance: '$1,578.95',
+ picture: 'http://placehold.it/32x32',
+ age: 29,
+ eyeColor: 'brown',
+ name: {
+ first: 'Reyes',
+ last: 'Dotson',
+ },
+ company: 'GRACKER',
+ email: 'reyes.dotson@gracker.co.uk',
+ phone: '+1 (909) 410-2034',
+ address: '739 Junius Street, Nutrioso, Missouri, 6051',
+ about:
+ 'Esse magna Lorem enim nostrud quis sit minim et do elit. Culpa proident ipsum dolore aute do exercitation tempor eu. Reprehenderit ullamco sunt ad anim aliqua proident deserunt commodo dolor ad quis cillum cupidatat. Ea sint id aute adipisicing do anim minim exercitation labore id ullamco duis do sit. Laboris do in sunt esse anim cillum anim nulla eu do consequat aliquip culpa amet. Ipsum velit reprehenderit minim velit incididunt enim duis ut aliquip.',
+ registered: 'Wednesday, February 5, 2014 11:01 AM',
+ latitude: '-11.383582',
+ longitude: '102.513196',
+ tags: ['occaecat', 'consequat', 'ipsum', 'elit', 'voluptate'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Baker Bennett',
+ },
+ {
+ id: 1,
+ name: 'Franklin Nelson',
+ },
+ {
+ id: 2,
+ name: 'Wilda Hill',
+ },
+ ],
+ greeting: 'Hello, Reyes! You have 7 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0cc99c7d2e5622dbb5',
+ index: 86,
+ guid: '0a1d6c96-621e-4fe5-9f0f-ccba26458cf1',
+ isActive: false,
+ balance: '$1,760.99',
+ picture: 'http://placehold.it/32x32',
+ age: 25,
+ eyeColor: 'green',
+ name: {
+ first: 'Ratliff',
+ last: 'Kinney',
+ },
+ company: 'YURTURE',
+ email: 'ratliff.kinney@yurture.us',
+ phone: '+1 (962) 417-2906',
+ address: '832 Duryea Court, Moscow, New Hampshire, 7275',
+ about:
+ 'Sint commodo ullamco proident ullamco esse elit Lorem anim veniam sunt veniam nulla elit. Tempor nulla culpa ut occaecat tempor elit aliqua ipsum. Anim nisi reprehenderit pariatur officia aute elit fugiat amet est incididunt. Irure excepteur id cillum exercitation esse officia dolor in amet id nostrud. Incididunt consectetur culpa tempor officia veniam aute eu incididunt duis tempor incididunt ex nisi irure. Tempor proident aute aliquip in aliqua Lorem cillum consequat exercitation et sint nulla minim. Cillum magna ut aliqua eu qui tempor culpa laborum amet magna ullamco.',
+ registered: 'Tuesday, April 29, 2014 6:13 AM',
+ latitude: '-13.301568',
+ longitude: '-112.255058',
+ tags: ['labore', 'sit', 'excepteur', 'laboris', 'nulla'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Ingrid Rutledge',
+ },
+ {
+ id: 1,
+ name: 'Simpson Barlow',
+ },
+ {
+ id: 2,
+ name: 'Lottie Hickman',
+ },
+ ],
+ greeting: 'Hello, Ratliff! You have 6 unread messages.',
+ favoriteFruit: 'banana',
+ },
+ {
+ _id: '580ddf0c461fe67eb5044e47',
+ index: 87,
+ guid: '4f264353-60c0-4324-af56-34d2f28e718a',
+ isActive: true,
+ balance: '$1,034.62',
+ picture: 'http://placehold.it/32x32',
+ age: 21,
+ eyeColor: 'blue',
+ name: {
+ first: 'Bettye',
+ last: 'Jenkins',
+ },
+ company: 'LUNCHPOD',
+ email: 'bettye.jenkins@lunchpod.name',
+ phone: '+1 (873) 530-2152',
+ address: '577 Oliver Street, Gallina, Hawaii, 2623',
+ about:
+ 'Consectetur eiusmod aute ad duis nisi minim dolore ad do deserunt occaecat voluptate cupidatat. Sunt exercitation cillum deserunt veniam cillum. Lorem anim dolor occaecat elit amet. Magna reprehenderit laboris enim occaecat eiusmod Lorem duis sint nulla quis exercitation occaecat ipsum. Laborum Lorem magna ullamco enim ad id. Pariatur exercitation nisi cupidatat incididunt ipsum magna cillum laborum. Laboris exercitation excepteur adipisicing Lorem duis id ipsum fugiat nostrud labore culpa consequat ad.',
+ registered: 'Sunday, May 1, 2016 11:30 AM',
+ latitude: '-2.873736',
+ longitude: '108.897468',
+ tags: ['aliqua', 'sunt', 'ex', 'duis', 'commodo'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Leonard Kelley',
+ },
+ {
+ id: 1,
+ name: 'Penny Watson',
+ },
+ {
+ id: 2,
+ name: 'Roxanne French',
+ },
+ ],
+ greeting: 'Hello, Bettye! You have 5 unread messages.',
+ favoriteFruit: 'apple',
+ },
+ {
+ _id: '580ddf0cf9dae7fe5522c648',
+ index: 88,
+ guid: 'b47a7f45-3805-44d7-b455-67038c5466e8',
+ isActive: true,
+ balance: '$2,489.68',
+ picture: 'http://placehold.it/32x32',
+ age: 35,
+ eyeColor: 'blue',
+ name: {
+ first: 'Barr',
+ last: 'Pearson',
+ },
+ company: 'QNEKT',
+ email: 'barr.pearson@qnekt.info',
+ phone: '+1 (914) 541-3874',
+ address: '186 Robert Street, Ona, Georgia, 8717',
+ about:
+ 'Anim ullamco mollit adipisicing sit tempor aute eiusmod adipisicing cupidatat laborum tempor reprehenderit pariatur. Reprehenderit ullamco aliqua laboris Lorem. Exercitation magna pariatur mollit ea ullamco et nostrud commodo laboris dolore. Esse do cupidatat pariatur esse in labore do et cillum reprehenderit incididunt. Ad mollit adipisicing proident culpa occaecat tempor et elit esse occaecat fugiat consectetur occaecat occaecat. Et adipisicing esse labore ullamco proident laboris consequat enim aliqua. Eu laboris et in voluptate.',
+ registered: 'Friday, September 5, 2014 6:22 PM',
+ latitude: '55.604021',
+ longitude: '-152.171415',
+ tags: ['occaecat', 'culpa', 'do', 'id', 'qui'],
+ range: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
+ friends: [
+ {
+ id: 0,
+ name: 'Kimberley Mckinney',
+ },
+ {
+ id: 1,
+ name: 'Mosley Gardner',
+ },
+ {
+ id: 2,
+ name: 'Gay Garner',
+ },
+ ],
+ greeting: 'Hello, Barr! You have 6 unread messages.',
+ favoriteFruit: 'apple',
+ },
+];
+
+export const circularData = { bigArray };
+circularData.c = circularData;
diff --git a/extension/test/perf/send.spec.js b/extension/test/perf/send.spec.js
new file mode 100644
index 00000000..00018075
--- /dev/null
+++ b/extension/test/perf/send.spec.js
@@ -0,0 +1,26 @@
+import '@babel/polyfill';
+import expect from 'expect';
+import { bigArray, bigString, circularData } from './data';
+import { listenMessage } from '../utils/inject';
+import '../../src/browser/extension/inject/pageScript';
+
+function test(title, data, maxTime = 100) {
+ it('should send ' + title, async () => {
+ const start = new Date();
+ await listenMessage(() => {
+ window.__REDUX_DEVTOOLS_EXTENSION__.send(
+ { type: 'TEST_ACTION', data },
+ data
+ );
+ });
+ const ms = new Date() - start;
+ // console.log(ms);
+ expect(ms).toBeLessThan(maxTime);
+ });
+}
+
+describe('Perf', () => {
+ test('a huge string', bigString);
+ test('a huge array', bigArray);
+ test('an object with circular references', circularData);
+});
diff --git a/extension/test/utils/e2e.js b/extension/test/utils/e2e.js
new file mode 100644
index 00000000..5fd33abb
--- /dev/null
+++ b/extension/test/utils/e2e.js
@@ -0,0 +1,47 @@
+import webdriver from 'selenium-webdriver';
+
+export const delay = (time) =>
+ new Promise((resolve) => setTimeout(resolve, time));
+
+export const switchMonitorTests = {
+ 'should switch to Log Monitor': async function () {
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Inspector"]'))
+ .click();
+ await delay(500); // Wait till menu is fully opened
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Log monitor"]'))
+ .click();
+ await delay(500);
+ await this.driver.findElement(
+ webdriver.By.xpath('//div[a[text()="Reset"] and .//a[text()="Revert"]]')
+ );
+ await delay(500);
+ },
+
+ 'should switch to Chart Monitor': async function () {
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Log monitor"]'))
+ .click();
+ await delay(500); // Wait till menu is fully opened
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Chart"]'))
+ .click();
+ await delay(500);
+ await this.driver.findElement(
+ webdriver.By.xpath('//*[@class="nodeText" and text()="state"]')
+ );
+ await delay(500); // Wait till menu is closed
+ },
+
+ 'should switch back to Inspector Monitor': async function () {
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Chart"]'))
+ .click();
+ await delay(1000); // Wait till menu is fully opened
+ await this.driver
+ .findElement(webdriver.By.xpath('//div[text()="Inspector"]'))
+ .click();
+ await delay(1500); // Wait till menu is closed
+ },
+};
diff --git a/extension/test/utils/inject.js b/extension/test/utils/inject.js
new file mode 100644
index 00000000..9f71d007
--- /dev/null
+++ b/extension/test/utils/inject.js
@@ -0,0 +1,17 @@
+export function insertScript(str) {
+ const s = window.document.createElement('script');
+ s.appendChild(document.createTextNode(str));
+ (document.head || document.documentElement).appendChild(s);
+}
+
+export function listenMessage(f) {
+ return new Promise((resolve) => {
+ const listener = (event) => {
+ const message = event.data;
+ window.removeEventListener('message', listener);
+ resolve(message);
+ };
+ window.addEventListener('message', listener);
+ if (f) f();
+ });
+}
diff --git a/extension/webpack/base.config.js b/extension/webpack/base.config.js
new file mode 100644
index 00000000..036f29e1
--- /dev/null
+++ b/extension/webpack/base.config.js
@@ -0,0 +1,104 @@
+import path from 'path';
+import webpack from 'webpack';
+import TerserPlugin from 'terser-webpack-plugin';
+import CopyPlugin from 'copy-webpack-plugin';
+
+const extpath = path.join(__dirname, '../src/browser/extension/');
+const mock = `${extpath}chromeAPIMock.js`;
+
+const baseConfig = (params) => ({
+ // devtool: 'source-map',
+ mode: 'production',
+ entry: params.input || {
+ background: [mock, `${extpath}background/index`],
+ options: [mock, `${extpath}options/index`],
+ window: [`${extpath}window/index`],
+ remote: [`${extpath}window/remote`],
+ devpanel: [mock, `${extpath}devpanel/index`],
+ devtools: [`${extpath}devtools/index`],
+ content: [mock, `${extpath}inject/contentScript`],
+ pagewrap: [`${extpath}inject/pageScriptWrap`],
+ 'redux-devtools-extension': [
+ `${extpath}inject/index`,
+ `${extpath}inject/deprecatedWarn`,
+ ],
+ inject: [`${extpath}inject/index`, `${extpath}inject/deprecatedWarn`],
+ ...params.inputExtra,
+ },
+ output: {
+ filename: '[name].bundle.js',
+ chunkFilename: '[id].chunk.js',
+ ...params.output,
+ },
+ plugins: [
+ new webpack.DefinePlugin(params.globals),
+ ...(params.plugins
+ ? params.plugins
+ : [
+ new webpack.optimize.ModuleConcatenationPlugin(),
+ new webpack.optimize.OccurrenceOrderPlugin(),
+ ]),
+ ].concat(
+ params.copy
+ ? new CopyPlugin({
+ patterns: [
+ {
+ from: params.manifestJsonPath,
+ to: path.join(params.output.path, 'manifest.json'),
+ },
+ {
+ from: path.join(__dirname, '../src/assets/'),
+ to: params.output.path,
+ },
+ ],
+ })
+ : []
+ ),
+ optimization: {
+ minimizer: [
+ new TerserPlugin({
+ terserOptions: {
+ output: {
+ comments: false,
+ },
+ },
+ // sourceMap: true,
+ cache: true,
+ parallel: true,
+ }),
+ ],
+ },
+ performance: {
+ hints: false,
+ },
+ resolve: {
+ alias: {
+ app: path.join(__dirname, '../src/app'),
+ tmp: path.join(__dirname, '../build/tmp'),
+ },
+ extensions: ['.js'],
+ },
+ module: {
+ rules: [
+ ...(params.loaders
+ ? params.loaders
+ : [
+ {
+ test: /\.js$/,
+ use: 'babel-loader',
+ exclude: /(node_modules|tmp\/page\.bundle)/,
+ },
+ ]),
+ {
+ test: /\.css?$/,
+ use: ['style-loader', 'raw-loader'],
+ },
+ {
+ test: /\.pug$/,
+ use: ['file-loader?name=[name].html', 'pug-html-loader'],
+ },
+ ],
+ },
+});
+
+export default baseConfig;
diff --git a/extension/webpack/dev.config.babel.js b/extension/webpack/dev.config.babel.js
new file mode 100644
index 00000000..918b3865
--- /dev/null
+++ b/extension/webpack/dev.config.babel.js
@@ -0,0 +1,25 @@
+import path from 'path';
+import webpack from 'webpack';
+import baseConfig from './base.config';
+
+let config = baseConfig({
+ inputExtra: {
+ page: [path.join(__dirname, '../src/browser/extension/inject/pageScript')],
+ },
+ output: { path: path.join(__dirname, '../dev') },
+ globals: {
+ 'process.env': {
+ NODE_ENV: '"development"',
+ },
+ },
+ plugins: [new webpack.NoEmitOnErrorsPlugin()],
+ copy: true,
+ manifestJsonPath: path.join(
+ __dirname,
+ '../src/browser/extension/manifest.json'
+ ),
+});
+
+config.watch = true;
+
+export default config;
diff --git a/extension/webpack/prod.config.babel.js b/extension/webpack/prod.config.babel.js
new file mode 100644
index 00000000..3a84a8fd
--- /dev/null
+++ b/extension/webpack/prod.config.babel.js
@@ -0,0 +1,16 @@
+import path from 'path';
+import baseConfig from './base.config';
+
+export default baseConfig({
+ output: { path: path.join(__dirname, '../build/extension') },
+ globals: {
+ 'process.env': {
+ NODE_ENV: '"production"',
+ },
+ },
+ copy: true,
+ manifestJsonPath: path.join(
+ __dirname,
+ '../src/browser/extension/manifest.json'
+ ),
+});
diff --git a/extension/webpack/prod.firefox.config.babel.js b/extension/webpack/prod.firefox.config.babel.js
new file mode 100644
index 00000000..2dffc670
--- /dev/null
+++ b/extension/webpack/prod.firefox.config.babel.js
@@ -0,0 +1,16 @@
+import path from 'path';
+import baseConfig from './base.config';
+
+export default baseConfig({
+ output: { path: path.join(__dirname, '../build/extension') },
+ globals: {
+ 'process.env': {
+ NODE_ENV: '"production"',
+ },
+ },
+ copy: true,
+ manifestJsonPath: path.join(
+ __dirname,
+ '../src/browser/firefox/manifest.json'
+ ),
+});
diff --git a/extension/webpack/wrap.config.babel.js b/extension/webpack/wrap.config.babel.js
new file mode 100644
index 00000000..5297ecf3
--- /dev/null
+++ b/extension/webpack/wrap.config.babel.js
@@ -0,0 +1,14 @@
+import path from 'path';
+import baseConfig from './base.config';
+
+export default baseConfig({
+ input: {
+ page: [path.join(__dirname, '../src/browser/extension/inject/pageScript')],
+ },
+ output: { path: path.join(__dirname, '../build/tmp') },
+ globals: {
+ 'process.env': {
+ NODE_ENV: '"production"',
+ },
+ },
+});
diff --git a/extension/yarn.lock b/extension/yarn.lock
new file mode 100644
index 00000000..af2c7152
--- /dev/null
+++ b/extension/yarn.lock
@@ -0,0 +1,10234 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/cli@^7.10.5":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.1.tgz#e08a0b1cb6fcd4b9eb6a606ba5602c5c0fe24a0c"
+ integrity sha512-eRJREyrfAJ2r42Iaxe8h3v6yyj1wu9OyosaUHW6UImjGf9ahGL9nsFNh7OCopvtcPL8WnEo7tp78wrZaZ6vG9g==
+ dependencies:
+ commander "^4.0.1"
+ convert-source-map "^1.1.0"
+ fs-readdir-recursive "^1.1.0"
+ glob "^7.0.0"
+ lodash "^4.17.19"
+ make-dir "^2.1.0"
+ slash "^2.0.0"
+ source-map "^0.5.0"
+ optionalDependencies:
+ "@nicolo-ribaudo/chokidar-2" "^2.1.8"
+ chokidar "^3.4.0"
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/code-frame@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.12.5":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.5.tgz#f56db0c4bb1bbbf221b4e81345aab4141e7cb0e9"
+ integrity sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==
+
+"@babel/core@^7.11.1":
+ version "7.12.3"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8"
+ integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.12.1"
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helpers" "^7.12.1"
+ "@babel/parser" "^7.12.3"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.19"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.12.1", "@babel/generator@^7.12.5":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de"
+ integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==
+ dependencies:
+ "@babel/types" "^7.12.5"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3"
+ integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3"
+ integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-builder-react-jsx-experimental@^7.12.1":
+ version "7.12.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48"
+ integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-builder-react-jsx@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d"
+ integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-compilation-targets@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831"
+ integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==
+ dependencies:
+ "@babel/compat-data" "^7.12.5"
+ "@babel/helper-validator-option" "^7.12.1"
+ browserslist "^4.14.5"
+ semver "^5.5.0"
+
+"@babel/helper-create-class-features-plugin@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e"
+ integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+
+"@babel/helper-create-regexp-features-plugin@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8"
+ integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
+ regexpu-core "^4.7.1"
+
+"@babel/helper-define-map@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30"
+ integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/types" "^7.10.5"
+ lodash "^4.17.19"
+
+"@babel/helper-explode-assignable-expression@^7.10.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633"
+ integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==
+ dependencies:
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
+ integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-get-function-arity@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
+ integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-hoist-variables@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e"
+ integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-member-expression-to-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c"
+ integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==
+ dependencies:
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-module-imports@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb"
+ integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==
+ dependencies:
+ "@babel/types" "^7.12.5"
+
+"@babel/helper-module-transforms@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c"
+ integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==
+ dependencies:
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/helper-replace-supers" "^7.12.1"
+ "@babel/helper-simple-access" "^7.12.1"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/helper-validator-identifier" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.12.1"
+ "@babel/types" "^7.12.1"
+ lodash "^4.17.19"
+
+"@babel/helper-optimise-call-expression@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
+ integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+
+"@babel/helper-regex@^7.10.4":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0"
+ integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==
+ dependencies:
+ lodash "^4.17.19"
+
+"@babel/helper-remap-async-to-generator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd"
+ integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-wrap-function" "^7.10.4"
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-replace-supers@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9"
+ integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.12.1"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/traverse" "^7.12.5"
+ "@babel/types" "^7.12.5"
+
+"@babel/helper-simple-access@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136"
+ integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==
+ dependencies:
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf"
+ integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==
+ dependencies:
+ "@babel/types" "^7.12.1"
+
+"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
+ integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+
+"@babel/helper-validator-option@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9"
+ integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==
+
+"@babel/helper-wrap-function@^7.10.4":
+ version "7.12.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9"
+ integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helpers@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e"
+ integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==
+ dependencies:
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.12.5"
+ "@babel/types" "^7.12.5"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.7.0":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
+ integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
+
+"@babel/plugin-proposal-async-generator-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e"
+ integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.12.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+
+"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de"
+ integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-proposal-decorators@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f"
+ integrity sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-decorators" "^7.12.1"
+
+"@babel/plugin-proposal-dynamic-import@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc"
+ integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+
+"@babel/plugin-proposal-export-namespace-from@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4"
+ integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-proposal-json-strings@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c"
+ integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+
+"@babel/plugin-proposal-logical-assignment-operators@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751"
+ integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c"
+ integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+
+"@babel/plugin-proposal-numeric-separator@^7.12.1":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz#b1ce757156d40ed79d59d467cb2b154a5c4149ba"
+ integrity sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069"
+ integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.12.1"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942"
+ integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+
+"@babel/plugin-proposal-optional-chaining@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797"
+ integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+
+"@babel/plugin-proposal-private-methods@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389"
+ integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072"
+ integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-async-generators@^7.8.0":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978"
+ integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-decorators@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd"
+ integrity sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-json-strings@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926"
+ integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.0":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-top-level-await@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0"
+ integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-arrow-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3"
+ integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-async-to-generator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1"
+ integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==
+ dependencies:
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-remap-async-to-generator" "^7.12.1"
+
+"@babel/plugin-transform-block-scoped-functions@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9"
+ integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-block-scoping@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1"
+ integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-classes@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6"
+ integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-define-map" "^7.10.4"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
+ "@babel/helper-split-export-declaration" "^7.10.4"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852"
+ integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-destructuring@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847"
+ integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975"
+ integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-duplicate-keys@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228"
+ integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-exponentiation-operator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0"
+ integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-for-of@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa"
+ integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-function-name@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667"
+ integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==
+ dependencies:
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57"
+ integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-member-expression-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad"
+ integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-modules-amd@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9"
+ integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-commonjs@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648"
+ integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-simple-access" "^7.12.1"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-systemjs@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086"
+ integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.10.4"
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-validator-identifier" "^7.10.4"
+ babel-plugin-dynamic-import-node "^2.3.3"
+
+"@babel/plugin-transform-modules-umd@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902"
+ integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753"
+ integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
+
+"@babel/plugin-transform-new-target@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0"
+ integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-object-super@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e"
+ integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.12.1"
+
+"@babel/plugin-transform-parameters@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d"
+ integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-property-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd"
+ integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-display-name@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d"
+ integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-jsx-development@^7.12.5":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.5.tgz#677de5b96da310430d6cfb7fee16a1603afa3d56"
+ integrity sha512-1JJusg3iPgsZDthyWiCr3KQiGs31ikU/mSf2N2dSYEAO0GEImmVUbWf0VoSDGDFTAn5Dj4DUiR6SdIXHY7tELA==
+ dependencies:
+ "@babel/helper-builder-react-jsx-experimental" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-jsx" "^7.12.1"
+
+"@babel/plugin-transform-react-jsx-self@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28"
+ integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-jsx-source@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b"
+ integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-react-jsx@^7.12.5":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz#39ede0e30159770561b6963be143e40af3bde00c"
+ integrity sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.10.4"
+ "@babel/helper-builder-react-jsx-experimental" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-syntax-jsx" "^7.12.1"
+
+"@babel/plugin-transform-react-pure-annotations@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42"
+ integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.10.4"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-regenerator@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753"
+ integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==
+ dependencies:
+ regenerator-transform "^0.14.2"
+
+"@babel/plugin-transform-reserved-words@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8"
+ integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-shorthand-properties@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3"
+ integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-spread@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e"
+ integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1"
+
+"@babel/plugin-transform-sticky-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf"
+ integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-regex" "^7.10.4"
+
+"@babel/plugin-transform-template-literals@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843"
+ integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-typeof-symbol@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a"
+ integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-unicode-escapes@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709"
+ integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-transform-unicode-regex@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb"
+ integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/polyfill@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96"
+ integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==
+ dependencies:
+ core-js "^2.6.5"
+ regenerator-runtime "^0.13.4"
+
+"@babel/preset-env@^7.11.0":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2"
+ integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==
+ dependencies:
+ "@babel/compat-data" "^7.12.1"
+ "@babel/helper-compilation-targets" "^7.12.1"
+ "@babel/helper-module-imports" "^7.12.1"
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/helper-validator-option" "^7.12.1"
+ "@babel/plugin-proposal-async-generator-functions" "^7.12.1"
+ "@babel/plugin-proposal-class-properties" "^7.12.1"
+ "@babel/plugin-proposal-dynamic-import" "^7.12.1"
+ "@babel/plugin-proposal-export-namespace-from" "^7.12.1"
+ "@babel/plugin-proposal-json-strings" "^7.12.1"
+ "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1"
+ "@babel/plugin-proposal-numeric-separator" "^7.12.1"
+ "@babel/plugin-proposal-object-rest-spread" "^7.12.1"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.12.1"
+ "@babel/plugin-proposal-optional-chaining" "^7.12.1"
+ "@babel/plugin-proposal-private-methods" "^7.12.1"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.12.1"
+ "@babel/plugin-syntax-async-generators" "^7.8.0"
+ "@babel/plugin-syntax-class-properties" "^7.12.1"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.0"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.0"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.0"
+ "@babel/plugin-syntax-top-level-await" "^7.12.1"
+ "@babel/plugin-transform-arrow-functions" "^7.12.1"
+ "@babel/plugin-transform-async-to-generator" "^7.12.1"
+ "@babel/plugin-transform-block-scoped-functions" "^7.12.1"
+ "@babel/plugin-transform-block-scoping" "^7.12.1"
+ "@babel/plugin-transform-classes" "^7.12.1"
+ "@babel/plugin-transform-computed-properties" "^7.12.1"
+ "@babel/plugin-transform-destructuring" "^7.12.1"
+ "@babel/plugin-transform-dotall-regex" "^7.12.1"
+ "@babel/plugin-transform-duplicate-keys" "^7.12.1"
+ "@babel/plugin-transform-exponentiation-operator" "^7.12.1"
+ "@babel/plugin-transform-for-of" "^7.12.1"
+ "@babel/plugin-transform-function-name" "^7.12.1"
+ "@babel/plugin-transform-literals" "^7.12.1"
+ "@babel/plugin-transform-member-expression-literals" "^7.12.1"
+ "@babel/plugin-transform-modules-amd" "^7.12.1"
+ "@babel/plugin-transform-modules-commonjs" "^7.12.1"
+ "@babel/plugin-transform-modules-systemjs" "^7.12.1"
+ "@babel/plugin-transform-modules-umd" "^7.12.1"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1"
+ "@babel/plugin-transform-new-target" "^7.12.1"
+ "@babel/plugin-transform-object-super" "^7.12.1"
+ "@babel/plugin-transform-parameters" "^7.12.1"
+ "@babel/plugin-transform-property-literals" "^7.12.1"
+ "@babel/plugin-transform-regenerator" "^7.12.1"
+ "@babel/plugin-transform-reserved-words" "^7.12.1"
+ "@babel/plugin-transform-shorthand-properties" "^7.12.1"
+ "@babel/plugin-transform-spread" "^7.12.1"
+ "@babel/plugin-transform-sticky-regex" "^7.12.1"
+ "@babel/plugin-transform-template-literals" "^7.12.1"
+ "@babel/plugin-transform-typeof-symbol" "^7.12.1"
+ "@babel/plugin-transform-unicode-escapes" "^7.12.1"
+ "@babel/plugin-transform-unicode-regex" "^7.12.1"
+ "@babel/preset-modules" "^0.1.3"
+ "@babel/types" "^7.12.1"
+ core-js-compat "^3.6.2"
+ semver "^5.5.0"
+
+"@babel/preset-modules@^0.1.3":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e"
+ integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
+ "@babel/plugin-transform-dotall-regex" "^7.4.4"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/preset-react@^7.10.4":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.5.tgz#d45625f65d53612078a43867c5c6750e78772c56"
+ integrity sha512-jcs++VPrgyFehkMezHtezS2BpnUlR7tQFAyesJn1vGTO9aTFZrgIQrA5YydlTwxbcjMwkFY6i04flCigRRr3GA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+ "@babel/plugin-transform-react-display-name" "^7.12.1"
+ "@babel/plugin-transform-react-jsx" "^7.12.5"
+ "@babel/plugin-transform-react-jsx-development" "^7.12.5"
+ "@babel/plugin-transform-react-jsx-self" "^7.12.1"
+ "@babel/plugin-transform-react-jsx-source" "^7.12.1"
+ "@babel/plugin-transform-react-pure-annotations" "^7.12.1"
+
+"@babel/register@^7.12.1":
+ version "7.12.1"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438"
+ integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.19"
+ make-dir "^2.1.0"
+ pirates "^4.0.0"
+ source-map-support "^0.5.16"
+
+"@babel/runtime@^7.8.4":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
+ integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
+"@babel/template@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
+ integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0":
+ version "7.12.5"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095"
+ integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.12.5"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/parser" "^7.12.5"
+ "@babel/types" "^7.12.5"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.19"
+
+"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
+ version "7.12.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96"
+ integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@eslint/eslintrc@^0.2.1":
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c"
+ integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
+
+"@nicolo-ribaudo/chokidar-2@^2.1.8":
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8.tgz#eef8d9b47e8dc589499f14d656e8d2dd978c3d14"
+ integrity sha512-FohwULwAebCUKi/akMFyGi7jfc7JXTeMHzKxuP3umRd9mK/2Y7/SMBSI2jX+YLopPXi+PF9l307NmpfxTdCegA==
+ dependencies:
+ chokidar "2.1.8"
+
+"@nodelib/fs.scandir@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
+ integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.3"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
+ integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
+ integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.3"
+ fastq "^1.6.0"
+
+"@npmcli/move-file@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464"
+ integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==
+ dependencies:
+ mkdirp "^1.0.4"
+
+"@types/babel-types@*", "@types/babel-types@^7.0.0":
+ version "7.0.9"
+ resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.9.tgz#01d7b86949f455402a94c788883fe4ba574cad41"
+ integrity sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==
+
+"@types/babylon@^6.16.2":
+ version "6.16.5"
+ resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4"
+ integrity sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==
+ dependencies:
+ "@types/babel-types" "*"
+
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
+ integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
+
+"@types/node@^8.0.24":
+ version "8.10.20"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.20.tgz#fe674ea52e13950ab10954433a7824438aabbcac"
+ integrity sha512-M7x8+5D1k/CuA6jhiwuSCmE8sbUWJF0wYsjcig9WrXvwUI5ArEoUBdOXpV4JcEMrLp02/QbDjw+kI+vQeKyQgg==
+
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abab@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
+ integrity sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=
+
+abbrev@1, abbrev@~1.0.7, abbrev@~1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
+
+acorn-globals@^1.0.4:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
+ integrity sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=
+ dependencies:
+ acorn "^2.1.0"
+
+acorn-globals@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.0.0.tgz#1a64dd8fa761288594620649526e2625917a56c6"
+ integrity sha1-GmTdj6dhKIWUYgZJUm4mJZF6VsY=
+ dependencies:
+ acorn "^3.1.0"
+
+acorn-jsx@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
+
+acorn@^2.1.0, acorn@^2.4.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
+ integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=
+
+acorn@^3.1.0, acorn@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
+
+acorn@^6.4.1:
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
+acorn@~4.0.2:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
+ integrity sha1-F6jWp6bE71OLgU7Jq6wneSk78wo=
+
+adm-zip@^0.4.7:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
+ integrity sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be"
+ integrity sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=
+
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+ integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^5.0.0, ajv@^5.1.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+ajv@^6.1.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2"
+ integrity sha1-r6wpW7qgFSRJ5SJ0LkVHwa6TKNI=
+ dependencies:
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+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"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+almost-equal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd"
+ integrity sha1-+FHGMROHV5lCdqou++jfowZszN0=
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+anser@^1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.7.tgz#78c0ce6aefffaa09bed267bd7d26ee5b9fb6d575"
+ integrity sha512-0jA836gkgorW5M+yralEdnAuQ4Z8o/jAu9Po3//dAClUyq9LdKEIAVVZNoej9jfnRi20wPL/gBb3eTjpzppjLg==
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-regex@^0.2.0, ansi-regex@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
+ integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+ integrity sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=
+
+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==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+ansi-styles@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
+ integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+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:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi@^0.3.0, ansi@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21"
+ integrity sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=
+
+ansicolors@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
+ integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=
+
+ansistyles@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539"
+ integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk=
+
+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"
+
+anymatch@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
+ integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+aproba@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+ integrity sha1-JxNoB3XnYUyLoYbAZdTi5S0QcsA=
+
+archiver-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
+ integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
+ dependencies:
+ glob "^7.1.4"
+ graceful-fs "^4.2.0"
+ lazystream "^1.0.0"
+ lodash.defaults "^4.2.0"
+ lodash.difference "^4.5.0"
+ lodash.flatten "^4.4.0"
+ lodash.isplainobject "^4.0.6"
+ lodash.union "^4.6.0"
+ normalize-path "^3.0.0"
+ readable-stream "^2.0.0"
+
+archiver@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.2.tgz#43c72865eadb4ddaaa2fb74852527b6a450d927c"
+ integrity sha512-B9IZjlGwaxF33UN4oPbfBkyA4V1SxNLeIhR1qY8sRXSsbdUkEHrrOvwlYFPx+8uQeCe9M+FG6KgO+imDmQ79CQ==
+ dependencies:
+ archiver-utils "^2.1.0"
+ async "^3.2.0"
+ buffer-crc32 "^0.2.1"
+ glob "^7.1.6"
+ readable-stream "^3.6.0"
+ tar-stream "^2.1.2"
+ zip-stream "^3.0.1"
+
+archy@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+ integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=
+
+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"
+ integrity sha1-gORw6VoIR5T+GJkmLFZnxuiN4bM=
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+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=
+
+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==
+
+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=
+
+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=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-index@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9"
+ integrity sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=
+ dependencies:
+ debug "^2.2.0"
+ es6-symbol "^3.0.2"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+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=
+
+asap@^2.0.0, asap@~2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
+ integrity sha1-UidltQw1EEkOUtfc/ghe+bqWlY8=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
+
+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=
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+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=
+
+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==
+
+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==
+
+async-some@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/async-some/-/async-some-1.0.2.tgz#4d8a81620d5958791b5b98f802d3207776e95509"
+ integrity sha1-TYqBYg1ZWHkbW5j4AtMgd3bpVQk=
+ dependencies:
+ dezalgo "^1.0.2"
+
+async@^2.0.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
+ integrity sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=
+ dependencies:
+ lodash "^4.14.0"
+
+async@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
+ integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atoa@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/atoa/-/atoa-1.0.0.tgz#0cc0e91a480e738f923ebc103676471779b34a49"
+ integrity sha1-DMDpGkgOc4+SPrwQNnZHF3mzSkk=
+
+atob@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
+ integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
+
+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=
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+ integrity sha1-Cin/t5wxyecS7rCH6OemS0pW11U=
+
+aws4@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+ integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=
+
+babel-eslint@^10.1.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
+ integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.7.0"
+ "@babel/traverse" "^7.7.0"
+ "@babel/types" "^7.7.0"
+ eslint-visitor-keys "^1.0.0"
+ resolve "^1.12.0"
+
+babel-loader@^8.1.0:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.1.tgz#e53313254677e86f27536f5071d807e01d24ec00"
+ integrity sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==
+ dependencies:
+ find-cache-dir "^2.1.0"
+ loader-utils "^1.4.0"
+ make-dir "^2.1.0"
+ pify "^4.0.1"
+ schema-utils "^2.6.5"
+
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-runtime@6.20.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.3.19, babel-runtime@^6.6.1:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f"
+ integrity sha1-hzAL3PTNdw8JvwBIxkIE4XgG0W8=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
+
+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-64@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
+ integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs=
+
+base16@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
+ integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ integrity sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+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"
+
+bash-color@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/bash-color/-/bash-color-0.0.4.tgz#e9be8ce33540cada4881768c59bd63865736e913"
+ integrity sha1-6b6M4zVAytpIgXaMWb1jhlc26RM=
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ integrity sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+bestzip@^2.1.7:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/bestzip/-/bestzip-2.1.7.tgz#f45492130967e0ebb302c4677fcb30c2e7831440"
+ integrity sha512-Eg5ZP0Viw1beJydZLbW246oCUnvtKGi7DhcB6IlKxP03NaxKCGVhKJD/jY4MLFRINhepfVEhAhnlc/uIxc9dHA==
+ dependencies:
+ archiver "^4.0.2"
+ async "^3.2.0"
+ glob "^7.1.3"
+ which "^1.3.1"
+ yargs "^13.2.4"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+ integrity sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=
+
+binary-extensions@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
+ integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
+
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489"
+ integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+bl@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
+ integrity sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=
+ dependencies:
+ readable-stream "~2.0.5"
+
+bl@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
+ integrity sha1-/cqHGplxOqANGeO7ukHER4emU5g=
+ dependencies:
+ readable-stream "~2.0.5"
+
+block-stream@*, block-stream@0.0.9:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^3.5.1:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
+ integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
+
+bluebird@^3.5.5:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+ integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
+ dependencies:
+ hoek "2.x.x"
+
+boom@4.x.x:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+ integrity sha1-T4owBctKfjiJ90kDD9JbluAdLjE=
+ dependencies:
+ hoek "4.x.x"
+
+boom@5.x.x:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+ integrity sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==
+ dependencies:
+ hoek "4.x.x"
+
+bowser@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d"
+ integrity sha1-N/w4e2Fstq7zcNq01r1AK3TFxU0=
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ integrity sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+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:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb"
+ integrity sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ kind-of "^6.0.2"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.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"
+
+braces@^3.0.1, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+ integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
+ integrity sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ integrity sha1-mYgkSHS/XtTijalWZtzWasj8Njo=
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ integrity sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.14.5, browserslist@^4.14.6:
+ version "4.14.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
+ integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
+ dependencies:
+ caniuse-lite "^1.0.30001157"
+ colorette "^1.2.1"
+ electron-to-chromium "^1.3.591"
+ escalade "^3.1.1"
+ node-releases "^1.1.66"
+
+buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-from@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04"
+ integrity sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+ integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+buffer@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.2.tgz#41d0407ff76782e9ec19f52f88e237ce6bb0de6d"
+ integrity sha1-QdBAf/dngunsGfUviOI3zmuw3m0=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+buffer@^5.1.0, buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+builtins@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a"
+ integrity sha1-NVIZzWzxjb58Acx/0tznZc/cVJo=
+
+cacache@^11.0.2:
+ version "11.3.1"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f"
+ integrity sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==
+ dependencies:
+ bluebird "^3.5.1"
+ chownr "^1.0.1"
+ figgy-pudding "^3.1.0"
+ glob "^7.1.2"
+ graceful-fs "^4.1.11"
+ lru-cache "^4.1.3"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.2"
+ ssri "^6.0.0"
+ unique-filename "^1.1.0"
+ y18n "^4.0.0"
+
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cacache@^15.0.5:
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0"
+ integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==
+ dependencies:
+ "@npmcli/move-file" "^1.0.1"
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ glob "^7.1.4"
+ infer-owner "^1.0.4"
+ lru-cache "^6.0.0"
+ minipass "^3.1.1"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.2"
+ mkdirp "^1.0.3"
+ p-map "^4.0.0"
+ promise-inflight "^1.0.1"
+ rimraf "^3.0.2"
+ ssri "^8.0.0"
+ tar "^6.0.2"
+ unique-filename "^1.1.1"
+
+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==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^5.0.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+caniuse-lite@^1.0.30001157:
+ version "1.0.30001158"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001158.tgz#fce86d321369603c2bc855ee0e901a7f49f8310b"
+ integrity sha512-s5loVYY+yKpuVA3HyW8BarzrtJvwHReuzugQXlv1iR3LKSReoFXRm86mT6hT7PEF5RxW+XQZg+6nYjlywYzQ+g==
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+ integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c=
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
+ integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=
+ dependencies:
+ ansi-styles "^1.1.0"
+ escape-string-regexp "^1.0.0"
+ has-ansi "^0.1.0"
+ strip-ansi "^0.3.0"
+ supports-color "^0.2.0"
+
+chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ 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"
+
+chalk@^2.0.0, chalk@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+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:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+change-emitter@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.2.tgz#6b88ca4d5d864e516f913421b11899a860aee8db"
+ integrity sha1-a4jKTV2GTlFvkTQhsRiZqGCu6Ns=
+
+char-spinner@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081"
+ integrity sha1-5upnvSR+EHESmDt6sEee02KAAIE=
+
+character-parser@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
+ integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A=
+ dependencies:
+ is-regex "^1.0.3"
+
+cheerio@^0.22.0:
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
+ integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.0"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash.assignin "^4.0.9"
+ lodash.bind "^4.1.4"
+ lodash.defaults "^4.0.1"
+ lodash.filter "^4.4.0"
+ lodash.flatten "^4.2.0"
+ lodash.foreach "^4.3.0"
+ lodash.map "^4.4.0"
+ lodash.merge "^4.4.0"
+ lodash.pick "^4.2.1"
+ lodash.reduce "^4.4.0"
+ lodash.reject "^4.4.0"
+ lodash.some "^4.4.0"
+
+chmodr@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9"
+ integrity sha1-BGYrky0PAuxm3qorDqQoEZaOPrk=
+
+chokidar@2.1.8, chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ 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"
+
+chokidar@^3.4.0, chokidar@^3.4.1:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b"
+ integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.5.0"
+ optionalDependencies:
+ fsevents "~2.1.2"
+
+chownr@^1.0.1, chownr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
+ integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chrome-storage-local@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/chrome-storage-local/-/chrome-storage-local-0.1.7.tgz#bb2a3689d663b3a1f4d394592f83914fddc4adba"
+ integrity sha1-uyo2idZjs6H005RZL4ORT93Erbo=
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+chromedriver@^2.35.0:
+ version "2.35.0"
+ resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.35.0.tgz#c103ba2fb3d1671f666058159f5cbaa816902e4d"
+ integrity sha512-zqvC/HKybRxiM68GzByvUaXxTmNCmpETvLQIM92IEdrQxPnONKt3ZdTsiwxmGrL2ZIDbr9OEHJljmhZZMEsFPw==
+ dependencies:
+ del "^3.0.0"
+ extract-zip "^1.6.5"
+ kew "^0.7.0"
+ mkdirp "^0.5.1"
+ request "^2.83.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+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:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.3:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
+ integrity sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=
+
+clean-css@^4.1.11:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
+ integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==
+ dependencies:
+ source-map "~0.6.0"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+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:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
+ integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=
+
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+ integrity sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=
+
+cmd-shim@~2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb"
+ integrity sha1-b8vamUg6j9FdfTChlspp1oii79s=
+ dependencies:
+ graceful-fs "^4.1.2"
+ mkdirp "~0.5.0"
+
+co-mocha@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/co-mocha/-/co-mocha-1.1.3.tgz#49bb9c85bcd17e3250f8b84b875dc76668bc41dc"
+ integrity sha1-SbuchbzRfjJQ+LhLh13HZmi8Qdw=
+ dependencies:
+ co "^4.0.0"
+ is-generator "^1.0.1"
+
+co@^4.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=
+
+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=
+
+codemirror@^5.21.0:
+ version "5.22.0"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.22.0.tgz#281ec76ed991ef24db4071fdf4deb746e80bff18"
+ integrity sha1-KB7HbtmR7yTbQHH99N63RugL/xg=
+
+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:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+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:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+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=
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-space@^1.14.3:
+ version "1.14.7"
+ resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.14.7.tgz#b7f5a31779427bb25f9927a69410d80c2eaaa71b"
+ integrity sha1-t/WjF3lCe7JfmSemlBDYDC6qpxs=
+ dependencies:
+ husl "^5.0.0"
+ mumath "^3.0.0"
+
+colorette@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
+ integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
+
+colors@0.5.x:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774"
+ integrity sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=
+
+columnify@~1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
+ integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=
+ dependencies:
+ strip-ansi "^3.0.0"
+ wcwidth "^1.0.0"
+
+combined-stream@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+ integrity sha1-cj599ugBrFYTETp+RFqbactjKBg=
+ dependencies:
+ delayed-stream "~1.0.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"
+ integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.9.0, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commander@^2.20.0:
+ 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==
+
+commander@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
+ integrity sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+compress-commons@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d"
+ integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg==
+ dependencies:
+ buffer-crc32 "^0.2.13"
+ crc32-stream "^3.0.1"
+ normalize-path "^3.0.0"
+ readable-stream "^2.3.7"
+
+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=
+
+concat-stream@1.6.0, concat-stream@^1.4.6, concat-stream@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concat-stream@1.6.2, concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+config-chain@~1.1.10:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2"
+ integrity sha1-q6CXR9++TD5w52am5BWG4YWfxvI=
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+constantinople@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79"
+ integrity sha1-dWnKqKo/jVk11i4fqW+fcCzYHHk=
+ dependencies:
+ acorn "^3.1.0"
+ is-expression "^2.0.1"
+
+constantinople@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647"
+ integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==
+ dependencies:
+ "@types/babel-types" "^7.0.0"
+ "@types/babylon" "^6.16.2"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+content-type-parser@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
+ integrity sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=
+
+contra@1.9.4:
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/contra/-/contra-1.9.4.tgz#f53bde42d7e5b5985cae4d99a8d610526de8f28d"
+ integrity sha1-9TveQtfltZhcrk2ZqNYQUm3o8o0=
+ dependencies:
+ atoa "1.0.0"
+ ticky "1.0.1"
+
+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"
+ integrity sha1-6fPpxuJyjvwmdmlqcOs4L3MQamc=
+
+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:
+ safe-buffer "~5.1.1"
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.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=
+
+copy-webpack-plugin@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.3.1.tgz#ceb6e9c3e4910e63a774fd4a27451156775f6e2a"
+ integrity sha512-SyIMdP6H3v+zPU+VIhKRsK0ZEF82KZ93JBlKOoIW8SkkuI84FSrHxG+aMTE1u4csbi9PLRqqWTIK+bfJ2xsFuQ==
+ dependencies:
+ cacache "^15.0.5"
+ fast-glob "^3.2.4"
+ find-cache-dir "^3.3.1"
+ glob-parent "^5.1.1"
+ globby "^11.0.1"
+ loader-utils "^2.0.0"
+ normalize-path "^3.0.0"
+ p-limit "^3.0.2"
+ schema-utils "^3.0.0"
+ serialize-javascript "^5.0.1"
+ webpack-sources "^1.4.3"
+
+core-js-compat@^3.6.2:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.7.0.tgz#8479c5d3d672d83f1f5ab94cf353e57113e065ed"
+ integrity sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==
+ dependencies:
+ browserslist "^4.14.6"
+ semver "7.0.0"
+
+core-js@^1.0.0:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+ integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
+
+core-js@^2.4.0, core-js@^2.6.5:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+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=
+
+crc32-stream@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85"
+ integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==
+ dependencies:
+ crc "^3.4.4"
+ readable-stream "^3.4.0"
+
+crc@^3.4.4:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+ integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+ dependencies:
+ buffer "^5.1.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ integrity sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ integrity sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ integrity sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-class@^15.6.0:
+ version "15.6.3"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
+ integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+cross-env@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-1.0.8.tgz#2bde748efc780f56ddf07ea69fcad875357774ce"
+ integrity sha1-K950jvx4D1bd8H6mn8rYdTV3dM4=
+ dependencies:
+ cross-spawn "^3.0.1"
+ lodash.assign "^3.2.0"
+
+cross-spawn@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+ integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crossvent@1.5.4:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/crossvent/-/crossvent-1.5.4.tgz#da2c4f8f40c94782517bf2beec1044148194ab92"
+ integrity sha1-2ixPj0DJR4JRe/K+7BBEFIGUq5I=
+ dependencies:
+ custom-event "1.0.0"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
+ dependencies:
+ boom "2.x.x"
+
+cryptiles@3.x.x:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+ integrity sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=
+ dependencies:
+ boom "5.x.x"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-color-list@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/css-color-list/-/css-color-list-0.0.1.tgz#8718e8695ae7a2cc8787be8715f1c008a7f28b15"
+ integrity sha1-hxjoaVrnosyHh76HFfHACKfyixU=
+ dependencies:
+ css-color-names "0.0.1"
+
+css-color-names@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.1.tgz#5d0548fa256456ede4a9a0c2ac7ab19d3eb1ad81"
+ integrity sha1-XQVI+iVkVu3kqaDCrHqxnT6xrYE=
+
+css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-to-react-native@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-1.0.6.tgz#728c7e774e56536558a0ecaa990d9507c43a4ac4"
+ integrity sha1-cox+d05WU2VYoOyqmQ2VB8Q6SsQ=
+ dependencies:
+ css-color-list "0.0.1"
+ fbjs "^0.8.5"
+ nearley "^2.7.7"
+
+css-vendor@^0.3.8:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa"
+ integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=
+ dependencies:
+ is-in-browser "^1.0.2"
+
+css-what@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+ integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0=
+
+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"
+ integrity sha1-yeN+8kkOZPbRuqEP2oUiVwgsJdM=
+
+"cssstyle@>= 0.2.36 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
+ dependencies:
+ cssom "0.3.x"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+custom-event@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.0.tgz#2e4628be19dc4b214b5c02630c5971e811618062"
+ integrity sha1-LkYovhncSyFLXAJjDFlx6BFhgGI=
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+ integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+
+d3-state-visualizer@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-state-visualizer/-/d3-state-visualizer-1.3.2.tgz#8e3ac418aa7ee7e3f46025309f9d1c215ee385eb"
+ integrity sha512-XgTRC6FXeoTt8l79cc2f3Zaah+K7DUQb3GL0zfbvoIi7zWWHV4l7OfuX9/JxxvwilKApMZwHMBJ7cJ2yWAc5IQ==
+ dependencies:
+ d3 "^3.5.6"
+ d3tooltip "^1.2.2"
+ deepmerge "^0.2.10"
+ is-plain-object "2.0.1"
+ map2tree "^1.4.0"
+ ramda "^0.17.1"
+
+d3@^3.5.6:
+ version "3.5.17"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
+ integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=
+
+d3tooltip@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/d3tooltip/-/d3tooltip-1.2.2.tgz#88a8b2525fb8cc479196e0382a8cb858fbf27b32"
+ integrity sha1-iKiyUl+4zEeRluA4Koy4WPvyezI=
+ dependencies:
+ ramda "^0.17.1"
+
+d@^0.1.1, d@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
+ integrity sha1-2hhMU10Y2O57oqoim5FACfrhEwk=
+ dependencies:
+ es5-ext "~0.10.2"
+
+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:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+dateformat@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
+ integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.3.0"
+
+debug@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
+ dependencies:
+ ms "0.7.1"
+
+debug@2.6.9, debug@^2.1.3:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.2.0, debug@^2.3.3:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
+ integrity sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=
+ dependencies:
+ ms "0.7.2"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
+ integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
+ dependencies:
+ ms "2.1.2"
+
+debuglog@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
+ integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
+
+decamelize@^1.0.0, decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+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=
+
+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==
+
+deep-is@^0.1.3, 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=
+
+deepmerge@^0.2.10:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-0.2.10.tgz#8906bf9e525a4fbf1b203b2afcb4640249821219"
+ integrity sha1-iQa/nlJaT78bIDsq/LRkAkmCEhk=
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+ dependencies:
+ clone "^1.0.2"
+
+define-properties@^1.1.2, define-properties@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ integrity sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
+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"
+
+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:
+ is-descriptor "^0.1.0"
+
+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:
+ is-descriptor "^1.0.0"
+
+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"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.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"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456"
+ integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=
+ dependencies:
+ asap "^2.0.0"
+ wrappy "1"
+
+diff@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
+ integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8=
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ integrity sha1-tYNXOScM/ias9jIJn97SoH8gnl4=
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+discontinuous-range@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
+ integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+doctypes@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
+ integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=
+
+dom-serializer@0, dom-serializer@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
+ dependencies:
+ domelementtype "~1.1.1"
+ entities "~1.1.1"
+
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+ integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=
+
+domelementtype@1, domelementtype@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+ integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+ integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
+
+domhandler@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+ integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg=
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1, domutils@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dragula@3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/dragula/-/dragula-3.7.2.tgz#4a35c9d3981ffac1a949c29ca7285058e87393ce"
+ integrity sha1-SjXJ05gf+sGpScKcpyhQWOhzk84=
+ dependencies:
+ contra "1.9.4"
+ crossvent "1.5.4"
+
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125"
+ integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
+ dependencies:
+ jsbn "~0.1.0"
+
+editor@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742"
+ integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I=
+
+electron-download@^3.0.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-3.3.0.tgz#2cfd54d6966c019c4d49ad65fbe65cc9cdef68c8"
+ integrity sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=
+ dependencies:
+ debug "^2.2.0"
+ fs-extra "^0.30.0"
+ home-path "^1.0.1"
+ minimist "^1.2.0"
+ nugget "^2.0.0"
+ path-exists "^2.1.0"
+ rc "^1.1.2"
+ semver "^5.3.0"
+ sumchecker "^1.2.0"
+
+electron-to-chromium@^1.3.591:
+ version "1.3.596"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.596.tgz#c7ed98512c7ff36ddcbfed9e54e6355335c35257"
+ integrity sha512-nLO2Wd2yU42eSoNJVQKNf89CcEGqeFZd++QsnN2XIgje1s/19AgctfjLIbPORlvcCO8sYjLwX4iUgDdusOY8Sg==
+
+electron@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-2.0.2.tgz#b77e05f83419cc5ec921a2d21f35b55e4bfc3d68"
+ integrity sha512-XmkGVoHLOqmjZ2nU/0zEzMl3TZEz452Q1fTJFKjylg4pLYaq7na7V2uxzydVQNQukZGbERoA7ayjxXzTsXbtdA==
+ dependencies:
+ "@types/node" "^8.0.24"
+ electron-download "^3.0.1"
+ extract-zip "^1.0.3"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ integrity sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+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==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+end-of-stream@^1.4.1:
+ 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:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126"
+ integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
+ dependencies:
+ ansi-colors "^4.1.1"
+
+entities@^1.1.1, entities@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+ integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA=
+
+enzyme@^2.3.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.7.0.tgz#772477800547ca2514cc0af258e647c166aee899"
+ integrity sha1-dyR3gAVHyiUUzAryWOZHwWau6Jk=
+ dependencies:
+ cheerio "^0.22.0"
+ function.prototype.name "^1.0.0"
+ is-subset "^0.1.1"
+ lodash "^4.17.2"
+ object-is "^1.0.1"
+ object.assign "^4.0.4"
+ object.entries "^1.0.3"
+ object.values "^1.0.3"
+ uuid "^2.0.3"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ integrity sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=
+ dependencies:
+ prr "~0.0.0"
+
+errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ integrity sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1:
+ version "1.18.0-next.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68"
+ integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.2"
+ is-negative-zero "^2.0.0"
+ is-regex "^1.1.1"
+ object-inspect "^1.8.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.1"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
+es-abstract@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99"
+ integrity sha1-u4ogZBIKvPkooIbqPZBDEUKF7Jk=
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.0"
+ is-callable "^1.1.3"
+ is-regex "^1.0.3"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ integrity sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.2:
+ version "0.10.12"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
+ integrity sha1-qoRkHU23a2Krul5F/YBey6sUAEc=
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
+ integrity sha1-vZaFZ9YWNeM8C4BydhPJy0sJa6w=
+ dependencies:
+ d "^0.1.1"
+ es5-ext "^0.10.7"
+ es6-symbol "3"
+
+es6-promise@^4.0.5:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
+ integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==
+
+es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
+ integrity sha1-lEgcZV56fK2C66gy2X1UM0ltf/o=
+ dependencies:
+ d "~0.1.1"
+ es5-ext "~0.10.11"
+
+es6-template-regex@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/es6-template-regex/-/es6-template-regex-0.1.1.tgz#e517b9e0f742beeb8d3040834544fda0e4651467"
+ integrity sha1-5Re54PdCvuuNMECDRUT9oORlFGc=
+
+es6template@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/es6template/-/es6template-1.0.5.tgz#3bbbb979fa6b8ae765b0c986310f720072562a9f"
+ integrity sha1-O7u5efpriudlsMmGMQ9yAHJWKp8=
+ dependencies:
+ es6-template-regex "^0.1.1"
+ extend-shallow "^2.0.1"
+ get-value "^2.0.2"
+ sliced "^1.0.1"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.6.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+eslint-config-airbnb@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-0.1.1.tgz#05731461210efe985acc3aa5be0a821952deb8e7"
+ integrity sha1-BXMUYSEO/phazDqlvgqCGVLeuOc=
+
+eslint-plugin-react@^3.2.3:
+ version "3.16.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-3.16.1.tgz#262d96b77d7c4a42af809a73c0e527a58612293c"
+ integrity sha1-Ji2Wt318SkKvgJpzwOUnpYYSKTw=
+
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
+ integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
+
+eslint@^7.6.0:
+ version "7.13.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.13.0.tgz#7f180126c0dcdef327bfb54b211d7802decc08da"
+ integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@eslint/eslintrc" "^0.2.1"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ enquirer "^2.3.5"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.0"
+ esquery "^1.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash "^4.17.19"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ progress "^2.0.0"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^7.3.0:
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348"
+ integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==
+ dependencies:
+ acorn "^7.4.0"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.3.0"
+
+esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ integrity sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+ integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
+
+estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+ integrity sha1-9srKcokzqFDvkGYdDheYK6RxEaI=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+events@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
+ integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+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"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^1.20.1:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-1.20.2.tgz#d458fe4c56004036bae3232416a3f6361f04f965"
+ integrity sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU=
+ dependencies:
+ define-properties "~1.1.2"
+ has "^1.0.1"
+ is-equal "^1.5.1"
+ is-regex "^1.0.3"
+ object-inspect "^1.1.0"
+ object-keys "^1.0.9"
+ tmatch "^2.0.1"
+
+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:
+ is-extendable "^0.1.0"
+
+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:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+ integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=
+
+extend@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+ integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=
+
+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"
+
+extract-zip@^1.0.3:
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
+ integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=
+ dependencies:
+ concat-stream "1.6.2"
+ debug "2.6.9"
+ mkdirp "0.5.1"
+ yauzl "2.4.1"
+
+extract-zip@^1.6.5:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
+ integrity sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=
+ dependencies:
+ concat-stream "1.6.0"
+ debug "2.6.9"
+ mkdirp "0.5.0"
+ yauzl "2.4.1"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+ integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA=
+
+fast-deep-equal@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+ integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-deep-equal@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.1.1, fast-glob@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3"
+ integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
+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=
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947"
+ integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==
+ dependencies:
+ reusify "^1.0.4"
+
+fbjs@^0.8.1, fbjs@^0.8.4:
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6"
+ integrity sha1-AvG24OoNRsJOC1Gi0k3waVY6WtY=
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.9"
+
+fbjs@^0.8.5, fbjs@^0.8.6, fbjs@^0.8.8, fbjs@^0.8.9:
+ version "0.8.12"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04"
+ integrity sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.9"
+
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
+ dependencies:
+ pend "~1.2.0"
+
+figgy-pudding@^3.1.0, figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-loader@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
+ integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
+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:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-cache-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d"
+ integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^1.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-cache-dir@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
+ integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^3.0.2"
+ pkg-dir "^4.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
+flush-write-stream@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
+ integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.4"
+
+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=
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+ integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+
+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=
+
+form-data@~1.0.0-rc3, form-data@~1.0.0-rc4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c"
+ integrity sha1-rjFduaSQf6BlUCMEpm13M0de43w=
+ dependencies:
+ async "^2.0.1"
+ 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"
+ integrity sha1-icNTQAi5fq2ky7FX1Y9vXfAl6uQ=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+form-data@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
+ integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "1.0.6"
+ mime-types "^2.1.12"
+
+formatio@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
+ integrity sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=
+ dependencies:
+ samsam "~1.1"
+
+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:
+ map-cache "^0.2.2"
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@0.26.5:
+ version "0.26.5"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.5.tgz#53ac74667ca083fd2dc1712c813039ca32d69a7f"
+ integrity sha1-U6x0Znygg/0twXEsgTA5yjLWmn8=
+ 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-extra@^0.30.0:
+ version "0.30.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+ integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
+ 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-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+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==
+
+fs-vacuum@~1.2.7, fs-vacuum@~1.2.9:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.9.tgz#4f90193ab8ea02890995bcd4e804659a5d366b2d"
+ integrity sha1-T5AZOrjqAokJlbzU6ARlml02ay0=
+ dependencies:
+ graceful-fs "^4.1.2"
+ path-is-inside "^1.0.1"
+ rimraf "^2.5.2"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs-write-stream-atomic@~1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.8.tgz#e49aaddf288f87d46ff9e882f216a13abc40778b"
+ integrity sha1-5Jqt3yiPh9Rv+eiC8hahOrxAd4s=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+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.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@~2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
+
+fstream-ignore@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream-npm@~1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.0.7.tgz#7ed0d1ac13d7686dd9e1bf6ceb8be273bf6d2f86"
+ integrity sha1-ftDRrBPXaG3Z4b9s64vic79tL4Y=
+ dependencies:
+ fstream-ignore "^1.0.0"
+ inherits "2"
+
+fstream-npm@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.1.1.tgz#6b9175db6239a83d8209e232426c494dbb29690c"
+ integrity sha1-a5F122I5qD2CCeIyQmxJTbspaQw=
+ dependencies:
+ fstream-ignore "^1.0.0"
+ inherits "2"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10, fstream@~1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ integrity sha1-YE6Kkv4m/9n2+uMDmdSYThqyKCI=
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.0.2, function-bind@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+ integrity sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e"
+ integrity sha1-X1I8pk5JGl+Vq6gMweORCAoUSC4=
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ is-callable "^1.1.2"
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+gauge@~1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93"
+ integrity sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=
+ dependencies:
+ ansi "^0.3.0"
+ has-unicode "^2.0.0"
+ lodash.pad "^4.1.0"
+ lodash.padend "^4.1.0"
+ lodash.padstart "^4.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"
+ integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
+
+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"
+ integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
+ dependencies:
+ is-property "^1.0.0"
+
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+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==
+
+get-params@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe"
+ integrity sha1-uuDfq6WIoMYNeDTA2Nwv9g7u8v4=
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-value@^2.0.2, 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=
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ integrity sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=
+ dependencies:
+ assert-plus "^1.0.0"
+
+gitbook-cli@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/gitbook-cli/-/gitbook-cli-2.3.0.tgz#01a360de71a48e53277ed2cb1abf6c60a0901576"
+ integrity sha1-AaNg3nGkjlMnftLLGr9sYKCQFXY=
+ dependencies:
+ bash-color "0.0.4"
+ commander "2.9.0"
+ fs-extra "0.26.5"
+ lodash "4.5.1"
+ npm "3.7.5"
+ npmi "1.0.1"
+ optimist "0.6.1"
+ q "1.4.1"
+ semver "5.1.0"
+ tmp "0.0.28"
+ user-home "2.0.0"
+
+github-url-from-git@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.4.0.tgz#285e6b520819001bde128674704379e4ff03e0de"
+ integrity sha1-KF5rUggZABveEoZ0cEN55P8D4N4=
+
+github-url-from-username-repo@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz#7dd79330d2abe69c10c2cef79714c97215791dfa"
+ integrity sha1-fdeTMNKr5pwQws73lxTJchV5Hfo=
+
+glamor@^2.15.5:
+ version "2.20.20"
+ resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.20.tgz#546cb86bfae760b0fd5c019ba859007d08e6238f"
+ integrity sha1-VGy4a/rnYLD9XAGbqFkAfQjmI48=
+ dependencies:
+ babel-runtime "^6.18.0"
+ fbjs "^0.8.8"
+ object-assign "^4.1.0"
+
+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:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
+ integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
+ dependencies:
+ is-glob "^4.0.1"
+
+"glob@3 || 4":
+ version "4.5.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
+ integrity sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^2.0.1"
+ once "^1.3.0"
+
+glob@7.0.5, glob@^7.0.5, glob@~7.0.0:
+ version "7.0.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
+ integrity sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=
+ 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"
+
+glob@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.3, glob@~7.0.6:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
+ integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=
+ 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"
+
+glob@^7.1.2:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-modules@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+global@^4.3.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df"
+ integrity sha1-X3V5CMfLq85U84auRA4R4mt5Ft8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.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==
+
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
+globby@^11.0.1:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357"
+ integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.1.1"
+ ignore "^5.1.4"
+ merge2 "^1.3.0"
+ slash "^3.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.11:
+ version "4.1.15"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+ integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+
+graceful-fs@^4.1.15, graceful-fs@^4.2.0:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.3, graceful-fs@~4.1.6:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+ integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+ integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
+
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+ integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=
+
+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@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+har-validator@~5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+ integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=
+ dependencies:
+ ajv "^5.1.0"
+ har-schema "^2.0.0"
+
+has-ansi@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
+ integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=
+ dependencies:
+ ansi-regex "^0.2.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ 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"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
+
+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=
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+has-unicode@^2.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=
+
+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:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+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:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+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=
+
+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:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ integrity sha1-hGFzP1OLCDfJNh45qauelwTcLyg=
+ dependencies:
+ function-bind "^1.0.2"
+
+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:
+ function-bind "^1.1.1"
+
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ integrity sha1-ZuodhW206KVHDK32/OI65SRO8uE=
+ dependencies:
+ inherits "^2.0.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hawk@~3.1.0, hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hawk@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+ integrity sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==
+ dependencies:
+ boom "4.x.x"
+ cryptiles "3.x.x"
+ hoek "4.x.x"
+ sntp "2.x.x"
+
+hex-rgba@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hex-rgba/-/hex-rgba-1.0.0.tgz#b844adb0a9d9249873591df290231a176a1b36a0"
+ integrity sha1-uEStsKnZJJhzWR3ykCMaF2obNqA=
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
+
+hoek@4.x.x:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
+ integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==
+
+hoist-non-react-statics@^1.0.0, hoist-non-react-statics@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
+ integrity sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=
+
+home-path@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.6.tgz#d549dc2465388a7f8667242c5b31588d29af29fc"
+ integrity sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4, hosted-git-info@~2.1.4, hosted-git-info@~2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+ integrity sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=
+
+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"
+ integrity sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-entities@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+ integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+
+htmlparser2@^3.9.1:
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
+ integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=
+ dependencies:
+ domelementtype "^1.3.0"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+husl@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/husl/-/husl-5.0.3.tgz#ee272aaff1bebe40df3588ed007b70de7e679788"
+ integrity sha1-7icqr/G+vkDfNYjtAHtw3n5nl4g=
+
+hyphenate-style-name@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b"
+ integrity sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=
+
+iconv-lite@0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
+ integrity sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=
+
+iconv-lite@^0.4.13, iconv-lite@~0.4.13:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+ integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=
+
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+iferr@^0.1.5, iferr@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.4:
+ version "5.1.8"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
+ integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
+
+immutable@^3.7.6:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
+ integrity sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI=
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e"
+ integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+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:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.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=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+infer-owner@^1.0.3, infer-owner@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
+inflight@^1.0.4, inflight@~1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ 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, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.4, ini@~1.3.0, ini@~1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=
+
+ini@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+init-package-json@~1.9.3, init-package-json@~1.9.4:
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.4.tgz#b4053d0b40f0cf842a41966937cb3dc0f534e856"
+ integrity sha1-tAU9C0Dwz4QqQZZpN8s9wPU06FY=
+ dependencies:
+ glob "^6.0.0"
+ npm-package-arg "^4.0.0"
+ promzard "^0.3.0"
+ read "~1.0.1"
+ read-package-json "1 || 2"
+ semver "2.x || 3.x || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+ validate-npm-package-name "^2.0.1"
+
+inline-style-prefixer@^2.0.1, inline-style-prefixer@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-2.0.5.tgz#c153c7e88fd84fef5c602e95a8168b2770671fe7"
+ integrity sha1-wVPH6I/YT+9cYC6VqBaLJ3BnH+c=
+ dependencies:
+ bowser "^1.0.0"
+ hyphenate-style-name "^1.0.1"
+
+interpret@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invariant@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
+ dependencies:
+ loose-envify "^1.0.0"
+
+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:
+ kind-of "^3.0.2"
+
+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:
+ kind-of "^6.0.0"
+
+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=
+
+is-arrow-function@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-arrow-function/-/is-arrow-function-2.0.3.tgz#29be2c2d8d9450852b8bbafb635ba7b8d8e87ec2"
+ integrity sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI=
+ dependencies:
+ is-callable "^1.0.4"
+
+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"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
+ integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+ integrity sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=
+
+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==
+
+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"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-callable@^1.0.4, is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+ integrity sha1-hut1OSgF3cM69xySoO7fdO52BLI=
+
+is-callable@^1.1.4, is-callable@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
+ integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
+
+is-core-module@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946"
+ integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==
+ dependencies:
+ has "^1.0.3"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+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:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+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:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-equal@^1.5.1:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/is-equal/-/is-equal-1.5.3.tgz#05b7fa3a1122cbc71c1ef41ce0142d5532013b29"
+ integrity sha1-Bbf6OhEiy8ccHvQc4BQtVTIBOyk=
+ dependencies:
+ has "^1.0.1"
+ is-arrow-function "^2.0.3"
+ is-boolean-object "^1.0.0"
+ is-callable "^1.1.3"
+ is-date-object "^1.0.1"
+ is-generator-function "^1.0.3"
+ is-number-object "^1.0.3"
+ is-regex "^1.0.3"
+ is-string "^1.0.4"
+ is-symbol "^1.0.1"
+ object.entries "^1.0.3"
+
+is-expression@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0"
+ integrity sha1-kb6dR968/vB3l36XIr5tz7RGXvA=
+ dependencies:
+ acorn "~3.3.0"
+ object-assign "^4.0.1"
+
+is-expression@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f"
+ integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=
+ dependencies:
+ acorn "~4.0.2"
+ object-assign "^4.0.1"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+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=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ 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"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ 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"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-function@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+ integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+
+is-generator-function@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4"
+ integrity sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=
+
+is-generator@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3"
+ integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+ integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+ 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:
+ is-extglob "^2.1.1"
+
+is-in-browser@1.0.2, is-in-browser@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.0.2.tgz#f688bea8f1e5aadc3244ebc870d188cfb9b613cf"
+ integrity sha1-9oi+qPHlqtwyROvIcNGIz7m2E88=
+
+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"
+ integrity sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-negative-zero@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
+ integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
+
+is-number-object@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
+ integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=
+
+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:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-odd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
+ integrity sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==
+ dependencies:
+ is-number "^4.0.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+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"
+ integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=
+ 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"
+ integrity sha1-/AbloWg/vaE95mev9xe7wQpI838=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-object@2.0.1, is-plain-object@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f"
+ integrity sha1-TXylObydubc3uKy2EvIxjvkvKU8=
+ dependencies:
+ isobject "^1.0.0"
+
+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:
+ isobject "^3.0.1"
+
+is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-regex@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637"
+ integrity sha1-DVUYK9358v3ieCIK7Dp1ZCyQhjc=
+
+is-regex@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
+ integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-stream@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-string@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64"
+ integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=
+
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+ integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
+
+is-symbol@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+ integrity sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+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=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-windows@^1.0.1, 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==
+
+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@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+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"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+ integrity sha1-NvPiLmB1CSD15yQaR2qMakInWtA=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a"
+ integrity sha1-8Pm4zpLdVA+gdAiC44NaLgIux4o=
+
+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:
+ isarray "1.0.0"
+
+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=
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+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=
+
+javascript-stringify@^1.1.0, javascript-stringify@^1.2.0, javascript-stringify@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.5.0.tgz#0486fa46aeb1cbb93b76c01984a60db4129cd841"
+ integrity sha1-BIb6Rq6xy7k7dsAZhKYNtBKc2EE=
+
+jju@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa"
+ integrity sha1-2t2e8BkkvHKLA/L3l5vb1i96Kqo=
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=
+ dependencies:
+ jsbn "~0.1.0"
+
+js-stringify@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
+ integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds=
+
+js-tokens@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
+ integrity sha1-eZA/VWPud4zBFi5tzxoAJ8l/nLU=
+
+"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==
+
+js-yaml@^3.13.1:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
+ integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsan@^3.1.12:
+ version "3.1.12"
+ resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.12.tgz#e784ce5ab533ee41f868bb054d74769365c80be5"
+ integrity sha512-EDJhJdWGP++Qh5TGfsdc3k2hFjr1/4Q3nVX6MPkTYlqqj3Xv9erXnBRZEBmuGR2IpfARdm0Ivj5EBSvhFylWRA==
+
+jsan@^3.1.13:
+ version "3.1.13"
+ resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.13.tgz#4de8c7bf8d1cfcd020c313d438f930cec4b91d86"
+ integrity sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g==
+
+jsan@^3.1.3:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.10.tgz#ba9917b864defff567e0c990a34ae7a8d5eb1d90"
+ integrity sha512-Rpme/mJFG3BlIM8/9L+0qAIGccx6dyYEODdkZUHYKyJI3NIl6d13buXa7aE3lO1kZAGMalG0/6QzalXdDdUc4g==
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+ integrity sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=
+
+jsdom@^9.8.3:
+ version "9.9.1"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.9.1.tgz#84f3972ad394ab963233af8725211bce4d01bfd5"
+ integrity sha1-hPOXKtOUq5YyM6+HJSEbzk0Bv9U=
+ 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@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-parse-helpfulerror@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc"
+ integrity sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=
+ dependencies:
+ jju "^1.1.0"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+ integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+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==
+
+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=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+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=
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+ integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+json5@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ dependencies:
+ minimist "^1.2.5"
+
+jsondiffpatch@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/jsondiffpatch/-/jsondiffpatch-0.2.4.tgz#d4b6c53b3fc7da1b4b91c1c2aec8b932b7511d5c"
+ integrity sha1-1LbFOz/H2htLkcHCrsi5MrdRHVw=
+ dependencies:
+ chalk "^0.5.1"
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+ integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ integrity sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+jss-nested@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-3.0.1.tgz#14c10265c8fc5bd61b450b48f1e9fb36d90ae569"
+ integrity sha1-FMECZcj8W9YbRQtI8en7NtkK5Wk=
+ dependencies:
+ warning "^3.0.0"
+
+jss-vendor-prefixer@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-4.0.0.tgz#df16a8fcc6ecb4567394174e6ab90145cf8b34a3"
+ integrity sha1-3xao/MbstFZzlBdOarkBRc+LNKM=
+ dependencies:
+ css-vendor "^0.3.8"
+
+jss@^6.0.0:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/jss/-/jss-6.1.1.tgz#9126c210045bea79cfd7cd106e96295d9e6864e1"
+ integrity sha1-kSbCEARb6nnP180QbpYpXZ5oZOE=
+ dependencies:
+ babel-runtime "6.20.0"
+ is-in-browser "1.0.2"
+ murmurhash-js "1.0.0"
+ warning "3.0.0"
+
+jstransformer@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
+ integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=
+ dependencies:
+ is-promise "^2.0.0"
+ promise "^7.0.1"
+
+kew@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+ integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=
+
+keycode@^2.1.1:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.8.tgz#94d2b7098215eff0e8f9a8931d5a59076c4532fb"
+ integrity sha1-lNK3CYIV7/Do+aiTHVpZB2xFMvs=
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ integrity sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=
+ dependencies:
+ is-buffer "^1.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"
+
+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:
+ is-buffer "^1.1.5"
+
+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==
+
+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==
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
+ 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"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+lazy-cache@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264"
+ integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=
+ dependencies:
+ set-getter "^0.1.0"
+
+lazystream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+ integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
+ dependencies:
+ readable-stream "^2.0.5"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+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:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linked-list@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf"
+ integrity sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78=
+
+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"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ 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-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@^0.2.17:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+
+loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
+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:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lockfile@~1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
+ integrity sha1-Jjj8OaAzHpysGgS3F5mTHJxQ33k=
+
+lodash-es@^4.2.1:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+ integrity sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._baseclone@~4.5.0:
+ version "4.5.7"
+ resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-4.5.7.tgz#ce42ade08384ef5d62fa77c30f61a46e686f8434"
+ integrity sha1-zkKt4IOE711i+nfDD2GkbmhvhDQ=
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+ integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+ integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=
+
+lodash._basedifference@~4.4.0:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-4.4.1.tgz#537bde6fd0f3eeec28e37288dd51459765181b4d"
+ integrity sha1-U3veb9Dz7uwo43KI3VFFl2UYG00=
+ dependencies:
+ lodash._setcache "~4.1.0"
+
+lodash._baseflatten@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-4.1.1.tgz#5c87403b88f3687a88d26424faadf3aa054aab0d"
+ integrity sha1-XIdAO4jzaHqI0mQk+q3zqgVKqw0=
+
+lodash._baseuniq@~4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.4.0.tgz#a445294347a2f5311f585fe3225644530b9b8fae"
+ integrity sha1-pEUpQ0ei9TEfWF/jIlZEUwubj64=
+ dependencies:
+ lodash._root "^3.0.0"
+ lodash._setcache "^4.0.0"
+
+lodash._baseuniq@~4.5.0:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.5.1.tgz#1980430c2e64ee86df6dd35794e1a301b2ab74de"
+ integrity sha1-GYBDDC5k7obfbdNXlOGjAbKrdN4=
+ dependencies:
+ lodash._createset "~4.0.0"
+ lodash._setcache "~4.1.0"
+
+lodash._bindcallback@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+ integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
+
+lodash._createassigner@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
+ integrity sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=
+ dependencies:
+ lodash._bindcallback "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+ lodash.restparam "^3.0.0"
+
+lodash._createset@~4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
+ integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+ integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+ integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
+
+lodash._root@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
+ integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=
+
+lodash._setcache@^4.0.0, lodash._setcache@~4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lodash._setcache/-/lodash._setcache-4.1.3.tgz#4f982081255a11810fb4b0431d49e2da65adb77c"
+ integrity sha1-T5gggSVaEYEPtLBDHUni2mWtt3w=
+
+lodash.assign@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
+ integrity sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._createassigner "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash.assignin@^4.0.9:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2"
+ integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI=
+
+lodash.bind@^4.1.4:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
+ integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=
+
+lodash.clonedeep@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.3.2.tgz#d0112c02c76b5223833aebc6a4b6e334f0d057de"
+ integrity sha1-0BEsAsdrUiODOuvGpLbjNPDQV94=
+ dependencies:
+ lodash._baseclone "~4.5.0"
+
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.curry@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
+ integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA=
+
+lodash.debounce@^4.0.3, lodash.debounce@^4.0.4:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
+
+lodash.defaults@^4.0.1, lodash.defaults@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+ integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
+
+lodash.difference@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+ integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
+
+lodash.filter@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
+ integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=
+
+lodash.flatten@^4.2.0, lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.flow@^3.3.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a"
+ integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=
+
+lodash.foreach@^4.3.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+ integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+ integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
+
+lodash.isarguments@~3.0.7:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.0.9.tgz#3c4994a4210f340d49ccfafa62176296207d8675"
+ integrity sha1-PEmUpCEPNA1JzPr6YhdiliB9hnU=
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+ integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
+
+lodash.isarray@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-4.0.0.tgz#2aca496b28c4ca6d726715313590c02e6ea34403"
+ integrity sha1-KspJayjEym1yZxUxNZDALm6jRAM=
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.keys@~4.0.3:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.0.8.tgz#c0cf45d2fcf576c83055404d674c7e637c83ae81"
+ integrity sha1-wM9F0vz1dsgwVUBNZ0x+Y3yDroE=
+
+lodash.map@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
+
+lodash.merge@^4.4.0, lodash.merge@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
+ integrity sha1-aYhLoUSsM/5plzemCG3v+t0PicU=
+
+lodash.pad@^4.1.0:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70"
+ integrity sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=
+
+lodash.padend@^4.1.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e"
+ integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=
+
+lodash.padstart@^4.1.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b"
+ integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=
+
+lodash.pick@^4.2.1:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+ integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
+
+lodash.reduce@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
+ integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=
+
+lodash.reject@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415"
+ integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=
+
+lodash.rest@^4.0.0:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa"
+ integrity sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=
+
+lodash.restparam@^3.0.0:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+ integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
+
+lodash.some@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
+ integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
+lodash.union@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
+ integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
+
+lodash.union@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.2.1.tgz#6871017b9b1ff71952c1e2bb2e25b1046a7e2842"
+ integrity sha1-aHEBe5sf9xlSweK7LiWxBGp+KEI=
+ dependencies:
+ lodash._baseflatten "~4.1.0"
+ lodash._baseuniq "~4.5.0"
+ lodash.rest "^4.0.0"
+
+lodash.uniq@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.2.1.tgz#4210d4b90647ee24211b469aed0ef84902069743"
+ integrity sha1-QhDUuQZH7iQhG0aa7Q74SQIGl0M=
+ dependencies:
+ lodash._baseuniq "~4.5.0"
+
+lodash.without@~4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.1.2.tgz#c68b1981e1b001bd87eef7487dba0af267846229"
+ integrity sha1-xosZgeGwAb2H7vdIfboK8meEYik=
+ dependencies:
+ lodash._basedifference "~4.4.0"
+ lodash.rest "^4.0.0"
+
+lodash@4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.2.1.tgz#171fdcfbbc30d689c544cd18c0529f56de6c1aa9"
+ integrity sha1-Fx/c+7ww1onFRM0YwFKfVt5sGqk=
+
+lodash@4.5.1:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.5.1.tgz#80e8a074ca5f3893a6b1c10b2a636492d710c316"
+ integrity sha1-gOigdMpfOJOmscELKmNkktcQwxY=
+
+lodash@^3.10.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+ integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
+
+lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.6.1:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+ integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
+
+lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
+lolex@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
+ integrity sha1-fD2mL/yzDw9agKJWbKJORdigHzE=
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.0.0, loose-envify@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8"
+ integrity sha1-ayYkjEL21PpLDYVC947fzeNWQqg=
+ dependencies:
+ js-tokens "^2.0.0"
+
+loose-envify@^1.3.1:
+ 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:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@2:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
+ integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=
+
+lru-cache@^4.0.1, lru-cache@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+ integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=
+ dependencies:
+ pseudomap "^1.0.1"
+ yallist "^2.0.0"
+
+lru-cache@^4.1.3:
+ 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:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+make-dir@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
+ integrity sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==
+ dependencies:
+ pify "^3.0.0"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-dir@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+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=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+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:
+ object-visit "^1.0.0"
+
+map2tree@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/map2tree/-/map2tree-1.4.0.tgz#1d1dd77c77df789e5d9a8694a213cd7c24ed59b4"
+ integrity sha1-HR3XfHffeJ5dmoaUohPNfCTtWbQ=
+ dependencies:
+ lodash "4.2.1"
+
+material-ui@0.16.4:
+ version "0.16.4"
+ resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-0.16.4.tgz#b1ff4ea57069a89611b7e02a83d47c649e13c798"
+ integrity sha1-sf9OpXBpqJYRt+Aqg9R8ZJ4Tx5g=
+ dependencies:
+ babel-runtime "^6.11.6"
+ inline-style-prefixer "^2.0.1"
+ keycode "^2.1.1"
+ lodash.merge "^4.6.0"
+ lodash.throttle "^4.1.1"
+ react-addons-create-fragment "^15.0.0"
+ react-addons-transition-group "^15.0.0"
+ react-event-listener "^0.4.0"
+ recompose "^0.20.2"
+ simple-assign "^0.1.0"
+ warning "^3.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+ integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0=
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^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"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.1.0, meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^3.0.4, micromatch@^3.1.10:
+ 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"
+
+micromatch@^3.1.4:
+ version "3.1.9"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89"
+ integrity sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==
+ 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.1"
+
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+ integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I=
+
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+ integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+
+mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog=
+ dependencies:
+ mime-db "~1.25.0"
+
+mime-types@~2.1.17:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
+ dependencies:
+ mime-db "~1.33.0"
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+ integrity sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d"
+ integrity sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=
+ 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"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^2.0.1:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+ integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=
+ dependencies:
+ brace-expansion "^1.0.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:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
+ integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+
+minipass-collect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+ integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+ integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass@^3.0.0, minipass@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
+ dependencies:
+ yallist "^4.0.0"
+
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+ integrity sha1-HXMHam35hs2TROFecfzAWkyavxI=
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@0.5.1, "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"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@^0.5.3:
+ version "0.5.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
+ integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
+ dependencies:
+ minimist "^1.2.5"
+
+mkdirp@^1.0.3, mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+mocha@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3"
+ integrity sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.2.0"
+ diff "1.4.0"
+ escape-string-regexp "1.0.5"
+ glob "7.0.5"
+ growl "1.9.2"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+ integrity sha1-riXPJRKziFodldfwN4aNhDESR2U=
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mumath@^3.0.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.1.tgz#264b3d610d7a0a4e574ff282424b5427be0b0c96"
+ integrity sha1-Jks9YQ16Ck5XT/KCQktUJ74LDJY=
+ dependencies:
+ almost-equal "^1.1.0"
+
+murmurhash-js@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51"
+ integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=
+
+mute-stream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+ integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
+
+nan@^2.12.1:
+ version "2.14.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
+ integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
+
+nanomatch@^1.2.9:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2"
+ integrity sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==
+ 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-odd "^2.0.0"
+ 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"
+
+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=
+
+nearley@^2.7.7:
+ version "2.7.10"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.7.10.tgz#06f9531e06a1730244635acd7dd005485550a623"
+ integrity sha1-BvlTHgahcwJEY1rNfdAFSFVQpiM=
+ dependencies:
+ nomnom "~1.6.2"
+ railroad-diagrams "^1.0.0"
+ randexp "^0.4.2"
+
+neo-async@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f"
+ integrity sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==
+
+neo-async@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
+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==
+
+node-fetch@^1.0.1:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
+ integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-gyp@~3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.3.1.tgz#80f7b6d7c2f9c0495ba42c518a670c99bdf6e4a0"
+ integrity sha1-gPe218L5wElbpCxRimcMmb325KA=
+ dependencies:
+ fstream "^1.0.0"
+ glob "3 || 4"
+ graceful-fs "^4.1.2"
+ minimatch "1"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2"
+ osenv "0"
+ path-array "^1.0.0"
+ request "2"
+ rimraf "2"
+ semver "2.x || 3.x || 4 || 5"
+ tar "^2.0.0"
+ which "1"
+
+node-gyp@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36"
+ integrity sha1-3aVYOTs+y74kyea4cDxxGUxj+jY=
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3"
+ osenv "0"
+ path-array "^1.0.0"
+ request "2"
+ rimraf "2"
+ semver "2.x || 3.x || 4 || 5"
+ tar "^2.0.0"
+ which "1"
+
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+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=
+
+node-releases@^1.1.66:
+ version "1.1.66"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814"
+ integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==
+
+node-uuid@~1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
+ integrity sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=
+
+nomnom@~1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971"
+ integrity sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=
+ dependencies:
+ colors "0.5.x"
+ underscore "~1.4.4"
+
+"nopt@2 || 3", nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-git-url@~3.0.1, normalize-git-url@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
+ integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
+
+normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ integrity sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=
+ 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.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:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0, 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==
+
+npm-cache-filename@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11"
+ integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE=
+
+npm-install-checks@~1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-1.0.7.tgz#6d91aeda0ac96801f1ed7aadee116a6c0a086a57"
+ integrity sha1-bZGu2grJaAHx7Xqt7hFqbAoIalc=
+ dependencies:
+ npmlog "0.1 || 1 || 2"
+ semver "^2.3.0 || 3.x || 4 || 5"
+
+npm-install-checks@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7"
+ integrity sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc=
+ dependencies:
+ semver "^2.3.0 || 3.x || 4 || 5"
+
+"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.0.0, npm-package-arg@^4.1.1, npm-package-arg@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.1.1.tgz#86d9dca985b4c5e5d59772dfd5de6919998a495a"
+ integrity sha1-htncqYW0xeXVl3Lf1d5pGZmKSVo=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ semver "4 || 5"
+
+npm-registry-client@~7.0.9:
+ version "7.0.9"
+ resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.0.9.tgz#1baf86ee5285c4e6d38d4556208ded56049231bb"
+ integrity sha1-G6+G7lKFxObTjUVWII3tVgSSMbs=
+ dependencies:
+ chownr "^1.0.1"
+ concat-stream "^1.4.6"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ normalize-package-data "~1.0.1 || ^2.0.0"
+ npm-package-arg "^3.0.0 || ^4.0.0"
+ once "^1.3.0"
+ request "^2.47.0"
+ retry "^0.8.0"
+ rimraf "2"
+ semver "2 >=2.2.1 || 3.x || 4 || 5"
+ slide "^1.1.3"
+ optionalDependencies:
+ npmlog "~2.0.0"
+
+npm-registry-client@~7.2.1:
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.2.1.tgz#c792266b088cc313f8525e7e35248626c723db75"
+ integrity sha1-x5ImawiMwxP4Ul5+NSSGJscj23U=
+ dependencies:
+ concat-stream "^1.5.2"
+ graceful-fs "^4.1.6"
+ normalize-package-data "~1.0.1 || ^2.0.0"
+ npm-package-arg "^3.0.0 || ^4.0.0"
+ once "^1.3.3"
+ request "^2.74.0"
+ retry "^0.10.0"
+ semver "2 >=2.2.1 || 3.x || 4 || 5"
+ slide "^1.1.3"
+ optionalDependencies:
+ npmlog "~2.0.0 || ~3.1.0"
+
+npm-user-validate@~0.1.2, npm-user-validate@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b"
+ integrity sha1-UkZdUMLSApSlcSW5lrrtv1bFAEs=
+
+npm@3.7.5:
+ version "3.7.5"
+ resolved "https://registry.yarnpkg.com/npm/-/npm-3.7.5.tgz#a7dae58e52ecbe263c1c860c6fd64ffa50f3c79b"
+ integrity sha1-p9rljlLsviY8HIYMb9ZP+lDzx5s=
+ dependencies:
+ abbrev "~1.0.7"
+ ansicolors "~0.3.2"
+ ansistyles "~0.1.3"
+ aproba "~1.0.1"
+ archy "~1.0.0"
+ async-some "~1.0.2"
+ chownr "~1.0.1"
+ cmd-shim "~2.0.2"
+ columnify "~1.5.4"
+ config-chain "~1.1.10"
+ dezalgo "~1.0.3"
+ editor "~1.0.0"
+ fs-vacuum "~1.2.7"
+ fs-write-stream-atomic "~1.0.8"
+ fstream "~1.0.8"
+ fstream-npm "~1.0.7"
+ glob "~7.0.0"
+ graceful-fs "~4.1.3"
+ has-unicode "~2.0.0"
+ hosted-git-info "~2.1.4"
+ iferr "~0.1.5"
+ inflight "~1.0.4"
+ inherits "~2.0.1"
+ ini "~1.3.4"
+ init-package-json "~1.9.3"
+ lockfile "~1.0.1"
+ lodash._baseuniq "~4.4.0"
+ lodash.clonedeep "~4.3.0"
+ lodash.isarguments "~3.0.7"
+ lodash.isarray "~4.0.0"
+ lodash.keys "~4.0.3"
+ lodash.union "~4.2.0"
+ lodash.uniq "~4.2.0"
+ lodash.without "~4.1.0"
+ mkdirp "~0.5.1"
+ node-gyp "~3.3.0"
+ nopt "~3.0.6"
+ normalize-git-url "~3.0.1"
+ normalize-package-data "~2.3.5"
+ npm-cache-filename "~1.0.2"
+ npm-install-checks "~3.0.0"
+ npm-package-arg "~4.1.0"
+ npm-registry-client "~7.0.9"
+ npm-user-validate "~0.1.2"
+ npmlog "~2.0.2"
+ once "~1.3.3"
+ opener "~1.4.1"
+ osenv "~0.1.3"
+ path-is-inside "~1.0.1"
+ read "~1.0.7"
+ read-cmd-shim "~1.0.1"
+ read-installed "~4.0.3"
+ read-package-json "~2.0.3"
+ read-package-tree "~5.1.2"
+ readable-stream "~2.0.5"
+ realize-package-specifier "~3.0.1"
+ request "~2.69.0"
+ retry "~0.9.0"
+ rimraf "~2.5.2"
+ semver "~5.1.0"
+ sha "~2.0.1"
+ slide "~1.1.6"
+ sorted-object "~1.0.0"
+ tar "~2.2.1"
+ text-table "~0.2.0"
+ uid-number "0.0.6"
+ umask "~1.1.0"
+ unique-filename "~1.1.0"
+ unpipe "~1.0.0"
+ validate-npm-package-name "~2.2.2"
+ which "~1.2.4"
+ wrappy "~1.0.1"
+ write-file-atomic "~1.1.4"
+
+npm@^2.1.12:
+ version "2.15.11"
+ resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.11.tgz#350588fba9cd8d384cf9a6e8dc0fef0f94992b7c"
+ integrity sha1-NQWI+6nNjThM+abo3A/vD5SZK3w=
+ dependencies:
+ abbrev "~1.0.9"
+ ansi "~0.3.1"
+ ansicolors "~0.3.2"
+ ansistyles "~0.1.3"
+ archy "~1.0.0"
+ async-some "~1.0.2"
+ block-stream "0.0.9"
+ char-spinner "~1.0.1"
+ chmodr "~1.0.2"
+ chownr "~1.0.1"
+ cmd-shim "~2.0.2"
+ columnify "~1.5.4"
+ config-chain "~1.1.10"
+ dezalgo "~1.0.3"
+ editor "~1.0.0"
+ fs-vacuum "~1.2.9"
+ fs-write-stream-atomic "~1.0.8"
+ fstream "~1.0.10"
+ fstream-npm "~1.1.1"
+ github-url-from-git "~1.4.0"
+ github-url-from-username-repo "~1.0.2"
+ glob "~7.0.6"
+ graceful-fs "~4.1.6"
+ hosted-git-info "~2.1.5"
+ inflight "~1.0.4"
+ inherits "~2.0.3"
+ ini "~1.3.4"
+ init-package-json "~1.9.4"
+ lockfile "~1.0.1"
+ lru-cache "~4.0.1"
+ minimatch "~3.0.3"
+ mkdirp "~0.5.1"
+ node-gyp "~3.4.0"
+ nopt "~3.0.6"
+ normalize-git-url "~3.0.2"
+ normalize-package-data "~2.3.5"
+ npm-cache-filename "~1.0.2"
+ npm-install-checks "~1.0.7"
+ npm-package-arg "~4.1.0"
+ npm-registry-client "~7.2.1"
+ npm-user-validate "~0.1.5"
+ npmlog "~2.0.4"
+ once "~1.4.0"
+ opener "~1.4.1"
+ osenv "~0.1.3"
+ path-is-inside "~1.0.0"
+ read "~1.0.7"
+ read-installed "~4.0.3"
+ read-package-json "~2.0.4"
+ readable-stream "~2.1.5"
+ realize-package-specifier "~3.0.1"
+ request "~2.74.0"
+ retry "~0.10.0"
+ rimraf "~2.5.4"
+ semver "~5.1.0"
+ sha "~2.0.1"
+ slide "~1.1.6"
+ sorted-object "~2.0.0"
+ spdx-license-ids "~1.2.2"
+ strip-ansi "~3.0.1"
+ tar "~2.2.1"
+ text-table "~0.2.0"
+ uid-number "0.0.6"
+ umask "~1.1.0"
+ validate-npm-package-license "~3.0.1"
+ validate-npm-package-name "~2.2.2"
+ which "~1.2.11"
+ wrappy "~1.0.2"
+ write-file-atomic "~1.1.4"
+
+npmi@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/npmi/-/npmi-1.0.1.tgz#15d769273547545e6809dcf0ce18aed48b0290e2"
+ integrity sha1-FddpJzVHVF5oCdzwzhiu1IsCkOI=
+ dependencies:
+ npm "^2.1.12"
+ semver "^4.1.0"
+
+"npmlog@0 || 1 || 2", "npmlog@0 || 1 || 2 || 3", "npmlog@0.1 || 1 || 2", npmlog@~2.0.0, "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.2, npmlog@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692"
+ integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=
+ dependencies:
+ ansi "~0.3.1"
+ are-we-there-yet "~1.1.2"
+ gauge "~1.2.5"
+
+nth-check@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=
+ dependencies:
+ boolbase "~1.0.0"
+
+nugget@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
+ integrity sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=
+ dependencies:
+ debug "^2.1.3"
+ minimist "^1.1.0"
+ pretty-bytes "^1.0.2"
+ progress-stream "^1.1.0"
+ request "^2.45.0"
+ single-line-log "^1.1.2"
+ throttleit "0.0.2"
+
+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=
+
+"nwmatcher@>= 1.3.9 < 2.0.0":
+ version "1.3.9"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
+ integrity sha1-i6tIb/f6Pf0IZla76LFxFtNpLSo=
+
+oauth-sign@~0.8.0, oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+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"
+ integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
+
+object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+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:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.1.tgz#3b62226eb8f6d441751c7d8f22a20ff80ac9dc3f"
+ integrity sha1-O2Iibrj21EF1HH2PIqIP+ArJ3D8=
+
+object-inspect@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
+ integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
+
+object-is@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
+ integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
+
+object-keys@^1.0.10, object-keys@^1.0.8, object-keys@^1.0.9:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+ integrity sha1-xUYBd4rVYPEULODgG8yotW0TQm0=
+
+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==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
+
+object-path@^0.11.1:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.3.tgz#3e21a42ad07234d815429ae9e15c1c5f38050554"
+ integrity sha1-PiGkKtByNNgVQprp4VwcXzgFBVQ=
+
+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.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+ integrity sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ object-keys "^1.0.10"
+
+object.assign@^4.1.0, object.assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd"
+ integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.0"
+ has-symbols "^1.0.1"
+ object-keys "^1.1.1"
+
+object.entries@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f"
+ integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.6.1"
+ function-bind "^1.1.0"
+ has "^1.0.1"
+
+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"
+
+object.values@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
+ integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.6.1"
+ function-bind "^1.1.0"
+ has "^1.0.1"
+
+once@^1.3.0, once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=
+ dependencies:
+ wrappy "1"
+
+once@^1.3.1, once@^1.3.3, once@^1.4.0, 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"
+
+opener@~1.4.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523"
+ integrity sha1-syWCCABCr4aAw4mkmRdbTFT/9SM=
+
+optimist@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.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"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ 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"
+
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+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=
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@0, osenv@~0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-limit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec"
+ integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
+p-limit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe"
+ integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==
+ dependencies:
+ p-try "^2.0.0"
+
+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"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-try@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
+ integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==
+
+pako@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+ integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ integrity sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parse5@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+ integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-array@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271"
+ integrity sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE=
+ dependencies:
+ array-index "^1.0.0"
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+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=
+
+path-exists@^2.0.0, path-exists@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+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=
+
+path-is-inside@^1.0.1, path-is-inside@~1.0.0, path-is-inside@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+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=
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+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==
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pbkdf2@^3.0.3:
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ integrity sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+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=
+
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
+ integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+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=
+
+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==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pirates@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+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 "^3.0.0"
+
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+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=
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+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=
+
+pretty-bytes@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84"
+ integrity sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.1.0"
+
+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"
+ integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+progress-stream@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77"
+ integrity sha1-LNPP6jO6OonJwSHsM0er6asSX3c=
+ dependencies:
+ speedometer "~0.1.2"
+ through2 "~0.2.3"
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+promise@^7.0.1, promise@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
+ integrity sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=
+ dependencies:
+ asap "~2.0.3"
+
+promzard@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee"
+ integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=
+ dependencies:
+ read "1"
+
+prop-types@^15.5.10:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
+ integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==
+ dependencies:
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+prop-types@^15.5.7, prop-types@^15.5.8:
+ version "15.5.8"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394"
+ integrity sha1-a3suFBCDvjjIWVqlH8VXdccZk5Q=
+ dependencies:
+ fbjs "^0.8.9"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+ integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+pseudomap@^1.0.1, pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ integrity sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+pug-attrs@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz#b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336"
+ integrity sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==
+ dependencies:
+ constantinople "^3.0.1"
+ js-stringify "^1.0.1"
+ pug-runtime "^2.0.5"
+
+pug-code-gen@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.2.tgz#ad0967162aea077dcf787838d94ed14acb0217c2"
+ integrity sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==
+ dependencies:
+ constantinople "^3.1.2"
+ doctypes "^1.1.0"
+ js-stringify "^1.0.1"
+ pug-attrs "^2.0.4"
+ pug-error "^1.3.3"
+ pug-runtime "^2.0.5"
+ void-elements "^2.0.1"
+ with "^5.0.0"
+
+pug-error@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz#f342fb008752d58034c185de03602dd9ffe15fa6"
+ integrity sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==
+
+pug-filters@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz#ab2cc82db9eeccf578bda89130e252a0db026aa7"
+ integrity sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==
+ dependencies:
+ clean-css "^4.1.11"
+ constantinople "^3.0.1"
+ jstransformer "1.0.0"
+ pug-error "^1.3.3"
+ pug-walk "^1.1.8"
+ resolve "^1.1.6"
+ uglify-js "^2.6.1"
+
+pug-html-loader@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/pug-html-loader/-/pug-html-loader-1.1.5.tgz#b46855a7790a306e43ec5db297dbdbb7995f4b5a"
+ integrity sha512-EOcLK0z0vJ1fSXsDypqL8SsPXVaevS9Oy8JA1RpYYkgAOV9qJXCSedvMYw499hSXxmoXAXIV1qEF2fNFBTwyEQ==
+ dependencies:
+ loader-utils "^0.2.17"
+ pug "^2.0.0-rc.2"
+
+pug-lexer@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz#531cde48c7c0b1fcbbc2b85485c8665e31489cfd"
+ integrity sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==
+ dependencies:
+ character-parser "^2.1.1"
+ is-expression "^3.0.0"
+ pug-error "^1.3.3"
+
+pug-linker@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz#f5bf218b0efd65ce6670f7afc51658d0f82989fb"
+ integrity sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==
+ dependencies:
+ pug-error "^1.3.3"
+ pug-walk "^1.1.8"
+
+pug-load@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz#d38c85eb85f6e2f704dea14dcca94144d35d3e7b"
+ integrity sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==
+ dependencies:
+ object-assign "^4.1.0"
+ pug-walk "^1.1.8"
+
+pug-parser@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz#03e7ada48b6840bd3822f867d7d90f842d0ffdc9"
+ integrity sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==
+ dependencies:
+ pug-error "^1.3.3"
+ token-stream "0.0.1"
+
+pug-runtime@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz#6da7976c36bf22f68e733c359240d8ae7a32953a"
+ integrity sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==
+
+pug-strip-comments@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz#cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8"
+ integrity sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==
+ dependencies:
+ pug-error "^1.3.3"
+
+pug-walk@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz#b408f67f27912f8c21da2f45b7230c4bd2a5ea7a"
+ integrity sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==
+
+pug@^2.0.0-rc.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz#ee7682ec0a60494b38d48a88f05f3b0ac931377d"
+ integrity sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==
+ dependencies:
+ pug-code-gen "^2.0.2"
+ pug-filters "^3.1.1"
+ pug-lexer "^4.1.0"
+ pug-linker "^3.0.6"
+ pug-load "^2.0.12"
+ pug-parser "^5.0.1"
+ pug-runtime "^2.0.5"
+ pug-strip-comments "^1.0.4"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+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:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+pure-color@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.2.0.tgz#702d2f2819dd545b1fde5116fca5f0c2dad2d18d"
+ integrity sha1-cC0vKBndVFsf3lEW/KXwwtrS0Y0=
+
+q@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+ integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=
+
+qs@~6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.0.2.tgz#88c68d590e8ed56c76c79f352c17b982466abfcd"
+ integrity sha1-iMaNWQ6O1Wx2x581LBe5gkZqv80=
+
+qs@~6.2.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625"
+ integrity sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+ integrity sha1-9AOyZPI7wBIox0ExtAfxjV6l1EI=
+
+qs@~6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+ integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+railroad-diagrams@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
+ integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
+
+ramda@^0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.17.1.tgz#4c198147d3ab54e8c15255f11730e2116f6e6073"
+ integrity sha1-TBmBR9OrVOjBUlXxFzDiEW9uYHM=
+
+randexp@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.4.tgz#ba68265f4a9f9e85f5814d34e160291f939f168e"
+ integrity sha1-umgmX0qfnoX1gU004WApH5OfFo4=
+ dependencies:
+ discontinuous-range "1.0.0"
+ ret "~0.1.10"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
+ integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+raw-loader@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+ integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
+
+rc@^1.1.2:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-addons-create-fragment@^15.0.0:
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.4.2.tgz#11372924f730a97dff4c690535211bb73d8f8815"
+ integrity sha1-ETcpJPcwqX3/TGkFNSEbtz2PiBU=
+ dependencies:
+ fbjs "^0.8.4"
+ object-assign "^4.1.0"
+
+"react-addons-shallow-compare@^0.14.0 || ^15.0.0":
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react-addons-shallow-compare/-/react-addons-shallow-compare-15.4.2.tgz#027ffd9720e3a1e0b328dcd8fc62e214a0d174a5"
+ integrity sha1-An/9lyDjoeCzKNzY/GLiFKDRdKU=
+ dependencies:
+ fbjs "^0.8.4"
+ object-assign "^4.1.0"
+
+react-addons-test-utils@^15.4.1:
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2"
+ integrity sha1-k7yqcY/K5zYNQuj7HAl1bMNjAqI=
+ dependencies:
+ fbjs "^0.8.4"
+ object-assign "^4.1.0"
+
+react-addons-transition-group@^15.0.0:
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react-addons-transition-group/-/react-addons-transition-group-15.4.2.tgz#4c42fa1c2ce024acab2924316c0f11268ded1af3"
+ integrity sha1-TEL6HCzgJKyrKSQxbA8RJo3tGvM=
+ dependencies:
+ fbjs "^0.8.4"
+ object-assign "^4.1.0"
+
+react-base16-styling@^0.4.1:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.6.tgz#ac23cb19b278974d965003b88f06a038d790bc80"
+ integrity sha1-rCPLGbJ4l02WUAO4jwagONeQvIA=
+ dependencies:
+ base16 "^1.0.0"
+ color-space "^1.14.3"
+ lodash.curry "^4.0.1"
+ lodash.flow "^3.3.0"
+ pure-color "^1.2.0"
+
+react-base16-styling@^0.5.1:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269"
+ integrity sha1-OFjyTpxN2MvT9wLz901YHKKRcmk=
+ dependencies:
+ base16 "^1.0.0"
+ lodash.curry "^4.0.1"
+ lodash.flow "^3.3.0"
+ pure-color "^1.2.0"
+
+react-deep-force-update@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7"
+ integrity sha1-+RG1vh0qb+OHUH3W6adnqikktMc=
+
+react-dom@^15.4.1:
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f"
+ integrity sha1-AVNj8FsKH9Uq6e/dOgBg2QaVII8=
+ dependencies:
+ fbjs "^0.8.1"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+
+react-dragula@^1.1.17:
+ version "1.1.17"
+ resolved "https://registry.yarnpkg.com/react-dragula/-/react-dragula-1.1.17.tgz#b3cb352a470a719367ba99d6a5401c60fad4f6ff"
+ integrity sha1-s8s1KkcKcZNnupnWpUAcYPrU9v8=
+ dependencies:
+ atoa "1.0.0"
+ dragula "3.7.2"
+
+react-event-listener@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.4.0.tgz#26c40ab18f9f0e0d8d1fed9c3465e79c0a99c9a5"
+ integrity sha1-JsQKsY+fDg2NH+2cNGXnnAqZyaU=
+ dependencies:
+ react-addons-shallow-compare "^0.14.0 || ^15.0.0"
+ warning "^3.0.0"
+
+react-icon-base@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/react-icon-base/-/react-icon-base-2.0.4.tgz#b6b7662e8b009b270a4f0c213c222f5d6eca3b22"
+ integrity sha1-trdmLosAmycKTwwhPCIvXW7KOyI=
+
+react-icons@^2.2.1:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-2.2.3.tgz#3b4847923065ecb09f8ba7f7e422112de0195196"
+ integrity sha1-O0hHkjBl7LCfi6f35CIRLeAZUZY=
+ dependencies:
+ react-icon-base "2.0.4"
+
+react-json-tree@^0.10.0, react-json-tree@^0.10.7, react-json-tree@^0.10.9:
+ version "0.10.9"
+ resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.9.tgz#7263173a2cc8bf05eac63b0419c3ce75b232e284"
+ integrity sha1-cmMXOizIvwXqxjsEGcPOdbIy4oQ=
+ dependencies:
+ babel-runtime "^6.6.1"
+ prop-types "^15.5.8"
+ react-base16-styling "^0.5.1"
+
+react-proxy@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
+ integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo=
+ dependencies:
+ lodash "^4.6.1"
+ react-deep-force-update "^1.0.0"
+
+react-pure-render@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb"
+ integrity sha1-nYqSjH8sN1E8LQZOV7Pjw1bp+rs=
+
+react-redux@^4.0.6, react-redux@^4.4.5:
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209"
+ integrity sha1-S50ymFMHoRCWot1hVhmABE/MYgk=
+ dependencies:
+ hoist-non-react-statics "^1.0.3"
+ invariant "^2.0.0"
+ lodash "^4.2.0"
+ loose-envify "^1.1.0"
+
+react-switcher@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-switcher/-/react-switcher-1.0.2.tgz#968384e3fc31ed9fd2dff7836ebbe3b2fb4e6500"
+ integrity sha1-loOE4/wx7Z/S3/eDbrvjsvtOZQA=
+
+react-tap-event-plugin@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz#316beb3bc6556e29ec869a7293e89c826a9074d2"
+ integrity sha1-MWvrO8ZVbinshppyk+icgmqQdNI=
+ dependencies:
+ fbjs "^0.8.6"
+
+react-transform-catch-errors@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb"
+ integrity sha1-G01KdulycYlvwW/jCGx5PsiKnus=
+
+react-transform-hmr@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
+ integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s=
+ dependencies:
+ global "^4.3.0"
+ react-proxy "^1.1.7"
+
+react@^15.1.0, react@^15.4.1:
+ version "15.4.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef"
+ integrity sha1-QfeZGyYYU5K6m66WyIiefgGDl+8=
+ dependencies:
+ fbjs "^0.8.4"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+
+react@^15.4.0:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
+ integrity sha1-26BDSrQ5z+gvEI8PURZjkIF5qnI=
+ dependencies:
+ create-react-class "^15.6.0"
+ fbjs "^0.8.9"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.0"
+ prop-types "^15.5.10"
+
+read-cmd-shim@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b"
+ integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=
+ dependencies:
+ graceful-fs "^4.1.2"
+
+read-installed@~4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067"
+ integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=
+ dependencies:
+ debuglog "^1.0.1"
+ read-package-json "^2.0.0"
+ readdir-scoped-modules "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ slide "~1.1.3"
+ util-extend "^1.0.1"
+ optionalDependencies:
+ graceful-fs "^4.1.2"
+
+"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.3, read-package-json@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.4.tgz#61ed1b2256ea438d8008895090be84b8e799c853"
+ integrity sha1-Ye0bIlbqQ42ACIlQkL6EuOeZyFM=
+ dependencies:
+ glob "^6.0.0"
+ json-parse-helpfulerror "^1.0.2"
+ normalize-package-data "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.2"
+
+read-package-tree@~5.1.2:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.5.tgz#ace7e6381c7684f970aaa98fc7c5d2b666addab6"
+ integrity sha1-rOfmOBx2hPlwqqmPx8XStmat2rY=
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ once "^1.3.0"
+ read-package-json "^2.0.0"
+ readdir-scoped-modules "^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"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read@1, read@~1.0.1, read@~1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
+ dependencies:
+ mute-stream "~0.0.4"
+
+"readable-stream@1 || 2", "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
+ integrity sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==
+ 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.0.3"
+ util-deprecate "~1.0.1"
+
+readable-stream@^2.0.0, readable-stream@^2.0.4:
+ 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"
+
+readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
+ integrity sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=
+ 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"
+
+readable-stream@^2.0.5, readable-stream@^2.3.7:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
+ integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
+ 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"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+ integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+ integrity sha1-j5A0HmilPMySh4jaz80Rs265t44=
+ 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"
+
+readable-stream@~2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=
+ 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"
+
+readdir-scoped-modules@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
+ integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c=
+ dependencies:
+ debuglog "^1.0.1"
+ dezalgo "^1.0.0"
+ graceful-fs "^4.1.2"
+ once "^1.3.0"
+
+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:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+realize-package-specifier@~3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4"
+ integrity sha1-0N74gpUrjeP2frpekRmWYScfQfQ=
+ dependencies:
+ dezalgo "^1.0.1"
+ npm-package-arg "^4.1.1"
+
+rebass@0.4.0-beta.6:
+ version "0.4.0-beta.6"
+ resolved "https://registry.yarnpkg.com/rebass/-/rebass-0.4.0-beta.6.tgz#4b282d412f209406bec4be2bc2e9f4abe30c73ba"
+ integrity sha1-SygtQS8glAa+xL4rwun0q+MMc7o=
+ dependencies:
+ classnames "^2.2.3"
+ understyle "^1.3.0"
+
+recompose@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.20.2.tgz#113d6ac7e29ca664cfffec16b681ddddf15250bc"
+ integrity sha1-ET1qx+KcpmTP/+wWtoHd3fFSULw=
+ dependencies:
+ change-emitter "^0.1.2"
+ fbjs "^0.8.1"
+ hoist-non-react-statics "^1.0.0"
+ symbol-observable "^0.2.4"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redux-devtools-chart-monitor@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/redux-devtools-chart-monitor/-/redux-devtools-chart-monitor-1.6.1.tgz#6e1f99aaf6efcb3aee1c118dd6a8d7bf2b36953a"
+ integrity sha1-bh+ZqvbvyzruHBGN1qjXvys2lTo=
+ dependencies:
+ d3-state-visualizer "^1.3.1"
+ deepmerge "^0.2.10"
+ react-pure-render "^1.0.2"
+ redux-devtools-themes "^1.0.0"
+
+redux-devtools-instrument@^1.0.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.0.tgz#2faed9ac3292c783284b21843edfaa0567764a0c"
+ integrity sha512-pLFQoja1ojpsSRTWbC9yyc/a+z8uwOD7FPKLp+Abs7qjsah6khA5o8HBE2wa0VipE5vniYINdkNyxV/2iWADKg==
+ dependencies:
+ lodash "^4.2.0"
+ symbol-observable "^1.0.2"
+
+redux-devtools-instrument@^1.9.6:
+ version "1.9.6"
+ resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.6.tgz#6b412595f74b9d48cfd4ecc13e585b1588ed6e7e"
+ integrity sha512-MwvY4cLEB2tIfWWBzrUR02UM9qRG2i7daNzywRvabOSVdvAY7s9BxSwMmVRH1Y/7QWjplNtOwgT0apKhHg2Qew==
+ dependencies:
+ lodash "^4.2.0"
+ symbol-observable "^1.0.2"
+
+redux-devtools-log-monitor@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.2.0.tgz#136a202f999c659a13fbb5c50793106e80722311"
+ integrity sha1-E2ogL5mcZZoT+7XFB5MQboByIxE=
+ dependencies:
+ lodash.debounce "^4.0.4"
+ react-json-tree "^0.10.0"
+ react-pure-render "^1.0.2"
+ redux-devtools-themes "^1.0.0"
+
+redux-devtools-test-generator@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/redux-devtools-test-generator/-/redux-devtools-test-generator-0.4.1.tgz#426f7dc346ada000309d2d317dc63eb63807397d"
+ integrity sha1-Qm99w0atoAAwnS0xfcY+tjgHOX0=
+ dependencies:
+ es6template "^1.0.4"
+ javascript-stringify "^1.2.0"
+ jsan "^3.1.3"
+ object-path "^0.11.1"
+ react "^15.1.0"
+ remotedev-monitor-components "^0.0.2"
+ simple-diff "^1.3.0"
+
+redux-devtools-themes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redux-devtools-themes/-/redux-devtools-themes-1.0.0.tgz#c482dce3c5373976045f40134907d9dcb3ae3d5d"
+ integrity sha1-xILc48U3OXYEX0ATSQfZ3LOuPV0=
+ dependencies:
+ base16 "^1.0.0"
+
+redux-devtools-trace-monitor@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/redux-devtools-trace-monitor/-/redux-devtools-trace-monitor-0.1.0.tgz#b4d26fbd6fb2002b061d6e49e840b782418f4794"
+ integrity sha512-fUgCVeGbDpamX94F70ABMnemKRgYoPuTdfSyaasZ/fG1nW/bZKlsyW/eZIJjLBcdlWv7eK3IyRrypX3pRZ0/VA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ anser "^1.4.7"
+ chalk "^2.4.1"
+ html-entities "^1.2.1"
+ react "^15.4.0"
+ redux-devtools-themes "^1.0.0"
+ settle-promise "^1.0.0"
+
+redux-devtools@^3.0.0, redux-devtools@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.4.1.tgz#09d342ce0ab6087be679e953a1d7c530efa1138e"
+ integrity sha1-CdNCzgq2CHvmeelTodfFMO+hE44=
+ dependencies:
+ lodash "^4.2.0"
+ prop-types "^15.5.7"
+ redux-devtools-instrument "^1.0.1"
+
+redux@^3.0.5, redux@^3.5.2:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d"
+ integrity sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0=
+ dependencies:
+ lodash "^4.2.1"
+ lodash-es "^4.2.1"
+ loose-envify "^1.1.0"
+ symbol-observable "^1.0.2"
+
+reflexbox@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/reflexbox/-/reflexbox-2.2.3.tgz#9b9ce983dbe677cebf3a94cf2c50b8157f50c0d1"
+ integrity sha1-m5zpg9vmd86/OpTPLFC4FX9QwNE=
+ dependencies:
+ robox "^1.0.0-beta.8"
+ ruled "^1.0.1"
+
+regenerate-unicode-properties@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
+ integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb"
+ integrity sha1-JX9BlhzkRVixj3gUr0jBdVn5+us=
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.4:
+ version "0.13.7"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
+ integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
+
+regenerator-transform@^0.14.2:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4"
+ integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+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:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+regexpu-core@^4.7.1:
+ version "4.7.1"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6"
+ integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.2.0"
+ regjsgen "^0.5.1"
+ regjsparser "^0.6.4"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.2.0"
+
+regjsgen@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
+ integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
+
+regjsparser@^0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
+ integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
+ dependencies:
+ jsesc "~0.5.0"
+
+remotedev-app@^0.10.13-beta:
+ version "0.10.13-beta"
+ resolved "https://registry.yarnpkg.com/remotedev-app/-/remotedev-app-0.10.13-beta.tgz#e240a10c9184fdca5fee68a36078eed313883aa7"
+ integrity sha512-QtbHdZg9kcVIH1/jBvq8jOd5okA+mRnx6zLP2O7eN3PTYpRvzRKpHKavNUTcFfjJgo94URqeAqpf/ZJ+y+SKhg==
+ dependencies:
+ chrome-storage-local "^0.1.6"
+ d3-state-visualizer "^1.3.1"
+ javascript-stringify "^1.5.0"
+ jsan "^3.1.12"
+ jsondiffpatch "^0.2.4"
+ lodash "^4.0.0"
+ material-ui "0.16.4"
+ react-icons "^2.2.1"
+ react-redux "^4.0.6"
+ react-switcher "^1.0.2"
+ react-tap-event-plugin "^2.0.1"
+ redux "^3.0.5"
+ redux-devtools "^3.0.0"
+ redux-devtools-chart-monitor "^1.6.1"
+ redux-devtools-log-monitor "^1.2.0"
+ redux-devtools-test-generator "^0.4.0"
+ redux-devtools-themes "^1.0.0"
+ redux-devtools-trace-monitor "^0.1.0"
+ remotedev-inspector-monitor "^0.11.0"
+ remotedev-monitor-components "^0.0.5"
+ remotedev-slider "1.1.3"
+ socketcluster-client "^5.5.0"
+ styled-components "^1.1.1"
+
+remotedev-inspector-monitor@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/remotedev-inspector-monitor/-/remotedev-inspector-monitor-0.11.0.tgz#552dbc3736e6d898a783b51cfd7d20b875620d5f"
+ integrity sha1-VS28Nzbm2Jing7Uc/X0guHViDV8=
+ dependencies:
+ babel-runtime "^6.3.19"
+ dateformat "^1.0.12"
+ hex-rgba "^1.0.0"
+ immutable "^3.7.6"
+ javascript-stringify "^1.1.0"
+ jsondiffpatch "^0.2.4"
+ jss "^6.0.0"
+ jss-nested "^3.0.0"
+ jss-vendor-prefixer "^4.0.0"
+ lodash.debounce "^4.0.3"
+ react-base16-styling "^0.4.1"
+ react-dragula "^1.1.17"
+ react-json-tree "^0.10.7"
+ react-pure-render "^1.0.2"
+ redux-devtools-themes "^1.0.0"
+
+remotedev-monitor-components@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/remotedev-monitor-components/-/remotedev-monitor-components-0.0.2.tgz#96c1e14f7b7fd25d8fc0fd954e2311d00cbb7b56"
+ integrity sha1-lsHhT3t/0l2PwP2VTiMR0Ay7e1Y=
+ dependencies:
+ codemirror "^5.21.0"
+ styled-components "^1.1.1"
+
+remotedev-monitor-components@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/remotedev-monitor-components/-/remotedev-monitor-components-0.0.5.tgz#3a8142a0795f4893d665e42e1d4825fe7536104d"
+ integrity sha1-OoFCoHlfSJPWZeQuHUgl/nU2EE0=
+ dependencies:
+ codemirror "^5.21.0"
+ styled-components "^1.1.1"
+
+remotedev-serialize@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/remotedev-serialize/-/remotedev-serialize-0.1.8.tgz#c99cb184e7f71a906162abc404be8ce33810205f"
+ integrity sha512-3YG/FDcOmiK22bl5oMRM8RRnbGrFEuPGjbcDG+z2xi5aQaNQNZ8lqoRnZTwXVfaZtutXuiAQOgPRrogzQk8edg==
+ dependencies:
+ jsan "^3.1.13"
+
+remotedev-slider@1.1.3, remotedev-slider@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/remotedev-slider/-/remotedev-slider-1.1.3.tgz#3ecb14ad9afb8ac5b7b7a0b86825a3a08ba19d46"
+ integrity sha1-PssUrZr7isW3t6C4aCWjoIuhnUY=
+ dependencies:
+ react "^15.1.0"
+ react-icons "^2.2.1"
+ rebass "0.4.0-beta.6"
+ reflexbox "^2.2.2"
+
+remotedev-utils@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/remotedev-utils/-/remotedev-utils-0.0.1.tgz#8b6974fa051534618b847974cdc7577e4ad8bd61"
+ integrity sha1-i2l0+gUVNGGLhHl0zcdXfkrYvWE=
+ dependencies:
+ get-params "^0.1.2"
+
+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"
+ integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+
+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@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+request@2, request@^2.47.0, request@^2.55.0, request@^2.74.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ 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"
+ 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"
+
+request@^2.45.0:
+ version "2.87.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
+ integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+request@^2.83.0:
+ version "2.83.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+ integrity sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.6.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.1"
+ forever-agent "~0.6.1"
+ form-data "~2.3.1"
+ har-validator "~5.0.3"
+ hawk "~6.0.2"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.17"
+ oauth-sign "~0.8.2"
+ performance-now "^2.1.0"
+ qs "~6.5.1"
+ safe-buffer "^5.1.1"
+ stringstream "~0.0.5"
+ tough-cookie "~2.3.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.1.0"
+
+request@~2.69.0:
+ version "2.69.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.69.0.tgz#cf91d2e000752b1217155c005241911991a2346a"
+ integrity sha1-z5HS4AB1KxIXFVwAUkGRGZGiNGo=
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ bl "~1.0.0"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~1.0.0-rc3"
+ har-validator "~2.0.6"
+ hawk "~3.1.0"
+ 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.0"
+ qs "~6.0.2"
+ stringstream "~0.0.4"
+ tough-cookie "~2.2.0"
+ tunnel-agent "~0.4.1"
+
+request@~2.74.0:
+ version "2.74.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab"
+ integrity sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=
+ 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 "~1.0.0-rc4"
+ 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"
+
+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@^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==
+
+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:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+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=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.6:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c"
+ integrity sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=
+
+resolve@^1.12.0, resolve@^1.3.2:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c"
+ integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==
+ dependencies:
+ is-core-module "^2.1.0"
+ path-parse "^1.0.6"
+
+ret@~0.1.10:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.13.tgz#38c2702ece654978941edd8b7dfac6aeeef4067d"
+ integrity sha1-OMJwLs5lSXiUHt2LffrGru70Bn0=
+
+retry@^0.10.0, retry@~0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
+ integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
+
+retry@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.8.0.tgz#2367628dc0edb247b1eab649dc53ac8628ac2d5f"
+ integrity sha1-I2dijcDtskex6rZJ3FOshiisLV8=
+
+retry@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.9.0.tgz#6f697e50a0e4ddc8c8f7fb547a9b60dead43678d"
+ integrity sha1-b2l+UKDk3cjI9/tUeptg3q1DZ40=
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@~2.5.2, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=
+ dependencies:
+ glob "^7.0.5"
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+ dependencies:
+ glob "^7.0.5"
+
+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:
+ glob "^7.1.3"
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ integrity sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
+
+robox@^1.0.0-beta.8:
+ version "1.0.0-beta.8"
+ resolved "https://registry.yarnpkg.com/robox/-/robox-1.0.0-beta.8.tgz#9aaee1dacf38a8c4ca4584a80012aebab5711c73"
+ integrity sha1-mq7h2s84qMTKRYSoABKuurVxHHM=
+ dependencies:
+ understyle "^1.2.0"
+
+ruled@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ruled/-/ruled-1.0.1.tgz#8301a1accc9d2e14b6502fca7033582335c2c0f4"
+ integrity sha1-gwGhrMydLhS2UC/KcDNYIzXCwPQ=
+
+run-parallel@^1.1.9:
+ version "1.1.10"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef"
+ integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+ integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
+
+safe-buffer@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+ integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c=
+
+safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+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:
+ ret "~0.1.10"
+
+samsam@1.1.2, samsam@~1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
+ integrity sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=
+
+sax@>=0.6.0, sax@^1.1.4:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
+ integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o=
+
+sc-channel@~1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.0.6.tgz#b38bd47a993e78290fbc53467867f6b2a0a08639"
+ integrity sha1-s4vUepk+eCkPvFNGeGf2sqCghjk=
+ dependencies:
+ sc-emitter "1.x.x"
+
+sc-emitter@1.x.x, sc-emitter@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/sc-emitter/-/sc-emitter-1.1.0.tgz#ef119d4222f4c64f887b486964ef11116cdd0e75"
+ integrity sha1-7xGdQiL0xk+Ie0hpZO8REWzdDnU=
+ dependencies:
+ component-emitter "1.2.0"
+
+sc-errors@~1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.3.3.tgz#c00bc4c766a970cc8d5937d08cd58e931d7dae05"
+ integrity sha1-wAvEx2apcMyNWTfQjNWOkx19rgU=
+
+sc-formatter@~3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6"
+ integrity sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A==
+
+schema-utils@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+ integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=
+ dependencies:
+ ajv "^5.0.0"
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
+ integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
+ dependencies:
+ "@types/json-schema" "^7.0.5"
+ ajv "^6.12.4"
+ ajv-keywords "^3.5.2"
+
+schema-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+ integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==
+ dependencies:
+ "@types/json-schema" "^7.0.6"
+ ajv "^6.12.5"
+ ajv-keywords "^3.5.2"
+
+selenium-webdriver@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz#a2dea5da4a97f6672e89e7ca7276cefa365147a7"
+ integrity sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=
+ dependencies:
+ adm-zip "^0.4.7"
+ rimraf "^2.5.4"
+ tmp "0.0.30"
+ xml2js "^0.4.17"
+
+"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5":
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
+
+semver@5.1.0, semver@~5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5"
+ integrity sha1-hfLPhVBGXE3wAM99hvawVBBqueU=
+
+semver@7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+ integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+semver@^4.1.0:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+ integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=
+
+semver@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.2.1:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+serialize-javascript@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe"
+ integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==
+
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
+ dependencies:
+ randombytes "^2.1.0"
+
+serialize-javascript@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+ integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
+ dependencies:
+ randombytes "^2.1.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-getter@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376"
+ integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=
+ dependencies:
+ to-object-path "^0.3.0"
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+settle-promise@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/settle-promise/-/settle-promise-1.0.0.tgz#697adb58b821f387ce2757c06efc9de5f0ee33d8"
+ integrity sha1-aXrbWLgh84fOJ1fAbvyd5fDuM9g=
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.10"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
+ integrity sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+sha@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae"
+ integrity sha1-YDCCL70smCOUn49y7WQR7lzyWq4=
+ dependencies:
+ graceful-fs "^4.1.2"
+ readable-stream "^2.0.2"
+
+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-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.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=
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+sigmund@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+ integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-assign@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/simple-assign/-/simple-assign-0.1.0.tgz#17fd3066a5f3d7738f50321bb0f14ca281cc4baa"
+ integrity sha1-F/0wZqXz13OPUDIbsPFMooHMS6o=
+
+simple-diff@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/simple-diff/-/simple-diff-1.4.0.tgz#6a763f86bbec38e04244d851d92fedbc6adef28d"
+ integrity sha1-anY/hrvsOOBCRNhR2S/tvGre8o0=
+
+single-line-log@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+ integrity sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=
+ dependencies:
+ string-width "^1.0.1"
+
+sinon-chrome@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/sinon-chrome/-/sinon-chrome-1.2.0.tgz#09ab7fbb67c044798766b0d04b99585649d64bdb"
+ integrity sha1-Cat/u2fARHmHZrDQS5lYVknWS9s=
+ dependencies:
+ lodash "^3.10.1"
+ sinon "^1.17.2"
+ urijs "^1.16.1"
+
+sinon@^1.17.2:
+ version "1.17.7"
+ resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf"
+ integrity sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=
+ dependencies:
+ formatio "1.1.1"
+ lolex "1.3.2"
+ samsam "1.1.2"
+ util ">=0.10.3 <1"
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+sliced@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+ integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
+
+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:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+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:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370"
+ integrity sha1-4StUh/re0+PeoKyR6UAL91tAE3A=
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ 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 "^2.0.0"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
+ dependencies:
+ hoek "2.x.x"
+
+sntp@2.x.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
+ integrity sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==
+ dependencies:
+ hoek "4.x.x"
+
+socketcluster-client@^5.5.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-5.5.2.tgz#9d4369e0e722ff7e55e5422c2d44f5afe1aff128"
+ integrity sha1-nUNp4Oci/35V5UIsLUT1r+Gv8Sg=
+ dependencies:
+ base-64 "0.1.0"
+ clone "2.1.1"
+ linked-list "0.1.0"
+ querystring "0.2.0"
+ sc-channel "~1.0.6"
+ sc-emitter "~1.1.0"
+ sc-errors "~1.3.0"
+ sc-formatter "~3.0.0"
+ ws "3.0.0"
+
+sorted-object@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-1.0.0.tgz#5d1f4f9c1fb2cd48965967304e212eb44cfb6d05"
+ integrity sha1-XR9PnB+yzUiWWWcwTiEutEz7bQU=
+
+sorted-object@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc"
+ integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw=
+
+source-list-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+ integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==
+
+source-map-resolve@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
+ integrity sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==
+ dependencies:
+ atob "^2.0.0"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@~0.5.12:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-support@~0.5.6:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
+ integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+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.6, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+ integrity sha1-dc449SvwczxafwwRjYEzSiu19BI=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, 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==
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+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"
+ integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
+
+spdx-license-ids@^1.0.2, spdx-license-ids@~1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+ integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
+
+speedometer@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d"
+ integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=
+
+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"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ integrity sha1-MOGl0ykkSXShr2FREznVla9mOLA=
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.0, ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+ssri@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808"
+ integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==
+ dependencies:
+ minipass "^3.1.1"
+
+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:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
+ integrity sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.3"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+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@^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"
+
+string.prototype.trimend@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46"
+ integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+string.prototype.trimstart@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7"
+ integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.18.0-next.1"
+
+string_decoder@^1.0.0, string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+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"
+
+stringstream@~0.0.4, stringstream@~0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+ integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
+
+strip-ansi@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
+ integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=
+ dependencies:
+ ansi-regex "^0.2.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-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:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.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"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+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.18.2:
+ version "0.18.2"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb"
+ integrity sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^0.3.0"
+
+styled-components@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-1.2.1.tgz#5884267dd9c6a8199d4abd3e0714afb973772b42"
+ integrity sha1-WIQmfdnGqBmdSr0+BxSvuXN3K0I=
+ dependencies:
+ buffer "^5.0.0"
+ css-to-react-native "^1.0.6"
+ fbjs "^0.8.4"
+ glamor "^2.15.5"
+ inline-style-prefixer "^2.0.5"
+ is-function "^1.0.1"
+ is-plain-object "^2.0.1"
+ supports-color "^3.1.2"
+
+sumchecker@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d"
+ integrity sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=
+ dependencies:
+ debug "^2.2.0"
+ es6-promise "^4.0.5"
+
+supports-color@3.1.2, supports-color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+ integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+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:
+ has-flag "^3.0.0"
+
+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:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+symbol-observable@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
+ integrity sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=
+
+symbol-observable@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+ integrity sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=
+
+"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"
+ integrity sha1-hUndHQH6n4k8GMyasLEGtNmxaMs=
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tapable@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e"
+ integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==
+
+tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-stream@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa"
+ integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^2.0.0, tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+tar@^6.0.2:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f"
+ integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^3.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
+terser-webpack-plugin@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz#cf7c25a1eee25bf121f4a587bb9e004e3f80e528"
+ integrity sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==
+ dependencies:
+ cacache "^11.0.2"
+ find-cache-dir "^2.0.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^1.4.0"
+ source-map "^0.6.1"
+ terser "^3.8.1"
+ webpack-sources "^1.1.0"
+ worker-farm "^1.5.2"
+
+terser-webpack-plugin@^1.4.3:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+ integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^3.8.1:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-3.11.0.tgz#60782893e1f4d6788acc696351f40636d0e37af0"
+ integrity sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ==
+ dependencies:
+ commander "~2.17.1"
+ source-map "~0.6.1"
+ source-map-support "~0.5.6"
+
+terser@^4.1.2:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+ integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+text-table@^0.2.0, text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throttleit@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
+ integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8=
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+through2@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f"
+ integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=
+ dependencies:
+ readable-stream "~1.1.9"
+ xtend "~2.1.1"
+
+ticky@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ticky/-/ticky-1.0.1.tgz#b7cfa71e768f1c9000c497b9151b30947c50e46d"
+ integrity sha1-t8+nHnaPHJAAxJe5FRswlHxQ5G0=
+
+timers-browserify@^2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
+ integrity sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tmatch@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-2.0.1.tgz#0c56246f33f30da1b8d3d72895abaf16660f38cf"
+ integrity sha1-DFYkbzPzDaG409colauvFmYPOM8=
+
+tmp@0.0.28:
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120"
+ integrity sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+tmp@0.0.30:
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
+ integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
+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:
+ kind-of "^3.0.2"
+
+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:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+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:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+token-stream@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a"
+ integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=
+
+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"
+ integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=
+ dependencies:
+ punycode "^1.4.1"
+
+tough-cookie@~2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7"
+ integrity sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=
+
+tough-cookie@~2.3.3:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+ integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==
+ dependencies:
+ punycode "^1.4.1"
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+ integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+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"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+ integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=
+
+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.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+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-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+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"
+ integrity sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=
+
+uglify-js@^2.6.1:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+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"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+uid-number@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
+
+ultron@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+ integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
+
+umask@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
+ integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=
+
+underscore@~1.4.4:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
+ integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ=
+
+understyle@^1.2.0, understyle@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/understyle/-/understyle-1.3.0.tgz#df3f9a9be96779d718c3da9598fad1c2f90f24ee"
+ integrity sha1-3z+am+lnedcYw9qVmPrRwvkPJO4=
+ dependencies:
+ object-assign "^4.1.0"
+
+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==
+
+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:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
+ integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
+ integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+unique-filename@^1.1.0, unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-filename@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3"
+ integrity sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab"
+ integrity sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.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==
+
+uri-js@^4.2.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
+ integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==
+ dependencies:
+ punycode "^2.1.0"
+
+urijs@^1.16.1:
+ version "1.18.4"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.4.tgz#0c97a17a0b0e4a2e635a565c2f16c0f180605e28"
+ integrity sha1-DJehegsOSi5jWlZcLxbA8YBgXig=
+
+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=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8"
+ integrity sha1-riig1y+TvyJCKhii43mZMRLeyOg=
+ dependencies:
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ lazy-cache "^2.0.2"
+
+user-home@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
+ dependencies:
+ os-homedir "^1.0.0"
+
+util-deprecate@^1.0.1, 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-extend@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f"
+ integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=
+
+util@0.10.3, "util@>=0.10.3 <1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+uuid@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+ integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=
+
+uuid@^3.1.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+ integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
+
+v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"
+ integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==
+
+validate-npm-package-license@^3.0.1, 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"
+ integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+validate-npm-package-name@^2.0.1, validate-npm-package-name@~2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz#f65695b22f7324442019a3c7fa39a6e7fd299085"
+ integrity sha1-9laVsi9zJEQgGaPH+jmm5/0pkIU=
+ dependencies:
+ builtins "0.0.7"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+void-elements@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+ integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
+
+warning@3.0.0, warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack-chokidar2@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+ integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+ integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.1"
+ watchpack-chokidar2 "^2.0.1"
+
+wcwidth@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+ dependencies:
+ defaults "^1.0.3"
+
+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"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
+webpack-cli@^3.3.12:
+ version "3.3.12"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+ integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+ dependencies:
+ chalk "^2.4.2"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.1"
+ findup-sync "^3.0.0"
+ global-modules "^2.0.0"
+ import-local "^2.0.0"
+ interpret "^1.4.0"
+ loader-utils "^1.4.0"
+ supports-color "^6.1.0"
+ v8-compile-cache "^2.1.1"
+ yargs "^13.3.2"
+
+webpack-sources@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+ integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.44.1:
+ version "4.44.2"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72"
+ integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.3.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.7.4"
+ webpack-sources "^1.4.1"
+
+whatwg-encoding@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
+ integrity sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=
+ dependencies:
+ iconv-lite "0.4.13"
+
+whatwg-fetch@>=0.10.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772"
+ integrity sha1-B4uUYbvpHOpzy86LsSKgX56St3I=
+
+whatwg-url@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.2.0.tgz#abf1a3f5ff4bc2005b3f0c2119382631789d8e44"
+ integrity sha1-q/Gj9f9LwgBbPwwhGTgmMXidjkQ=
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+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=
+
+which@1, which@^1.2.9, which@~1.2.11, which@~1.2.4:
+ version "1.2.12"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
+ integrity sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=
+ dependencies:
+ isexe "^1.1.1"
+
+which@^1.2.14, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+with@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe"
+ integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=
+ dependencies:
+ acorn "^3.1.0"
+ acorn-globals "^3.0.0"
+
+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.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+worker-farm@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
+ integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
+ dependencies:
+ errno "~0.1.7"
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+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:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1, wrappy@~1.0.1, wrappy@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b"
+ integrity sha1-sfUtwujcDjywTRh6JfdYo4qQyjs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-3.0.0.tgz#98ddb00056c8390cb751e7788788497f99103b6c"
+ integrity sha1-mN2wAFbIOQy3Ued4h4hJf5kQO2w=
+ dependencies:
+ safe-buffer "~5.0.1"
+ ultron "~1.1.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"
+ integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=
+
+xml2js@^0.4.17:
+ version "0.4.17"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868"
+ integrity sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "^4.1.0"
+
+xmlbuilder@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
+ integrity sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=
+ dependencies:
+ lodash "^4.0.0"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
+ dependencies:
+ object-keys "~0.4.0"
+
+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==
+
+yallist@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
+ integrity sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=
+
+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@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@^13.2.4, yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yauzl@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+ integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
+ dependencies:
+ fd-slicer "~1.0.1"
+
+zip-stream@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708"
+ integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ==
+ dependencies:
+ archiver-utils "^2.1.0"
+ compress-commons "^3.0.0"
+ readable-stream "^3.6.0"
diff --git a/packages/d3-state-visualizer/src/charts/index.ts b/packages/d3-state-visualizer/src/charts/index.ts
index 33abb024..aaf238e0 100644
--- a/packages/d3-state-visualizer/src/charts/index.ts
+++ b/packages/d3-state-visualizer/src/charts/index.ts
@@ -1 +1,2 @@
export { default as tree } from './tree/tree';
+export type { InputOptions, NodeWithId } from './tree/tree';
diff --git a/packages/d3-state-visualizer/src/charts/tree/tree.ts b/packages/d3-state-visualizer/src/charts/tree/tree.ts
index 894eceb4..47ae5176 100644
--- a/packages/d3-state-visualizer/src/charts/tree/tree.ts
+++ b/packages/d3-state-visualizer/src/charts/tree/tree.ts
@@ -10,7 +10,7 @@ import {
} from './utils';
import d3tooltip from 'd3tooltip';
-interface InputOptions {
+export interface InputOptions {
// eslint-disable-next-line @typescript-eslint/ban-types
state?: {} | null;
// eslint-disable-next-line @typescript-eslint/ban-types
@@ -34,7 +34,7 @@ interface InputOptions {
widthBetweenNodesCoeff: number;
transitionDuration: number;
blinkDuration: number;
- onClickText: () => void;
+ onClickText: (datum: NodeWithId) => void;
tooltipOptions: {
disabled?: boolean;
left?: number | undefined;
diff --git a/packages/d3-state-visualizer/src/index.ts b/packages/d3-state-visualizer/src/index.ts
index 78a37ac1..60b538ee 100644
--- a/packages/d3-state-visualizer/src/index.ts
+++ b/packages/d3-state-visualizer/src/index.ts
@@ -1,5 +1,6 @@
import * as charts from './charts';
export { tree } from './charts';
+export type { InputOptions, NodeWithId } from './charts';
export default charts;
diff --git a/packages/devui/package.json b/packages/devui/package.json
index e1322af3..36efc173 100755
--- a/packages/devui/package.json
+++ b/packages/devui/package.json
@@ -36,10 +36,10 @@
"prepublishOnly": "npm run clean && npm run build"
},
"dependencies": {
+ "@rjsf/core": "^2.4.0",
"@types/base16": "^1.0.2",
"@types/codemirror": "^0.0.97",
"@types/prop-types": "^15.7.3",
- "@types/react-jsonschema-form": "^1.7.4",
"@types/react-select": "^3.0.19",
"@types/redux-devtools-themes": "^1.0.0",
"@types/simple-element-resize-detector": "^1.3.0",
@@ -49,7 +49,6 @@
"color": "^3.1.2",
"prop-types": "^15.7.2",
"react-icons": "^3.10.0",
- "react-jsonschema-form": "^1.8.1",
"react-select": "^3.1.0",
"redux-devtools-themes": "^1.0.0",
"simple-element-resize-detector": "^1.3.0",
diff --git a/packages/devui/src/Form/Form.tsx b/packages/devui/src/Form/Form.tsx
index 4e8f651f..e9cf4f41 100644
--- a/packages/devui/src/Form/Form.tsx
+++ b/packages/devui/src/Form/Form.tsx
@@ -1,6 +1,6 @@
import React, { PureComponent, Component } from 'react';
import PropTypes from 'prop-types';
-import JSONSchemaForm, { FormProps } from 'react-jsonschema-form';
+import JSONSchemaForm, { FormProps } from '@rjsf/core';
import { Base16Theme } from 'base16';
import createStyledComponent from '../utils/createStyledComponent';
import styles from './styles';
@@ -18,7 +18,7 @@ export interface Props
extends FormProps {
}
/**
- * Wrapper around [`react-jsonschema-form`](https://github.com/mozilla-services/react-jsonschema-form) with custom widgets.
+ * Wrapper around [`react-jsonschema-form`](https://github.com/rjsf-team/react-jsonschema-form) with custom widgets.
*/
export default class Form extends (PureComponent || Component)> {
render() {
diff --git a/packages/devui/src/Form/schema.ts b/packages/devui/src/Form/schema.ts
index 0cafe38d..66a5da07 100644
--- a/packages/devui/src/Form/schema.ts
+++ b/packages/devui/src/Form/schema.ts
@@ -1,6 +1,6 @@
-import { JSONSchema6 } from 'json-schema';
+import { JSONSchema7 } from 'json-schema';
-export const schema: JSONSchema6 = {
+export const schema: JSONSchema7 = {
title: 'Example form',
description: 'A simple form example.',
type: 'object',
diff --git a/packages/devui/src/Form/widgets.tsx b/packages/devui/src/Form/widgets.tsx
index 905148af..f4f5336b 100644
--- a/packages/devui/src/Form/widgets.tsx
+++ b/packages/devui/src/Form/widgets.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { FieldProps, Widget, WidgetProps } from 'react-jsonschema-form';
+import { FieldProps, Widget, WidgetProps } from '@rjsf/core';
import Select from '../Select';
import Slider from '../Slider';
diff --git a/packages/devui/src/Tabs/index.ts b/packages/devui/src/Tabs/index.ts
index bc6749b1..f58f9e2c 100644
--- a/packages/devui/src/Tabs/index.ts
+++ b/packages/devui/src/Tabs/index.ts
@@ -1 +1,2 @@
export { default } from './Tabs';
+export { Tab } from './TabsHeader';
diff --git a/packages/devui/src/index.ts b/packages/devui/src/index.ts
index cf2dfa86..eabef90a 100644
--- a/packages/devui/src/index.ts
+++ b/packages/devui/src/index.ts
@@ -6,7 +6,7 @@ export { default as Editor } from './Editor';
export { default as Form } from './Form';
export { default as Select } from './Select';
export { default as Slider } from './Slider';
-export { default as Tabs } from './Tabs';
+export { default as Tabs, Tab } from './Tabs';
export { default as SegmentedControl } from './SegmentedControl';
export { default as Notification } from './Notification';
export * from './Toolbar';
@@ -14,3 +14,4 @@ export * from './Toolbar';
import color from './utils/color';
export const effects = { color };
export { default as createStyledComponent } from './utils/createStyledComponent';
+export { Theme, ThemeFromProvider, Scheme } from './utils/theme';
diff --git a/packages/devui/src/utils/theme.ts b/packages/devui/src/utils/theme.ts
index 5bfd788c..b0180cb7 100644
--- a/packages/devui/src/utils/theme.ts
+++ b/packages/devui/src/utils/theme.ts
@@ -3,19 +3,22 @@ import { nicinabox as defaultDarkScheme } from 'redux-devtools-themes';
import * as baseSchemes from 'base16';
import * as additionalSchemes from '../colorSchemes';
import invertColors from '../utils/invertColors';
-import { Theme } from '../themes/default';
+import { Theme as ThemeBase } from '../themes/default';
export const schemes = { ...baseSchemes, ...additionalSchemes };
export const listSchemes = () => Object.keys(schemes).slice(1).sort(); // remove `__esModule`
export const listThemes = () => Object.keys(themes);
+export type Theme = keyof typeof themes;
+export type Scheme = keyof typeof schemes;
+
export interface ThemeData {
theme: keyof typeof themes;
scheme: keyof typeof schemes;
light: boolean;
}
-export interface ThemeFromProvider extends Theme {
+export interface ThemeFromProvider extends ThemeBase {
type: keyof typeof themes;
light: boolean;
}
diff --git a/packages/react-json-tree/README.md b/packages/react-json-tree/README.md
index dee87d6c..28adfac8 100644
--- a/packages/react-json-tree/README.md
+++ b/packages/react-json-tree/README.md
@@ -34,7 +34,7 @@ Check out [examples](examples) directory for more details.
This component now uses [react-base16-styling](https://github.com/alexkuz/react-base16-styling) module, which allows to customize component via `theme` property, which can be the following:
-- [base16](http://chriskempson.github.io/base16) theme data. [The example theme data can be found here](https://github.com/gaearon/redux-devtools/tree/75322b15ee7ba03fddf10ac3399881e302848874/src/react/themes).
+- [base16](http://chriskempson.com/projects/base16/) theme data. [The example theme data can be found here](https://github.com/gaearon/redux-devtools/tree/75322b15ee7ba03fddf10ac3399881e302848874/src/react/themes).
- object that contains style objects, strings (that treated as classnames) or functions. A function is used to extend its first argument `{ style, className }` and should return an object with the same structure. Other arguments depend on particular context (and should be described here). See [createStylingFromTheme.js](https://github.com/alexkuz/react-json-tree/blob/feature-refactor-styling/src/createStylingFromTheme.js) for the list of styling object keys. Also, this object can extend `base16` theme via `extend` property.
Every theme has a light version, which is enabled with `invertTheme` prop.
diff --git a/packages/react-json-tree/src/index.tsx b/packages/react-json-tree/src/index.tsx
index d238852e..bc0fd5ff 100644
--- a/packages/react-json-tree/src/index.tsx
+++ b/packages/react-json-tree/src/index.tsx
@@ -106,7 +106,7 @@ function getStateFromProps(props: Props) {
export default class JSONTree extends React.Component {
static propTypes = {
- data: PropTypes.any.isRequired,
+ data: PropTypes.any,
hideRoot: PropTypes.bool,
theme: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
invertTheme: PropTypes.bool,
diff --git a/packages/redux-devtools-chart-monitor/src/Chart.tsx b/packages/redux-devtools-chart-monitor/src/Chart.tsx
index 8b646f58..f0b6d098 100644
--- a/packages/redux-devtools-chart-monitor/src/Chart.tsx
+++ b/packages/redux-devtools-chart-monitor/src/Chart.tsx
@@ -7,6 +7,7 @@ import * as themes from 'redux-devtools-themes';
import { Base16Theme } from 'react-base16-styling';
import { ChartMonitorState } from './reducers';
import { Primitive } from 'd3';
+import { NodeWithId } from 'd3-state-visualizer/lib/charts/tree/tree';
const wrapperStyle = {
width: '100%',
@@ -25,6 +26,7 @@ export interface Props>
isSorted: boolean;
heightBetweenNodesCoeff: number;
widthBetweenNodesCoeff: number;
+ onClickText: (datum: NodeWithId) => void;
tooltipOptions: {
disabled: boolean;
offset: {
diff --git a/packages/redux-devtools-chart-monitor/src/ChartMonitor.tsx b/packages/redux-devtools-chart-monitor/src/ChartMonitor.tsx
index 8fe44c64..df609820 100644
--- a/packages/redux-devtools-chart-monitor/src/ChartMonitor.tsx
+++ b/packages/redux-devtools-chart-monitor/src/ChartMonitor.tsx
@@ -9,6 +9,7 @@ import { Base16Theme } from 'react-base16-styling';
import reducer, { ChartMonitorState } from './reducers';
import Chart, { Props } from './Chart';
import { Primitive } from 'd3';
+import { NodeWithId } from 'd3-state-visualizer/lib/charts/tree/tree';
// eslint-disable-next-line @typescript-eslint/unbound-method
const { reset, rollback, commit, sweep, toggleAction } = ActionCreators;
@@ -49,6 +50,7 @@ export interface ChartMonitorProps>
isSorted: boolean;
heightBetweenNodesCoeff: number;
widthBetweenNodesCoeff: number;
+ onClickText: (datum: NodeWithId) => void;
tooltipOptions: unknown;
style: {
width: number;
diff --git a/packages/redux-devtools-cli/.eslintignore b/packages/redux-devtools-cli/.eslintignore
new file mode 100644
index 00000000..d827b1ac
--- /dev/null
+++ b/packages/redux-devtools-cli/.eslintignore
@@ -0,0 +1,2 @@
+dist
+umd
diff --git a/packages/redux-devtools-cli/.eslintrc.js b/packages/redux-devtools-cli/.eslintrc.js
new file mode 100644
index 00000000..486b7fd4
--- /dev/null
+++ b/packages/redux-devtools-cli/.eslintrc.js
@@ -0,0 +1,21 @@
+module.exports = {
+ extends: '../../.eslintrc',
+ overrides: [
+ {
+ files: ['*.ts', '*.tsx'],
+ extends: '../../eslintrc.ts.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./tsconfig.json'],
+ },
+ },
+ {
+ files: ['test/*.ts', 'test/*.tsx'],
+ extends: '../../eslintrc.ts.jest.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./test/tsconfig.json'],
+ },
+ },
+ ],
+};
diff --git a/packages/redux-devtools-cli/README.md b/packages/redux-devtools-cli/README.md
index 21add95f..e23f0d40 100644
--- a/packages/redux-devtools-cli/README.md
+++ b/packages/redux-devtools-cli/README.md
@@ -140,7 +140,7 @@ If you're still use Android 4.0, you should use `10.0.2.2` (Genymotion: `10.0.3.
### Save reports and logs
-You can store reports via [`redux-remotedev`](https://github.com/zalmoxisus/redux-remotedev) and get them replicated with [Redux DevTools extension](https://github.com/zalmoxisus/redux-devtools-extension) or [Remote Redux DevTools](https://github.com/zalmoxisus/remote-redux-devtools). You can get action history right in the extension just by clicking the link from a report. Open `http://localhost:8000/graphiql` (assuming you're using `localhost` as host and `8000`) to explore in GraphQL. Reports are posted to `http://localhost:8000/`. See examples in [tests](https://github.com/zalmoxisus/remotedev-server/blob/937cfa1f0ac9dc12ebf7068eeaa8b03022ec33bc/test/integration.spec.js#L110-L165).
+You can store reports via [`redux-remotedev`](https://github.com/zalmoxisus/redux-remotedev) and get them replicated with [Redux DevTools extension](https://github.com/zalmoxisus/redux-devtools-extension) or [Remote Redux DevTools](https://github.com/zalmoxisus/remote-redux-devtools). You can get action history right in the extension just by clicking the link from a report. Open `http://localhost:8000/graphql` (assuming you're using `localhost` as host and `8000`) to explore in GraphQL. Reports are posted to `http://localhost:8000/`. See examples in [tests](https://github.com/zalmoxisus/remotedev-server/blob/937cfa1f0ac9dc12ebf7068eeaa8b03022ec33bc/test/integration.spec.js#L110-L165).
Redux DevTools server is database agnostic using `knex` schema. By default everything is stored in the memory using sqlite database. See [`defaultDbOptions.json`](https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-cli/defaultDbOptions.json) for example of sqlite. You can replace `"connection": { "filename": ":memory:" },` with your file name (instead of `:memory:`) to persist teh database. Here's an example for PostgreSQL:
diff --git a/packages/redux-devtools-cli/bin/injectServer.js b/packages/redux-devtools-cli/bin/injectServer.js
deleted file mode 100644
index 8a4816b6..00000000
--- a/packages/redux-devtools-cli/bin/injectServer.js
+++ /dev/null
@@ -1,95 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var semver = require('semver');
-
-var name = 'redux-devtools-cli';
-var startFlag = '/* ' + name + ' start */';
-var endFlag = '/* ' + name + ' end */';
-var serverFlags = {
- 'react-native': {
- '0.0.1': ' _server(argv, config, resolve, reject);',
- '0.31.0':
- " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));",
- '0.44.0-rc.0': ' runServer(args, config, startedCallback, readyCallback);',
- '0.46.0-rc.0':
- ' runServer(runServerArgs, configT, startedCallback, readyCallback);',
- '0.57.0': ' runServer(args, configT);',
- },
- 'react-native-desktop': {
- '0.0.1': ' _server(argv, config, resolve, reject);',
- },
-};
-
-function getModuleVersion(modulePath) {
- return JSON.parse(
- fs.readFileSync(path.join(modulePath, 'package.json'), 'utf-8')
- ).version;
-}
-
-function getServerFlag(moduleName, version) {
- var flags = serverFlags[moduleName || 'react-native'];
- var versions = Object.keys(flags);
- var flag;
- for (var i = 0; i < versions.length; i++) {
- if (semver.gte(version, versions[i])) {
- flag = flags[versions[i]];
- }
- }
- return flag;
-}
-
-exports.dir = 'local-cli/server';
-exports.file = 'server.js';
-exports.fullPath = path.join(exports.dir, exports.file);
-
-exports.inject = function (modulePath, options, moduleName) {
- var filePath = path.join(modulePath, exports.fullPath);
- if (!fs.existsSync(filePath)) return false;
-
- var serverFlag = getServerFlag(moduleName, getModuleVersion(modulePath));
- var code = [
- startFlag,
- ' require("' + name + '")(' + JSON.stringify(options) + ')',
- ' .then(_remotedev =>',
- ' _remotedev.on("ready", () => {',
- ' if (!_remotedev.portAlreadyUsed) console.log("-".repeat(80));',
- ' ' + serverFlag,
- ' })',
- ' );',
- endFlag,
- ].join('\n');
-
- var serverCode = fs.readFileSync(filePath, 'utf-8');
- var start = serverCode.indexOf(startFlag); // already injected ?
- var end = serverCode.indexOf(endFlag) + endFlag.length;
- if (start === -1) {
- start = serverCode.indexOf(serverFlag);
- end = start + serverFlag.length;
- }
- fs.writeFileSync(
- filePath,
- serverCode.substr(0, start) +
- code +
- serverCode.substr(end, serverCode.length)
- );
- return true;
-};
-
-exports.revert = function (modulePath, moduleName) {
- var filePath = path.join(modulePath, exports.fullPath);
- if (!fs.existsSync(filePath)) return false;
-
- var serverFlag = getServerFlag(moduleName, getModuleVersion(modulePath));
- var serverCode = fs.readFileSync(filePath, 'utf-8');
- var start = serverCode.indexOf(startFlag); // already injected ?
- var end = serverCode.indexOf(endFlag) + endFlag.length;
- if (start !== -1) {
- fs.writeFileSync(
- filePath,
- serverCode.substr(0, start) +
- serverFlag +
- serverCode.substr(end, serverCode.length)
- );
- }
- return true;
-};
diff --git a/packages/redux-devtools-cli/bin/redux-devtools.js b/packages/redux-devtools-cli/bin/redux-devtools.js
old mode 100755
new mode 100644
index 093829f2..91be0e79
--- a/packages/redux-devtools-cli/bin/redux-devtools.js
+++ b/packages/redux-devtools-cli/bin/redux-devtools.js
@@ -1,94 +1,3 @@
#! /usr/bin/env node
-var fs = require('fs');
-var path = require('path');
-var argv = require('minimist')(process.argv.slice(2));
-var chalk = require('chalk');
-var injectServer = require('./injectServer');
-var getOptions = require('./../src/options');
-var server = require('../index');
-var openApp = require('./openApp');
-var options = getOptions(argv);
-
-function readFile(filePath) {
- return fs.readFileSync(path.resolve(process.cwd(), filePath), 'utf-8');
-}
-
-if (argv.protocol === 'https') {
- argv.key = argv.key ? readFile(argv.key) : null;
- argv.cert = argv.cert ? readFile(argv.cert) : null;
-}
-
-function log(pass, msg) {
- var prefix = pass ? chalk.green.bgBlack('PASS') : chalk.red.bgBlack('FAIL');
- var color = pass ? chalk.blue : chalk.red;
- console.log(prefix, color(msg)); // eslint-disable-line no-console
-}
-
-function getModuleName(type) {
- switch (type) {
- case 'macos':
- return 'react-native-macos';
- // react-native-macos is renamed from react-native-desktop
- case 'desktop':
- return 'react-native-desktop';
- case 'reactnative':
- default:
- return 'react-native';
- }
-}
-
-function getModulePath(moduleName) {
- return path.join(process.cwd(), 'node_modules', moduleName);
-}
-
-function getModule(type) {
- var moduleName = getModuleName(type);
- var modulePath = getModulePath(moduleName);
- if (type === 'desktop' && !fs.existsSync(modulePath)) {
- moduleName = getModuleName('macos');
- modulePath = getModulePath(moduleName);
- }
- return {
- name: moduleName,
- path: modulePath,
- };
-}
-
-function injectRN(type, msg) {
- var module = getModule(type);
- var fn = type === 'revert' ? injectServer.revert : injectServer.inject;
- var pass = fn(module.path, options, module.name);
- log(
- pass,
- msg +
- (pass
- ? '.'
- : ', the file `' +
- path.join(module.name, injectServer.fullPath) +
- '` not found.')
- );
-
- process.exit(pass ? 0 : 1);
-}
-
-if (argv.revert) {
- injectRN(
- argv.revert,
- 'Revert injection of ReduxDevTools server from React Native local server'
- );
-}
-if (argv.injectserver) {
- injectRN(
- argv.injectserver,
- 'Inject ReduxDevTools server into React Native local server'
- );
-}
-
-server(argv).then(function (r) {
- if (argv.open && argv.open !== 'false') {
- r.on('ready', function () {
- openApp(argv.open, options);
- });
- }
-});
+require('../dist/bin/redux-devtools.js');
diff --git a/packages/redux-devtools-cli/jest.config.js b/packages/redux-devtools-cli/jest.config.js
new file mode 100644
index 00000000..8824c114
--- /dev/null
+++ b/packages/redux-devtools-cli/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ preset: 'ts-jest',
+};
diff --git a/packages/redux-devtools-cli/package.json b/packages/redux-devtools-cli/package.json
index 30d49903..c432402f 100644
--- a/packages/redux-devtools-cli/package.json
+++ b/packages/redux-devtools-cli/package.json
@@ -2,10 +2,12 @@
"name": "redux-devtools-cli",
"version": "1.0.0-4",
"description": "CLI for remote debugging with Redux DevTools.",
- "main": "index.js",
- "bin": {
- "redux-devtools": "bin/redux-devtools.js"
+ "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-cli",
+ "bugs": {
+ "url": "https://github.com/reduxjs/redux-devtools/issues"
},
+ "license": "MIT",
+ "author": "Mihail Diordiev (https://github.com/zalmoxisus)",
"files": [
"bin",
"src",
@@ -13,26 +15,35 @@
"index.js",
"defaultDbOptions.json"
],
- "scripts": {
- "start": "node ./bin/redux-devtools.js",
- "start:electron": "node ./bin/redux-devtools.js --open",
- "test": "jest",
- "prepublishOnly": "npm run test"
+ "main": "dist/index.js",
+ "types": "dist/index.d.ts",
+ "bin": {
+ "redux-devtools": "bin/redux-devtools.js"
},
"repository": {
"type": "git",
"url": "https://github.com/reduxjs/redux-devtools.git"
},
+ "scripts": {
+ "build": "tsc && ncp ./src/api/schema_def.graphql ./dist/api/schema_def.graphql",
+ "start": "node ./bin/redux-devtools.js",
+ "start:electron": "node ./bin/redux-devtools.js --open",
+ "clean": "rimraf dist",
+ "test": "jest",
+ "lint": "eslint . --ext .ts,.tsx",
+ "lint:fix": "eslint . --ext .ts,.tsx --fix",
+ "type-check": "tsc --noEmit",
+ "type-check:watch": "npm run type-check -- --watch",
+ "preversion": "npm run type-check && npm run lint && npm run test",
+ "prepublishOnly": "npm run clean && npm run build"
+ },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=10.0.0"
},
- "author": "Mihail Diordiev (https://github.com/zalmoxisus)",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/reduxjs/redux-devtools/issues"
- },
- "homepage": "https://github.com/reduxjs/redux-devtools",
"dependencies": {
+ "@types/react": "^16.9.46",
+ "apollo-server": "^2.18.2",
+ "apollo-server-express": "^2.18.2",
"body-parser": "^1.19.0",
"chalk": "^4.1.0",
"cors": "^2.8.5",
@@ -40,9 +51,7 @@
"electron": "^9.2.0",
"express": "^4.17.1",
"getport": "^0.1.0",
- "graphql": "^0.13.2",
- "graphql-server-express": "^1.4.1",
- "graphql-tools": "^4.0.8",
+ "graphql": "^14.7.0",
"knex": "^0.19.5",
"lodash": "^4.17.19",
"minimist": "^1.2.5",
@@ -57,7 +66,13 @@
"uuid": "^8.3.0"
},
"devDependencies": {
+ "@types/cross-spawn": "^6.0.2",
+ "@types/morgan": "^1.9.1",
+ "@types/semver": "^7.3.4",
+ "@types/supertest": "^2.0.10",
+ "@types/uuid": "^8.3.0",
"jest": "^26.2.2",
+ "ncp": "^2.0.0",
"socketcluster-client": "^14.3.1",
"supertest": "^4.0.2"
}
diff --git a/packages/redux-devtools-cli/src/api/schema.js b/packages/redux-devtools-cli/src/api/schema.js
deleted file mode 100644
index 81e26085..00000000
--- a/packages/redux-devtools-cli/src/api/schema.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var makeExecutableSchema = require('graphql-tools').makeExecutableSchema;
-var requireSchema = require('../utils/requireSchema');
-var schema = requireSchema('./schema_def.graphql', require);
-
-var resolvers = {
- Query: {
- reports: function report(source, args, context) {
- return context.store.listAll();
- },
- report: function report(source, args, context) {
- return context.store.get(args.id);
- },
- },
-};
-
-var executableSchema = makeExecutableSchema({
- typeDefs: schema,
- resolvers: resolvers,
-});
-
-module.exports = executableSchema;
diff --git a/packages/redux-devtools-cli/src/api/schema.ts b/packages/redux-devtools-cli/src/api/schema.ts
new file mode 100644
index 00000000..a5236cd2
--- /dev/null
+++ b/packages/redux-devtools-cli/src/api/schema.ts
@@ -0,0 +1,33 @@
+import fs from 'fs';
+import { makeExecutableSchema } from 'apollo-server';
+import { Store } from '../store';
+
+const schema = fs
+ .readFileSync(require.resolve('./schema_def.graphql'))
+ .toString();
+
+const resolvers = {
+ Query: {
+ reports: function report(
+ source: unknown,
+ args: unknown,
+ context: { store: Store }
+ ) {
+ return context.store.listAll();
+ },
+ report: function report(
+ source: unknown,
+ args: { id: string },
+ context: { store: Store }
+ ) {
+ return context.store.get(args.id);
+ },
+ },
+};
+
+const executableSchema = makeExecutableSchema({
+ typeDefs: schema,
+ resolvers: resolvers,
+});
+
+export default executableSchema;
diff --git a/packages/redux-devtools-cli/src/bin/injectServer.ts b/packages/redux-devtools-cli/src/bin/injectServer.ts
new file mode 100644
index 00000000..c5d04acf
--- /dev/null
+++ b/packages/redux-devtools-cli/src/bin/injectServer.ts
@@ -0,0 +1,104 @@
+import fs from 'fs';
+import path from 'path';
+import semver from 'semver';
+import { Options } from '../options';
+
+const name = 'redux-devtools-cli';
+const startFlag = '/* ' + name + ' start */';
+const endFlag = '/* ' + name + ' end */';
+const serverFlags: { [moduleName: string]: { [version: string]: string } } = {
+ 'react-native': {
+ '0.0.1': ' _server(argv, config, resolve, reject);',
+ '0.31.0':
+ " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));",
+ '0.44.0-rc.0': ' runServer(args, config, startedCallback, readyCallback);',
+ '0.46.0-rc.0':
+ ' runServer(runServerArgs, configT, startedCallback, readyCallback);',
+ '0.57.0': ' runServer(args, configT);',
+ },
+ 'react-native-desktop': {
+ '0.0.1': ' _server(argv, config, resolve, reject);',
+ },
+};
+
+function getModuleVersion(modulePath: string) {
+ return JSON.parse(
+ fs.readFileSync(path.join(modulePath, 'package.json'), 'utf-8')
+ ).version;
+}
+
+function getServerFlag(moduleName: string, version: string): string {
+ const flags = serverFlags[moduleName || 'react-native'];
+ const versions = Object.keys(flags);
+ let flag;
+ for (let i = 0; i < versions.length; i++) {
+ if (semver.gte(version, versions[i])) {
+ flag = flags[versions[i]];
+ }
+ }
+ return flag as string;
+}
+
+export const dir = 'local-cli/server';
+export const file = 'server.js';
+export const fullPath = path.join(exports.dir, exports.file);
+
+export function inject(
+ modulePath: string,
+ options: Options,
+ moduleName: string
+) {
+ const filePath = path.join(modulePath, exports.fullPath);
+ if (!fs.existsSync(filePath)) return false;
+
+ const serverFlag = getServerFlag(moduleName, getModuleVersion(modulePath));
+ const code = [
+ startFlag,
+ ' require("' + name + '")(' + JSON.stringify(options) + ')',
+ ' .then(_remotedev =>',
+ ' _remotedev.on("ready", () => {',
+ ' if (!_remotedev.portAlreadyUsed) console.log("-".repeat(80));',
+ ' ' + serverFlag,
+ ' })',
+ ' );',
+ endFlag,
+ ].join('\n');
+
+ const serverCode = fs.readFileSync(filePath, 'utf-8');
+ let start = serverCode.indexOf(startFlag); // already injected ?
+ let end = serverCode.indexOf(endFlag) + endFlag.length;
+ if (start === -1) {
+ start = serverCode.indexOf(serverFlag);
+ end = start + serverFlag.length;
+ }
+ fs.writeFileSync(
+ filePath,
+ serverCode.substr(0, start) +
+ code +
+ serverCode.substr(end, serverCode.length)
+ );
+ return true;
+}
+
+export function revert(
+ modulePath: string,
+ options: Options,
+ moduleName: string
+) {
+ const filePath = path.join(modulePath, exports.fullPath);
+ if (!fs.existsSync(filePath)) return false;
+
+ const serverFlag = getServerFlag(moduleName, getModuleVersion(modulePath));
+ const serverCode = fs.readFileSync(filePath, 'utf-8');
+ const start = serverCode.indexOf(startFlag); // already injected ?
+ const end = serverCode.indexOf(endFlag) + endFlag.length;
+ if (start !== -1) {
+ fs.writeFileSync(
+ filePath,
+ serverCode.substr(0, start) +
+ serverFlag +
+ serverCode.substr(end, serverCode.length)
+ );
+ }
+ return true;
+}
diff --git a/packages/redux-devtools-cli/bin/openApp.js b/packages/redux-devtools-cli/src/bin/openApp.ts
similarity index 62%
rename from packages/redux-devtools-cli/bin/openApp.js
rename to packages/redux-devtools-cli/src/bin/openApp.ts
index f6c47184..1d48ac81 100644
--- a/packages/redux-devtools-cli/bin/openApp.js
+++ b/packages/redux-devtools-cli/src/bin/openApp.ts
@@ -1,11 +1,13 @@
-var open = require('open');
-var path = require('path');
-var spawn = require('cross-spawn');
+import open from 'open';
+import path from 'path';
+import spawn from 'cross-spawn';
+import { Options } from '../options';
-function openApp(app, options) {
+export default function openApp(app: boolean | string, options: Options) {
if (app === true || app === 'electron') {
try {
- var port = options.port ? '--port=' + options.port : '';
+ const port = options.port ? `--port=${options.port}` : '';
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
spawn.sync(require('electron'), [
path.join(__dirname, '..', 'app'),
port,
@@ -29,10 +31,9 @@ function openApp(app, options) {
}
return;
}
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
open(
- 'http://localhost:' + options.port + '/',
- app !== 'browser' ? { app: app } : undefined
+ `http://localhost:${options.port}/`,
+ app !== 'browser' ? { app: app as string } : undefined
);
}
-
-module.exports = openApp;
diff --git a/packages/redux-devtools-cli/src/bin/redux-devtools.ts b/packages/redux-devtools-cli/src/bin/redux-devtools.ts
new file mode 100644
index 00000000..dd8570eb
--- /dev/null
+++ b/packages/redux-devtools-cli/src/bin/redux-devtools.ts
@@ -0,0 +1,97 @@
+#! /usr/bin/env node
+import fs from 'fs';
+import path from 'path';
+import parseArgs from 'minimist';
+import chalk from 'chalk';
+import * as injectServer from './injectServer';
+import getOptions from '../options';
+import server from '../index';
+import openApp from './openApp';
+
+const argv = parseArgs(process.argv.slice(2));
+
+const options = getOptions(argv);
+
+function readFile(filePath: string) {
+ return fs.readFileSync(path.resolve(process.cwd(), filePath), 'utf-8');
+}
+
+if (argv.protocol === 'https') {
+ argv.key = argv.key ? readFile(argv.key) : null;
+ argv.cert = argv.cert ? readFile(argv.cert) : null;
+}
+
+function log(pass: boolean, msg: string) {
+ const prefix = pass ? chalk.green.bgBlack('PASS') : chalk.red.bgBlack('FAIL');
+ const color = pass ? chalk.blue : chalk.red;
+ console.log(prefix, color(msg)); // eslint-disable-line no-console
+}
+
+function getModuleName(type: string) {
+ switch (type) {
+ case 'macos':
+ return 'react-native-macos';
+ // react-native-macos is renamed from react-native-desktop
+ case 'desktop':
+ return 'react-native-desktop';
+ case 'reactnative':
+ default:
+ return 'react-native';
+ }
+}
+
+function getModulePath(moduleName: string) {
+ return path.join(process.cwd(), 'node_modules', moduleName);
+}
+
+function getModule(type: string) {
+ let moduleName = getModuleName(type);
+ let modulePath = getModulePath(moduleName);
+ if (type === 'desktop' && !fs.existsSync(modulePath)) {
+ moduleName = getModuleName('macos');
+ modulePath = getModulePath(moduleName);
+ }
+ return {
+ name: moduleName,
+ path: modulePath,
+ };
+}
+
+function injectRN(type: string, msg: string) {
+ const module = getModule(type);
+ const fn = type === 'revert' ? injectServer.revert : injectServer.inject;
+ const pass = fn(module.path, options, module.name);
+ log(
+ pass,
+ msg +
+ (pass
+ ? '.'
+ : ', the file `' +
+ path.join(module.name, injectServer.fullPath) +
+ '` not found.')
+ );
+
+ process.exit(pass ? 0 : 1);
+}
+
+if (argv.revert) {
+ injectRN(
+ argv.revert,
+ 'Revert injection of ReduxDevTools server from React Native local server'
+ );
+}
+if (argv.injectserver) {
+ injectRN(
+ argv.injectserver,
+ 'Inject ReduxDevTools server into React Native local server'
+ );
+}
+
+// eslint-disable-next-line @typescript-eslint/no-floating-promises
+server(argv).then(function (r) {
+ if (argv.open && argv.open !== 'false') {
+ r.on('ready', function () {
+ openApp(argv.open, options);
+ });
+ }
+});
diff --git a/packages/redux-devtools-cli/src/db/connector.js b/packages/redux-devtools-cli/src/db/connector.ts
similarity index 61%
rename from packages/redux-devtools-cli/src/db/connector.js
rename to packages/redux-devtools-cli/src/db/connector.ts
index 84567527..e162ef1e 100644
--- a/packages/redux-devtools-cli/src/db/connector.js
+++ b/packages/redux-devtools-cli/src/db/connector.ts
@@ -1,8 +1,9 @@
-var path = require('path');
-var knexModule = require('knex');
+import path from 'path';
+import knexModule from 'knex';
+import { SCServer } from 'socketcluster-server';
-module.exports = function connector(options) {
- var dbOptions = options.dbOptions;
+export default function connector(options: SCServer.SCServerOptions) {
+ const dbOptions = options.dbOptions;
dbOptions.useNullAsDefault = true;
if (!dbOptions.migrate) {
return knexModule(dbOptions);
@@ -10,13 +11,13 @@ module.exports = function connector(options) {
dbOptions.migrations = { directory: path.resolve(__dirname, 'migrations') };
dbOptions.seeds = { directory: path.resolve(__dirname, 'seeds') };
- var knex = knexModule(dbOptions);
+ const knex = knexModule(dbOptions);
/* eslint-disable no-console */
knex.migrate
- .latest()
+ .latest({ loadExtensions: ['.js'] })
.then(function () {
- return knex.seed.run();
+ return knex.seed.run({ loadExtensions: ['.js'] });
})
.then(function () {
console.log(' \x1b[0;32m[Done]\x1b[0m Migrations are finished\n');
@@ -27,4 +28,4 @@ module.exports = function connector(options) {
/* eslint-enable no-console */
return knex;
-};
+}
diff --git a/packages/redux-devtools-cli/src/db/migrations/index.js b/packages/redux-devtools-cli/src/db/migrations/index.ts
similarity index 95%
rename from packages/redux-devtools-cli/src/db/migrations/index.js
rename to packages/redux-devtools-cli/src/db/migrations/index.ts
index 6d0beb8d..2795edc3 100644
--- a/packages/redux-devtools-cli/src/db/migrations/index.js
+++ b/packages/redux-devtools-cli/src/db/migrations/index.ts
@@ -1,4 +1,6 @@
-exports.up = function (knex) {
+import type knexModule from 'knex';
+
+export function up(knex: knexModule) {
return Promise.all([
knex.schema.createTable('remotedev_reports', function (table) {
table.uuid('id').primary();
@@ -75,11 +77,11 @@ exports.up = function (knex) {
.onUpdate('CASCADE');
}),
]);
-};
+}
-exports.down = function (knex) {
+export function down(knex: knexModule) {
return Promise.all([
knex.schema.dropTable('remotedev_reports'),
knex.schema.dropTable('remotedev_apps'),
]);
-};
+}
diff --git a/packages/redux-devtools-cli/src/db/seeds/index.js b/packages/redux-devtools-cli/src/db/seeds/index.ts
similarity index 74%
rename from packages/redux-devtools-cli/src/db/seeds/index.js
rename to packages/redux-devtools-cli/src/db/seeds/index.ts
index a829ef67..85eb9266 100644
--- a/packages/redux-devtools-cli/src/db/seeds/index.js
+++ b/packages/redux-devtools-cli/src/db/seeds/index.ts
@@ -1,4 +1,6 @@
-exports.seed = function (knex) {
+import type knexModule from 'knex';
+
+export function seed(knex: knexModule) {
return Promise.all([knex('remotedev_apps').del()]).then(function () {
return Promise.all([
knex('remotedev_apps').insert({
@@ -7,4 +9,4 @@ exports.seed = function (knex) {
}),
]);
});
-};
+}
diff --git a/packages/redux-devtools-cli/src/getport.ts b/packages/redux-devtools-cli/src/getport.ts
new file mode 100644
index 00000000..dc6dc87f
--- /dev/null
+++ b/packages/redux-devtools-cli/src/getport.ts
@@ -0,0 +1,6 @@
+declare module 'getport' {
+ export default function getport(
+ start: number,
+ callback: (e: Error | undefined, port: number) => void
+ ): void;
+}
diff --git a/packages/redux-devtools-cli/index.js b/packages/redux-devtools-cli/src/index.ts
similarity index 53%
rename from packages/redux-devtools-cli/index.js
rename to packages/redux-devtools-cli/src/index.ts
index 71c5cd5b..4b042f89 100644
--- a/packages/redux-devtools-cli/index.js
+++ b/packages/redux-devtools-cli/src/index.ts
@@ -1,19 +1,29 @@
-var getPort = require('getport');
-var SocketCluster = require('socketcluster');
-var getOptions = require('./src/options');
+import getPort from 'getport';
+import SocketCluster from 'socketcluster';
+import getOptions, { Options } from './options';
// var LOG_LEVEL_NONE = 0;
-var LOG_LEVEL_ERROR = 1;
-var LOG_LEVEL_WARN = 2;
-var LOG_LEVEL_INFO = 3;
+const LOG_LEVEL_ERROR = 1;
+const LOG_LEVEL_WARN = 2;
+const LOG_LEVEL_INFO = 3;
-module.exports = function (argv) {
- var options = Object.assign(getOptions(argv), {
- workerController: __dirname + '/src/worker.js',
+export interface ExtendedOptions extends Options {
+ workerController: string;
+ allowClientPublish: boolean;
+}
+
+export default function (argv: {
+ [arg: string]: any;
+}): Promise<{
+ portAlreadyUsed?: boolean;
+ on: (status: 'ready', cb: () => void) => void;
+}> {
+ const options = Object.assign(getOptions(argv), {
+ workerController: __dirname + '/worker.js',
allowClientPublish: false,
});
- var port = options.port;
- var logLevel =
+ const port = options.port;
+ const logLevel =
options.logLevel === undefined ? LOG_LEVEL_INFO : options.logLevel;
return new Promise(function (resolve) {
// Check port already used
@@ -27,13 +37,11 @@ module.exports = function (argv) {
}
if (port !== p) {
if (logLevel >= LOG_LEVEL_WARN) {
- console.log(
- '[ReduxDevTools] Server port ' + port + ' is already used.'
- );
+ console.log(`[ReduxDevTools] Server port ${port} is already used.`);
}
resolve({
portAlreadyUsed: true,
- on: function (status, cb) {
+ on: function (status: string, cb: () => void) {
cb();
},
});
@@ -47,4 +55,4 @@ module.exports = function (argv) {
/* eslint-enable no-console */
});
});
-};
+}
diff --git a/packages/redux-devtools-cli/src/middleware/graphiql.js b/packages/redux-devtools-cli/src/middleware/graphiql.js
deleted file mode 100644
index 75ddf747..00000000
--- a/packages/redux-devtools-cli/src/middleware/graphiql.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var graphiqlExpress = require('graphql-server-express').graphiqlExpress;
-
-module.exports = graphiqlExpress({
- endpointURL: '/graphql',
- query:
- '{\n' +
- ' reports {\n' +
- ' id,\n' +
- ' type,\n' +
- ' title\n' +
- ' }\n' +
- '}',
-});
diff --git a/packages/redux-devtools-cli/src/middleware/graphql.js b/packages/redux-devtools-cli/src/middleware/graphql.js
deleted file mode 100644
index 8a518439..00000000
--- a/packages/redux-devtools-cli/src/middleware/graphql.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var graphqlExpress = require('graphql-server-express').graphqlExpress;
-var schema = require('../api/schema');
-
-module.exports = function (store) {
- return graphqlExpress(function () {
- return {
- schema: schema,
- context: {
- store: store,
- },
- };
- });
-};
diff --git a/packages/redux-devtools-cli/src/middleware/graphql.ts b/packages/redux-devtools-cli/src/middleware/graphql.ts
new file mode 100644
index 00000000..4bf5b00f
--- /dev/null
+++ b/packages/redux-devtools-cli/src/middleware/graphql.ts
@@ -0,0 +1,28 @@
+import { ApolloServer } from 'apollo-server-express';
+import schema from '../api/schema';
+import { Store } from '../store';
+
+export default function (store: Store) {
+ return new ApolloServer({
+ schema,
+ context: {
+ store: store,
+ },
+ playground: {
+ endpoint: '/graphql',
+ tabs: [
+ {
+ endpoint: '/graphql',
+ query:
+ '{\n' +
+ ' reports {\n' +
+ ' id,\n' +
+ ' type,\n' +
+ ' title\n' +
+ ' }\n' +
+ '}',
+ },
+ ],
+ },
+ });
+}
diff --git a/packages/redux-devtools-cli/src/options.js b/packages/redux-devtools-cli/src/options.js
deleted file mode 100644
index dbf5049e..00000000
--- a/packages/redux-devtools-cli/src/options.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var path = require('path');
-
-module.exports = function getOptions(argv) {
- var dbOptions = argv.dbOptions;
- if (typeof dbOptions === 'string') {
- dbOptions = require(path.resolve(process.cwd(), argv.dbOptions));
- } else if (typeof dbOptions === 'undefined') {
- dbOptions = require('../defaultDbOptions.json');
- }
-
- return {
- host: argv.hostname || process.env.npm_package_remotedev_hostname || null,
- port: Number(argv.port || process.env.npm_package_remotedev_port) || 8000,
- protocol:
- argv.protocol || process.env.npm_package_remotedev_protocol || 'http',
- protocolOptions: !(argv.protocol === 'https')
- ? null
- : {
- key: argv.key || process.env.npm_package_remotedev_key || null,
- cert: argv.cert || process.env.npm_package_remotedev_cert || null,
- passphrase:
- argv.passphrase ||
- process.env.npm_package_remotedev_passphrase ||
- null,
- },
- dbOptions: dbOptions,
- maxRequestBody: argv.passphrase || '16mb',
- logHTTPRequests: argv.logHTTPRequests,
- logLevel: argv.logLevel || 3,
- wsEngine:
- argv.wsEngine || process.env.npm_package_remotedev_wsengine || 'ws',
- };
-};
diff --git a/packages/redux-devtools-cli/src/options.ts b/packages/redux-devtools-cli/src/options.ts
new file mode 100644
index 00000000..fed19ca5
--- /dev/null
+++ b/packages/redux-devtools-cli/src/options.ts
@@ -0,0 +1,63 @@
+import path from 'path';
+
+interface ProtocolOptions {
+ key: string | undefined;
+ cert: string | undefined;
+ passphrase: string | undefined;
+}
+
+interface DbOptions {
+ client: string;
+ connection: {
+ filename: string;
+ };
+ useNullAsDefault: boolean;
+ debug: boolean;
+ migrate: boolean;
+}
+
+export interface Options {
+ host: string | undefined;
+ port: number;
+ protocol: 'http' | 'https';
+ protocolOptions: ProtocolOptions | undefined;
+ dbOptions: DbOptions;
+ maxRequestBody: string;
+ logHTTPRequests?: boolean;
+ logLevel: 0 | 1 | 3 | 2;
+ wsEngine: string;
+}
+
+export default function getOptions(argv: { [arg: string]: any }): Options {
+ let dbOptions = argv.dbOptions;
+ if (typeof dbOptions === 'string') {
+ dbOptions = require(path.resolve(process.cwd(), argv.dbOptions));
+ } else if (typeof dbOptions === 'undefined') {
+ dbOptions = require('../defaultDbOptions.json');
+ }
+
+ return {
+ host:
+ argv.hostname || process.env.npm_package_remotedev_hostname || undefined,
+ port: Number(argv.port || process.env.npm_package_remotedev_port) || 8000,
+ protocol:
+ argv.protocol || process.env.npm_package_remotedev_protocol || 'http',
+ protocolOptions: !(argv.protocol === 'https')
+ ? undefined
+ : {
+ key: argv.key || process.env.npm_package_remotedev_key || undefined,
+ cert:
+ argv.cert || process.env.npm_package_remotedev_cert || undefined,
+ passphrase:
+ argv.passphrase ||
+ process.env.npm_package_remotedev_passphrase ||
+ undefined,
+ },
+ dbOptions: dbOptions,
+ maxRequestBody: argv.passphrase || '16mb',
+ logHTTPRequests: argv.logHTTPRequests,
+ logLevel: argv.logLevel || 3,
+ wsEngine:
+ argv.wsEngine || process.env.npm_package_remotedev_wsengine || 'ws',
+ };
+}
diff --git a/packages/redux-devtools-cli/src/routes.js b/packages/redux-devtools-cli/src/routes.ts
similarity index 67%
rename from packages/redux-devtools-cli/src/routes.js
rename to packages/redux-devtools-cli/src/routes.ts
index dcacadaa..686fa5d8 100644
--- a/packages/redux-devtools-cli/src/routes.js
+++ b/packages/redux-devtools-cli/src/routes.ts
@@ -1,14 +1,15 @@
-var path = require('path');
-var express = require('express');
-var morgan = require('morgan');
-var bodyParser = require('body-parser');
-var cors = require('cors');
-var graphiqlMiddleware = require('./middleware/graphiql');
-var graphqlMiddleware = require('./middleware/graphql');
+import path from 'path';
+import express from 'express';
+import morgan from 'morgan';
+import bodyParser from 'body-parser';
+import cors from 'cors';
+import { SCServer } from 'socketcluster-server';
+import graphqlMiddleware from './middleware/graphql';
+import { ReportBaseFields, Store } from './store';
-var app = express.Router();
+const app = express.Router();
-function serveUmdModule(name) {
+function serveUmdModule(name: string) {
app.use(
express.static(
path.dirname(require.resolve(name + '/package.json')) + '/umd'
@@ -16,9 +17,13 @@ function serveUmdModule(name) {
);
}
-function routes(options, store, scServer) {
- var limit = options.maxRequestBody;
- var logHTTPRequests = options.logHTTPRequests;
+function routes(
+ options: SCServer.SCServerOptions,
+ store: Store,
+ scServer: SCServer
+) {
+ const limit = options.maxRequestBody;
+ const logHTTPRequests = options.logHTTPRequests;
if (logHTTPRequests) {
if (typeof logHTTPRequests === 'object')
@@ -26,14 +31,16 @@ function routes(options, store, scServer) {
else app.use(morgan('combined'));
}
- app.use('/graphiql', graphiqlMiddleware);
+ graphqlMiddleware(store).applyMiddleware({ app } as {
+ app: express.Application;
+ });
serveUmdModule('react');
serveUmdModule('react-dom');
serveUmdModule('redux-devtools-core');
app.get('/port.js', function (req, res) {
- res.send('reduxDevToolsPort = ' + options.port);
+ res.send(`reduxDevToolsPort = ${options.port!}`);
});
app.get('*', function (req, res) {
res.sendFile(path.join(__dirname, '../app/index.html'));
@@ -43,8 +50,6 @@ function routes(options, store, scServer) {
app.use(bodyParser.json({ limit: limit }));
app.use(bodyParser.urlencoded({ limit: limit, extended: false }));
- app.use('/graphql', graphqlMiddleware(store));
-
app.post('/', function (req, res) {
if (!req.body) return res.status(404).end();
switch (req.body.op) {
@@ -74,7 +79,10 @@ function routes(options, store, scServer) {
store
.add(req.body)
.then(function (r) {
- res.send({ id: r.id, error: r.error });
+ res.send({
+ id: (r as ReportBaseFields).id,
+ error: (r as { error: string }).error,
+ });
scServer.exchange.publish('report', {
type: 'add',
data: r,
@@ -89,4 +97,4 @@ function routes(options, store, scServer) {
return app;
}
-module.exports = routes;
+export default routes;
diff --git a/packages/redux-devtools-cli/src/store.js b/packages/redux-devtools-cli/src/store.js
deleted file mode 100644
index 3d2df8f4..00000000
--- a/packages/redux-devtools-cli/src/store.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var { v4: uuidV4 } = require('uuid');
-var pick = require('lodash/pick');
-var connector = require('./db/connector');
-
-var reports = 'remotedev_reports';
-// var payloads = 'remotedev_payloads';
-var knex;
-
-var baseFields = ['id', 'title', 'added'];
-
-function error(msg) {
- return new Promise(function (resolve) {
- return resolve({ error: msg });
- });
-}
-
-function list(query, fields) {
- var r = knex.select(fields || baseFields).from(reports);
- if (query) return r.where(query);
- return r;
-}
-
-function listAll(query) {
- var r = knex.select().from(reports);
- if (query) return r.where(query);
- return r;
-}
-
-function get(id) {
- if (!id) return error('No id specified.');
-
- return knex(reports).where('id', id).first();
-}
-
-function add(data) {
- if (!data.type || !data.payload) {
- return error("Required parameters aren't specified.");
- }
- if (data.type !== 'ACTIONS' && data.type !== 'STATE') {
- return error('Type ' + data.type + ' is not supported yet.');
- }
-
- var reportId = uuidV4();
- var report = {
- id: reportId,
- type: data.type,
- title:
- data.title || (data.exception && data.exception.message) || data.action,
- description: data.description,
- action: data.action,
- payload: data.payload,
- preloadedState: data.preloadedState,
- screenshot: data.screenshot,
- version: data.version,
- userAgent: data.userAgent,
- user: data.user,
- userId: typeof data.user === 'object' ? data.user.id : data.user,
- instanceId: data.instanceId,
- meta: data.meta,
- exception: composeException(data.exception),
- added: new Date().toISOString(),
- };
- if (data.appId) report.appId = data.appId; // TODO check if the id exists and we have access to link it
- /*
- var payload = {
- id: uuid.v4(),
- reportId: reportId,
- state: data.payload
- };
- */
-
- return knex
- .insert(report)
- .into(reports)
- .then(function () {
- return byBaseFields(report);
- });
-}
-
-function byBaseFields(data) {
- return pick(data, baseFields);
-}
-
-function createStore(options) {
- knex = connector(options);
-
- return {
- list: list,
- listAll: listAll,
- get: get,
- add: add,
- };
-}
-
-function composeException(exception) {
- var message = '';
-
- if (exception) {
- message = 'Exception thrown: ';
- if (exception.message) message += exception.message;
- if (exception.stack) message += '\n' + exception.stack;
- }
- return message;
-}
-
-module.exports = createStore;
diff --git a/packages/redux-devtools-cli/src/store.ts b/packages/redux-devtools-cli/src/store.ts
new file mode 100644
index 00000000..01f3f61f
--- /dev/null
+++ b/packages/redux-devtools-cli/src/store.ts
@@ -0,0 +1,164 @@
+import { v4 as uuidV4 } from 'uuid';
+import pick from 'lodash/pick';
+import { SCServer } from 'socketcluster-server';
+import knexModule from 'knex';
+import connector from './db/connector';
+
+const reports = 'remotedev_reports';
+// var payloads = 'remotedev_payloads';
+let knex: knexModule;
+
+const baseFields = ['id', 'title', 'added'];
+
+function error(msg: string): Promise<{ error: string }> {
+ return new Promise(function (resolve) {
+ return resolve({ error: msg });
+ });
+}
+
+type ReportType = 'STATE' | 'ACTION' | 'STATES' | 'ACTIONS';
+
+interface Report {
+ id: string;
+ type: ReportType | null;
+ title: string | null;
+ description: string | null;
+ action: string | null;
+ payload: string;
+ preloadedState: string | null;
+ screenshot: string | null;
+ userAgent: string | null;
+ version: string | null;
+ userId: string | null;
+ user: string | null;
+ meta: string | null;
+ exception: string | null;
+ instanceId: string | null;
+ added: string | null;
+ appId?: string | null;
+}
+
+export interface ReportBaseFields {
+ id: string;
+ title: string | null;
+ added: string | null;
+}
+
+function list(query?: unknown, fields?: string[]): Promise {
+ const r = knex.select(fields || baseFields).from(reports);
+ if (query) return r.where(query);
+ return r;
+}
+
+function listAll(query: unknown): Promise {
+ const r = knex.select().from(reports);
+ if (query) return r.where(query);
+ return r;
+}
+
+function get(id: string): Promise {
+ if (!id) return error('No id specified.');
+
+ return knex(reports).where('id', id).first();
+}
+
+interface AddData {
+ type: ReportType | null;
+ title: string | null;
+ description: string | null;
+ action: string | null;
+ payload: string;
+ preloadedState: string | null;
+ screenshot: string | null;
+ version: string | null;
+ userAgent: string | null;
+ userId: string | null;
+ user: { id: string } | string | null;
+ instanceId: string | null;
+ meta: string | null;
+ exception?: Error;
+ appId?: string | null;
+}
+
+function add(data: AddData): Promise {
+ if (!data.type || !data.payload) {
+ return error("Required parameters aren't specified.");
+ }
+ if (data.type !== 'ACTIONS' && data.type !== 'STATE') {
+ return error('Type ' + data.type + ' is not supported yet.');
+ }
+
+ const reportId = uuidV4();
+ const report: Report = {
+ id: reportId,
+ type: data.type,
+ title:
+ data.title || (data.exception && data.exception.message) || data.action,
+ description: data.description,
+ action: data.action,
+ payload: data.payload,
+ preloadedState: data.preloadedState,
+ screenshot: data.screenshot,
+ version: data.version,
+ userAgent: data.userAgent,
+ user: data.user as string,
+ userId:
+ typeof data.user === 'object'
+ ? (data.user as { id: string }).id
+ : data.user,
+ instanceId: data.instanceId,
+ meta: data.meta,
+ exception: composeException(data.exception),
+ added: new Date().toISOString(),
+ };
+ if (data.appId) report.appId = data.appId; // TODO check if the id exists and we have access to link it
+ /*
+ var payload = {
+ id: uuid.v4(),
+ reportId: reportId,
+ state: data.payload
+ };
+ */
+
+ return knex
+ .insert(report)
+ .into(reports)
+ .then(function () {
+ return byBaseFields(report);
+ });
+}
+
+function byBaseFields(data: Report): ReportBaseFields {
+ return pick(data, baseFields) as ReportBaseFields;
+}
+
+export interface Store {
+ list: (query?: unknown, fields?: string[]) => Promise;
+ listAll: (query?: unknown) => Promise;
+ get: (id: string) => Promise;
+ add: (data: AddData) => Promise;
+}
+
+function createStore(options: SCServer.SCServerOptions): Store {
+ knex = connector(options);
+
+ return {
+ list: list,
+ listAll: listAll,
+ get: get,
+ add: add,
+ };
+}
+
+function composeException(exception: Error | undefined) {
+ let message = '';
+
+ if (exception) {
+ message = 'Exception thrown: ';
+ if (exception.message) message += exception.message;
+ if (exception.stack) message += '\n' + exception.stack;
+ }
+ return message;
+}
+
+export default createStore;
diff --git a/packages/redux-devtools-cli/src/utils/requireSchema.js b/packages/redux-devtools-cli/src/utils/requireSchema.js
deleted file mode 100644
index 08d0a75b..00000000
--- a/packages/redux-devtools-cli/src/utils/requireSchema.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var fs = require('fs');
-
-module.exports = function (name, require) {
- return fs.readFileSync(require.resolve(name)).toString();
- // return GraphQL.buildSchema(schema);
-};
diff --git a/packages/redux-devtools-cli/src/worker.js b/packages/redux-devtools-cli/src/worker.ts
similarity index 72%
rename from packages/redux-devtools-cli/src/worker.js
rename to packages/redux-devtools-cli/src/worker.ts
index 3bf0929a..4c1e3fa3 100644
--- a/packages/redux-devtools-cli/src/worker.js
+++ b/packages/redux-devtools-cli/src/worker.ts
@@ -1,23 +1,24 @@
-var SCWorker = require('socketcluster/scworker');
-var express = require('express');
-var app = express();
-var routes = require('./routes');
-var createStore = require('./store');
+import SCWorker from 'socketcluster/scworker';
+import express from 'express';
+import routes from './routes';
+import createStore from './store';
+
+const app = express();
class Worker extends SCWorker {
run() {
- var httpServer = this.httpServer;
- var scServer = this.scServer;
- var options = this.options;
- var store = createStore(options);
+ const httpServer = this.httpServer;
+ const scServer = this.scServer;
+ const options = this.options;
+ const store = createStore(options);
httpServer.on('request', app);
app.use(routes(options, store, scServer));
scServer.addMiddleware(scServer.MIDDLEWARE_EMIT, function (req, next) {
- var channel = req.event;
- var data = req.data;
+ const channel = req.event;
+ const data = req.data;
if (
channel.substr(0, 3) === 'sc-' ||
channel === 'respond' ||
@@ -36,7 +37,7 @@ class Worker extends SCWorker {
store
.list()
.then(function (data) {
- req.socket.emit(req.channel, { type: 'list', data: data });
+ req.socket.emit(req.channel!, { type: 'list', data: data });
})
.catch(function (error) {
console.error(error); // eslint-disable-line no-console
@@ -45,8 +46,8 @@ class Worker extends SCWorker {
});
scServer.on('connection', function (socket) {
- var channelToWatch, channelToEmit;
- socket.on('login', function (credentials, respond) {
+ let channelToWatch: string, channelToEmit: string;
+ socket.on('login', function (this: Worker, credentials, respond) {
if (credentials === 'master') {
channelToWatch = 'respond';
channelToEmit = 'log';
@@ -69,8 +70,8 @@ class Worker extends SCWorker {
console.error(error); // eslint-disable-line no-console
});
});
- socket.on('disconnect', function () {
- var channel = this.exchange.channel('sc-' + socket.id);
+ socket.on('disconnect', function (this: Worker) {
+ const channel = this.exchange.channel('sc-' + socket.id);
channel.unsubscribe();
channel.destroy();
scServer.exchange.publish(channelToEmit, {
diff --git a/packages/redux-devtools-cli/test/integration.spec.js b/packages/redux-devtools-cli/test/integration.spec.js
deleted file mode 100644
index c70556e3..00000000
--- a/packages/redux-devtools-cli/test/integration.spec.js
+++ /dev/null
@@ -1,199 +0,0 @@
-var childProcess = require('child_process');
-var request = require('supertest');
-var scClient = require('socketcluster-client');
-
-describe('Server', function () {
- var scServer;
- beforeAll(function (done) {
- scServer = childProcess.fork(__dirname + '/../bin/redux-devtools.js');
- setTimeout(done, 3000);
- });
-
- afterAll(function () {
- if (scServer) {
- scServer.kill();
- }
- });
-
- describe('Express backend', function () {
- it('loads main page', function (done) {
- request('http://localhost:8000')
- .get('/')
- .expect('Content-Type', /text\/html/)
- .expect(200)
- .then(function (res) {
- expect(res.text).toMatch(/Redux DevTools<\/title>/);
- done();
- });
- });
-
- it('resolves an inexistent url', function (done) {
- request('http://localhost:8000/jreerfr/123')
- .get('/')
- .expect('Content-Type', /text\/html/)
- .expect(200, done);
- });
- });
-
- describe('Realtime monitoring', function () {
- var socket, socket2, channel;
- beforeAll(function () {
- socket = scClient.connect({ hostname: 'localhost', port: 8000 });
- socket.connect();
- socket.on('error', function (error) {
- console.error('Socket1 error', error); // eslint-disable-line no-console
- });
- socket2 = scClient.connect({ hostname: 'localhost', port: 8000 });
- socket2.connect();
- socket.on('error', function (error) {
- console.error('Socket2 error', error); // eslint-disable-line no-console
- });
- });
-
- afterAll(function () {
- socket.disconnect();
- socket2.disconnect();
- });
-
- it('should connect', function (done) {
- socket.on('connect', function (status) {
- expect(status.id).toBeTruthy();
- done();
- });
- });
-
- it('should login', function () {
- socket.emit('login', 'master', function (error, channelName) {
- if (error) {
- /* eslint-disable-next-line no-console */
- console.log(error);
- return;
- }
- expect(channelName).toBe('respond');
- channel = socket.subscribe(channelName);
- expect(channel.SUBSCRIBED).toBe('subscribed');
- });
- });
-
- it('should send message', function (done) {
- var data = {
- type: 'ACTION',
- payload: {
- todos: 'do some',
- },
- action: {
- timestamp: 1483349708506,
- action: {
- type: 'ADD_TODO',
- text: 'hggg',
- },
- },
- instanceId: 'tAmA7H5fclyWhvizAAAi',
- name: 'LoggerInstance',
- id: 'tAmA7H5fclyWhvizAAAi',
- };
-
- socket2.emit('login', '', function (error, channelName) {
- if (error) {
- /* eslint-disable-next-line no-console */
- console.log(error);
- return;
- }
- expect(channelName).toBe('log');
- var channel2 = socket2.subscribe(channelName);
- expect(channel2.SUBSCRIBED).toBe('subscribed');
- channel2.on('subscribe', function () {
- channel2.watch(function (message) {
- expect(message).toEqual(data);
- done();
- });
- socket.emit(channelName, data);
- });
- });
- });
- });
-
- describe('REST backend', function () {
- var id;
- var report = {
- type: 'ACTIONS',
- title: 'Test report',
- description: 'Test body report',
- action: 'SOME_FINAL_ACTION',
- payload: '[{"type":"ADD_TODO","text":"hi"},{"type":"SOME_FINAL_ACTION"}]',
- preloadedState:
- '{"todos":[{"text":"Use Redux","completed":false,"id":0}]}',
- userAgent:
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) ' +
- 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
- };
- it('should add a report', function (done) {
- request('http://localhost:8000')
- .post('/')
- .send(report)
- .set('Accept', 'application/json')
- .expect('Content-Type', /application\/json/)
- .expect(200)
- .then(function (res) {
- id = res.body.id;
- expect(id).toBeTruthy();
- done();
- });
- });
-
- it('should get the report', function (done) {
- request('http://localhost:8000')
- .post('/')
- .send({
- op: 'get',
- id: id,
- })
- .set('Accept', 'application/json')
- .expect('Content-Type', /application\/json/)
- .expect(200)
- .then(function (res) {
- expect.objectContaining(res.body, report);
- done();
- });
- });
-
- it('should list reports', function (done) {
- request('http://localhost:8000')
- .post('/')
- .send({
- op: 'list',
- })
- .set('Accept', 'application/json')
- .expect('Content-Type', /application\/json/)
- .expect(200)
- .then(function (res) {
- expect(res.body.length).toBe(1);
- expect(res.body[0].id).toBe(id);
- expect(res.body[0].title).toBe('Test report');
- expect(res.body[0].added).toBeTruthy();
- done();
- });
- });
- });
-
- describe('GraphQL backend', function () {
- it('should get the report', function (done) {
- request('http://localhost:8000')
- .post('/graphql')
- .send({
- query: '{ reports { id, type, title } }',
- })
- .set('Accept', 'application/json')
- .expect('Content-Type', /application\/json/)
- .expect(200)
- .then(function (res) {
- var reports = res.body.data.reports;
- expect(reports.length).toBe(1);
- expect(reports[0].id).toBeTruthy();
- expect(reports[0].title).toBe('Test report');
- expect(reports[0].type).toBe('ACTIONS');
- done();
- });
- });
- });
-});
diff --git a/packages/redux-devtools-cli/test/integration.spec.ts b/packages/redux-devtools-cli/test/integration.spec.ts
new file mode 100644
index 00000000..ed2c04c6
--- /dev/null
+++ b/packages/redux-devtools-cli/test/integration.spec.ts
@@ -0,0 +1,241 @@
+import childProcess from 'child_process';
+import request from 'supertest';
+import scClient from 'socketcluster-client';
+
+describe('Server', function () {
+ let scServer: childProcess.ChildProcess;
+ beforeAll(function (done) {
+ scServer = childProcess.fork(__dirname + '/../bin/redux-devtools.js');
+ setTimeout(done, 3000);
+ });
+
+ afterAll(function () {
+ if (scServer) {
+ scServer.kill();
+ }
+ });
+
+ describe('Express backend', function () {
+ it('loads main page', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000')
+ .get('/')
+ .expect('Content-Type', /text\/html/)
+ .expect(200)
+ .then(function (res: { text: string }) {
+ expect(res.text).toMatch(/Redux DevTools<\/title>/);
+ done();
+ });
+ });
+ });
+
+ it('resolves an inexistent url', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000/jreerfr/123')
+ .get('/')
+ .expect('Content-Type', /text\/html/)
+ .expect(200, done);
+ });
+ });
+ });
+
+ describe('Realtime monitoring', function () {
+ let socket: scClient.SCClientSocket,
+ socket2: scClient.SCClientSocket,
+ channel;
+ beforeAll(function () {
+ socket = scClient.connect({ hostname: 'localhost', port: 8000 });
+ socket.connect();
+ socket.on('error', function (error) {
+ console.error('Socket1 error', error); // eslint-disable-line no-console
+ });
+ socket2 = scClient.connect({ hostname: 'localhost', port: 8000 });
+ socket2.connect();
+ socket.on('error', function (error) {
+ console.error('Socket2 error', error); // eslint-disable-line no-console
+ });
+ });
+
+ afterAll(function () {
+ socket.disconnect();
+ socket2.disconnect();
+ });
+
+ it('should connect', function () {
+ return new Promise((done) => {
+ socket.on('connect', function (status) {
+ expect(status.id).toBeTruthy();
+ done();
+ });
+ });
+ });
+
+ it('should login', function () {
+ socket.emit('login', 'master', function (
+ error: Error | undefined,
+ channelName: string
+ ) {
+ if (error) {
+ /* eslint-disable-next-line no-console */
+ console.log(error);
+ return;
+ }
+ expect(channelName).toBe('respond');
+ channel = socket.subscribe(channelName);
+ expect(channel.SUBSCRIBED).toBe('subscribed');
+ });
+ });
+
+ it('should send message', function () {
+ return new Promise((done) => {
+ const data = {
+ type: 'ACTION',
+ payload: {
+ todos: 'do some',
+ },
+ action: {
+ timestamp: 1483349708506,
+ action: {
+ type: 'ADD_TODO',
+ text: 'hggg',
+ },
+ },
+ instanceId: 'tAmA7H5fclyWhvizAAAi',
+ name: 'LoggerInstance',
+ id: 'tAmA7H5fclyWhvizAAAi',
+ };
+
+ socket2.emit('login', '', function (
+ error: Error | undefined,
+ channelName: string
+ ) {
+ if (error) {
+ /* eslint-disable-next-line no-console */
+ console.log(error);
+ return;
+ }
+ expect(channelName).toBe('log');
+ const channel2 = socket2.subscribe(channelName);
+ expect(channel2.SUBSCRIBED).toBe('subscribed');
+ channel2.on('subscribe', function () {
+ channel2.watch(function (message) {
+ expect(message).toEqual(data);
+ done();
+ });
+ socket.emit(channelName, data);
+ });
+ });
+ });
+ });
+ });
+
+ describe('REST backend', function () {
+ let id: string;
+ const report = {
+ type: 'ACTIONS',
+ title: 'Test report',
+ description: 'Test body report',
+ action: 'SOME_FINAL_ACTION',
+ payload: '[{"type":"ADD_TODO","text":"hi"},{"type":"SOME_FINAL_ACTION"}]',
+ preloadedState:
+ '{"todos":[{"text":"Use Redux","completed":false,"id":0}]}',
+ userAgent:
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) ' +
+ 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
+ };
+ it('should add a report', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000')
+ .post('/')
+ .send(report)
+ .set('Accept', 'application/json')
+ .expect('Content-Type', /application\/json/)
+ .expect(200)
+ .then(function (res: { body: { id: string } }) {
+ id = res.body.id;
+ expect(id).toBeTruthy();
+ done();
+ });
+ });
+ });
+
+ it('should get the report', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000')
+ .post('/')
+ .send({
+ op: 'get',
+ id: id,
+ })
+ .set('Accept', 'application/json')
+ .expect('Content-Type', /application\/json/)
+ .expect(200)
+ .then(function (res: { body: unknown }) {
+ expect(res.body).toMatchObject(report);
+ done();
+ });
+ });
+ });
+
+ it('should list reports', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000')
+ .post('/')
+ .send({
+ op: 'list',
+ })
+ .set('Accept', 'application/json')
+ .expect('Content-Type', /application\/json/)
+ .expect(200)
+ .then(function (res: {
+ body: { id: string; title: string | null; added: string | null }[];
+ }) {
+ expect(res.body).toHaveLength(1);
+ expect(res.body[0].id).toBe(id);
+ expect(res.body[0].title).toBe('Test report');
+ expect(res.body[0].added).toBeTruthy();
+ done();
+ });
+ });
+ });
+ });
+
+ describe('GraphQL backend', function () {
+ it('should get the report', function () {
+ return new Promise((done) => {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ request('http://localhost:8000')
+ .post('/graphql')
+ .send({
+ query: '{ reports { id, type, title } }',
+ })
+ .set('Accept', 'application/json')
+ .expect('Content-Type', /application\/json/)
+ .expect(200)
+ .then(function (res: {
+ body: {
+ data: {
+ reports: {
+ id: string;
+ title: string | null;
+ type: string | null;
+ }[];
+ };
+ };
+ }) {
+ const reports = res.body.data.reports;
+ expect(reports).toHaveLength(1);
+ expect(reports[0].id).toBeTruthy();
+ expect(reports[0].title).toBe('Test report');
+ expect(reports[0].type).toBe('ACTIONS');
+ done();
+ });
+ });
+ });
+ });
+});
diff --git a/packages/redux-devtools-cli/test/tsconfig.json b/packages/redux-devtools-cli/test/tsconfig.json
new file mode 100644
index 00000000..b55532d2
--- /dev/null
+++ b/packages/redux-devtools-cli/test/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "include": ["../src", "."]
+}
diff --git a/packages/redux-devtools-cli/tsconfig.json b/packages/redux-devtools-cli/tsconfig.json
new file mode 100644
index 00000000..1e20cd95
--- /dev/null
+++ b/packages/redux-devtools-cli/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "dist"
+ },
+ "include": ["src"]
+}
diff --git a/packages/redux-devtools-core/.babelrc b/packages/redux-devtools-core/.babelrc
index e60d3036..0d42ef44 100644
--- a/packages/redux-devtools-core/.babelrc
+++ b/packages/redux-devtools-core/.babelrc
@@ -1,4 +1,8 @@
{
- "presets": ["@babel/preset-env", "@babel/preset-react"],
+ "presets": [
+ "@babel/preset-env",
+ "@babel/preset-react",
+ "@babel/preset-typescript"
+ ],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
diff --git a/packages/redux-devtools-core/.eslintignore b/packages/redux-devtools-core/.eslintignore
new file mode 100644
index 00000000..79681bfb
--- /dev/null
+++ b/packages/redux-devtools-core/.eslintignore
@@ -0,0 +1,2 @@
+lib
+umd
diff --git a/packages/redux-devtools-core/.eslintrc.js b/packages/redux-devtools-core/.eslintrc.js
new file mode 100644
index 00000000..ce28cd35
--- /dev/null
+++ b/packages/redux-devtools-core/.eslintrc.js
@@ -0,0 +1,29 @@
+module.exports = {
+ extends: '../../.eslintrc',
+ overrides: [
+ {
+ files: ['*.ts', '*.tsx'],
+ extends: '../../eslintrc.ts.react.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./tsconfig.json'],
+ },
+ },
+ {
+ files: ['test/*.ts', 'test/*.tsx'],
+ extends: '../../eslintrc.ts.react.jest.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./test/tsconfig.json'],
+ },
+ },
+ {
+ files: ['webpack.config.ts', 'webpack.config.umd.ts'],
+ extends: '../../eslintrc.ts.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./tsconfig.webpack.json'],
+ },
+ },
+ ],
+};
diff --git a/packages/redux-devtools-test-generator/jest.config.js b/packages/redux-devtools-core/jest.config.js
similarity index 100%
rename from packages/redux-devtools-test-generator/jest.config.js
rename to packages/redux-devtools-core/jest.config.js
diff --git a/packages/redux-devtools-core/package.json b/packages/redux-devtools-core/package.json
index e9042930..a51cebe3 100644
--- a/packages/redux-devtools-core/package.json
+++ b/packages/redux-devtools-core/package.json
@@ -2,47 +2,78 @@
"name": "redux-devtools-core",
"version": "1.0.0-4",
"description": "Reusable functions of Redux DevTools",
- "scripts": {
- "start": "webpack-dev-server --hot --inline --env.development --env.platform=web --progress",
- "build:web": "rimraf ./build/web && webpack -p --env.platform=web --progress",
- "build:umd": "rimraf ./umd && webpack --progress --config webpack.config.umd.js",
- "build:umd:min": "webpack --env.production --progress --config webpack.config.umd.js",
- "build": "rimraf ./lib && babel ./src/app --out-dir lib",
- "clean": "rimraf lib",
- "test": "jest --no-cache",
- "prepare": "npm run build && npm run build:umd && npm run build:umd:min",
- "prepublishOnly": "npm run test && npm run build && npm run build:umd && npm run build:umd:min"
+ "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-core",
+ "bugs": {
+ "url": "https://github.com/reduxjs/redux-devtools/issues"
},
- "main": "lib/index.js",
+ "license": "MIT",
+ "author": "Mihail Diordiev (https://github.com/zalmoxisus)",
"files": [
"src",
"lib",
"umd"
],
- "jest": {
- "setupFilesAfterEnv": [
- "/test/setup.js"
- ],
- "moduleNameMapper": {
- "\\.(css|scss)$": "/test/__mocks__/styleMock.js"
- }
- },
+ "main": "lib/index.js",
+ "types": "lib/index.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/reduxjs/redux-devtools.git"
},
- "author": "Mihail Diordiev (https://github.com/zalmoxisus)",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/reduxjs/redux-devtools/issues"
+ "scripts": {
+ "start": "webpack-dev-server --hot --inline --env.development --env.platform=web --progress",
+ "build": "npm run build:types && npm run build:js && npm run build:web && npm run build:umd && npm run build:umd:min",
+ "build:types": "tsc --emitDeclarationOnly",
+ "build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline",
+ "build:web": "rimraf ./build/web && webpack -p --env.platform=web --progress",
+ "build:umd": "rimraf ./umd && webpack --progress --config webpack.config.umd.ts",
+ "build:umd:min": "webpack --env.production --progress --config webpack.config.umd.ts",
+ "clean": "rimraf lib",
+ "test": "jest",
+ "lint": "eslint . --ext .ts,.tsx",
+ "lint:fix": "eslint . --ext .ts,.tsx --fix",
+ "type-check": "tsc --noEmit",
+ "type-check:watch": "npm run type-check -- --watch",
+ "preversion": "npm run type-check && npm run lint && npm run test",
+ "prepublishOnly": "npm run clean && npm run build"
+ },
+ "dependencies": {
+ "d3-state-visualizer": "^1.3.4",
+ "devui": "^1.0.0-6",
+ "get-params": "^0.1.2",
+ "immutable": "^4.0.0-rc.12",
+ "javascript-stringify": "^2.0.1",
+ "jsan": "^3.1.13",
+ "jsondiffpatch": "^0.4.1",
+ "localforage": "^1.9.0",
+ "lodash": "^4.17.19",
+ "nanoid": "^3.1.12",
+ "prop-types": "^15.7.2",
+ "react-icons": "^3.10.0",
+ "react-is": "^16.13.1",
+ "react-redux": "^7.2.1",
+ "redux": "^4.0.5",
+ "redux-devtools": "^3.7.0",
+ "redux-devtools-chart-monitor": "^1.7.2",
+ "redux-devtools-inspector-monitor": "^0.14.0",
+ "redux-devtools-inspector-monitor-test-tab": "^0.6.2",
+ "redux-devtools-inspector-monitor-trace-tab": "^0.1.3",
+ "redux-devtools-instrument": "^1.10.0",
+ "redux-devtools-log-monitor": "^2.1.0",
+ "redux-devtools-serialize": "^0.2.0",
+ "redux-devtools-slider-monitor": "^2.0.0-5",
+ "redux-persist": "^4.10.2",
+ "socketcluster-client": "^14.3.1",
+ "styled-components": "^5.1.1"
},
- "homepage": "https://github.com/reduxjs/redux-devtools",
"devDependencies": {
"@babel/cli": "^7.10.5",
"@babel/core": "^7.11.1",
"@babel/plugin-proposal-class-properties": "^7.10.4",
"@babel/preset-env": "^7.11.0",
"@babel/preset-react": "^7.10.4",
+ "@rjsf/core": "^2.4.0",
+ "@types/json-schema": "^7.0.6",
+ "@types/socketcluster-client": "^13.0.3",
"babel-loader": "^8.1.0",
"css-loader": "^4.2.1",
"enzyme": "^3.11.0",
@@ -62,34 +93,6 @@
"webpack-dev-server": "^3.11.0",
"webpack-hot-middleware": "^2.25.0"
},
- "dependencies": {
- "d3-state-visualizer": "^1.3.4",
- "devui": "^1.0.0-6",
- "get-params": "^0.1.2",
- "javascript-stringify": "^2.0.1",
- "jsan": "^3.1.13",
- "jsondiffpatch": "^0.4.1",
- "localforage": "^1.9.0",
- "lodash": "^4.17.19",
- "nanoid": "^3.1.12",
- "prop-types": "^15.7.2",
- "react-icons": "^3.10.0",
- "react-is": "^16.13.1",
- "react-redux": "^7.2.1",
- "redux": "^4.0.5",
- "redux-devtools": "^3.7.0",
- "redux-devtools-chart-monitor": "^1.7.2",
- "redux-devtools-inspector-monitor": "^0.14.0",
- "redux-devtools-instrument": "^1.10.0",
- "redux-devtools-log-monitor": "^2.1.0",
- "redux-devtools-serialize": "^0.2.0",
- "redux-devtools-slider-monitor": "^2.0.0-5",
- "redux-devtools-test-generator": "^0.6.2",
- "redux-devtools-trace-monitor": "^0.1.3",
- "redux-persist": "^4.10.2",
- "socketcluster-client": "^14.3.1",
- "styled-components": "^5.1.1"
- },
"peerDependencies": {
"react": "^16.3.0"
}
diff --git a/packages/redux-devtools-core/src/app/actions/index.js b/packages/redux-devtools-core/src/app/actions/index.js
deleted file mode 100644
index 9e568444..00000000
--- a/packages/redux-devtools-core/src/app/actions/index.js
+++ /dev/null
@@ -1,122 +0,0 @@
-import {
- CHANGE_SECTION,
- CHANGE_THEME,
- SELECT_INSTANCE,
- SELECT_MONITOR,
- UPDATE_MONITOR_STATE,
- LIFTED_ACTION,
- MONITOR_ACTION,
- EXPORT,
- TOGGLE_SYNC,
- TOGGLE_SLIDER,
- TOGGLE_DISPATCHER,
- TOGGLE_PERSIST,
- GET_REPORT_REQUEST,
- SHOW_NOTIFICATION,
- CLEAR_NOTIFICATION,
-} from '../constants/actionTypes';
-import { RECONNECT } from '../constants/socketActionTypes';
-
-let monitorReducer;
-let monitorProps = {};
-
-export function changeSection(section) {
- return { type: CHANGE_SECTION, section };
-}
-
-export function changeTheme(data) {
- return { type: CHANGE_THEME, ...data.formData };
-}
-
-export function liftedDispatch(action) {
- if (action.type[0] === '@') {
- if (action.type === '@@INIT_MONITOR') {
- monitorReducer = action.update;
- monitorProps = action.monitorProps;
- }
- return { type: MONITOR_ACTION, action, monitorReducer, monitorProps };
- }
- return { type: LIFTED_ACTION, message: 'DISPATCH', action };
-}
-
-export function selectInstance(selected) {
- return { type: SELECT_INSTANCE, selected };
-}
-
-export function selectMonitor(monitor) {
- return { type: SELECT_MONITOR, monitor };
-}
-
-export function selectMonitorWithState(value, monitorState) {
- return { type: SELECT_MONITOR, monitor: value, monitorState };
-}
-
-export function selectMonitorTab(subTabName) {
- return { type: UPDATE_MONITOR_STATE, nextState: { subTabName } };
-}
-
-export function updateMonitorState(nextState) {
- return { type: UPDATE_MONITOR_STATE, nextState };
-}
-
-export function importState(state, preloadedState) {
- return { type: LIFTED_ACTION, message: 'IMPORT', state, preloadedState };
-}
-
-export function exportState() {
- return { type: EXPORT };
-}
-
-export function lockChanges(status) {
- return {
- type: LIFTED_ACTION,
- message: 'DISPATCH',
- action: { type: 'LOCK_CHANGES', status },
- toAll: true,
- };
-}
-
-export function pauseRecording(status) {
- return {
- type: LIFTED_ACTION,
- message: 'DISPATCH',
- action: { type: 'PAUSE_RECORDING', status },
- toAll: true,
- };
-}
-
-export function dispatchRemotely(action) {
- return { type: LIFTED_ACTION, message: 'ACTION', action };
-}
-
-export function togglePersist() {
- return { type: TOGGLE_PERSIST };
-}
-
-export function toggleSync() {
- return { type: TOGGLE_SYNC };
-}
-
-export function toggleSlider() {
- return { type: TOGGLE_SLIDER };
-}
-
-export function toggleDispatcher() {
- return { type: TOGGLE_DISPATCHER };
-}
-
-export function saveSocketSettings(options) {
- return { type: RECONNECT, options };
-}
-
-export function showNotification(message) {
- return { type: SHOW_NOTIFICATION, notification: { type: 'error', message } };
-}
-
-export function clearNotification() {
- return { type: CLEAR_NOTIFICATION };
-}
-
-export function getReport(report) {
- return { type: GET_REPORT_REQUEST, report };
-}
diff --git a/packages/redux-devtools-core/src/app/actions/index.ts b/packages/redux-devtools-core/src/app/actions/index.ts
new file mode 100644
index 00000000..10617a12
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/actions/index.ts
@@ -0,0 +1,573 @@
+import { Scheme, Theme } from 'devui';
+import { AuthStates, States } from 'socketcluster-client/lib/scclientsocket';
+import {
+ CHANGE_SECTION,
+ CHANGE_THEME,
+ SELECT_INSTANCE,
+ SELECT_MONITOR,
+ UPDATE_MONITOR_STATE,
+ LIFTED_ACTION,
+ MONITOR_ACTION,
+ EXPORT,
+ TOGGLE_SYNC,
+ TOGGLE_SLIDER,
+ TOGGLE_DISPATCHER,
+ TOGGLE_PERSIST,
+ GET_REPORT_REQUEST,
+ SHOW_NOTIFICATION,
+ CLEAR_NOTIFICATION,
+ UPDATE_STATE,
+ UPDATE_REPORTS,
+ REMOVE_INSTANCE,
+ SET_STATE,
+ GET_REPORT_ERROR,
+ GET_REPORT_SUCCESS,
+ ERROR,
+} from '../constants/actionTypes';
+import {
+ AUTH_ERROR,
+ AUTH_REQUEST,
+ AUTH_SUCCESS,
+ CONNECT_ERROR,
+ CONNECT_REQUEST,
+ CONNECT_SUCCESS,
+ DEAUTHENTICATE,
+ DISCONNECTED,
+ EMIT,
+ RECONNECT,
+ SUBSCRIBE_ERROR,
+ SUBSCRIBE_REQUEST,
+ SUBSCRIBE_SUCCESS,
+ UNSUBSCRIBE,
+} from '../constants/socketActionTypes';
+import { Action } from 'redux';
+import { Features, State } from '../reducers/instances';
+import { MonitorStateMonitorState } from '../reducers/monitor';
+import { LiftedAction } from 'redux-devtools-instrument';
+import { Data } from '../reducers/reports';
+
+let monitorReducer: (
+ monitorProps: unknown,
+ state: unknown | undefined,
+ action: Action
+) => unknown;
+let monitorProps: unknown = {};
+
+interface ChangeSectionAction {
+ readonly type: typeof CHANGE_SECTION;
+ readonly section: string;
+}
+export function changeSection(section: string): ChangeSectionAction {
+ return { type: CHANGE_SECTION, section };
+}
+
+interface ChangeThemeFormData {
+ readonly theme: Theme;
+ readonly scheme: Scheme;
+ readonly dark: boolean;
+}
+interface ChangeThemeData {
+ readonly formData: ChangeThemeFormData;
+}
+interface ChangeThemeAction {
+ readonly type: typeof CHANGE_THEME;
+ readonly theme: Theme;
+ readonly scheme: Scheme;
+ readonly dark: boolean;
+}
+export function changeTheme(data: ChangeThemeData): ChangeThemeAction {
+ return { type: CHANGE_THEME, ...data.formData };
+}
+
+export interface InitMonitorAction {
+ type: '@@INIT_MONITOR';
+ newMonitorState: unknown;
+ update: (
+ monitorProps: unknown,
+ state: unknown | undefined,
+ action: Action
+ ) => unknown;
+ monitorProps: unknown;
+}
+export interface MonitorActionAction {
+ type: typeof MONITOR_ACTION;
+ action: InitMonitorAction;
+ monitorReducer: (
+ monitorProps: unknown,
+ state: unknown | undefined,
+ action: Action
+ ) => unknown;
+ monitorProps: unknown;
+}
+export interface JumpToStateAction {
+ type: 'JUMP_TO_STATE';
+ index: number;
+ actionId: number;
+}
+export interface JumpToActionAction {
+ type: 'JUMP_TO_ACTION';
+ index: number;
+ actionId: number;
+}
+export interface PauseRecordingAction {
+ type: 'PAUSE_RECORDING';
+ status: boolean;
+}
+export interface LockChangesAction {
+ type: 'LOCK_CHANGES';
+ status: boolean;
+}
+export interface ToggleActionAction {
+ type: 'TOGGLE_ACTION';
+}
+export interface RollbackAction {
+ type: 'ROLLBACK';
+}
+export interface SweepAction {
+ type: 'SWEEP';
+}
+export type DispatchAction =
+ | JumpToStateAction
+ | JumpToActionAction
+ | PauseRecordingAction
+ | LockChangesAction
+ | ToggleActionAction
+ | RollbackAction
+ | SweepAction;
+interface LiftedActionActionBase {
+ action?: DispatchAction | string | CustomAction;
+ state?: string;
+ toAll?: boolean;
+}
+export interface LiftedActionDispatchAction extends LiftedActionActionBase {
+ type: typeof LIFTED_ACTION;
+ message: 'DISPATCH';
+ action: DispatchAction;
+ toAll?: boolean;
+}
+interface LiftedActionImportAction extends LiftedActionActionBase {
+ type: typeof LIFTED_ACTION;
+ message: 'IMPORT';
+ state: string;
+ preloadedState: unknown | undefined;
+}
+interface LiftedActionActionAction extends LiftedActionActionBase {
+ type: typeof LIFTED_ACTION;
+ message: 'ACTION';
+ action: string | CustomAction;
+}
+interface LiftedActionExportAction extends LiftedActionActionBase {
+ type: typeof LIFTED_ACTION;
+ message: 'EXPORT';
+ toExport: boolean;
+}
+export type LiftedActionAction =
+ | LiftedActionDispatchAction
+ | LiftedActionImportAction
+ | LiftedActionActionAction
+ | LiftedActionExportAction;
+export function liftedDispatch(
+ action:
+ | InitMonitorAction
+ | JumpToStateAction
+ | JumpToActionAction
+ | LiftedAction, unknown>
+): MonitorActionAction | LiftedActionDispatchAction {
+ if (action.type[0] === '@') {
+ if (action.type === '@@INIT_MONITOR') {
+ monitorReducer = action.update;
+ monitorProps = action.monitorProps;
+ }
+ return {
+ type: MONITOR_ACTION,
+ action,
+ monitorReducer,
+ monitorProps,
+ } as MonitorActionAction;
+ }
+ return {
+ type: LIFTED_ACTION,
+ message: 'DISPATCH',
+ action,
+ } as LiftedActionDispatchAction;
+}
+
+interface SelectInstanceAction {
+ type: typeof SELECT_INSTANCE;
+ selected: string;
+}
+export function selectInstance(selected: string): SelectInstanceAction {
+ return { type: SELECT_INSTANCE, selected };
+}
+
+interface SelectMonitorAction {
+ type: typeof SELECT_MONITOR;
+ monitor: string;
+ monitorState?: MonitorStateMonitorState;
+}
+export function selectMonitor(monitor: string): SelectMonitorAction {
+ return { type: SELECT_MONITOR, monitor };
+}
+export function selectMonitorWithState(
+ value: string,
+ monitorState: MonitorStateMonitorState
+): SelectMonitorAction {
+ return { type: SELECT_MONITOR, monitor: value, monitorState };
+}
+
+interface NextState {
+ subTabName: string;
+ inspectedStatePath?: string[];
+}
+interface UpdateMonitorStateAction {
+ type: typeof UPDATE_MONITOR_STATE;
+ nextState: NextState;
+}
+export function selectMonitorTab(subTabName: string): UpdateMonitorStateAction {
+ return { type: UPDATE_MONITOR_STATE, nextState: { subTabName } };
+}
+
+export function updateMonitorState(
+ nextState: NextState
+): UpdateMonitorStateAction {
+ return { type: UPDATE_MONITOR_STATE, nextState };
+}
+
+export function importState(
+ state: string,
+ preloadedState?: unknown
+): LiftedActionImportAction {
+ return { type: LIFTED_ACTION, message: 'IMPORT', state, preloadedState };
+}
+
+interface ExportAction {
+ type: typeof EXPORT;
+}
+export function exportState(): ExportAction {
+ return { type: EXPORT };
+}
+
+export function lockChanges(status: boolean): LiftedActionDispatchAction {
+ return {
+ type: LIFTED_ACTION,
+ message: 'DISPATCH',
+ action: { type: 'LOCK_CHANGES', status },
+ toAll: true,
+ };
+}
+
+export function pauseRecording(status: boolean): LiftedActionDispatchAction {
+ return {
+ type: LIFTED_ACTION,
+ message: 'DISPATCH',
+ action: { type: 'PAUSE_RECORDING', status },
+ toAll: true,
+ };
+}
+
+export interface CustomAction {
+ name: string;
+ selected: number;
+ args: (string | undefined)[];
+ rest: string;
+}
+export function dispatchRemotely(
+ action: string | CustomAction
+): LiftedActionActionAction {
+ return { type: LIFTED_ACTION, message: 'ACTION', action };
+}
+
+interface TogglePersistAction {
+ type: typeof TOGGLE_PERSIST;
+}
+export function togglePersist(): TogglePersistAction {
+ return { type: TOGGLE_PERSIST };
+}
+
+interface ToggleSyncAction {
+ type: typeof TOGGLE_SYNC;
+}
+export function toggleSync(): ToggleSyncAction {
+ return { type: TOGGLE_SYNC };
+}
+
+interface ToggleSliderAction {
+ type: typeof TOGGLE_SLIDER;
+}
+export function toggleSlider(): ToggleSliderAction {
+ return { type: TOGGLE_SLIDER };
+}
+
+interface ToggleDispatcherAction {
+ type: typeof TOGGLE_DISPATCHER;
+}
+export function toggleDispatcher(): ToggleDispatcherAction {
+ return { type: TOGGLE_DISPATCHER };
+}
+
+export type ConnectionType = 'disabled' | 'remotedev' | 'custom';
+export interface ConnectionOptions {
+ readonly type: ConnectionType;
+ readonly hostname: string;
+ readonly port: number;
+ readonly secure: boolean;
+}
+interface ReconnectAction {
+ readonly type: typeof RECONNECT;
+ readonly options: ConnectionOptions;
+}
+export function saveSocketSettings(
+ options: ConnectionOptions
+): ReconnectAction {
+ return { type: RECONNECT, options };
+}
+
+interface Notification {
+ readonly type: 'error';
+ readonly message: string;
+}
+interface ShowNotificationAction {
+ readonly type: typeof SHOW_NOTIFICATION;
+ readonly notification: Notification;
+}
+export function showNotification(message: string): ShowNotificationAction {
+ return { type: SHOW_NOTIFICATION, notification: { type: 'error', message } };
+}
+
+interface ClearNotificationAction {
+ readonly type: typeof CLEAR_NOTIFICATION;
+}
+export function clearNotification(): ClearNotificationAction {
+ return { type: CLEAR_NOTIFICATION };
+}
+
+interface GetReportRequest {
+ readonly type: typeof GET_REPORT_REQUEST;
+ readonly report: unknown;
+}
+export function getReport(report: unknown): GetReportRequest {
+ return { type: GET_REPORT_REQUEST, report };
+}
+
+export interface ActionCreator {
+ args: string[];
+ name: string;
+}
+
+interface LibConfig {
+ actionCreators?: string;
+ name?: string;
+ type?: string;
+ features?: Features;
+ serialize?: boolean;
+}
+
+export interface RequestBase {
+ id: string;
+ instanceId?: string;
+ action?: string;
+ name?: string;
+ libConfig?: LibConfig;
+ actionsById?: string;
+ computedStates?: string;
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ payload?: {} | string;
+ liftedState?: Partial;
+}
+interface InitRequest extends RequestBase {
+ type: 'INIT';
+ action: string;
+}
+interface ActionRequest extends RequestBase {
+ type: 'ACTION';
+ isExcess: boolean;
+ nextActionId: number;
+ maxAge: number;
+ batched: boolean;
+}
+interface StateRequest extends RequestBase {
+ type: 'STATE';
+ committedState: unknown;
+}
+interface PartialStateRequest extends RequestBase {
+ type: 'PARTIAL_STATE';
+ committedState: unknown;
+ maxAge: number;
+}
+interface LiftedRequest extends RequestBase {
+ type: 'LIFTED';
+}
+export interface ExportRequest extends RequestBase {
+ type: 'EXPORT';
+ committedState: unknown;
+}
+export type Request =
+ | InitRequest
+ | ActionRequest
+ | StateRequest
+ | PartialStateRequest
+ | LiftedRequest
+ | ExportRequest;
+
+interface UpdateStateAction {
+ type: typeof UPDATE_STATE;
+ request?: Request;
+ id?: string;
+}
+
+interface SetStateAction {
+ type: typeof SET_STATE;
+ newState: State;
+}
+
+interface RemoveInstanceAction {
+ type: typeof REMOVE_INSTANCE;
+ id: string;
+}
+
+interface ConnectRequestAction {
+ type: typeof CONNECT_REQUEST;
+ options: ConnectionOptions;
+}
+
+interface ConnectSuccessPayload {
+ id: string;
+ authState: AuthStates;
+ socketState: States;
+}
+interface ConnectSuccessAction {
+ type: typeof CONNECT_SUCCESS;
+ payload: ConnectSuccessPayload;
+ error: Error | undefined;
+}
+
+interface ConnectErrorAction {
+ type: typeof CONNECT_ERROR;
+ error: Error | undefined;
+}
+
+interface AuthRequestAction {
+ type: typeof AUTH_REQUEST;
+}
+
+interface AuthSuccessAction {
+ type: typeof AUTH_SUCCESS;
+ baseChannel: string;
+}
+
+interface AuthErrorAction {
+ type: typeof AUTH_ERROR;
+ error: Error;
+}
+
+interface DisconnectedAction {
+ type: typeof DISCONNECTED;
+ code: number;
+}
+
+interface DeauthenticateAction {
+ type: typeof DEAUTHENTICATE;
+}
+
+interface SubscribeRequestAction {
+ type: typeof SUBSCRIBE_REQUEST;
+ channel: string;
+ subscription: typeof UPDATE_STATE | typeof UPDATE_REPORTS;
+}
+
+interface SubscribeSuccessAction {
+ type: typeof SUBSCRIBE_SUCCESS;
+ channel: string;
+}
+
+interface SubscribeErrorAction {
+ type: typeof SUBSCRIBE_ERROR;
+ error: Error;
+ status: string;
+}
+
+interface UnsubscribeAction {
+ type: typeof UNSUBSCRIBE;
+ channel: string;
+}
+
+export interface EmitAction {
+ type: typeof EMIT;
+ message: string;
+ id?: string | false;
+ instanceId?: string;
+ action?: unknown;
+ state?: unknown;
+}
+
+interface ListRequest {
+ type: 'list';
+ data: Data[];
+}
+interface AddRequest {
+ type: 'add';
+ data: Data;
+}
+interface RemoveRequest {
+ type: 'remove';
+ data: Data;
+ id: unknown;
+}
+export type UpdateReportsRequest = ListRequest | AddRequest | RemoveRequest;
+interface UpdateReportsAction {
+ type: typeof UPDATE_REPORTS;
+ request: UpdateReportsRequest;
+}
+
+interface GetReportError {
+ type: typeof GET_REPORT_ERROR;
+ error: Error;
+}
+
+interface GetReportSuccess {
+ type: typeof GET_REPORT_SUCCESS;
+ data: { payload: string };
+}
+
+interface ErrorAction {
+ type: typeof ERROR;
+ payload: string;
+}
+
+export type StoreAction =
+ | ChangeSectionAction
+ | ChangeThemeAction
+ | MonitorActionAction
+ | LiftedActionAction
+ | SelectInstanceAction
+ | SelectMonitorAction
+ | UpdateMonitorStateAction
+ | ExportAction
+ | TogglePersistAction
+ | ToggleSyncAction
+ | ToggleSliderAction
+ | ToggleDispatcherAction
+ | ReconnectAction
+ | ShowNotificationAction
+ | ClearNotificationAction
+ | GetReportRequest
+ | SetStateAction
+ | UpdateStateAction
+ | RemoveInstanceAction
+ | ConnectRequestAction
+ | ConnectSuccessAction
+ | ConnectErrorAction
+ | AuthRequestAction
+ | AuthSuccessAction
+ | AuthErrorAction
+ | DisconnectedAction
+ | DeauthenticateAction
+ | SubscribeRequestAction
+ | SubscribeSuccessAction
+ | SubscribeErrorAction
+ | UnsubscribeAction
+ | EmitAction
+ | UpdateReportsAction
+ | GetReportError
+ | GetReportSuccess
+ | ErrorAction;
diff --git a/packages/redux-devtools-core/src/app/components/BottomButtons.js b/packages/redux-devtools-core/src/app/components/BottomButtons.tsx
similarity index 85%
rename from packages/redux-devtools-core/src/app/components/BottomButtons.js
rename to packages/redux-devtools-core/src/app/components/BottomButtons.tsx
index d7e0f33b..da8788a9 100644
--- a/packages/redux-devtools-core/src/app/components/BottomButtons.js
+++ b/packages/redux-devtools-core/src/app/components/BottomButtons.tsx
@@ -8,15 +8,22 @@ import PrintButton from './buttons/PrintButton';
import DispatcherButton from './buttons/DispatcherButton';
import SliderButton from './buttons/SliderButton';
import MonitorSelector from './MonitorSelector';
+import { Options } from '../reducers/instances';
-export default class BottomButtons extends Component {
+interface Props {
+ dispatcherIsOpen: boolean;
+ sliderIsOpen: boolean;
+ options: Options;
+}
+
+export default class BottomButtons extends Component {
static propTypes = {
dispatcherIsOpen: PropTypes.bool,
sliderIsOpen: PropTypes.bool,
options: PropTypes.object.isRequired,
};
- shouldComponentUpdate(nextProps) {
+ shouldComponentUpdate(nextProps: Props) {
return (
nextProps.dispatcherIsOpen !== this.props.dispatcherIsOpen ||
nextProps.sliderIsOpen !== this.props.sliderIsOpen ||
diff --git a/packages/redux-devtools-core/src/app/components/Header.js b/packages/redux-devtools-core/src/app/components/Header.tsx
similarity index 77%
rename from packages/redux-devtools-core/src/app/components/Header.js
rename to packages/redux-devtools-core/src/app/components/Header.tsx
index ff80d2b8..c9a42bd2 100644
--- a/packages/redux-devtools-core/src/app/components/Header.js
+++ b/packages/redux-devtools-core/src/app/components/Header.tsx
@@ -1,8 +1,6 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import { Tabs, Toolbar, Button, Divider } from 'devui';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { GoBook } from 'react-icons/go';
import { IoMdText } from 'react-icons/io';
import { TiSocialTwitter } from 'react-icons/ti';
@@ -11,13 +9,14 @@ import { changeSection } from '../actions';
const tabs = [{ name: 'Actions' }, { name: 'Reports' }, { name: 'Settings' }];
-class Header extends Component {
- static propTypes = {
- section: PropTypes.string.isRequired,
- changeSection: PropTypes.func.isRequired,
- };
+type DispatchProps = ResolveThunks;
+interface OwnProps {
+ readonly section: string;
+}
+type Props = DispatchProps & OwnProps;
- openLink = (url) => () => {
+class Header extends Component {
+ openLink = (url: string) => () => {
window.open(url);
};
@@ -69,10 +68,8 @@ class Header extends Component {
}
}
-function mapDispatchToProps(dispatch) {
- return {
- changeSection: bindActionCreators(changeSection, dispatch),
- };
-}
+const actionCreators = {
+ changeSection,
+};
-export default connect(null, mapDispatchToProps)(Header);
+export default connect(null, actionCreators)(Header);
diff --git a/packages/redux-devtools-core/src/app/components/InstanceSelector.js b/packages/redux-devtools-core/src/app/components/InstanceSelector.js
deleted file mode 100644
index 3cd30bac..00000000
--- a/packages/redux-devtools-core/src/app/components/InstanceSelector.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Select } from 'devui';
-import { selectInstance } from '../actions';
-
-class InstanceSelector extends Component {
- static propTypes = {
- selected: PropTypes.string,
- instances: PropTypes.object.isRequired,
- onSelect: PropTypes.func.isRequired,
- };
-
- render() {
- this.select = [{ value: '', label: 'Autoselect instances' }];
- const instances = this.props.instances;
- let name;
- Object.keys(instances).forEach((key) => {
- name = instances[key].name;
- if (name !== undefined)
- this.select.push({ value: key, label: instances[key].name });
- });
-
- return (
-
- );
- }
-}
-
-function mapStateToProps(state) {
- return {
- selected: state.instances.selected,
- instances: state.instances.options,
- };
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- onSelect: bindActionCreators(selectInstance, dispatch),
- };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(InstanceSelector);
diff --git a/packages/redux-devtools-core/src/app/components/InstanceSelector.tsx b/packages/redux-devtools-core/src/app/components/InstanceSelector.tsx
new file mode 100644
index 00000000..debe8524
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/InstanceSelector.tsx
@@ -0,0 +1,43 @@
+import React, { Component } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
+import { Select } from 'devui';
+import { selectInstance } from '../actions';
+import { StoreState } from '../reducers';
+
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+
+class InstanceSelector extends Component {
+ select?: { readonly value: string; readonly label: string }[];
+
+ render() {
+ this.select = [{ value: '', label: 'Autoselect instances' }];
+ const instances = this.props.instances;
+ let name;
+ Object.keys(instances).forEach((key) => {
+ name = instances[key].name;
+ if (name !== undefined) this.select!.push({ value: key, label: name });
+ });
+
+ return (
+
+ );
+ }
+}
+
+const mapStateToProps = (state: StoreState) => ({
+ selected: state.instances.selected,
+ instances: state.instances.options,
+});
+
+const actionCreators = {
+ onSelect: selectInstance,
+};
+
+export default connect(mapStateToProps, actionCreators)(InstanceSelector);
diff --git a/packages/redux-devtools-core/src/app/components/MonitorSelector.js b/packages/redux-devtools-core/src/app/components/MonitorSelector.js
deleted file mode 100644
index f0167385..00000000
--- a/packages/redux-devtools-core/src/app/components/MonitorSelector.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Tabs } from 'devui';
-import { monitors } from '../utils/getMonitor';
-import { selectMonitor } from '../actions';
-
-class MonitorSelector extends Component {
- static propTypes = {
- selected: PropTypes.string,
- selectMonitor: PropTypes.func.isRequired,
- };
-
- shouldComponentUpdate(nextProps) {
- return nextProps.selected !== this.props.selected;
- }
-
- render() {
- return (
-
- );
- }
-}
-
-function mapStateToProps(state) {
- return {
- selected: state.monitor.selected,
- };
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- selectMonitor: bindActionCreators(selectMonitor, dispatch),
- };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(MonitorSelector);
diff --git a/packages/redux-devtools-core/src/app/components/MonitorSelector.tsx b/packages/redux-devtools-core/src/app/components/MonitorSelector.tsx
new file mode 100644
index 00000000..e606008b
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/MonitorSelector.tsx
@@ -0,0 +1,39 @@
+import React, { Component } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
+import { Tabs } from 'devui';
+import { monitors } from '../utils/getMonitor';
+import { selectMonitor } from '../actions';
+import { StoreState } from '../reducers';
+
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+
+class MonitorSelector extends Component {
+ shouldComponentUpdate(nextProps: Props) {
+ return nextProps.selected !== this.props.selected;
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+const mapStateToProps = (state: StoreState) => ({
+ selected: state.monitor.selected,
+});
+
+const actionCreators = {
+ selectMonitor,
+};
+
+export default connect(mapStateToProps, actionCreators)(MonitorSelector);
diff --git a/packages/redux-devtools-core/src/app/components/Settings/Connection.js b/packages/redux-devtools-core/src/app/components/Settings/Connection.tsx
similarity index 55%
rename from packages/redux-devtools-core/src/app/components/Settings/Connection.js
rename to packages/redux-devtools-core/src/app/components/Settings/Connection.tsx
index cb46281e..9b1e1ac9 100644
--- a/packages/redux-devtools-core/src/app/components/Settings/Connection.js
+++ b/packages/redux-devtools-core/src/app/components/Settings/Connection.tsx
@@ -1,11 +1,32 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Container, Form } from 'devui';
-import { saveSocketSettings } from '../../actions';
+import {
+ JSONSchema7,
+ JSONSchema7Definition,
+ JSONSchema7Type,
+ JSONSchema7TypeName,
+} from 'json-schema';
+import { ConnectionType, saveSocketSettings } from '../../actions';
+import { StoreState } from '../../reducers';
+import { ConnectionOptions } from '../../reducers/connection';
+import { IChangeEvent, ISubmitEvent } from '@rjsf/core';
-const defaultSchema = {
+declare module 'json-schema' {
+ export interface JSONSchema7 {
+ enumNames?: JSONSchema7Type[];
+ }
+}
+
+interface Schema {
+ type: JSONSchema7TypeName;
+ required?: string[];
+ properties: {
+ [key: string]: JSONSchema7Definition;
+ };
+}
+
+const defaultSchema: Schema = {
type: 'object',
required: [],
properties: {
@@ -37,37 +58,24 @@ const uiSchema = {
},
};
-class Connection extends Component {
- static propTypes = {
- saveSettings: PropTypes.func.isRequired,
- options: PropTypes.object.isRequired,
- type: PropTypes.string,
- };
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
- constructor(props) {
- super(props);
- this.state = this.setFormData(props.type);
- }
+interface FormData extends ConnectionOptions {
+ readonly type: ConnectionType;
+}
- shouldComponentUpdate(nextProps, nextState) {
- return this.state !== nextState;
- }
+interface State {
+ readonly formData: FormData;
+ readonly type: ConnectionType;
+ readonly schema: Schema;
+ readonly changed: boolean | undefined;
+}
- UNSAFE_componentWillReceiveProps(nextProps) {
- if (this.props.options !== nextProps.options) {
- this.setState({
- formData: { ...nextProps.options, type: nextProps.type },
- });
- }
- }
-
- handleSave = (data) => {
- this.props.saveSettings(data.formData);
- this.setState({ changed: false });
- };
-
- setFormData = (type, changed) => {
- let schema;
+export class Connection extends Component {
+ setFormData = (type: ConnectionType, changed?: boolean) => {
+ let schema: Schema;
if (type !== 'custom') {
schema = {
type: 'object',
@@ -87,7 +95,26 @@ class Connection extends Component {
};
};
- handleChange = (data) => {
+ state: State = this.setFormData(this.props.type);
+
+ shouldComponentUpdate(nextProps: Props, nextState: State) {
+ return this.state !== nextState;
+ }
+
+ UNSAFE_componentWillReceiveProps(nextProps: Props) {
+ if (this.props.options !== nextProps.options) {
+ this.setState({
+ formData: { ...nextProps.options, type: nextProps.type },
+ });
+ }
+ }
+
+ handleSave = (data: ISubmitEvent) => {
+ this.props.saveSettings(data.formData);
+ this.setState({ changed: false });
+ };
+
+ handleChange = (data: IChangeEvent) => {
const formData = data.formData;
const type = formData.type;
if (type !== this.state.type) {
@@ -119,14 +146,10 @@ class Connection extends Component {
}
}
-function mapStateToProps(state) {
- return state.connection;
-}
+const mapStateToProps = (state: StoreState) => state.connection;
-function mapDispatchToProps(dispatch) {
- return {
- saveSettings: bindActionCreators(saveSocketSettings, dispatch),
- };
-}
+const actionCreators = {
+ saveSettings: saveSocketSettings,
+};
-export default connect(mapStateToProps, mapDispatchToProps)(Connection);
+export default connect(mapStateToProps, actionCreators)(Connection);
diff --git a/packages/redux-devtools-core/src/app/components/Settings/Themes.js b/packages/redux-devtools-core/src/app/components/Settings/Themes.tsx
similarity index 64%
rename from packages/redux-devtools-core/src/app/components/Settings/Themes.js
rename to packages/redux-devtools-core/src/app/components/Settings/Themes.tsx
index e528dd55..7762454e 100644
--- a/packages/redux-devtools-core/src/app/components/Settings/Themes.js
+++ b/packages/redux-devtools-core/src/app/components/Settings/Themes.tsx
@@ -1,17 +1,15 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Container, Form } from 'devui';
import { listSchemes, listThemes } from 'devui/lib/utils/theme';
import { changeTheme } from '../../actions';
+import { StoreState } from '../../reducers';
-class Themes extends Component {
- static propTypes = {
- changeTheme: PropTypes.func.isRequired,
- theme: PropTypes.object.isRequired,
- };
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+export class Themes extends Component {
render() {
const theme = this.props.theme;
const formData = {
@@ -49,16 +47,12 @@ class Themes extends Component {
}
}
-function mapStateToProps(state) {
- return {
- theme: state.theme,
- };
-}
+const mapStateToProps = (state: StoreState) => ({
+ theme: state.theme,
+});
-function mapDispatchToProps(dispatch) {
- return {
- changeTheme: bindActionCreators(changeTheme, dispatch),
- };
-}
+const actionCreators = {
+ changeTheme,
+};
-export default connect(mapStateToProps, mapDispatchToProps)(Themes);
+export default connect(mapStateToProps, actionCreators)(Themes);
diff --git a/packages/redux-devtools-core/src/app/components/Settings/index.js b/packages/redux-devtools-core/src/app/components/Settings/index.js
deleted file mode 100644
index 47b62874..00000000
--- a/packages/redux-devtools-core/src/app/components/Settings/index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React, { Component } from 'react';
-import { Tabs } from 'devui';
-import Connection from './Connection';
-import Themes from './Themes';
-
-class Settings extends Component {
- constructor(props) {
- super(props);
- this.tabs = [
- { name: 'Connection', component: Connection },
- { name: 'Themes', component: Themes },
- ];
- this.state = { selected: 'Connection' };
- }
-
- handleSelect = (selected) => {
- this.setState({ selected });
- };
-
- render() {
- return (
-
- );
- }
-}
-
-export default Settings;
diff --git a/packages/redux-devtools-core/src/app/components/Settings/index.tsx b/packages/redux-devtools-core/src/app/components/Settings/index.tsx
new file mode 100644
index 00000000..ae18464a
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/Settings/index.tsx
@@ -0,0 +1,34 @@
+import React, { Component } from 'react';
+import { Tabs } from 'devui';
+import Connection from './Connection';
+import Themes from './Themes';
+
+interface State {
+ selected: string;
+}
+
+// eslint-disable-next-line @typescript-eslint/ban-types
+class Settings extends Component<{}, State> {
+ tabs = [
+ { name: 'Connection', component: Connection },
+ { name: 'Themes', component: Themes },
+ ];
+ state: State = { selected: 'Connection' };
+
+ handleSelect = (selected: string) => {
+ this.setState({ selected });
+ };
+
+ render() {
+ return (
+ // eslint-disable-next-line @typescript-eslint/ban-types
+
+ tabs={this.tabs as any}
+ selected={this.state.selected}
+ onClick={this.handleSelect}
+ />
+ );
+ }
+}
+
+export default Settings;
diff --git a/packages/redux-devtools-core/src/app/components/TopButtons.js b/packages/redux-devtools-core/src/app/components/TopButtons.tsx
similarity index 84%
rename from packages/redux-devtools-core/src/app/components/TopButtons.js
rename to packages/redux-devtools-core/src/app/components/TopButtons.tsx
index 7c2f3fc8..e183742a 100644
--- a/packages/redux-devtools-core/src/app/components/TopButtons.js
+++ b/packages/redux-devtools-core/src/app/components/TopButtons.tsx
@@ -1,16 +1,25 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { ActionCreators } from 'redux-devtools-instrument';
+import { ActionCreators, LiftedAction } from 'redux-devtools-instrument';
import { Button, Toolbar, Divider } from 'devui';
+import { Action } from 'redux';
import RecordButton from './buttons/RecordButton';
import PersistButton from './buttons/PersistButton';
import LockButton from './buttons/LockButton';
import InstanceSelector from './InstanceSelector';
import SyncButton from './buttons/SyncButton';
+import { Options, State } from '../reducers/instances';
+// eslint-disable-next-line @typescript-eslint/unbound-method
const { reset, rollback, commit, sweep } = ActionCreators;
-export default class TopButtons extends Component {
+interface Props {
+ dispatch: (action: LiftedAction, unknown>) => void;
+ liftedState: State;
+ options: Options;
+}
+
+export default class TopButtons extends Component {
static propTypes = {
// shouldSync: PropTypes.bool,
liftedState: PropTypes.object.isRequired,
@@ -18,7 +27,7 @@ export default class TopButtons extends Component {
options: PropTypes.object.isRequired,
};
- shouldComponentUpdate(nextProps) {
+ shouldComponentUpdate(nextProps: Props) {
return (
nextProps.options !== this.props.options ||
nextProps.liftedState !== this.props.liftedState
diff --git a/packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.js b/packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.tsx
similarity index 53%
rename from packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.tsx
index 77f054ae..f148f0c6 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/DispatcherButton.tsx
@@ -1,18 +1,17 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Button } from 'devui';
import { FaTerminal } from 'react-icons/fa';
import { toggleDispatcher } from '../../actions';
-class DispatcherButton extends Component {
- static propTypes = {
- dispatcherIsOpen: PropTypes.bool,
- toggleDispatcher: PropTypes.func.isRequired,
- };
+type DispatchProps = ResolveThunks;
+interface OwnProps {
+ dispatcherIsOpen: boolean;
+}
+type Props = DispatchProps & OwnProps;
- shouldComponentUpdate(nextProps) {
+class DispatcherButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.dispatcherIsOpen !== this.props.dispatcherIsOpen;
}
@@ -32,10 +31,8 @@ class DispatcherButton extends Component {
}
}
-function mapDispatchToProps(dispatch) {
- return {
- toggleDispatcher: bindActionCreators(toggleDispatcher, dispatch),
- };
-}
+const actionCreators = {
+ toggleDispatcher,
+};
-export default connect(null, mapDispatchToProps)(DispatcherButton);
+export default connect(null, actionCreators)(DispatcherButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/ExportButton.js b/packages/redux-devtools-core/src/app/components/buttons/ExportButton.js
deleted file mode 100644
index 92659c95..00000000
--- a/packages/redux-devtools-core/src/app/components/buttons/ExportButton.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Button } from 'devui';
-import { TiDownload } from 'react-icons/ti';
-import { exportState } from '../../actions';
-
-class ExportButton extends Component {
- static propTypes = {
- exportState: PropTypes.func.isRequired,
- };
-
- shouldComponentUpdate() {
- return false;
- }
-
- render() {
- return (
-
-
-
- );
- }
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- exportState: bindActionCreators(exportState, dispatch),
- };
-}
-
-export default connect(null, mapDispatchToProps)(ExportButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/ExportButton.tsx b/packages/redux-devtools-core/src/app/components/buttons/ExportButton.tsx
new file mode 100644
index 00000000..0276d94a
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/buttons/ExportButton.tsx
@@ -0,0 +1,28 @@
+import React, { Component } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
+import { Button } from 'devui';
+import { TiDownload } from 'react-icons/ti';
+import { exportState } from '../../actions';
+
+type DispatchProps = ResolveThunks;
+type Props = DispatchProps;
+
+class ExportButton extends Component {
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ render() {
+ return (
+
+
+
+ );
+ }
+}
+
+const actionCreators = {
+ exportState,
+};
+
+export default connect(null, actionCreators)(ExportButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/ImportButton.js b/packages/redux-devtools-core/src/app/components/buttons/ImportButton.js
deleted file mode 100644
index 89cd7d70..00000000
--- a/packages/redux-devtools-core/src/app/components/buttons/ImportButton.js
+++ /dev/null
@@ -1,64 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Button } from 'devui';
-import { TiUpload } from 'react-icons/ti';
-import { importState } from '../../actions';
-
-class ImportButton extends Component {
- static propTypes = {
- importState: PropTypes.func.isRequired,
- };
-
- constructor() {
- super();
- this.handleImport = this.handleImport.bind(this);
- this.handleImportFile = this.handleImportFile.bind(this);
- this.mapRef = this.mapRef.bind(this);
- }
-
- shouldComponentUpdate() {
- return false;
- }
-
- mapRef(node) {
- this.fileInput = node;
- }
-
- handleImport() {
- this.fileInput.click();
- }
-
- handleImportFile(e) {
- const file = e.target.files[0];
- const reader = new FileReader();
- reader.onload = () => {
- this.props.importState(reader.result);
- };
- reader.readAsText(file);
- e.target.value = ''; // eslint-disable-line no-param-reassign
- }
-
- render() {
- return (
-
-
-
-
- );
- }
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- importState: bindActionCreators(importState, dispatch),
- };
-}
-
-export default connect(null, mapDispatchToProps)(ImportButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/ImportButton.tsx b/packages/redux-devtools-core/src/app/components/buttons/ImportButton.tsx
new file mode 100644
index 00000000..0b33a042
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/buttons/ImportButton.tsx
@@ -0,0 +1,54 @@
+import React, { ChangeEventHandler, Component, RefCallback } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
+import { Button } from 'devui';
+import { TiUpload } from 'react-icons/ti';
+import { importState } from '../../actions';
+
+type DispatchProps = ResolveThunks;
+type Props = DispatchProps;
+
+class ImportButton extends Component {
+ fileInput?: HTMLInputElement | null;
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
+ mapRef: RefCallback = (node) => {
+ this.fileInput = node;
+ };
+
+ handleImport = () => {
+ this.fileInput!.click();
+ };
+
+ handleImportFile: ChangeEventHandler = (e) => {
+ const file = e.target.files![0];
+ const reader = new FileReader();
+ reader.onload = () => {
+ this.props.importState(reader.result as string);
+ };
+ reader.readAsText(file);
+ e.target.value = '';
+ };
+
+ render() {
+ return (
+
+
+
+
+ );
+ }
+}
+
+const actionCreators = {
+ importState,
+};
+
+export default connect(null, actionCreators)(ImportButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/LockButton.js b/packages/redux-devtools-core/src/app/components/buttons/LockButton.tsx
similarity index 60%
rename from packages/redux-devtools-core/src/app/components/buttons/LockButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/LockButton.tsx
index 0bd642f7..bf338f68 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/LockButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/LockButton.tsx
@@ -1,18 +1,19 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { Button } from 'devui';
import { IoIosLock } from 'react-icons/io';
-import { lockChanges } from '../../actions';
+import { lockChanges, StoreAction } from '../../actions';
+import { Dispatch } from 'redux';
-class LockButton extends Component {
- static propTypes = {
- locked: PropTypes.bool,
- disabled: PropTypes.bool,
- lockChanges: PropTypes.func.isRequired,
- };
+type DispatchProps = ReturnType;
+interface OwnProps {
+ locked: boolean | undefined;
+ disabled: boolean;
+}
+type Props = DispatchProps & OwnProps;
- shouldComponentUpdate(nextProps) {
+class LockButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.locked !== this.props.locked;
}
@@ -31,7 +32,10 @@ class LockButton extends Component {
}
}
-function mapDispatchToProps(dispatch, ownProps) {
+function mapDispatchToProps(
+ dispatch: Dispatch,
+ ownProps: OwnProps
+) {
return {
lockChanges: () => dispatch(lockChanges(!ownProps.locked)),
};
diff --git a/packages/redux-devtools-core/src/app/components/buttons/PersistButton.js b/packages/redux-devtools-core/src/app/components/buttons/PersistButton.tsx
similarity index 52%
rename from packages/redux-devtools-core/src/app/components/buttons/PersistButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/PersistButton.tsx
index da1c0590..e78349a5 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/PersistButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/PersistButton.tsx
@@ -1,26 +1,26 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Button } from 'devui';
import { FaThumbtack } from 'react-icons/fa';
import { togglePersist } from '../../actions';
+import { StoreState } from '../../reducers';
-class LockButton extends Component {
- static propTypes = {
- persisted: PropTypes.bool,
- disabled: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- };
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+interface OwnProps {
+ disabled?: boolean;
+}
+type Props = StateProps & DispatchProps & OwnProps;
- shouldComponentUpdate(nextProps) {
+class LockButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.persisted !== this.props.persisted;
}
render() {
return (
({
+ persisted: state.instances.persisted,
+});
-function mapDispatchToProps(dispatch) {
- return {
- onClick: bindActionCreators(togglePersist, dispatch),
- };
-}
+const actionCreators = {
+ onClick: togglePersist,
+};
-export default connect(mapStateToProps, mapDispatchToProps)(LockButton);
+export default connect(mapStateToProps, actionCreators)(LockButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/PrintButton.js b/packages/redux-devtools-core/src/app/components/buttons/PrintButton.tsx
similarity index 72%
rename from packages/redux-devtools-core/src/app/components/buttons/PrintButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/PrintButton.tsx
index dc55408c..ee272b69 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/PrintButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/PrintButton.tsx
@@ -7,8 +7,8 @@ export default class PrintButton extends Component {
return false;
}
- handlePrint() {
- const d3svg = document.getElementById('d3svg');
+ handlePrint = () => {
+ const d3svg = (document.getElementById('d3svg') as unknown) as SVGGElement;
if (!d3svg) {
window.print();
return;
@@ -17,11 +17,11 @@ export default class PrintButton extends Component {
const initHeight = d3svg.style.height;
const initWidth = d3svg.style.width;
const box = d3svg.getBBox();
- d3svg.style.height = box.height;
- d3svg.style.width = box.width;
+ d3svg.style.height = `${box.height}`;
+ d3svg.style.width = `${box.width}`;
- const g = d3svg.firstChild;
- const initTransform = g.getAttribute('transform');
+ const g = d3svg.firstChild! as SVGGElement;
+ const initTransform = g.getAttribute('transform')!;
g.setAttribute(
'transform',
initTransform.replace(/.+scale\(/, 'translate(57, 10) scale(')
@@ -32,7 +32,7 @@ export default class PrintButton extends Component {
d3svg.style.height = initHeight;
d3svg.style.width = initWidth;
g.setAttribute('transform', initTransform);
- }
+ };
render() {
return (
diff --git a/packages/redux-devtools-core/src/app/components/buttons/RecordButton.js b/packages/redux-devtools-core/src/app/components/buttons/RecordButton.tsx
similarity index 61%
rename from packages/redux-devtools-core/src/app/components/buttons/RecordButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/RecordButton.tsx
index a6a108dc..b120bb04 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/RecordButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/RecordButton.tsx
@@ -1,17 +1,18 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { Button } from 'devui';
import { MdFiberManualRecord } from 'react-icons/md';
-import { pauseRecording } from '../../actions';
+import { pauseRecording, StoreAction } from '../../actions';
+import { Dispatch } from 'redux';
-class RecordButton extends Component {
- static propTypes = {
- paused: PropTypes.bool,
- pauseRecording: PropTypes.func.isRequired,
- };
+type DispatchProps = ReturnType;
+interface OwnProps {
+ paused: boolean | undefined;
+}
+type Props = DispatchProps & OwnProps;
- shouldComponentUpdate(nextProps) {
+class RecordButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.paused !== this.props.paused;
}
@@ -29,7 +30,10 @@ class RecordButton extends Component {
}
}
-function mapDispatchToProps(dispatch, ownProps) {
+function mapDispatchToProps(
+ dispatch: Dispatch,
+ ownProps: OwnProps
+) {
return {
pauseRecording: () => dispatch(pauseRecording(!ownProps.paused)),
};
diff --git a/packages/redux-devtools-core/src/app/components/buttons/SliderButton.js b/packages/redux-devtools-core/src/app/components/buttons/SliderButton.tsx
similarity index 51%
rename from packages/redux-devtools-core/src/app/components/buttons/SliderButton.js
rename to packages/redux-devtools-core/src/app/components/buttons/SliderButton.tsx
index 21b842a6..2d86df26 100644
--- a/packages/redux-devtools-core/src/app/components/buttons/SliderButton.js
+++ b/packages/redux-devtools-core/src/app/components/buttons/SliderButton.tsx
@@ -1,18 +1,17 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Button } from 'devui';
import { MdAvTimer } from 'react-icons/md';
import { toggleSlider } from '../../actions';
-class SliderButton extends Component {
- static propTypes = {
- isOpen: PropTypes.bool,
- toggleSlider: PropTypes.func.isRequired,
- };
+type DispatchProps = ResolveThunks;
+interface OwnProps {
+ isOpen: boolean;
+}
+type Props = DispatchProps & OwnProps;
- shouldComponentUpdate(nextProps) {
+class SliderButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.isOpen !== this.props.isOpen;
}
@@ -30,10 +29,8 @@ class SliderButton extends Component {
}
}
-function mapDispatchToProps(dispatch) {
- return {
- toggleSlider: bindActionCreators(toggleSlider, dispatch),
- };
-}
+const actionCreators = {
+ toggleSlider,
+};
-export default connect(null, mapDispatchToProps)(SliderButton);
+export default connect(null, actionCreators)(SliderButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/SyncButton.js b/packages/redux-devtools-core/src/app/components/buttons/SyncButton.js
deleted file mode 100644
index ba37a1d1..00000000
--- a/packages/redux-devtools-core/src/app/components/buttons/SyncButton.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Button } from 'devui';
-import { TiArrowSync } from 'react-icons/ti';
-import { toggleSync } from '../../actions';
-
-class SyncButton extends Component {
- static propTypes = {
- sync: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- };
-
- shouldComponentUpdate(nextProps) {
- return nextProps.sync !== this.props.sync;
- }
-
- render() {
- return (
-
-
-
- );
- }
-}
-
-function mapStateToProps(state) {
- return {
- sync: state.instances.sync,
- };
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- onClick: bindActionCreators(toggleSync, dispatch),
- };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(SyncButton);
diff --git a/packages/redux-devtools-core/src/app/components/buttons/SyncButton.tsx b/packages/redux-devtools-core/src/app/components/buttons/SyncButton.tsx
new file mode 100644
index 00000000..5c8a8e4d
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/components/buttons/SyncButton.tsx
@@ -0,0 +1,39 @@
+import React, { Component } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
+import { Button } from 'devui';
+import { TiArrowSync } from 'react-icons/ti';
+import { toggleSync } from '../../actions';
+import { StoreState } from '../../reducers';
+
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+
+class SyncButton extends Component {
+ shouldComponentUpdate(nextProps: Props) {
+ return nextProps.sync !== this.props.sync;
+ }
+
+ render() {
+ return (
+
+
+
+ );
+ }
+}
+
+const mapStateToProps = (state: StoreState) => ({
+ sync: state.instances.sync,
+});
+
+const actionCreators = {
+ onClick: toggleSync,
+};
+
+export default connect(mapStateToProps, actionCreators)(SyncButton);
diff --git a/packages/redux-devtools-core/src/app/constants/actionTypes.js b/packages/redux-devtools-core/src/app/constants/actionTypes.ts
similarity index 100%
rename from packages/redux-devtools-core/src/app/constants/actionTypes.js
rename to packages/redux-devtools-core/src/app/constants/actionTypes.ts
diff --git a/packages/redux-devtools-core/src/app/constants/dataTypes.js b/packages/redux-devtools-core/src/app/constants/dataTypes.ts
similarity index 100%
rename from packages/redux-devtools-core/src/app/constants/dataTypes.js
rename to packages/redux-devtools-core/src/app/constants/dataTypes.ts
diff --git a/packages/redux-devtools-core/src/app/constants/socketActionTypes.js b/packages/redux-devtools-core/src/app/constants/socketActionTypes.ts
similarity index 78%
rename from packages/redux-devtools-core/src/app/constants/socketActionTypes.js
rename to packages/redux-devtools-core/src/app/constants/socketActionTypes.ts
index 95e00b6a..825dbb77 100644
--- a/packages/redux-devtools-core/src/app/constants/socketActionTypes.js
+++ b/packages/redux-devtools-core/src/app/constants/socketActionTypes.ts
@@ -1,5 +1,14 @@
import socketCluster from 'socketcluster-client';
+interface States {
+ CLOSED: 'closed';
+ CONNECTING: 'connecting';
+ OPEN: 'open';
+ AUTHENTICATED: 'authenticated';
+ PENDING: 'pending';
+ UNAUTHENTICATED: 'unauthenticated';
+}
+
export const {
CLOSED,
CONNECTING,
@@ -7,7 +16,7 @@ export const {
AUTHENTICATED,
PENDING,
UNAUTHENTICATED,
-} = socketCluster.SCClientSocket;
+} = (socketCluster.SCClientSocket as unknown) as States;
export const CONNECT_REQUEST = 'socket/CONNECT_REQUEST';
export const CONNECT_SUCCESS = 'socket/CONNECT_SUCCESS';
export const CONNECT_ERROR = 'socket/CONNECT_ERROR';
diff --git a/packages/redux-devtools-core/src/app/constants/socketOptions.js b/packages/redux-devtools-core/src/app/constants/socketOptions.ts
similarity index 100%
rename from packages/redux-devtools-core/src/app/constants/socketOptions.js
rename to packages/redux-devtools-core/src/app/constants/socketOptions.ts
diff --git a/packages/redux-devtools-core/src/app/containers/Actions.js b/packages/redux-devtools-core/src/app/containers/Actions.tsx
similarity index 72%
rename from packages/redux-devtools-core/src/app/containers/Actions.js
rename to packages/redux-devtools-core/src/app/containers/Actions.tsx
index 85b6a0ca..d813203c 100644
--- a/packages/redux-devtools-core/src/app/containers/Actions.js
+++ b/packages/redux-devtools-core/src/app/containers/Actions.tsx
@@ -1,7 +1,5 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Container } from 'devui';
import SliderMonitor from './monitors/Slider';
import { liftedDispatch as liftedDispatchAction, getReport } from '../actions';
@@ -10,8 +8,13 @@ import DevTools from '../containers/DevTools';
import Dispatcher from './monitors/Dispatcher';
import TopButtons from '../components/TopButtons';
import BottomButtons from '../components/BottomButtons';
+import { StoreState } from '../reducers';
-class Actions extends Component {
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+
+class Actions extends Component {
render() {
const {
monitor,
@@ -51,17 +54,7 @@ class Actions extends Component {
}
}
-Actions.propTypes = {
- liftedDispatch: PropTypes.func.isRequired,
- liftedState: PropTypes.object.isRequired,
- monitorState: PropTypes.object,
- options: PropTypes.object.isRequired,
- monitor: PropTypes.string,
- dispatcherIsOpen: PropTypes.bool,
- sliderIsOpen: PropTypes.bool,
-};
-
-function mapStateToProps(state) {
+const mapStateToProps = (state: StoreState) => {
const instances = state.instances;
const id = getActiveInstance(instances);
return {
@@ -73,13 +66,11 @@ function mapStateToProps(state) {
sliderIsOpen: state.monitor.sliderIsOpen,
reports: state.reports.data,
};
-}
+};
-function mapDispatchToProps(dispatch) {
- return {
- liftedDispatch: bindActionCreators(liftedDispatchAction, dispatch),
- getReport: bindActionCreators(getReport, dispatch),
- };
-}
+const actionCreators = {
+ liftedDispatch: liftedDispatchAction,
+ getReport,
+};
-export default connect(mapStateToProps, mapDispatchToProps)(Actions);
+export default connect(mapStateToProps, actionCreators)(Actions);
diff --git a/packages/redux-devtools-core/src/app/containers/App.js b/packages/redux-devtools-core/src/app/containers/App.tsx
similarity index 54%
rename from packages/redux-devtools-core/src/app/containers/App.js
rename to packages/redux-devtools-core/src/app/containers/App.tsx
index c456800a..9417bd5c 100644
--- a/packages/redux-devtools-core/src/app/containers/App.js
+++ b/packages/redux-devtools-core/src/app/containers/App.tsx
@@ -1,14 +1,17 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
+import { connect, ResolveThunks } from 'react-redux';
import { Container, Notification } from 'devui';
import { clearNotification } from '../actions';
import Header from '../components/Header';
import Actions from '../containers/Actions';
import Settings from '../components/Settings';
+import { StoreState } from '../reducers';
-class App extends Component {
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps & DispatchProps;
+
+class App extends Component {
render() {
const { section, theme, notification } = this.props;
let body;
@@ -37,28 +40,14 @@ class App extends Component {
}
}
-App.propTypes = {
- section: PropTypes.string.isRequired,
- theme: PropTypes.object.isRequired,
- notification: PropTypes.shape({
- message: PropTypes.string,
- type: PropTypes.string,
- }),
- clearNotification: PropTypes.func,
+const mapStateToProps = (state: StoreState) => ({
+ section: state.section,
+ theme: state.theme,
+ notification: state.notification,
+});
+
+const actionCreators = {
+ clearNotification,
};
-function mapStateToProps(state) {
- return {
- section: state.section,
- theme: state.theme,
- notification: state.notification,
- };
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- clearNotification: bindActionCreators(clearNotification, dispatch),
- };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(App);
+export default connect(mapStateToProps, actionCreators)(App);
diff --git a/packages/redux-devtools-core/src/app/containers/DevTools.js b/packages/redux-devtools-core/src/app/containers/DevTools.tsx
similarity index 53%
rename from packages/redux-devtools-core/src/app/containers/DevTools.js
rename to packages/redux-devtools-core/src/app/containers/DevTools.tsx
index 5009a06d..cbfff2de 100644
--- a/packages/redux-devtools-core/src/app/containers/DevTools.js
+++ b/packages/redux-devtools-core/src/app/containers/DevTools.tsx
@@ -1,20 +1,49 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import { withTheme } from 'styled-components';
+import { LiftedAction, LiftedState } from 'redux-devtools-instrument';
+import { Action } from 'redux';
import getMonitor from '../utils/getMonitor';
+import { InitMonitorAction } from '../actions';
+import { Features, State } from '../reducers/instances';
+import { MonitorStateMonitorState } from '../reducers/monitor';
+import { ThemeFromProvider } from 'devui';
-class DevTools extends Component {
- constructor(props) {
+interface Props {
+ monitor: string;
+ liftedState: State;
+ monitorState: MonitorStateMonitorState | undefined;
+ dispatch: (
+ action: LiftedAction, unknown> | InitMonitorAction
+ ) => void;
+ features: Features | undefined;
+ theme: ThemeFromProvider;
+}
+
+class DevTools extends Component {
+ monitorProps: unknown;
+ Monitor?: React.ComponentType<
+ LiftedState, unknown>
+ > & {
+ update(
+ monitorProps: unknown,
+ state: unknown | undefined,
+ action: Action
+ ): unknown;
+ };
+ preventRender?: boolean;
+
+ constructor(props: Props) {
super(props);
this.getMonitor(props, props.monitorState);
}
- getMonitor(props, skipUpdate) {
+ getMonitor(props: Props, skipUpdate?: unknown) {
const monitorElement = getMonitor(props);
this.monitorProps = monitorElement.props;
this.Monitor = monitorElement.type;
- const update = this.Monitor.update;
+ // eslint-disable-next-line @typescript-eslint/unbound-method
+ const update = this.Monitor!.update;
if (update) {
let newMonitorState;
const monitorState = props.monitorState;
@@ -24,7 +53,11 @@ class DevTools extends Component {
) {
newMonitorState = monitorState;
} else {
- newMonitorState = update(this.monitorProps, undefined, {});
+ newMonitorState = update(
+ this.monitorProps,
+ undefined,
+ {} as Action
+ );
if (newMonitorState !== monitorState) {
this.preventRender = true;
}
@@ -38,21 +71,23 @@ class DevTools extends Component {
}
}
- UNSAFE_componentWillUpdate(nextProps) {
+ UNSAFE_componentWillUpdate(nextProps: Props) {
if (nextProps.monitor !== this.props.monitor) this.getMonitor(nextProps);
}
- shouldComponentUpdate(nextProps) {
+ shouldComponentUpdate(nextProps: Props) {
return (
nextProps.monitor !== this.props.monitor ||
nextProps.liftedState !== this.props.liftedState ||
- nextProps.monitorState !== this.props.liftedState ||
+ nextProps.monitorState !== this.props.monitorState ||
nextProps.features !== this.props.features ||
nextProps.theme.scheme !== this.props.theme.scheme
);
}
- dispatch = (action) => {
+ dispatch = (
+ action: LiftedAction, unknown> | InitMonitorAction
+ ) => {
this.props.dispatch(action);
};
@@ -66,9 +101,10 @@ class DevTools extends Component {
...this.props.liftedState,
monitorState: this.props.monitorState,
};
+ const MonitorAsAny = this.Monitor as any;
return (
-
;
+type Props = DispatchProps;
+
+class ChartMonitorWrapper extends Component {
static update = ChartMonitor.update;
- onClickText = (data) => {
- const inspectedStatePath = [];
+ onClickText = (data: NodeWithId) => {
+ const inspectedStatePath: string[] = [];
getPath(data, inspectedStatePath);
this.props.selectMonitorWithState('InspectorMonitor', {
inspectedStatePath,
@@ -33,6 +35,8 @@ class ChartMonitorWrapper extends Component {
render() {
return (
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
;
+interface OwnProps {
+ options: Options;
+}
+type Props = DispatchProps & OwnProps;
- state = {
+interface State {
+ selected: 'default' | number;
+ customAction: string;
+ args: (string | undefined)[];
+ rest: string;
+ changed: boolean;
+}
+
+class Dispatcher extends Component {
+ state: State = {
selected: 'default',
customAction:
this.props.options.lib === 'redux' ? "{\n type: ''\n}" : 'this.',
@@ -62,7 +70,7 @@ class Dispatcher extends Component {
changed: false,
};
- UNSAFE_componentWillReceiveProps(nextProps) {
+ UNSAFE_componentWillReceiveProps(nextProps: Props) {
if (
this.state.selected !== 'default' &&
!nextProps.options.actionCreators
@@ -74,14 +82,14 @@ class Dispatcher extends Component {
}
}
- shouldComponentUpdate(nextProps, nextState) {
+ shouldComponentUpdate(nextProps: Props, nextState: State) {
return (
nextState !== this.state ||
nextProps.options.actionCreators !== this.props.options.actionCreators
);
}
- selectActionCreator = (selected) => {
+ selectActionCreator = (selected: 'default' | 'actions-help' | number) => {
if (selected === 'actions-help') {
window.open(
'https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/' +
@@ -90,14 +98,14 @@ class Dispatcher extends Component {
return;
}
- const args = [];
+ const args: string[] = [];
if (selected !== 'default') {
- args.length = this.props.options.actionCreators[selected].args.length;
+ args.length = this.props.options.actionCreators![selected].args.length;
}
this.setState({ selected, args, rest: '[]', changed: false });
};
- handleArg = (argIndex) => (value) => {
+ handleArg = (argIndex: number) => (value: string) => {
const args = [
...this.state.args.slice(0, argIndex),
value || undefined,
@@ -106,26 +114,26 @@ class Dispatcher extends Component {
this.setState({ args, changed: true });
};
- handleRest = (rest) => {
+ handleRest = (rest: string) => {
this.setState({ rest, changed: true });
};
- handleCustomAction = (customAction) => {
+ handleCustomAction = (customAction: string) => {
this.setState({ customAction, changed: true });
};
dispatchAction = () => {
const { selected, customAction, args, rest } = this.state;
- if (this.state.selected !== 'default') {
+ if (selected !== 'default') {
// remove trailing `undefined` arguments
let i = args.length - 1;
while (i >= 0 && typeof args[i] === 'undefined') {
- args.pop(i);
+ args.pop();
i--;
}
this.props.dispatch({
- name: this.props.options.actionCreators[selected].name,
+ name: this.props.options.actionCreators![selected].name,
selected,
args,
rest,
@@ -174,7 +182,9 @@ class Dispatcher extends Component {
);
}
- let options = [{ value: 'default', label: 'Custom action' }];
+ let options: { value: string | number; label: string }[] = [
+ { value: 'default', label: 'Custom action' },
+ ];
if (actionCreators && actionCreators.length > 0) {
options = options.concat(
actionCreators.map(({ name, args }, i) => ({
@@ -208,10 +218,8 @@ class Dispatcher extends Component {
}
}
-function mapDispatchToProps(dispatch) {
- return {
- dispatch: bindActionCreators(dispatchRemotely, dispatch),
- };
-}
+const actionCreators = {
+ dispatch: dispatchRemotely,
+};
-export default connect(null, mapDispatchToProps)(Dispatcher);
+export default connect(null, actionCreators)(Dispatcher);
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.js b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.tsx
similarity index 53%
rename from packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.js
rename to packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.tsx
index d3e4ff49..f2fc0b60 100644
--- a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.js
+++ b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/ChartTab.tsx
@@ -1,18 +1,28 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
+import React, { Component, RefCallback } from 'react';
+import { connect, ResolveThunks } from 'react-redux';
import { withTheme } from 'styled-components';
-import { tree } from 'd3-state-visualizer';
+import { InputOptions, NodeWithId, tree } from 'd3-state-visualizer';
import { getPath } from '../ChartMonitorWrapper';
import { updateMonitorState } from '../../../actions';
+import { ThemeFromProvider } from 'devui';
const style = {
width: '100%',
height: '100%',
};
-class ChartTab extends Component {
+type DispatchProps = ResolveThunks;
+interface OwnProps {
+ data: unknown;
+ theme: ThemeFromProvider;
+}
+type Props = DispatchProps & OwnProps;
+
+class ChartTab extends Component {
+ node?: HTMLDivElement | null;
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ renderChart?: (nextState?: {} | null | undefined) => void;
+
shouldComponentUpdate() {
return false;
}
@@ -21,28 +31,30 @@ class ChartTab extends Component {
this.createChart(this.props);
}
- UNSAFE_componentWillReceiveProps(nextProps) {
+ UNSAFE_componentWillReceiveProps(nextProps: Props) {
if (
this.props.theme.scheme !== nextProps.theme.scheme ||
nextProps.theme.light !== this.props.theme.light
) {
- this.node.innerHTML = '';
+ this.node!.innerHTML = '';
this.createChart(nextProps);
} else if (nextProps.data !== this.props.data) {
- this.renderChart(nextProps.data);
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ this.renderChart!(nextProps.data as {} | null | undefined);
}
}
- getRef = (node) => {
+ getRef: RefCallback = (node) => {
this.node = node;
};
- createChart(props) {
- this.renderChart = tree(this.node, this.getChartTheme(props.theme));
- this.renderChart(props.data);
+ createChart(props: Props) {
+ this.renderChart = tree(this.node!, this.getChartTheme(props.theme));
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ this.renderChart(props.data as {} | null | undefined);
}
- getChartTheme(theme) {
+ getChartTheme(theme: ThemeFromProvider): Partial {
return {
heightBetweenNodesCoeff: 1,
widthBetweenNodesCoeff: 1.3,
@@ -60,27 +72,27 @@ class ChartTab extends Component {
style: {
width: '100%',
height: '100%',
- node: {
+ node: ({
colors: {
default: theme.base0B,
collapsed: theme.base0B,
parent: theme.base0E,
},
radius: 7,
- },
- text: {
+ } as unknown) as string,
+ text: ({
colors: {
default: theme.base0D,
hover: theme.base06,
},
- },
+ } as unknown) as string,
},
onClickText: this.onClickText,
};
}
- onClickText = (data) => {
- const inspectedStatePath = [];
+ onClickText = (data: NodeWithId) => {
+ const inspectedStatePath: string[] = [];
getPath(data, inspectedStatePath);
this.props.updateMonitorState({
inspectedStatePath,
@@ -93,17 +105,9 @@ class ChartTab extends Component {
}
}
-ChartTab.propTypes = {
- data: PropTypes.object,
- updateMonitorState: PropTypes.func.isRequired,
- theme: PropTypes.object.isRequired,
+const actionCreators = {
+ updateMonitorState,
};
-function mapDispatchToProps(dispatch) {
- return {
- updateMonitorState: bindActionCreators(updateMonitorState, dispatch),
- };
-}
-
-const ConnectedChartTab = connect(null, mapDispatchToProps)(ChartTab);
+const ConnectedChartTab = connect(null, actionCreators)(ChartTab);
export default withTheme(ConnectedChartTab);
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.js b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.tsx
similarity index 57%
rename from packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.js
rename to packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.tsx
index 68fd5cb5..15cead09 100644
--- a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.js
+++ b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/RawTab.tsx
@@ -2,21 +2,27 @@ import React, { Component } from 'react';
import { Editor } from 'devui';
import { stringify } from 'javascript-stringify';
-export default class RawTab extends Component {
- constructor(props) {
+interface Props {
+ data: unknown;
+}
+
+export default class RawTab extends Component {
+ value?: string | undefined;
+
+ constructor(props: Props) {
super(props);
this.stringifyData(props);
}
- shouldComponentUpdate(nextProps) {
+ shouldComponentUpdate(nextProps: Props) {
return nextProps.data !== this.value;
}
- UNSAFE_componentWillUpdate(nextProps) {
+ UNSAFE_componentWillUpdate(nextProps: Props) {
this.stringifyData(nextProps);
}
- stringifyData(props) {
+ stringifyData(props: Props) {
this.value = stringify(props.data, null, 2);
}
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.js b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.tsx
similarity index 62%
rename from packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.js
rename to packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.tsx
index f5d31cde..a70b2eae 100644
--- a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.js
+++ b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/SubTabs.tsx
@@ -1,8 +1,8 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import { Tabs } from 'devui';
+import { connect, ResolveThunks } from 'react-redux';
+import { Tab, Tabs } from 'devui';
+import { TabComponentProps } from 'redux-devtools-inspector-monitor';
+import { Action } from 'redux';
import StateTree from 'redux-devtools-inspector-monitor/lib/tabs/StateTab';
import ActionTree from 'redux-devtools-inspector-monitor/lib/tabs/ActionTab';
import DiffTree from 'redux-devtools-inspector-monitor/lib/tabs/DiffTab';
@@ -10,14 +10,24 @@ import { selectMonitorTab } from '../../../actions';
import RawTab from './RawTab';
import ChartTab from './ChartTab';
import VisualDiffTab from './VisualDiffTab';
+import { StoreState } from '../../../reducers';
+import { Delta } from 'jsondiffpatch';
-class SubTabs extends Component {
- constructor(props) {
+type StateProps = ReturnType;
+type DispatchProps = ResolveThunks;
+type Props = StateProps &
+ DispatchProps &
+ TabComponentProps>;
+
+class SubTabs extends Component {
+ tabs?: (Tab | Tab<{ data: unknown }> | Tab<{ data?: Delta }>)[];
+
+ constructor(props: Props) {
super(props);
this.updateTabs(props);
}
- UNSAFE_componentWillReceiveProps(nextProps) {
+ UNSAFE_componentWillReceiveProps(nextProps: Props) {
if (nextProps.parentTab !== this.props.parentTab) {
this.updateTabs(nextProps);
}
@@ -34,7 +44,7 @@ class SubTabs extends Component {
}
};
- updateTabs(props) {
+ updateTabs(props: Props) {
const parentTab = props.parentTab;
if (parentTab === 'Diff') {
@@ -47,7 +57,7 @@ class SubTabs extends Component {
{
name: 'Raw',
component: VisualDiffTab,
- selector: this.selector,
+ selector: this.selector as () => { data?: Delta },
},
];
return;
@@ -79,7 +89,7 @@ class SubTabs extends Component {
return (
@@ -87,26 +97,13 @@ class SubTabs extends Component {
}
}
-SubTabs.propTypes = {
- selected: PropTypes.string,
- parentTab: PropTypes.string,
- selectMonitorTab: PropTypes.func.isRequired,
- action: PropTypes.object,
- delta: PropTypes.object,
- nextState: PropTypes.object,
+const mapStateToProps = (state: StoreState) => ({
+ parentTab: state.monitor.monitorState!.tabName,
+ selected: state.monitor.monitorState!.subTabName,
+});
+
+const actionCreators = {
+ selectMonitorTab,
};
-function mapStateToProps(state) {
- return {
- parentTab: state.monitor.monitorState.tabName,
- selected: state.monitor.monitorState.subTabName,
- };
-}
-
-function mapDispatchToProps(dispatch) {
- return {
- selectMonitorTab: bindActionCreators(selectMonitorTab, dispatch),
- };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(SubTabs);
+export default connect(mapStateToProps, actionCreators)(SubTabs);
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.js b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.tsx
similarity index 93%
rename from packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.js
rename to packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.tsx
index d2fb3d49..f48e0c55 100644
--- a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.js
+++ b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/VisualDiffTab.tsx
@@ -1,6 +1,5 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import { formatters } from 'jsondiffpatch';
+import { Delta, formatters } from 'jsondiffpatch';
import styled from 'styled-components';
import { effects } from 'devui';
@@ -218,22 +217,22 @@ export const StyledContainer = styled.div`
}
`;
-export default class VisualDiffTab extends Component {
- shouldComponentUpdate(nextProps) {
+interface Props {
+ data?: Delta;
+}
+
+export default class VisualDiffTab extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return this.props.data !== nextProps.data;
}
render() {
- let __html;
+ let __html: string | undefined;
const data = this.props.data;
if (data) {
- __html = formatters.html.format(data);
+ __html = formatters.html.format(data, undefined);
}
- return ;
+ return ;
}
}
-
-VisualDiffTab.propTypes = {
- data: PropTypes.object,
-};
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.js b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.js
deleted file mode 100644
index b281b065..00000000
--- a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import React, { Component } from 'react';
-import PropTypes from 'prop-types';
-import InspectorMonitor from 'redux-devtools-inspector-monitor';
-import StackTraceTab from 'redux-devtools-trace-monitor';
-import TestTab from 'redux-devtools-test-generator';
-import { DATA_TYPE_KEY } from '../../../constants/dataTypes';
-import SubTabs from './SubTabs';
-
-const DEFAULT_TABS = [
- {
- name: 'Action',
- component: SubTabs,
- },
- {
- name: 'State',
- component: SubTabs,
- },
- {
- name: 'Diff',
- component: SubTabs,
- },
- {
- name: 'Trace',
- component: StackTraceTab,
- },
-];
-
-class InspectorWrapper extends Component {
- static update = InspectorMonitor.update;
-
- render() {
- const { features, ...rest } = this.props;
- let tabs;
- if (features && features.test) {
- tabs = () => [...DEFAULT_TABS, { name: 'Test', component: TestTab }];
- } else {
- tabs = () => DEFAULT_TABS;
- }
-
- return (
-
- );
- }
-}
-
-InspectorWrapper.propTypes = {
- features: PropTypes.object,
-};
-
-export default InspectorWrapper;
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.tsx b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.tsx
new file mode 100644
index 00000000..63239de8
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/containers/monitors/InspectorWrapper/index.tsx
@@ -0,0 +1,67 @@
+import React, { Component } from 'react';
+import InspectorMonitor, { Tab } from 'redux-devtools-inspector-monitor';
+import TraceTab from 'redux-devtools-inspector-monitor-trace-tab';
+import TestTab from 'redux-devtools-inspector-monitor-test-tab';
+import { DATA_TYPE_KEY } from '../../../constants/dataTypes';
+import SubTabs from './SubTabs';
+import { Action } from 'redux';
+
+const DEFAULT_TABS = [
+ {
+ name: 'Action',
+ component: SubTabs,
+ },
+ {
+ name: 'State',
+ component: SubTabs,
+ },
+ {
+ name: 'Diff',
+ component: SubTabs,
+ },
+ {
+ name: 'Trace',
+ component: TraceTab,
+ },
+];
+
+interface Features {
+ test?: boolean;
+ skip?: boolean;
+}
+interface Props {
+ features?: Features;
+}
+
+class InspectorWrapper extends Component {
+ static update = InspectorMonitor.update;
+
+ render() {
+ const { features, ...rest } = this.props;
+ let tabs: () => Tab>[];
+ if (features && features.test) {
+ tabs = () => [
+ ...(DEFAULT_TABS as Tab>[]),
+ ({ name: 'Test', component: TestTab } as unknown) as Tab<
+ unknown,
+ Action
+ >,
+ ];
+ } else {
+ tabs = () => DEFAULT_TABS as Tab>[];
+ }
+
+ return (
+
+ );
+ }
+}
+
+export default InspectorWrapper;
diff --git a/packages/redux-devtools-core/src/app/containers/monitors/Slider.js b/packages/redux-devtools-core/src/app/containers/monitors/Slider.tsx
similarity index 58%
rename from packages/redux-devtools-core/src/app/containers/monitors/Slider.js
rename to packages/redux-devtools-core/src/app/containers/monitors/Slider.tsx
index 8363108c..03a5fe4f 100644
--- a/packages/redux-devtools-core/src/app/containers/monitors/Slider.js
+++ b/packages/redux-devtools-core/src/app/containers/monitors/Slider.tsx
@@ -1,7 +1,10 @@
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import styled, { withTheme } from 'styled-components';
import SliderMonitor from 'redux-devtools-slider-monitor';
+import { LiftedAction } from 'redux-devtools-instrument';
+import { Action } from 'redux';
+import { ThemeFromProvider } from 'devui';
+import { State } from '../../reducers/instances';
const SliderWrapper = styled.div`
border-color: ${(props) => props.theme.base02};
@@ -9,8 +12,14 @@ const SliderWrapper = styled.div`
border-width: 1px 0;
`;
-class Slider extends Component {
- shouldComponentUpdate(nextProps) {
+interface Props {
+ liftedState: State;
+ dispatch: (action: LiftedAction, unknown>) => void;
+ theme: ThemeFromProvider;
+}
+
+class Slider extends Component {
+ shouldComponentUpdate(nextProps: Props) {
return (
nextProps.liftedState !== this.props.liftedState ||
nextProps.theme.scheme !== this.props.theme.scheme
@@ -21,6 +30,8 @@ class Slider extends Component {
{
+ store?: Store;
-class Root extends Component {
UNSAFE_componentWillMount() {
configureStore((store, preloadedState) => {
this.store = store;
store.dispatch({
type: CONNECT_REQUEST,
- options: preloadedState.connection || this.props.socketOptions,
+ options: (preloadedState!.connection ||
+ this.props.socketOptions) as ConnectionOptions,
});
this.forceUpdate();
});
@@ -20,21 +29,13 @@ class Root extends Component {
render() {
if (!this.store) return null;
+ const AppAsAny = App as any;
return (
-
+
);
}
}
-Root.propTypes = {
- socketOptions: PropTypes.shape({
- hostname: PropTypes.string,
- port: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
- autoReconnect: PropTypes.bool,
- secure: PropTypes.bool,
- }),
-};
-
export default Root;
diff --git a/packages/redux-devtools-core/src/app/middlewares/api.js b/packages/redux-devtools-core/src/app/middlewares/api.ts
similarity index 70%
rename from packages/redux-devtools-core/src/app/middlewares/api.js
rename to packages/redux-devtools-core/src/app/middlewares/api.ts
index 7a6bedd4..bc303987 100644
--- a/packages/redux-devtools-core/src/app/middlewares/api.js
+++ b/packages/redux-devtools-core/src/app/middlewares/api.ts
@@ -1,5 +1,6 @@
-import socketCluster from 'socketcluster-client';
+import socketCluster, { SCClientSocket } from 'socketcluster-client';
import { stringify } from 'jsan';
+import { Dispatch, MiddlewareAPI } from 'redux';
import socketOptions from '../constants/socketOptions';
import * as actions from '../constants/socketActionTypes';
import { getActiveInstance } from '../reducers/instances';
@@ -12,22 +13,37 @@ import {
GET_REPORT_ERROR,
GET_REPORT_SUCCESS,
} from '../constants/actionTypes';
-import { showNotification, importState } from '../actions';
+import {
+ showNotification,
+ importState,
+ StoreAction,
+ EmitAction,
+ LiftedActionAction,
+ Request,
+ DispatchAction,
+ UpdateReportsRequest,
+} from '../actions';
import { nonReduxDispatch } from '../utils/monitorActions';
+import { StoreState } from '../reducers';
-let socket;
-let store;
+let socket: SCClientSocket;
+let store: MiddlewareAPI, StoreState>;
-function emit({ message: type, id, instanceId, action, state }) {
+function emit({ message: type, id, instanceId, action, state }: EmitAction) {
socket.emit(id ? 'sc-' + id : 'respond', { type, action, state, instanceId });
}
-function startMonitoring(channel) {
+function startMonitoring(channel: string) {
if (channel !== store.getState().socket.baseChannel) return;
store.dispatch({ type: actions.EMIT, message: 'START' });
}
-function dispatchRemoteAction({ message, action, state, toAll }) {
+function dispatchRemoteAction({
+ message,
+ action,
+ state,
+ toAll,
+}: LiftedActionAction) {
const instances = store.getState().instances;
const instanceId = getActiveInstance(instances);
const id = !toAll && instances.options[instanceId].connectionId;
@@ -39,7 +55,7 @@ function dispatchRemoteAction({ message, action, state, toAll }) {
store,
message,
instanceId,
- action,
+ action as DispatchAction,
state,
instances
),
@@ -48,7 +64,32 @@ function dispatchRemoteAction({ message, action, state, toAll }) {
});
}
-function monitoring(request) {
+interface RequestBase {
+ id?: string;
+ instanceId?: string;
+}
+interface DisconnectedAction extends RequestBase {
+ type: 'DISCONNECTED';
+ id: string;
+}
+interface StartAction extends RequestBase {
+ type: 'START';
+ id: string;
+}
+interface ErrorAction extends RequestBase {
+ type: 'ERROR';
+ payload: string;
+}
+interface RequestWithData extends RequestBase {
+ data: Request;
+}
+type MonitoringRequest =
+ | DisconnectedAction
+ | StartAction
+ | ErrorAction
+ | Request;
+
+function monitoring(request: MonitoringRequest) {
if (request.type === 'DISCONNECTED') {
store.dispatch({
type: REMOVE_INSTANCE,
@@ -68,7 +109,9 @@ function monitoring(request) {
store.dispatch({
type: UPDATE_STATE,
- request: request.data ? { ...request.data, id: request.id } : request,
+ request: ((request as unknown) as RequestWithData).data
+ ? { ...((request as unknown) as RequestWithData).data, id: request.id }
+ : request,
});
const instances = store.getState().instances;
@@ -87,11 +130,14 @@ function monitoring(request) {
}
}
-function subscribe(channelName, subscription) {
+function subscribe(
+ channelName: string,
+ subscription: typeof UPDATE_STATE | typeof UPDATE_REPORTS
+) {
const channel = socket.subscribe(channelName);
if (subscription === UPDATE_STATE) channel.watch(monitoring);
else {
- const watcher = (request) => {
+ const watcher = (request: UpdateReportsRequest) => {
store.dispatch({ type: subscription, request });
};
channel.watch(watcher);
@@ -150,7 +196,7 @@ function connect() {
socket = socketCluster.create(
connection.type === 'remotedev' ? socketOptions : connection.options
);
- handleConnection(store);
+ handleConnection();
} catch (error) {
store.dispatch({ type: actions.CONNECT_ERROR, error });
store.dispatch(showNotification(error.message || error));
@@ -163,7 +209,7 @@ function disconnect() {
}
function login() {
- socket.emit('login', {}, (error, baseChannel) => {
+ socket.emit('login', {}, (error: Error, baseChannel: string) => {
if (error) {
store.dispatch({ type: actions.AUTH_ERROR, error });
return;
@@ -182,24 +228,28 @@ function login() {
});
}
-function getReport(reportId) {
- socket.emit('getReport', reportId, (error, data) => {
- if (error) {
- store.dispatch({ type: GET_REPORT_ERROR, error });
- return;
+function getReport(reportId: unknown) {
+ socket.emit(
+ 'getReport',
+ reportId,
+ (error: Error, data: { payload: string }) => {
+ if (error) {
+ store.dispatch({ type: GET_REPORT_ERROR, error });
+ return;
+ }
+ store.dispatch({ type: GET_REPORT_SUCCESS, data });
+ store.dispatch(importState(data.payload));
}
- store.dispatch({ type: GET_REPORT_SUCCESS, data });
- store.dispatch(importState(data.payload));
- });
+ );
}
-export default function api(inStore) {
+export default function api(
+ inStore: MiddlewareAPI, StoreState>
+) {
store = inStore;
- return (next) => (action) => {
+ return (next: Dispatch) => (action: StoreAction) => {
const result = next(action);
- switch (
- action.type // eslint-disable-line default-case
- ) {
+ switch (action.type) {
case actions.CONNECT_REQUEST:
connect();
break;
diff --git a/packages/redux-devtools-core/src/app/middlewares/exportState.js b/packages/redux-devtools-core/src/app/middlewares/exportState.ts
similarity index 72%
rename from packages/redux-devtools-core/src/app/middlewares/exportState.js
rename to packages/redux-devtools-core/src/app/middlewares/exportState.ts
index d0609022..58cb9315 100644
--- a/packages/redux-devtools-core/src/app/middlewares/exportState.js
+++ b/packages/redux-devtools-core/src/app/middlewares/exportState.ts
@@ -1,14 +1,17 @@
import stringifyJSON from '../utils/stringifyJSON';
import { UPDATE_STATE, LIFTED_ACTION, EXPORT } from '../constants/actionTypes';
import { getActiveInstance } from '../reducers/instances';
+import { Dispatch, MiddlewareAPI } from 'redux';
+import { ExportRequest, StoreAction } from '../actions';
+import { StoreState } from '../reducers';
-let toExport;
+let toExport: string | undefined;
-function download(state) {
+function download(state: string) {
const blob = new Blob([state], { type: 'octet/stream' });
const href = window.URL.createObjectURL(blob);
const a = document.createElement('a');
- a.style = 'display: none';
+ a.style.display = 'none';
a.download = 'state.json';
a.href = href;
document.body.appendChild(a);
@@ -19,15 +22,17 @@ function download(state) {
}, 0);
}
-const exportState = (store) => (next) => (action) => {
+const exportState = (
+ store: MiddlewareAPI, StoreState>
+) => (next: Dispatch) => (action: StoreAction) => {
const result = next(action);
if (
toExport &&
action.type === UPDATE_STATE &&
- action.request.type === 'EXPORT'
+ action.request!.type === 'EXPORT'
) {
- const request = action.request;
+ const request = action.request!;
const id = request.instanceId || request.id;
if (id === toExport) {
toExport = undefined;
@@ -35,7 +40,7 @@ const exportState = (store) => (next) => (action) => {
JSON.stringify(
{
payload: request.payload,
- preloadedState: request.committedState,
+ preloadedState: (request as ExportRequest).committedState,
},
null,
'\t'
diff --git a/packages/redux-devtools-core/src/app/reducers/connection.js b/packages/redux-devtools-core/src/app/reducers/connection.ts
similarity index 50%
rename from packages/redux-devtools-core/src/app/reducers/connection.js
rename to packages/redux-devtools-core/src/app/reducers/connection.ts
index a9e64411..65c609a8 100644
--- a/packages/redux-devtools-core/src/app/reducers/connection.js
+++ b/packages/redux-devtools-core/src/app/reducers/connection.ts
@@ -1,11 +1,22 @@
import { RECONNECT } from '../constants/socketActionTypes';
+import { ConnectionType, StoreAction } from '../actions';
+
+export interface ConnectionOptions {
+ readonly hostname: string;
+ readonly port: number;
+ readonly secure: boolean;
+}
+export interface ConnectionState {
+ readonly options: ConnectionOptions;
+ readonly type: ConnectionType;
+}
export default function connection(
- state = {
+ state: ConnectionState = {
options: { hostname: 'localhost', port: 8000, secure: false },
type: 'remotedev',
},
- action
+ action: StoreAction
) {
if (action.type === RECONNECT) {
const { type, ...options } = action.options;
diff --git a/packages/redux-devtools-core/src/app/reducers/index.js b/packages/redux-devtools-core/src/app/reducers/index.js
deleted file mode 100644
index ae099180..00000000
--- a/packages/redux-devtools-core/src/app/reducers/index.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { combineReducers } from 'redux';
-import section from './section';
-import connection from './connection';
-import socket from './socket';
-import monitor from './monitor';
-import notification from './notification';
-import instances from './instances';
-import reports from './reports';
-import theme from './theme';
-
-const rootReducer = combineReducers({
- section,
- theme,
- connection,
- socket,
- monitor,
- instances,
- reports,
- notification,
-});
-
-export default rootReducer;
diff --git a/packages/redux-devtools-core/src/app/reducers/index.ts b/packages/redux-devtools-core/src/app/reducers/index.ts
new file mode 100644
index 00000000..6b47effd
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/reducers/index.ts
@@ -0,0 +1,34 @@
+import { combineReducers } from 'redux';
+import section, { SectionState } from './section';
+import connection, { ConnectionState } from './connection';
+import socket, { SocketState } from './socket';
+import monitor, { MonitorState } from './monitor';
+import notification, { NotificationState } from './notification';
+import instances, { InstancesState } from './instances';
+import reports, { ReportsState } from './reports';
+import theme, { ThemeState } from './theme';
+import { StoreAction } from '../actions';
+
+export interface StoreState {
+ readonly section: SectionState;
+ readonly theme: ThemeState;
+ readonly connection: ConnectionState;
+ readonly socket: SocketState;
+ readonly monitor: MonitorState;
+ readonly instances: InstancesState;
+ readonly reports: ReportsState;
+ readonly notification: NotificationState;
+}
+
+const rootReducer = combineReducers({
+ section,
+ theme,
+ connection,
+ socket,
+ monitor,
+ instances,
+ reports,
+ notification,
+});
+
+export default rootReducer;
diff --git a/packages/redux-devtools-core/src/app/reducers/instances.js b/packages/redux-devtools-core/src/app/reducers/instances.ts
similarity index 76%
rename from packages/redux-devtools-core/src/app/reducers/instances.js
rename to packages/redux-devtools-core/src/app/reducers/instances.ts
index 519e750a..aa98f2c3 100644
--- a/packages/redux-devtools-core/src/app/reducers/instances.js
+++ b/packages/redux-devtools-core/src/app/reducers/instances.ts
@@ -1,3 +1,5 @@
+import { PerformAction } from 'redux-devtools-instrument';
+import { Action } from 'redux';
import {
UPDATE_STATE,
SET_STATE,
@@ -10,8 +12,60 @@ import {
import { DISCONNECTED } from '../constants/socketActionTypes';
import parseJSON from '../utils/parseJSON';
import { recompute } from '../utils/updateState';
+import {
+ ActionCreator,
+ LiftedActionDispatchAction,
+ Request,
+ StoreAction,
+} from '../actions';
-export const initialState = {
+export interface Features {
+ lock?: boolean;
+ export?: string | boolean;
+ import?: string | boolean;
+ persist?: boolean;
+ pause?: boolean;
+ reorder?: boolean;
+ jump?: boolean;
+ skip?: boolean;
+ dispatch?: boolean;
+ sync?: boolean;
+ test?: boolean;
+}
+
+export interface Options {
+ name?: string;
+ connectionId?: string;
+ explicitLib?: string;
+ lib?: string;
+ actionCreators?: ActionCreator[];
+ features: Features;
+ serialize?: boolean;
+}
+
+export interface State {
+ actionsById: { [actionId: number]: PerformAction> };
+ computedStates: { state: unknown; error?: string }[];
+ currentStateIndex: number;
+ nextActionId: number;
+ skippedActionIds: number[];
+ stagedActionIds: number[];
+ committedState?: unknown;
+ isLocked?: boolean;
+ isPaused?: boolean;
+}
+
+export interface InstancesState {
+ selected: string | null;
+ current: string;
+ sync: boolean;
+ connections: { [id: string]: string[] };
+ options: { [id: string]: Options };
+ states: { [id: string]: State };
+ persisted?: boolean;
+}
+
+export const initialState: InstancesState = {
selected: null,
current: 'default',
sync: false,
@@ -29,35 +83,42 @@ export const initialState = {
},
};
-function updateState(state, request, id, serialize) {
- let payload = request.payload;
+function updateState(
+ state: { [id: string]: State },
+ request: Request,
+ id: string,
+ serialize: boolean | undefined
+) {
+ let payload: State = request.payload as State;
const actionsById = request.actionsById;
if (actionsById) {
payload = {
+ // eslint-disable-next-line @typescript-eslint/ban-types
...payload,
actionsById: parseJSON(actionsById, serialize),
computedStates: parseJSON(request.computedStates, serialize),
- };
+ } as State;
if (request.type === 'STATE' && request.committedState) {
payload.committedState = payload.computedStates[0].state;
}
} else {
- payload = parseJSON(payload, serialize);
+ payload = parseJSON((payload as unknown) as string, serialize) as State;
}
let newState;
const liftedState = state[id] || state.default;
- const action = (request.action && parseJSON(request.action, serialize)) || {};
+ const action = ((request.action && parseJSON(request.action, serialize)) ||
+ {}) as PerformAction>;
switch (request.type) {
case 'INIT':
newState = recompute(state.default, payload, {
action: { type: '@@INIT' },
- timestamp: action.timestamp || Date.now(),
+ timestamp: (action as { timestamp?: number }).timestamp || Date.now(),
});
break;
case 'ACTION': {
- let isExcess = request.isExcess;
+ const isExcess = request.isExcess;
const nextActionId = request.nextActionId || liftedState.nextActionId + 1;
const maxAge = request.maxAge;
if (Array.isArray(action)) {
@@ -66,7 +127,7 @@ function updateState(state, request, id, serialize) {
for (let i = 0; i < action.length; i++) {
newState = recompute(
newState,
- request.batched ? payload : payload[i],
+ request.batched ? payload : ((payload as unknown) as State[])[i],
action[i],
newState.nextActionId + 1,
maxAge,
@@ -148,7 +209,10 @@ function updateState(state, request, id, serialize) {
return { ...state, [id]: newState };
}
-export function dispatchAction(state, { action }) {
+export function dispatchAction(
+ state: InstancesState,
+ { action }: LiftedActionDispatchAction
+) {
if (action.type === 'JUMP_TO_STATE' || action.type === 'JUMP_TO_ACTION') {
const id = state.selected || state.current;
const liftedState = state.states[id];
@@ -167,7 +231,7 @@ export function dispatchAction(state, { action }) {
return state;
}
-function removeState(state, connectionId) {
+function removeState(state: InstancesState, connectionId: string) {
const instanceIds = state.connections[connectionId];
if (!instanceIds) return state;
@@ -202,7 +266,11 @@ function removeState(state, connectionId) {
};
}
-function init({ type, action, name, libConfig = {} }, connectionId, current) {
+function init(
+ { type, action, name, libConfig = {} }: Request,
+ connectionId: string,
+ current: string
+): Options {
let lib;
let actionCreators;
let creators = libConfig.actionCreators || action;
@@ -234,7 +302,10 @@ function init({ type, action, name, libConfig = {} }, connectionId, current) {
};
}
-export default function instances(state = initialState, action) {
+export default function instances(
+ state = initialState,
+ action: StoreAction
+): InstancesState {
switch (action.type) {
case UPDATE_STATE: {
const { request } = action;
@@ -293,7 +364,7 @@ export default function instances(state = initialState, action) {
...state,
states: {
...state.states,
- [id]: parseJSON(action.state),
+ [id]: parseJSON(action.state) as State,
},
};
}
@@ -307,7 +378,5 @@ export default function instances(state = initialState, action) {
}
}
-/* eslint-disable no-shadow */
-export const getActiveInstance = (instances) =>
+export const getActiveInstance = (instances: InstancesState) =>
instances.selected || instances.current;
-/* eslint-enable */
diff --git a/packages/redux-devtools-core/src/app/reducers/monitor.js b/packages/redux-devtools-core/src/app/reducers/monitor.ts
similarity index 62%
rename from packages/redux-devtools-core/src/app/reducers/monitor.js
rename to packages/redux-devtools-core/src/app/reducers/monitor.ts
index f07e2197..8293d847 100644
--- a/packages/redux-devtools-core/src/app/reducers/monitor.js
+++ b/packages/redux-devtools-core/src/app/reducers/monitor.ts
@@ -5,28 +5,50 @@ import {
TOGGLE_SLIDER,
TOGGLE_DISPATCHER,
} from '../constants/actionTypes';
+import { MonitorActionAction, StoreAction } from '../actions';
-const initialState = {
+export interface MonitorStateMonitorState {
+ inspectedStatePath?: string[];
+ tabName?: string;
+ subTabName?: string;
+ selectedActionId?: number | null;
+ startActionId?: number | null;
+ inspectedActionPath?: string[];
+ __overwritten__?: string;
+}
+export interface MonitorState {
+ selected: string;
+ monitorState: MonitorStateMonitorState | undefined;
+ sliderIsOpen: boolean;
+ dispatcherIsOpen: boolean;
+}
+
+const initialState: MonitorState = {
selected: 'InspectorMonitor',
monitorState: undefined,
sliderIsOpen: true,
dispatcherIsOpen: false,
};
-export function dispatchMonitorAction(state, action) {
+export function dispatchMonitorAction(
+ state: MonitorState,
+ action: MonitorActionAction
+): MonitorState {
return {
...state,
- monitorState:
- action.action.newMonitorState ||
+ monitorState: (action.action.newMonitorState ||
action.monitorReducer(
action.monitorProps,
state.monitorState,
action.action
- ),
+ )) as MonitorStateMonitorState,
};
}
-export default function monitor(state = initialState, action) {
+export default function monitor(
+ state = initialState,
+ action: StoreAction
+): MonitorState {
switch (action.type) {
case MONITOR_ACTION:
return dispatchMonitorAction(state, action);
@@ -45,7 +67,7 @@ export default function monitor(state = initialState, action) {
};
}
case UPDATE_MONITOR_STATE: {
- let inspectedStatePath = state.monitorState.inspectedStatePath;
+ let inspectedStatePath = state.monitorState!.inspectedStatePath!;
if (action.nextState.inspectedStatePath) {
inspectedStatePath = [
...inspectedStatePath.slice(0, -1),
diff --git a/packages/redux-devtools-core/src/app/reducers/notification.js b/packages/redux-devtools-core/src/app/reducers/notification.ts
similarity index 57%
rename from packages/redux-devtools-core/src/app/reducers/notification.js
rename to packages/redux-devtools-core/src/app/reducers/notification.ts
index cf2e59f1..c42e1ee9 100644
--- a/packages/redux-devtools-core/src/app/reducers/notification.js
+++ b/packages/redux-devtools-core/src/app/reducers/notification.ts
@@ -4,8 +4,18 @@ import {
LIFTED_ACTION,
ERROR,
} from '../constants/actionTypes';
+import { StoreAction } from '../actions';
-export default function notification(state = null, action) {
+interface Notification {
+ readonly type: 'error';
+ readonly message: string;
+}
+export type NotificationState = Notification | null;
+
+export default function notification(
+ state: NotificationState = null,
+ action: StoreAction
+): NotificationState {
switch (action.type) {
case SHOW_NOTIFICATION:
return action.notification;
diff --git a/packages/redux-devtools-core/src/app/reducers/reports.js b/packages/redux-devtools-core/src/app/reducers/reports.ts
similarity index 67%
rename from packages/redux-devtools-core/src/app/reducers/reports.js
rename to packages/redux-devtools-core/src/app/reducers/reports.ts
index 5f825572..a085461c 100644
--- a/packages/redux-devtools-core/src/app/reducers/reports.js
+++ b/packages/redux-devtools-core/src/app/reducers/reports.ts
@@ -1,12 +1,24 @@
import {
UPDATE_REPORTS /* , GET_REPORT_SUCCESS */,
} from '../constants/actionTypes';
+import { StoreAction } from '../actions';
-const initialState = {
+export interface Data {
+ id: unknown;
+}
+
+export interface ReportsState {
+ data: Data[];
+}
+
+const initialState: ReportsState = {
data: [],
};
-export default function reports(state = initialState, action) {
+export default function reports(
+ state = initialState,
+ action: StoreAction
+): ReportsState {
/* if (action.type === GET_REPORT_SUCCESS) {
const id = action.data.id;
return {
@@ -19,17 +31,16 @@ export default function reports(state = initialState, action) {
return state;
const request = action.request;
- const data = request.data;
switch (request.type) {
case 'list':
return {
...state,
- data,
+ data: request.data,
};
case 'add':
return {
...state,
- data: [...state.data, data],
+ data: [...state.data, request.data],
};
case 'remove':
return {
diff --git a/packages/redux-devtools-core/src/app/reducers/section.js b/packages/redux-devtools-core/src/app/reducers/section.js
deleted file mode 100644
index 252bdfbb..00000000
--- a/packages/redux-devtools-core/src/app/reducers/section.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { CHANGE_SECTION } from '../constants/actionTypes';
-
-export default function section(state = 'Actions', action) {
- if (action.type === CHANGE_SECTION) {
- return action.section;
- }
- return state;
-}
diff --git a/packages/redux-devtools-core/src/app/reducers/section.ts b/packages/redux-devtools-core/src/app/reducers/section.ts
new file mode 100644
index 00000000..3497384f
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/reducers/section.ts
@@ -0,0 +1,11 @@
+import { CHANGE_SECTION } from '../constants/actionTypes';
+import { StoreAction } from '../actions';
+
+export type SectionState = string;
+
+export default function section(state = 'Actions', action: StoreAction) {
+ if (action.type === CHANGE_SECTION) {
+ return action.section;
+ }
+ return state;
+}
diff --git a/packages/redux-devtools-core/src/app/reducers/socket.js b/packages/redux-devtools-core/src/app/reducers/socket.ts
similarity index 72%
rename from packages/redux-devtools-core/src/app/reducers/socket.js
rename to packages/redux-devtools-core/src/app/reducers/socket.ts
index 9d1e9192..ae8fc1b3 100644
--- a/packages/redux-devtools-core/src/app/reducers/socket.js
+++ b/packages/redux-devtools-core/src/app/reducers/socket.ts
@@ -1,15 +1,29 @@
+import { AuthStates, States } from 'socketcluster-client/lib/scclientsocket';
import * as actions from '../constants/socketActionTypes';
+import { StoreAction } from '../actions';
-const initialState = {
+export interface SocketState {
+ id: string | null;
+ channels: string[];
+ socketState: States;
+ authState: AuthStates | 'pending';
+ error: Error | undefined;
+ baseChannel?: string;
+ authToken?: null;
+}
+
+const initialState: SocketState = {
id: null,
channels: [],
socketState: actions.CLOSED,
authState: actions.PENDING,
- authToken: null,
error: undefined,
};
-export default function socket(state = initialState, action) {
+export default function socket(
+ state = initialState,
+ action: StoreAction
+): SocketState {
switch (action.type) {
case actions.CONNECT_REQUEST: {
return {
@@ -39,7 +53,6 @@ export default function socket(state = initialState, action) {
return {
...state,
authState: actions.AUTHENTICATED,
- authToken: action.authToken,
baseChannel: action.baseChannel,
};
case actions.AUTH_ERROR:
@@ -57,13 +70,13 @@ export default function socket(state = initialState, action) {
case actions.SUBSCRIBE_SUCCESS:
return {
...state,
- channels: [...state.channels, action.channelName],
+ channels: [...state.channels, action.channel],
};
case actions.UNSUBSCRIBE:
return {
...state,
channels: state.channels.filter(
- (channel) => channel !== action.channelName
+ (channel) => channel !== action.channel
),
};
case actions.DISCONNECTED:
diff --git a/packages/redux-devtools-core/src/app/reducers/theme.js b/packages/redux-devtools-core/src/app/reducers/theme.js
deleted file mode 100644
index 1fb50905..00000000
--- a/packages/redux-devtools-core/src/app/reducers/theme.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { CHANGE_THEME } from '../constants/actionTypes';
-
-export default function theme(
- state = { theme: 'default', scheme: 'default', light: true },
- action
-) {
- if (action.type === CHANGE_THEME) {
- return {
- theme: action.theme,
- scheme: action.scheme,
- light: !action.dark,
- };
- }
- return state;
-}
diff --git a/packages/redux-devtools-core/src/app/reducers/theme.ts b/packages/redux-devtools-core/src/app/reducers/theme.ts
new file mode 100644
index 00000000..1c6618ad
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/reducers/theme.ts
@@ -0,0 +1,27 @@
+import { Scheme, Theme } from 'devui';
+import { CHANGE_THEME } from '../constants/actionTypes';
+import { StoreAction } from '../actions';
+
+export interface ThemeState {
+ readonly theme: Theme;
+ readonly scheme: Scheme;
+ readonly light: boolean;
+}
+
+export default function theme(
+ state: ThemeState = {
+ theme: 'default' as const,
+ scheme: 'default' as const,
+ light: true,
+ },
+ action: StoreAction
+) {
+ if (action.type === CHANGE_THEME) {
+ return {
+ theme: action.theme,
+ scheme: action.scheme,
+ light: !action.dark,
+ };
+ }
+ return state;
+}
diff --git a/packages/redux-devtools-core/src/app/store/configureStore.js b/packages/redux-devtools-core/src/app/store/configureStore.js
deleted file mode 100644
index 9bcb0c1b..00000000
--- a/packages/redux-devtools-core/src/app/store/configureStore.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import { createStore, compose, applyMiddleware } from 'redux';
-import localForage from 'localforage';
-import { getStoredState, createPersistor } from 'redux-persist';
-import api from '../middlewares/api';
-import exportState from '../middlewares/exportState';
-import rootReducer from '../reducers';
-
-export default function configureStore(callback, key) {
- const persistConfig = {
- keyPrefix: `redux-devtools${key || ''}:`,
- blacklist: ['instances', 'socket'],
- storage: localForage,
- serialize: (data) => data,
- deserialize: (data) => data,
- };
-
- getStoredState(persistConfig, (err, restoredState) => {
- let composeEnhancers = compose;
- if (process.env.NODE_ENV !== 'production') {
- if (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) {
- composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
- }
- if (module.hot) {
- // Enable Webpack hot module replacement for reducers
- module.hot.accept('../reducers', () => {
- const nextReducer = require('../reducers'); // eslint-disable-line global-require
- store.replaceReducer(nextReducer);
- });
- }
- }
-
- const store = createStore(
- rootReducer,
- restoredState,
- composeEnhancers(applyMiddleware(exportState, api))
- );
- const persistor = createPersistor(store, persistConfig);
- callback(store, restoredState);
- if (err) persistor.purge();
- });
-}
diff --git a/packages/redux-devtools-core/src/app/store/configureStore.ts b/packages/redux-devtools-core/src/app/store/configureStore.ts
new file mode 100644
index 00000000..fc8be313
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/store/configureStore.ts
@@ -0,0 +1,60 @@
+import { createStore, compose, applyMiddleware, Store } from 'redux';
+import localForage from 'localforage';
+import {
+ getStoredState,
+ createPersistor,
+ PersistorConfig,
+} from 'redux-persist';
+import api from '../middlewares/api';
+import exportState from '../middlewares/exportState';
+import rootReducer, { StoreState } from '../reducers';
+import { StoreAction } from '../actions';
+
+export default function configureStore(
+ callback: (
+ store: Store,
+ restoredState: Partial | undefined
+ ) => void,
+ key?: string
+) {
+ const persistConfig: PersistorConfig = ({
+ keyPrefix: `redux-devtools${key || ''}:`,
+ blacklist: ['instances', 'socket'],
+ storage: localForage,
+ serialize: (data: unknown) => data,
+ deserialize: (data: unknown) => data,
+ } as unknown) as PersistorConfig;
+
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ getStoredState(persistConfig, (err, restoredState) => {
+ let composeEnhancers = compose;
+ if (process.env.NODE_ENV !== 'production') {
+ if (
+ ((window as unknown) as {
+ __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;
+ }).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ ) {
+ composeEnhancers = ((window as unknown) as {
+ __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: typeof compose;
+ }).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
+ }
+ if (module.hot) {
+ // Enable Webpack hot module replacement for reducers
+ module.hot.accept('../reducers', () => {
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
+ const nextReducer = require('../reducers'); // eslint-disable-line global-require
+ store.replaceReducer(nextReducer);
+ });
+ }
+ }
+
+ const store = createStore(
+ rootReducer,
+ restoredState,
+ composeEnhancers(applyMiddleware(exportState, api))
+ );
+ const persistor = createPersistor(store, persistConfig);
+ callback(store, restoredState);
+ if (err) persistor.purge();
+ });
+}
diff --git a/packages/redux-devtools-core/src/app/utils/commitExcessActions.js b/packages/redux-devtools-core/src/app/utils/commitExcessActions.ts
similarity index 89%
rename from packages/redux-devtools-core/src/app/utils/commitExcessActions.js
rename to packages/redux-devtools-core/src/app/utils/commitExcessActions.ts
index 76b5c15f..ff7f8fdb 100644
--- a/packages/redux-devtools-core/src/app/utils/commitExcessActions.js
+++ b/packages/redux-devtools-core/src/app/utils/commitExcessActions.ts
@@ -1,7 +1,9 @@
// Based on https://github.com/gaearon/redux-devtools/pull/241
/* eslint-disable no-param-reassign */
-export default function commitExcessActions(liftedState, n = 1) {
+import { State } from '../reducers/instances';
+
+export default function commitExcessActions(liftedState: State, n = 1) {
// Auto-commits n-number of excess actions.
let excess = n;
let idsToDelete = liftedState.stagedActionIds.slice(1, excess + 1);
diff --git a/packages/redux-devtools-core/src/app/utils/getMonitor.js b/packages/redux-devtools-core/src/app/utils/getMonitor.tsx
similarity index 90%
rename from packages/redux-devtools-core/src/app/utils/getMonitor.js
rename to packages/redux-devtools-core/src/app/utils/getMonitor.tsx
index 32a9ea5c..55379e1d 100644
--- a/packages/redux-devtools-core/src/app/utils/getMonitor.js
+++ b/packages/redux-devtools-core/src/app/utils/getMonitor.tsx
@@ -9,7 +9,7 @@ export const monitors = [
{ value: 'ChartMonitor', name: 'Chart' },
];
-export default function getMonitor({ monitor }) {
+export default function getMonitor({ monitor }: { monitor: string }) {
switch (monitor) {
case 'LogMonitor':
return (
diff --git a/packages/redux-devtools-core/src/app/utils/monitorActions.js b/packages/redux-devtools-core/src/app/utils/monitorActions.ts
similarity index 78%
rename from packages/redux-devtools-core/src/app/utils/monitorActions.js
rename to packages/redux-devtools-core/src/app/utils/monitorActions.ts
index 4cc58517..1e5fc604 100644
--- a/packages/redux-devtools-core/src/app/utils/monitorActions.js
+++ b/packages/redux-devtools-core/src/app/utils/monitorActions.ts
@@ -2,8 +2,12 @@ import difference from 'lodash/difference';
import omit from 'lodash/omit';
import stringifyJSON from './stringifyJSON';
import { SET_STATE } from '../constants/actionTypes';
+import { InstancesState, State } from '../reducers/instances';
+import { Dispatch, MiddlewareAPI } from 'redux';
+import { DispatchAction, StoreAction } from '../actions';
+import { StoreState } from '../reducers';
-export function sweep(state) {
+export function sweep(state: State): State {
return {
...state,
actionsById: omit(state.actionsById, state.skippedActionIds),
@@ -17,12 +21,12 @@ export function sweep(state) {
}
export function nonReduxDispatch(
- store,
- message,
- instanceId,
- action,
- initialState,
- preInstances
+ store: MiddlewareAPI, StoreState>,
+ message: string,
+ instanceId: string,
+ action: DispatchAction,
+ initialState: string | undefined,
+ preInstances: InstancesState
) {
const instances = preInstances || store.getState().instances;
const state = instances.states[instanceId];
diff --git a/packages/redux-devtools-core/src/app/utils/parseJSON.js b/packages/redux-devtools-core/src/app/utils/parseJSON.ts
similarity index 70%
rename from packages/redux-devtools-core/src/app/utils/parseJSON.js
rename to packages/redux-devtools-core/src/app/utils/parseJSON.ts
index 63370feb..3288fc20 100644
--- a/packages/redux-devtools-core/src/app/utils/parseJSON.js
+++ b/packages/redux-devtools-core/src/app/utils/parseJSON.ts
@@ -1,17 +1,17 @@
import jsan from 'jsan';
import { DATA_TYPE_KEY, DATA_REF_KEY } from '../constants/dataTypes';
-export function reviver(key, value) {
+export function reviver(key: string, value: unknown) {
if (
typeof value === 'object' &&
value !== null &&
'__serializedType__' in value &&
- typeof value.data === 'object'
+ typeof (value as any).data === 'object'
) {
- const data = value.data;
- data[DATA_TYPE_KEY] = value.__serializedType__;
+ const data = (value as any).data;
+ data[DATA_TYPE_KEY] = (value as any).__serializedType__;
if ('__serializedRef__' in value)
- data[DATA_REF_KEY] = value.__serializedRef__;
+ data[DATA_REF_KEY] = (value as any).__serializedRef__;
/*
if (Array.isArray(data)) {
data.__serializedType__ = value.__serializedType__;
@@ -26,7 +26,10 @@ export function reviver(key, value) {
return value;
}
-export default function parseJSON(data, serialize) {
+export default function parseJSON(
+ data: string | undefined,
+ serialize?: boolean
+) {
if (typeof data !== 'string') return data;
try {
return serialize ? jsan.parse(data, reviver) : jsan.parse(data);
diff --git a/packages/redux-devtools-core/src/app/utils/stringifyJSON.js b/packages/redux-devtools-core/src/app/utils/stringifyJSON.js
deleted file mode 100644
index d3191612..00000000
--- a/packages/redux-devtools-core/src/app/utils/stringifyJSON.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import jsan from 'jsan';
-import { DATA_TYPE_KEY, DATA_REF_KEY } from '../constants/dataTypes';
-
-function replacer(key, value) {
- if (typeof value === 'object' && value !== null && DATA_TYPE_KEY in value) {
- const __serializedType__ = value[DATA_TYPE_KEY];
- const clone = { ...value };
- delete clone[DATA_TYPE_KEY]; // eslint-disable-line no-param-reassign
- const r = { data: clone, __serializedType__ };
- if (DATA_REF_KEY in value) r.__serializedRef__ = clone[DATA_REF_KEY];
- return r;
- }
- return value;
-}
-
-export default function stringifyJSON(data, serialize) {
- return serialize
- ? jsan.stringify(data, replacer, null, true)
- : jsan.stringify(data);
-}
diff --git a/packages/redux-devtools-core/src/app/utils/stringifyJSON.ts b/packages/redux-devtools-core/src/app/utils/stringifyJSON.ts
new file mode 100644
index 00000000..403e621e
--- /dev/null
+++ b/packages/redux-devtools-core/src/app/utils/stringifyJSON.ts
@@ -0,0 +1,24 @@
+import jsan from 'jsan';
+import { DATA_TYPE_KEY, DATA_REF_KEY } from '../constants/dataTypes';
+
+function replacer(key: string, value: unknown) {
+ if (typeof value === 'object' && value !== null && DATA_TYPE_KEY in value) {
+ const __serializedType__ = (value as any)[DATA_TYPE_KEY];
+ const clone = { ...value };
+ delete (clone as any)[DATA_TYPE_KEY]; // eslint-disable-line no-param-reassign
+ const r = { data: clone, __serializedType__ };
+ if (DATA_REF_KEY in value)
+ (r as any).__serializedRef__ = (clone as any)[DATA_REF_KEY];
+ return r;
+ }
+ return value;
+}
+
+export default function stringifyJSON(
+ data: unknown,
+ serialize: boolean | undefined
+) {
+ return serialize
+ ? jsan.stringify(data, replacer, (null as unknown) as undefined, true)
+ : jsan.stringify(data);
+}
diff --git a/packages/redux-devtools-core/src/app/utils/updateState.js b/packages/redux-devtools-core/src/app/utils/updateState.ts
similarity index 66%
rename from packages/redux-devtools-core/src/app/utils/updateState.js
rename to packages/redux-devtools-core/src/app/utils/updateState.ts
index 7157da99..eb2ba394 100644
--- a/packages/redux-devtools-core/src/app/utils/updateState.js
+++ b/packages/redux-devtools-core/src/app/utils/updateState.ts
@@ -1,12 +1,17 @@
import commitExcessActions from './commitExcessActions';
+import { State } from '../reducers/instances';
+import { Action } from 'redux';
+import { PerformAction } from 'redux-devtools-instrument';
export function recompute(
- previousLiftedState,
- storeState,
- action,
+ previousLiftedState: State,
+ storeState: State,
+ action:
+ | PerformAction>
+ | { action: Action; timestamp?: number; stack?: string },
nextActionId = 1,
- maxAge,
- isExcess
+ maxAge?: number,
+ isExcess?: boolean
) {
const actionId = nextActionId - 1;
const liftedState = { ...previousLiftedState };
@@ -19,8 +24,10 @@ export function recompute(
}
liftedState.stagedActionIds = [...liftedState.stagedActionIds, actionId];
liftedState.actionsById = { ...liftedState.actionsById };
- if (action.type === 'PERFORM_ACTION') {
- liftedState.actionsById[actionId] = action;
+ if ((action as PerformAction>).type === 'PERFORM_ACTION') {
+ liftedState.actionsById[actionId] = action as PerformAction<
+ Action
+ >;
} else {
liftedState.actionsById[actionId] = {
action: action.action || action,
diff --git a/packages/redux-devtools-core/src/index.js b/packages/redux-devtools-core/src/index.js
deleted file mode 100644
index 29d541ff..00000000
--- a/packages/redux-devtools-core/src/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-function injectedScript() {
- /* eslint-disable-next-line no-console */
- console.error(
- "Not implemented yet. WIP. If you're looking for utils, import `redux-devtools-core/lib/utils`."
- );
-}
-
-export default injectedScript;
diff --git a/packages/redux-devtools-core/index.js b/packages/redux-devtools-core/src/index.tsx
similarity index 94%
rename from packages/redux-devtools-core/index.js
rename to packages/redux-devtools-core/src/index.tsx
index bd23dae6..c40f8b2a 100644
--- a/packages/redux-devtools-core/index.js
+++ b/packages/redux-devtools-core/src/index.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { render } from 'react-dom';
-import App from './src/app';
+import App from './app';
render( , document.getElementById('root'));
diff --git a/packages/redux-devtools-core/src/utils/catchErrors.js b/packages/redux-devtools-core/src/utils/catchErrors.js
deleted file mode 100644
index b6d42219..00000000
--- a/packages/redux-devtools-core/src/utils/catchErrors.js
+++ /dev/null
@@ -1,42 +0,0 @@
-const ERROR = '@@redux-devtools/ERROR';
-
-export default function catchErrors(sendError) {
- if (typeof window === 'object' && typeof window.onerror === 'object') {
- window.onerror = function (message, url, lineNo, columnNo, error) {
- const errorAction = { type: ERROR, message, url, lineNo, columnNo };
- if (error && error.stack) errorAction.stack = error.stack;
- sendError(errorAction);
- return false;
- };
- } else if (typeof global !== 'undefined' && global.ErrorUtils) {
- global.ErrorUtils.setGlobalHandler((error, isFatal) => {
- sendError({ type: ERROR, error, isFatal });
- });
- }
-
- /* eslint-disable no-console */
- if (
- typeof console === 'object' &&
- typeof console.error === 'function' &&
- !console.beforeRemotedev
- ) {
- console.beforeRemotedev = console.error.bind(console);
- console.error = function () {
- let errorAction = { type: ERROR };
- const error = arguments[0];
- errorAction.message = error.message ? error.message : error;
- if (error.sourceURL) {
- errorAction = {
- ...errorAction,
- sourceURL: error.sourceURL,
- line: error.line,
- column: error.column,
- };
- }
- if (error.stack) errorAction.stack = error.stack;
- sendError(errorAction);
- console.beforeRemotedev.apply(null, arguments);
- };
- }
- /* eslint-enable no-console */
-}
diff --git a/packages/redux-devtools-core/src/utils/catchErrors.ts b/packages/redux-devtools-core/src/utils/catchErrors.ts
new file mode 100644
index 00000000..a04d2148
--- /dev/null
+++ b/packages/redux-devtools-core/src/utils/catchErrors.ts
@@ -0,0 +1,68 @@
+const ERROR = '@@redux-devtools/ERROR';
+
+interface ErrorAction {
+ type: typeof ERROR;
+ message?: Event | string;
+ url?: string | undefined;
+ lineNo?: number | undefined;
+ columnNo?: number | undefined;
+ stack?: string;
+ error?: Error;
+ isFatal?: boolean;
+ sourceURL?: string;
+ line?: number;
+ column?: number;
+}
+
+export default function catchErrors(
+ sendError: (errorAction: ErrorAction) => void
+) {
+ if (typeof window === 'object' && typeof window.onerror === 'object') {
+ window.onerror = function (message, url, lineNo, columnNo, error) {
+ const errorAction: ErrorAction = {
+ type: ERROR,
+ message,
+ url,
+ lineNo,
+ columnNo,
+ };
+ if (error && error.stack) errorAction.stack = error.stack;
+ sendError(errorAction);
+ return false;
+ };
+ } else if (typeof global !== 'undefined' && (global as any).ErrorUtils) {
+ (global as any).ErrorUtils.setGlobalHandler(
+ (error: Error, isFatal: boolean) => {
+ sendError({ type: ERROR, error, isFatal });
+ }
+ );
+ }
+
+ /* eslint-disable no-console */
+ if (
+ typeof console === 'object' &&
+ typeof console.error === 'function' &&
+ !(console as any).beforeRemotedev
+ ) {
+ (console as any).beforeRemotedev = console.error.bind(console);
+ console.error = function () {
+ let errorAction: ErrorAction = { type: ERROR };
+ // eslint-disable-next-line prefer-rest-params
+ const error = arguments[0];
+ errorAction.message = error.message ? error.message : error;
+ if (error.sourceURL) {
+ errorAction = {
+ ...errorAction,
+ sourceURL: error.sourceURL,
+ line: error.line,
+ column: error.column,
+ };
+ }
+ if (error.stack) errorAction.stack = error.stack;
+ sendError(errorAction);
+ // eslint-disable-next-line prefer-rest-params
+ (console as any).beforeRemotedev.apply(null, arguments);
+ };
+ }
+ /* eslint-enable no-console */
+}
diff --git a/packages/redux-devtools-core/src/utils/filters.js b/packages/redux-devtools-core/src/utils/filters.ts
similarity index 55%
rename from packages/redux-devtools-core/src/utils/filters.js
rename to packages/redux-devtools-core/src/utils/filters.ts
index d6607f6b..9c9644b1 100644
--- a/packages/redux-devtools-core/src/utils/filters.js
+++ b/packages/redux-devtools-core/src/utils/filters.ts
@@ -1,4 +1,7 @@
import mapValues from 'lodash/mapValues';
+import { PerformAction } from 'redux-devtools-instrument';
+import { Action } from 'redux';
+import { State } from '../app/reducers/instances';
export const FilterState = {
DO_NOT_FILTER: 'DO_NOT_FILTER',
@@ -6,19 +9,25 @@ export const FilterState = {
WHITELIST_SPECIFIC: 'WHITELIST_SPECIFIC',
};
-export function arrToRegex(v) {
+export function arrToRegex(v: string | string[]) {
return typeof v === 'string' ? v : v.join('|');
}
-function filterActions(actionsById, actionsFilter) {
+function filterActions(
+ actionsById: { [actionId: number]: PerformAction> },
+ actionsFilter: (action: Action, id: number) => Action
+) {
if (!actionsFilter) return actionsById;
- return mapValues(actionsById, (action, id) => ({
+ return mapValues(actionsById, (action, id: number) => ({
...action,
action: actionsFilter(action.action, id),
}));
}
-function filterStates(computedStates, statesFilter) {
+function filterStates(
+ computedStates: { state: unknown; error?: string | undefined }[],
+ statesFilter: (state: unknown, actionId: number) => unknown
+) {
if (!statesFilter) return computedStates;
return computedStates.map((state, idx) => ({
...state,
@@ -26,7 +35,17 @@ function filterStates(computedStates, statesFilter) {
}));
}
-export function getLocalFilter(config) {
+interface Config {
+ actionsBlacklist?: string[];
+ actionsWhitelist?: string[];
+}
+
+interface LocalFilter {
+ whitelist?: string;
+ blacklist?: string;
+}
+
+export function getLocalFilter(config: Config): LocalFilter | undefined {
if (config.actionsBlacklist || config.actionsWhitelist) {
return {
whitelist: config.actionsWhitelist && config.actionsWhitelist.join('|'),
@@ -36,33 +55,53 @@ export function getLocalFilter(config) {
return undefined;
}
+interface DevToolsOptions {
+ filter?:
+ | typeof FilterState.DO_NOT_FILTER
+ | typeof FilterState.BLACKLIST_SPECIFIC
+ | typeof FilterState.WHITELIST_SPECIFIC;
+ whitelist?: string;
+ blacklist?: string;
+}
function getDevToolsOptions() {
- return (typeof window !== 'undefined' && window.devToolsOptions) || {};
+ return (
+ (typeof window !== 'undefined' &&
+ (window as { devToolsOptions?: DevToolsOptions }).devToolsOptions) ||
+ {}
+ );
}
-export function isFiltered(action, localFilter) {
- const { type } = action.action || action;
+export function isFiltered(
+ action: PerformAction> | Action,
+ localFilter?: LocalFilter
+) {
+ const { type } = (action as PerformAction>).action || action;
const opts = getDevToolsOptions();
if (
(!localFilter &&
opts.filter &&
opts.filter === FilterState.DO_NOT_FILTER) ||
- (type && typeof type.match !== 'function')
+ (type && typeof (type as string).match !== 'function')
)
return false;
const { whitelist, blacklist } = localFilter || opts;
return (
- (whitelist && !type.match(whitelist)) ||
- (blacklist && type.match(blacklist))
+ // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
+ (whitelist && !(type as string).match(whitelist)) ||
+ // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
+ (blacklist && (type as string).match(blacklist))
);
}
-export function filterStagedActions(state, filters) {
+export function filterStagedActions(state: State, filters: LocalFilter) {
if (!filters) return state;
- const filteredStagedActionIds = [];
- const filteredComputedStates = [];
+ const filteredStagedActionIds: number[] = [];
+ const filteredComputedStates: {
+ state: unknown;
+ error?: string | undefined;
+ }[] = [];
state.stagedActionIds.forEach((id, idx) => {
if (!isFiltered(state.actionsById[id], filters)) {
@@ -79,13 +118,13 @@ export function filterStagedActions(state, filters) {
}
export function filterState(
- state,
- type,
- localFilter,
- stateSanitizer,
- actionSanitizer,
- nextActionId,
- predicate
+ state: State,
+ type: string,
+ localFilter: LocalFilter,
+ stateSanitizer: (state: unknown, actionId: number) => unknown,
+ actionSanitizer: (action: Action, id: number) => Action,
+ nextActionId: number,
+ predicate: (currState: unknown, currAction: Action) => boolean
) {
if (type === 'ACTION')
return !stateSanitizer ? state : stateSanitizer(state, nextActionId - 1);
@@ -97,9 +136,14 @@ export function filterState(
localFilter ||
(filter && filter !== FilterState.DO_NOT_FILTER)
) {
- const filteredStagedActionIds = [];
- const filteredComputedStates = [];
- const sanitizedActionsById = actionSanitizer && {};
+ const filteredStagedActionIds: number[] = [];
+ const filteredComputedStates: {
+ state: unknown;
+ error?: string | undefined;
+ }[] = [];
+ const sanitizedActionsById: {
+ [id: number]: PerformAction>;
+ } = actionSanitizer && {};
const { actionsById } = state;
const { computedStates } = state;
diff --git a/packages/redux-devtools-core/src/utils/get-params.ts b/packages/redux-devtools-core/src/utils/get-params.ts
new file mode 100644
index 00000000..417ec500
--- /dev/null
+++ b/packages/redux-devtools-core/src/utils/get-params.ts
@@ -0,0 +1,4 @@
+declare module 'get-params' {
+ function getParams(func: (...args: any[]) => unknown): string[];
+ export default getParams;
+}
diff --git a/packages/redux-devtools-core/src/utils/importState.ts b/packages/redux-devtools-core/src/utils/importState.ts
new file mode 100644
index 00000000..1afe997f
--- /dev/null
+++ b/packages/redux-devtools-core/src/utils/importState.ts
@@ -0,0 +1,105 @@
+import mapValues from 'lodash/mapValues';
+import jsan from 'jsan';
+import { immutableSerialize } from 'redux-devtools-serialize';
+import { Action } from 'redux';
+import Immutable from 'immutable';
+import { State } from '../app/reducers/instances';
+
+function deprecate(param: string) {
+ // eslint-disable-next-line no-console
+ console.warn(
+ `\`${param}\` parameter for Redux DevTools Extension is deprecated. Use \`serialize\` parameter instead:` +
+ ' https://github.com/zalmoxisus/redux-devtools-extension/releases/tag/v2.12.1'
+ );
+}
+
+export default function importState(
+ state: string,
+ {
+ deserializeState,
+ deserializeAction,
+ serialize,
+ }: {
+ deserializeState?: (state: string) => unknown;
+ deserializeAction?: (action: string) => Action;
+ serialize?: {
+ immutable?: typeof Immutable;
+ refs?: (new (data: any) => unknown)[] | null;
+ reviver?: (key: string, value: unknown) => unknown;
+ };
+ }
+) {
+ if (!state) return undefined;
+ let parse = jsan.parse;
+ if (serialize) {
+ if (serialize.immutable) {
+ parse = (v) =>
+ jsan.parse(
+ v,
+ immutableSerialize(serialize.immutable!, serialize.refs).reviver
+ );
+ } else if (serialize.reviver) {
+ parse = (v) => jsan.parse(v, serialize.reviver);
+ }
+ }
+
+ let preloadedState: State | undefined;
+ let nextLiftedState: State = parse(state) as State;
+ if (
+ ((nextLiftedState as unknown) as {
+ payload?: string;
+ preloadedState?: string;
+ }).payload
+ ) {
+ if (
+ ((nextLiftedState as unknown) as {
+ payload: string;
+ preloadedState?: string;
+ }).preloadedState
+ )
+ preloadedState = parse(
+ ((nextLiftedState as unknown) as {
+ payload: string;
+ preloadedState: string;
+ }).preloadedState
+ ) as State;
+ nextLiftedState = parse(
+ ((nextLiftedState as unknown) as {
+ payload: string;
+ }).payload
+ ) as State;
+ }
+ if (deserializeState) {
+ deprecate('deserializeState');
+ if (typeof nextLiftedState.computedStates !== 'undefined') {
+ nextLiftedState.computedStates = nextLiftedState.computedStates.map(
+ (computedState) => ({
+ ...computedState,
+ state: deserializeState(computedState.state as string),
+ })
+ );
+ }
+ if (typeof nextLiftedState.committedState !== 'undefined') {
+ nextLiftedState.committedState = deserializeState(
+ nextLiftedState.committedState as string
+ );
+ }
+ if (typeof preloadedState !== 'undefined') {
+ preloadedState = deserializeState(
+ (preloadedState as unknown) as string
+ ) as State;
+ }
+ }
+ if (deserializeAction) {
+ deprecate('deserializeAction');
+ nextLiftedState.actionsById = mapValues(
+ nextLiftedState.actionsById,
+ (liftedAction) => ({
+ ...liftedAction,
+ action: deserializeAction((liftedAction.action as unknown) as string),
+ })
+ );
+ }
+
+ return { nextLiftedState, preloadedState };
+}
diff --git a/packages/redux-devtools-core/src/utils/index.js b/packages/redux-devtools-core/src/utils/index.ts
similarity index 55%
rename from packages/redux-devtools-core/src/utils/index.js
rename to packages/redux-devtools-core/src/utils/index.ts
index 45bd643c..c343b293 100644
--- a/packages/redux-devtools-core/src/utils/index.js
+++ b/packages/redux-devtools-core/src/utils/index.ts
@@ -1,14 +1,24 @@
import getParams from 'get-params';
import jsan from 'jsan';
import { nanoid } from 'nanoid/non-secure';
-import seralizeImmutable from 'remotedev-serialize/immutable/serialize';
+import { immutableSerialize } from 'redux-devtools-serialize';
+import Immutable from 'immutable';
+import { Action } from 'redux';
-export function generateId(id) {
+export function generateId(id: string | undefined) {
return id || nanoid(7);
}
-function flatTree(obj, namespace = '') {
- let functions = [];
+// eslint-disable-next-line @typescript-eslint/ban-types
+function flatTree(
+ obj: { [key: string]: (...args: any[]) => unknown },
+ namespace = ''
+) {
+ let functions: {
+ name: string;
+ func: (...args: any[]) => unknown;
+ args: string[];
+ }[] = [];
Object.keys(obj).forEach((key) => {
const prop = obj[key];
if (typeof prop === 'function') {
@@ -24,18 +34,23 @@ function flatTree(obj, namespace = '') {
return functions;
}
-export function getMethods(obj) {
+export function getMethods(obj: unknown) {
if (typeof obj !== 'object') return undefined;
- let functions;
- let m;
- if (obj.__proto__) m = obj.__proto__.__proto__;
- if (!m) m = obj;
+ let functions:
+ | {
+ name: string;
+ args: string[];
+ }[]
+ | undefined;
+ let m: { [key: string]: (...args: any[]) => unknown } | undefined;
+ if ((obj as any).__proto__) m = (obj as any).__proto__.__proto__;
+ if (!m) m = obj as any;
Object.getOwnPropertyNames(m).forEach((key) => {
const propDescriptor = Object.getOwnPropertyDescriptor(m, key);
if (!propDescriptor || 'get' in propDescriptor || 'set' in propDescriptor)
return;
- const prop = m[key];
+ const prop = m![key];
if (typeof prop === 'function' && key !== 'constructor') {
if (!functions) functions = [];
functions.push({
@@ -47,15 +62,17 @@ export function getMethods(obj) {
return functions;
}
-export function getActionsArray(actionCreators) {
+export function getActionsArray(actionCreators: {
+ [key: string]: (...args: any[]) => unknown;
+}) {
if (Array.isArray(actionCreators)) return actionCreators;
return flatTree(actionCreators);
}
-/* eslint-disable no-new-func */
-const interpretArg = (arg) => new Function('return ' + arg)();
+// eslint-disable-next-line @typescript-eslint/no-implied-eval
+const interpretArg = (arg: string) => new Function('return ' + arg)();
-function evalArgs(inArgs, restArgs) {
+function evalArgs(inArgs: string[], restArgs: string) {
const args = inArgs.map(interpretArg);
if (!restArgs) return args;
const rest = interpretArg(restArgs);
@@ -63,8 +80,14 @@ function evalArgs(inArgs, restArgs) {
throw new Error('rest must be an array');
}
-export function evalAction(action, actionCreators) {
+export function evalAction(
+ action: string | { args: string[]; rest: string; selected: string },
+ actionCreators: {
+ [selected: string]: { func: (...args: any[]) => Action };
+ }
+) {
if (typeof action === 'string') {
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
return new Function('return ' + action)();
}
@@ -73,12 +96,17 @@ export function evalAction(action, actionCreators) {
return actionCreator(...args);
}
-export function evalMethod(action, obj) {
+export function evalMethod(
+ action: string | { args: string[]; rest: string; name: string },
+ obj: unknown
+) {
if (typeof action === 'string') {
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
return new Function('return ' + action).call(obj);
}
const args = evalArgs(action.args, action.rest);
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
return new Function('args', `return this.${action.name}(args)`).apply(
obj,
args
@@ -86,7 +114,7 @@ export function evalMethod(action, obj) {
}
/* eslint-enable */
-function tryCatchStringify(obj) {
+function tryCatchStringify(obj: unknown) {
try {
return JSON.stringify(obj);
} catch (err) {
@@ -94,11 +122,26 @@ function tryCatchStringify(obj) {
if (process.env.NODE_ENV !== 'production')
console.log('Failed to stringify', err);
/* eslint-enable no-console */
- return jsan.stringify(obj, null, null, { circular: '[CIRCULAR]' });
+ return jsan.stringify(
+ obj,
+ (null as unknown) as undefined,
+ (null as unknown) as undefined,
+ ({
+ circular: '[CIRCULAR]',
+ } as unknown) as boolean
+ );
}
}
-export function stringify(obj, serialize) {
+export function stringify(
+ obj: unknown,
+ serialize?:
+ | {
+ replacer?: (key: string, value: unknown) => unknown;
+ options?: unknown | boolean;
+ }
+ | true
+) {
if (typeof serialize === 'undefined') {
return tryCatchStringify(obj);
}
@@ -106,23 +149,44 @@ export function stringify(obj, serialize) {
return jsan.stringify(
obj,
function (key, value) {
- if (value && typeof value.toJS === 'function') return value.toJS();
+ if (value && typeof (value as any).toJS === 'function')
+ return (value as any).toJS();
return value;
},
- null,
+ (null as unknown) as undefined,
true
);
}
- return jsan.stringify(obj, serialize.replacer, null, serialize.options);
+ return jsan.stringify(
+ obj,
+ serialize.replacer,
+ (null as unknown) as undefined,
+ serialize.options as boolean
+ );
}
-export function getSeralizeParameter(config, param) {
+export function getSeralizeParameter(
+ config: {
+ serialize?: {
+ immutable?: typeof Immutable;
+ refs?: (new (data: any) => unknown)[] | null;
+ replacer?: (key: string, value: unknown) => unknown;
+ options?: unknown | boolean;
+ };
+ },
+ param: string
+):
+ | {
+ replacer?: (key: string, value: unknown) => unknown;
+ options: unknown | boolean;
+ }
+ | undefined {
const serialize = config.serialize;
if (serialize) {
if (serialize === true) return { options: true };
if (serialize.immutable) {
return {
- replacer: seralizeImmutable(serialize.immutable, serialize.refs)
+ replacer: immutableSerialize(serialize.immutable, serialize.refs)
.replacer,
options: serialize.options || true,
};
@@ -131,7 +195,12 @@ export function getSeralizeParameter(config, param) {
return { replacer: serialize.replacer, options: serialize.options || true };
}
- const value = config[param];
+ const value = (config as {
+ [param: string]: {
+ replacer?: (key: string, value: unknown) => unknown;
+ options: unknown | boolean;
+ };
+ })[param];
if (typeof value === 'undefined') return undefined;
// eslint-disable-next-line no-console
console.warn(
@@ -139,12 +208,15 @@ export function getSeralizeParameter(config, param) {
' https://github.com/zalmoxisus/redux-devtools-extension/releases/tag/v2.12.1'
);
- if (typeof serializeState === 'boolean') return { options: value };
- if (typeof serializeState === 'function') return { replacer: value };
return value;
}
-export function getStackTrace(config, toExcludeFromTrace) {
+export function getStackTrace(
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ config: { trace?: () => {}; traceLimit: number },
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ toExcludeFromTrace?: Function | undefined
+) {
if (!config.trace) return undefined;
if (typeof config.trace === 'function') return config.trace();
@@ -169,7 +241,7 @@ export function getStackTrace(config, toExcludeFromTrace) {
typeof Error.stackTraceLimit !== 'number' ||
Error.stackTraceLimit > traceLimit
) {
- const frames = stack.split('\n');
+ const frames = stack!.split('\n');
if (frames.length > traceLimit) {
stack = frames
.slice(0, traceLimit + extraFrames + (frames[0] === 'Error' ? 1 : 0))
diff --git a/packages/redux-devtools-core/test/__mocks__/styleMock.js b/packages/redux-devtools-core/test/__mocks__/styleMock.js
deleted file mode 100644
index f053ebf7..00000000
--- a/packages/redux-devtools-core/test/__mocks__/styleMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = {};
diff --git a/packages/redux-devtools-core/test/app.spec.js b/packages/redux-devtools-core/test/app.spec.tsx
similarity index 92%
rename from packages/redux-devtools-core/test/app.spec.js
rename to packages/redux-devtools-core/test/app.spec.tsx
index 71b42159..d7ce85ee 100644
--- a/packages/redux-devtools-core/test/app.spec.js
+++ b/packages/redux-devtools-core/test/app.spec.tsx
@@ -1,7 +1,7 @@
-import React from 'react';
+import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
-import { mount } from 'enzyme';
+import { mount, ReactWrapper } from 'enzyme';
// import { mountToJson } from 'enzyme-to-json';
import App from '../src/app/containers/App';
import api from '../src/app/middlewares/api';
@@ -10,7 +10,7 @@ import rootReducer from '../src/app/reducers';
import { DATA_TYPE_KEY } from '../src/app/constants/dataTypes';
import stringifyJSON from '../src/app/utils/stringifyJSON';
-let wrapper;
+let wrapper: ReactWrapper;
const store = createStore(rootReducer, applyMiddleware(exportState, api));
diff --git a/packages/redux-devtools-test-generator/test/setup.ts b/packages/redux-devtools-core/test/setup.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/test/setup.ts
rename to packages/redux-devtools-core/test/setup.ts
diff --git a/packages/redux-devtools-test-generator/test/tsconfig.json b/packages/redux-devtools-core/test/tsconfig.json
similarity index 100%
rename from packages/redux-devtools-test-generator/test/tsconfig.json
rename to packages/redux-devtools-core/test/tsconfig.json
diff --git a/packages/redux-devtools-core/tsconfig.json b/packages/redux-devtools-core/tsconfig.json
new file mode 100644
index 00000000..7b7d1492
--- /dev/null
+++ b/packages/redux-devtools-core/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.react.base.json",
+ "compilerOptions": {
+ "outDir": "lib"
+ },
+ "include": ["src"]
+}
diff --git a/packages/redux-devtools-core/tsconfig.webpack.json b/packages/redux-devtools-core/tsconfig.webpack.json
new file mode 100644
index 00000000..6ab34185
--- /dev/null
+++ b/packages/redux-devtools-core/tsconfig.webpack.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "include": ["webpack.config.ts", "webpack.config.umd.ts"]
+}
diff --git a/packages/redux-devtools-core/webpack.config.js b/packages/redux-devtools-core/webpack.config.ts
similarity index 72%
rename from packages/redux-devtools-core/webpack.config.js
rename to packages/redux-devtools-core/webpack.config.ts
index ed75e5f7..75d1c5ef 100644
--- a/packages/redux-devtools-core/webpack.config.js
+++ b/packages/redux-devtools-core/webpack.config.ts
@@ -1,14 +1,15 @@
-const path = require('path');
-const webpack = require('webpack');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
+import * as path from 'path';
+import * as webpack from 'webpack';
+import HtmlWebpackPlugin from 'html-webpack-plugin';
+import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
-module.exports = (env = {}) => ({
+module.exports = (env: { development?: boolean; platform?: string } = {}) => ({
mode: env.development ? 'development' : 'production',
entry: {
- app: './index.js',
+ app: './src/index',
},
output: {
- path: path.resolve(__dirname, 'build/' + env.platform),
+ path: path.resolve(__dirname, `build/${env.platform as string}`),
publicPath: '',
filename: 'js/[name].js',
sourceMapFilename: 'js/[name].map',
@@ -16,7 +17,7 @@ module.exports = (env = {}) => ({
module: {
rules: [
{
- test: /\.js$/,
+ test: /\.(js|ts)x?$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
@@ -44,6 +45,9 @@ module.exports = (env = {}) => ({
},
],
},
+ resolve: {
+ extensions: ['.js', '.jsx', '.ts', '.tsx'],
+ },
plugins: [
new webpack.DefinePlugin({
'process.env': {
@@ -56,6 +60,11 @@ module.exports = (env = {}) => ({
new HtmlWebpackPlugin({
template: 'assets/index.html',
}),
+ new ForkTsCheckerWebpackPlugin({
+ typescript: {
+ configFile: 'tsconfig.json',
+ },
+ }),
],
optimization: {
minimize: false,
diff --git a/packages/redux-devtools-core/webpack.config.umd.js b/packages/redux-devtools-core/webpack.config.umd.ts
similarity index 74%
rename from packages/redux-devtools-core/webpack.config.umd.js
rename to packages/redux-devtools-core/webpack.config.umd.ts
index 8e31df45..99abaf62 100644
--- a/packages/redux-devtools-core/webpack.config.umd.js
+++ b/packages/redux-devtools-core/webpack.config.umd.ts
@@ -1,10 +1,11 @@
-const path = require('path');
-const webpack = require('webpack');
+import * as path from 'path';
+import * as webpack from 'webpack';
+import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
-module.exports = (env = {}) => ({
+module.exports = (env: { production?: boolean } = {}) => ({
mode: env.production ? 'production' : 'development',
entry: {
- app: ['./src/app/index.js'],
+ app: ['./src/app/index'],
},
output: {
library: 'ReduxDevTools',
@@ -18,7 +19,7 @@ module.exports = (env = {}) => ({
module: {
rules: [
{
- test: /\.js$/,
+ test: /\.(js|ts)x?$/,
loader: 'babel-loader',
exclude: /node_modules/,
},
@@ -41,6 +42,9 @@ module.exports = (env = {}) => ({
},
],
},
+ resolve: {
+ extensions: ['.js', '.jsx', '.ts', '.tsx'],
+ },
plugins: [
new webpack.DefinePlugin({
'process.env': {
@@ -48,6 +52,11 @@ module.exports = (env = {}) => ({
PLATFORM: JSON.stringify('web'),
},
}),
+ new ForkTsCheckerWebpackPlugin({
+ typescript: {
+ configFile: 'tsconfig.json',
+ },
+ }),
],
externals: {
react: {
diff --git a/packages/redux-devtools-extension/README.md b/packages/redux-devtools-extension/README.md
new file mode 100644
index 00000000..fdc90a1a
--- /dev/null
+++ b/packages/redux-devtools-extension/README.md
@@ -0,0 +1,50 @@
+# Redux DevTools Extension's helper
+
+[](https://gitter.im/zalmoxisus/redux-devtools-extension?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+## Usage
+
+Install:
+
+```
+npm install --save redux-devtools-extension
+```
+
+and use like that:
+
+```js
+import { createStore, applyMiddleware } from 'redux';
+import { composeWithDevTools } from 'redux-devtools-extension';
+
+const store = createStore(
+ reducer,
+ composeWithDevTools(
+ applyMiddleware(...middleware)
+ // other store enhancers if any
+ )
+);
+```
+
+or if needed to apply [extension’s options](https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/API/Arguments.md#windowdevtoolsextensionconfig):
+
+```js
+import { createStore, applyMiddleware } from 'redux';
+import { composeWithDevTools } from 'redux-devtools-extension';
+
+const composeEnhancers = composeWithDevTools({
+ // Specify here name, actionsBlacklist, actionsCreators and other options
+});
+const store = createStore(
+ reducer,
+ composeEnhancers(
+ applyMiddleware(...middleware)
+ // other store enhancers if any
+ )
+);
+```
+
+There’re just [few lines of code](https://github.com/zalmoxisus/redux-devtools-extension/blob/master/npm-package/index.js). If you don’t want to allow the extension in production, just use ‘redux-devtools-extension/developmentOnly’ instead of ‘redux-devtools-extension’.
+
+## License
+
+MIT
diff --git a/packages/redux-devtools-extension/developmentOnly.d.ts b/packages/redux-devtools-extension/developmentOnly.d.ts
new file mode 100644
index 00000000..e45b4859
--- /dev/null
+++ b/packages/redux-devtools-extension/developmentOnly.d.ts
@@ -0,0 +1 @@
+export * from 'redux-devtools-extension';
diff --git a/packages/redux-devtools-extension/developmentOnly.js b/packages/redux-devtools-extension/developmentOnly.js
new file mode 100644
index 00000000..0294f1f9
--- /dev/null
+++ b/packages/redux-devtools-extension/developmentOnly.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var compose = require('redux').compose;
+
+exports.__esModule = true;
+exports.composeWithDevTools =
+ process.env.NODE_ENV !== 'production' &&
+ typeof window !== 'undefined' &&
+ window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ : function () {
+ if (arguments.length === 0) return undefined;
+ if (typeof arguments[0] === 'object') return compose;
+ return compose.apply(null, arguments);
+ };
+
+exports.devToolsEnhancer =
+ process.env.NODE_ENV !== 'production' &&
+ typeof window !== 'undefined' &&
+ window.__REDUX_DEVTOOLS_EXTENSION__
+ ? window.__REDUX_DEVTOOLS_EXTENSION__
+ : function () {
+ return function (noop) {
+ return noop;
+ };
+ };
diff --git a/packages/redux-devtools-extension/index.d.ts b/packages/redux-devtools-extension/index.d.ts
new file mode 100644
index 00000000..f2e43cb5
--- /dev/null
+++ b/packages/redux-devtools-extension/index.d.ts
@@ -0,0 +1,174 @@
+import { Action, ActionCreator, StoreEnhancer, compose } from 'redux';
+
+export interface EnhancerOptions {
+ /**
+ * the instance name to be showed on the monitor page. Default value is `document.title`.
+ * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.
+ */
+ name?: string;
+ /**
+ * action creators functions to be available in the Dispatcher.
+ */
+ actionCreators?: ActionCreator[] | { [key: string]: ActionCreator };
+ /**
+ * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.
+ * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.
+ * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).
+ *
+ * @default 500 ms.
+ */
+ latency?: number;
+ /**
+ * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.
+ *
+ * @default 50
+ */
+ maxAge?: number;
+ /**
+ * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).
+ * - `false` - will handle also circular references.
+ * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.
+ * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.
+ * For each of them you can indicate if to include (by setting as `true`).
+ * For `function` key you can also specify a custom function which handles serialization.
+ * See [`jsan`](https://github.com/kolodny/jsan) for more details.
+ */
+ serialize?:
+ | boolean
+ | {
+ date?: boolean;
+ regex?: boolean;
+ undefined?: boolean;
+ error?: boolean;
+ symbol?: boolean;
+ map?: boolean;
+ set?: boolean;
+ function?: boolean | Function;
+ };
+ /**
+ * function which takes `action` object and id number as arguments, and should return `action` object back.
+ */
+ actionSanitizer?: (action: A, id: number) => A;
+ /**
+ * function which takes `state` object and index as arguments, and should return `state` object back.
+ */
+ stateSanitizer?: (state: S, index: number) => S;
+ /**
+ * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+ * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.
+ */
+ actionsBlacklist?: string | string[];
+ /**
+ * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).
+ * If `actionsWhitelist` specified, `actionsBlacklist` is ignored.
+ */
+ actionsWhitelist?: string | string[];
+ /**
+ * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.
+ * Use it as a more advanced version of `actionsBlacklist`/`actionsWhitelist` parameters.
+ */
+ predicate?: (state: S, action: A) => boolean;
+ /**
+ * if specified as `false`, it will not record the changes till clicking on `Start recording` button.
+ * Available only for Redux enhancer, for others use `autoPause`.
+ *
+ * @default true
+ */
+ shouldRecordChanges?: boolean;
+ /**
+ * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.
+ * If not specified, will commit when paused. Available only for Redux enhancer.
+ *
+ * @default "@@PAUSED""
+ */
+ pauseActionType?: string;
+ /**
+ * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.
+ * Not available for Redux enhancer (as it already does it but storing the data to be sent).
+ *
+ * @default false
+ */
+ autoPause?: boolean;
+ /**
+ * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.
+ * Available only for Redux enhancer.
+ *
+ * @default false
+ */
+ shouldStartLocked?: boolean;
+ /**
+ * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.
+ *
+ * @default true
+ */
+ shouldHotReload?: boolean;
+ /**
+ * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.
+ *
+ * @default false
+ */
+ shouldCatchErrors?: boolean;
+ /**
+ * If you want to restrict the extension, specify the features you allow.
+ * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.
+ * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.
+ * Otherwise, you'll get/set the data right from the monitor part.
+ */
+ features?: {
+ /**
+ * start/pause recording of dispatched actions
+ */
+ pause?: boolean;
+ /**
+ * lock/unlock dispatching actions and side effects
+ */
+ lock?: boolean;
+ /**
+ * persist states on page reloading
+ */
+ persist?: boolean;
+ /**
+ * export history of actions in a file
+ */
+ export?: boolean | 'custom';
+ /**
+ * import history of actions from a file
+ */
+ import?: boolean | 'custom';
+ /**
+ * jump back and forth (time travelling)
+ */
+ jump?: boolean;
+ /**
+ * skip (cancel) actions
+ */
+ skip?: boolean;
+ /**
+ * drag and drop actions in the history list
+ */
+ reorder?: boolean;
+ /**
+ * dispatch custom actions or action creators
+ */
+ dispatch?: boolean;
+ /**
+ * generate tests for the selected actions
+ */
+ test?: boolean;
+ };
+ /**
+ * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.
+ * Defaults to false.
+ */
+ trace?: boolean | ((action: A) => string);
+ /**
+ * The maximum number of stack trace entries to record per action. Defaults to 10.
+ */
+ traceLimit?: number;
+}
+
+export function composeWithDevTools(
+ ...funcs: Array>
+): StoreEnhancer;
+export function composeWithDevTools(options: EnhancerOptions): typeof compose;
+export function devToolsEnhancer(options: EnhancerOptions): StoreEnhancer;
diff --git a/packages/redux-devtools-extension/index.js b/packages/redux-devtools-extension/index.js
new file mode 100644
index 00000000..02fca412
--- /dev/null
+++ b/packages/redux-devtools-extension/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var compose = require('redux').compose;
+
+exports.__esModule = true;
+exports.composeWithDevTools =
+ typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ : function () {
+ if (arguments.length === 0) return undefined;
+ if (typeof arguments[0] === 'object') return compose;
+ return compose.apply(null, arguments);
+ };
+
+exports.devToolsEnhancer =
+ typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__
+ ? window.__REDUX_DEVTOOLS_EXTENSION__
+ : function () {
+ return function (noop) {
+ return noop;
+ };
+ };
diff --git a/packages/redux-devtools-extension/logOnly.d.ts b/packages/redux-devtools-extension/logOnly.d.ts
new file mode 100644
index 00000000..e45b4859
--- /dev/null
+++ b/packages/redux-devtools-extension/logOnly.d.ts
@@ -0,0 +1 @@
+export * from 'redux-devtools-extension';
diff --git a/packages/redux-devtools-extension/logOnly.js b/packages/redux-devtools-extension/logOnly.js
new file mode 100644
index 00000000..8aa4237b
--- /dev/null
+++ b/packages/redux-devtools-extension/logOnly.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var assign = require('./utils/assign');
+var compose = require('redux').compose;
+
+function enhancer() {
+ var config = arguments[0] || {};
+ config.features = { pause: true, export: true, test: true };
+ config.type = 'redux';
+ if (config.autoPause === undefined) config.autoPause = true;
+ if (config.latency === undefined) config.latency = 500;
+
+ return function (createStore) {
+ return function (reducer, preloadedState, enhancer) {
+ var store = createStore(reducer, preloadedState, enhancer);
+ var origDispatch = store.dispatch;
+
+ var devTools = window.__REDUX_DEVTOOLS_EXTENSION__.connect(config);
+ devTools.init(store.getState());
+
+ var dispatch = function (action) {
+ var r = origDispatch(action);
+ devTools.send(action, store.getState());
+ return r;
+ };
+
+ if (Object.assign) return Object.assign(store, { dispatch: dispatch });
+ return assign(store, 'dispatch', dispatch);
+ };
+ };
+}
+
+function composeWithEnhancer(config) {
+ return function () {
+ return compose(compose.apply(null, arguments), enhancer(config));
+ };
+}
+
+exports.__esModule = true;
+exports.composeWithDevTools = function () {
+ if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) {
+ if (arguments.length === 0) return enhancer();
+ if (typeof arguments[0] === 'object')
+ return composeWithEnhancer(arguments[0]);
+ return composeWithEnhancer().apply(null, arguments);
+ }
+
+ if (arguments.length === 0) return undefined;
+ if (typeof arguments[0] === 'object') return compose;
+ return compose.apply(null, arguments);
+};
+
+exports.devToolsEnhancer =
+ typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__
+ ? enhancer
+ : function () {
+ return function (noop) {
+ return noop;
+ };
+ };
diff --git a/packages/redux-devtools-extension/logOnlyInProduction.d.ts b/packages/redux-devtools-extension/logOnlyInProduction.d.ts
new file mode 100644
index 00000000..e45b4859
--- /dev/null
+++ b/packages/redux-devtools-extension/logOnlyInProduction.d.ts
@@ -0,0 +1 @@
+export * from 'redux-devtools-extension';
diff --git a/packages/redux-devtools-extension/logOnlyInProduction.js b/packages/redux-devtools-extension/logOnlyInProduction.js
new file mode 100644
index 00000000..3c18b389
--- /dev/null
+++ b/packages/redux-devtools-extension/logOnlyInProduction.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var compose = require('redux').compose;
+var logOnly = require('./logOnly');
+
+exports.__esModule = true;
+exports.composeWithDevTools =
+ process.env.NODE_ENV === 'production'
+ ? logOnly.composeWithDevTools
+ : typeof window !== 'undefined' &&
+ window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ : function () {
+ if (arguments.length === 0) return undefined;
+ if (typeof arguments[0] === 'object') return compose;
+ return compose.apply(null, arguments);
+ };
+
+exports.devToolsEnhancer =
+ process.env.NODE_ENV === 'production'
+ ? logOnly.devToolsEnhancer
+ : typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__
+ ? window.__REDUX_DEVTOOLS_EXTENSION__
+ : function () {
+ return function (noop) {
+ return noop;
+ };
+ };
diff --git a/packages/redux-devtools-extension/package.json b/packages/redux-devtools-extension/package.json
new file mode 100644
index 00000000..17f92c3e
--- /dev/null
+++ b/packages/redux-devtools-extension/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "redux-devtools-extension",
+ "version": "2.13.8",
+ "description": "Wrappers for Redux DevTools Extension.",
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/zalmoxisus/redux-devtools-extension"
+ },
+ "homepage": "https://github.com/zalmoxisus/redux-devtools-extension",
+ "author": "Mihail Diordiev (https://github.com/zalmoxisus)",
+ "license": "MIT",
+ "peerDependencies": {
+ "redux": "^3.1.0 || ^4.0.0"
+ }
+}
diff --git a/packages/redux-devtools-extension/utils/assign.js b/packages/redux-devtools-extension/utils/assign.js
new file mode 100644
index 00000000..75b70438
--- /dev/null
+++ b/packages/redux-devtools-extension/utils/assign.js
@@ -0,0 +1,24 @@
+var objectKeys =
+ Object.keys ||
+ function (obj) {
+ var keys = [];
+ for (var key in obj) {
+ if ({}.hasOwnProperty.call(obj, key)) keys.push(key);
+ }
+ return keys;
+ };
+
+function assign(obj, newKey, newValue) {
+ var keys = objectKeys(obj);
+ var copy = {};
+
+ for (var i = 0, l = keys.length; i < l; i++) {
+ var key = keys[i];
+ copy[key] = obj[key];
+ }
+
+ copy[newKey] = newValue;
+ return copy;
+}
+
+module.exports = assign;
diff --git a/packages/redux-devtools-test-generator/.babelrc b/packages/redux-devtools-inspector-monitor-test-tab/.babelrc
similarity index 100%
rename from packages/redux-devtools-test-generator/.babelrc
rename to packages/redux-devtools-inspector-monitor-test-tab/.babelrc
diff --git a/packages/redux-devtools-test-generator/.eslintignore b/packages/redux-devtools-inspector-monitor-test-tab/.eslintignore
similarity index 100%
rename from packages/redux-devtools-test-generator/.eslintignore
rename to packages/redux-devtools-inspector-monitor-test-tab/.eslintignore
diff --git a/packages/redux-devtools-test-generator/.eslintrc.js b/packages/redux-devtools-inspector-monitor-test-tab/.eslintrc.js
similarity index 100%
rename from packages/redux-devtools-test-generator/.eslintrc.js
rename to packages/redux-devtools-inspector-monitor-test-tab/.eslintrc.js
diff --git a/packages/redux-devtools-test-generator/CHANGELOG.md b/packages/redux-devtools-inspector-monitor-test-tab/CHANGELOG.md
similarity index 100%
rename from packages/redux-devtools-test-generator/CHANGELOG.md
rename to packages/redux-devtools-inspector-monitor-test-tab/CHANGELOG.md
diff --git a/packages/redux-devtools-test-generator/LICENSE.md b/packages/redux-devtools-inspector-monitor-test-tab/LICENSE.md
similarity index 100%
rename from packages/redux-devtools-test-generator/LICENSE.md
rename to packages/redux-devtools-inspector-monitor-test-tab/LICENSE.md
diff --git a/packages/redux-devtools-test-generator/README.md b/packages/redux-devtools-inspector-monitor-test-tab/README.md
similarity index 70%
rename from packages/redux-devtools-test-generator/README.md
rename to packages/redux-devtools-inspector-monitor-test-tab/README.md
index 7348f513..979fb899 100644
--- a/packages/redux-devtools-test-generator/README.md
+++ b/packages/redux-devtools-inspector-monitor-test-tab/README.md
@@ -3,7 +3,7 @@
### Installation
```
-npm install --save-dev redux-devtools-test-generator
+yarn add --dev redux-devtools-inspector-monitor-test-tab
```
### Usage
@@ -18,8 +18,8 @@ With [`redux-devtools`](https://github.com/reduxjs/redux-devtools) and [`redux-d
import React from 'react';
import { createDevTools } from 'redux-devtools';
import InspectorMonitor from 'redux-devtools-inspector-monitor';
-import TestGenerator from 'redux-devtools-test-generator';
-import mochaTemplate from 'redux-devtools-test-generator/lib/redux/mocha'; // If using default tests.
+import TestGenerator from 'redux-devtools-inspector-monitor-test-tab';
+import mochaTemplate from 'redux-devtools-inspector-monitor-test-tab/lib/redux/mocha'; // If using default tests.
const testComponent = (props) => (
/test/setup.ts'],
+};
diff --git a/packages/redux-devtools-test-generator/package.json b/packages/redux-devtools-inspector-monitor-test-tab/package.json
similarity index 89%
rename from packages/redux-devtools-test-generator/package.json
rename to packages/redux-devtools-inspector-monitor-test-tab/package.json
index 31684bd0..5113016d 100644
--- a/packages/redux-devtools-test-generator/package.json
+++ b/packages/redux-devtools-inspector-monitor-test-tab/package.json
@@ -1,5 +1,5 @@
{
- "name": "redux-devtools-test-generator",
+ "name": "redux-devtools-inspector-monitor-test-tab",
"version": "0.6.2",
"description": "Generate tests for redux devtools.",
"keywords": [
@@ -12,7 +12,7 @@
"time travel",
"live edit"
],
- "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-test-generator",
+ "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-inspector-monitor-test-tab",
"bugs": {
"url": "https://github.com/reduxjs/redux-devtools/issues"
},
@@ -54,6 +54,7 @@
"simple-diff": "^1.6.0"
},
"devDependencies": {
+ "@types/es6template": "^1.0.0",
"@types/history": "^4.7.7",
"@types/jsan": "^3.1.0",
"@types/lodash.shuffle": "^4.2.6",
@@ -61,6 +62,7 @@
"@types/react": "^16.9.46",
"@types/react-router": "^5.1.8",
"@types/redux-logger": "^3.0.8",
+ "@types/simple-diff": "^1.6.0",
"connected-react-router": "^6.8.0",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.3",
@@ -77,11 +79,13 @@
"redux-devtools": "^3.7.0",
"redux-devtools-dock-monitor": "^1.2.0",
"redux-devtools-inspector-monitor": "^0.14.0",
- "redux-logger": "^3.0.6"
+ "redux-logger": "^3.0.6",
+ "seamless-immutable": "^7.1.4"
},
"peerDependencies": {
"@types/react": "^16.3.18",
"react": "^16.3.0",
+ "redux": "^3.4.0 || ^4.0.0",
"redux-devtools-inspector-monitor": "^0.14.0"
}
}
diff --git a/packages/redux-devtools-test-generator/src/TestGenerator.tsx b/packages/redux-devtools-inspector-monitor-test-tab/src/TestGenerator.tsx
similarity index 100%
rename from packages/redux-devtools-test-generator/src/TestGenerator.tsx
rename to packages/redux-devtools-inspector-monitor-test-tab/src/TestGenerator.tsx
diff --git a/packages/redux-devtools-test-generator/src/index.tsx b/packages/redux-devtools-inspector-monitor-test-tab/src/index.tsx
similarity index 100%
rename from packages/redux-devtools-test-generator/src/index.tsx
rename to packages/redux-devtools-inspector-monitor-test-tab/src/index.tsx
diff --git a/packages/redux-devtools-test-generator/src/redux/ava/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/ava/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/index.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/ava/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/ava/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/ava/template.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/jest/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/jest/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/index.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/jest/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/jest/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/jest/template.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/mocha/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/mocha/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/mocha/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/mocha/index.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/mocha/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/mocha/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/mocha/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/mocha/template.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/tape/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/tape/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/tape/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/tape/index.ts
diff --git a/packages/redux-devtools-test-generator/src/redux/tape/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/redux/tape/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/redux/tape/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/redux/tape/template.ts
diff --git a/packages/redux-devtools-test-generator/src/templateForm.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/templateForm.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/templateForm.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/templateForm.ts
diff --git a/packages/redux-devtools-test-generator/src/types.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/types.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/types.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/types.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/ava/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/ava/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/ava/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/ava/index.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/ava/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/ava/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/ava/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/ava/template.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/jest/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/jest/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/jest/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/jest/index.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/jest/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/jest/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/jest/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/jest/template.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/mocha/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/mocha/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/mocha/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/mocha/index.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/mocha/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/mocha/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/mocha/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/mocha/template.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/tape/index.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/tape/index.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/tape/index.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/tape/index.ts
diff --git a/packages/redux-devtools-test-generator/src/vanilla/tape/template.ts b/packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/tape/template.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/src/vanilla/tape/template.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/src/vanilla/tape/template.ts
diff --git a/packages/redux-devtools-test-generator/test/TestGenerator.spec.tsx b/packages/redux-devtools-inspector-monitor-test-tab/test/TestGenerator.spec.tsx
similarity index 100%
rename from packages/redux-devtools-test-generator/test/TestGenerator.spec.tsx
rename to packages/redux-devtools-inspector-monitor-test-tab/test/TestGenerator.spec.tsx
diff --git a/packages/redux-devtools-test-generator/test/__snapshots__/TestGenerator.spec.tsx.snap b/packages/redux-devtools-inspector-monitor-test-tab/test/__snapshots__/TestGenerator.spec.tsx.snap
similarity index 100%
rename from packages/redux-devtools-test-generator/test/__snapshots__/TestGenerator.spec.tsx.snap
rename to packages/redux-devtools-inspector-monitor-test-tab/test/__snapshots__/TestGenerator.spec.tsx.snap
diff --git a/packages/redux-devtools-test-generator/test/assertions.spec.ts b/packages/redux-devtools-inspector-monitor-test-tab/test/assertions.spec.ts
similarity index 100%
rename from packages/redux-devtools-test-generator/test/assertions.spec.ts
rename to packages/redux-devtools-inspector-monitor-test-tab/test/assertions.spec.ts
diff --git a/packages/redux-devtools-core/test/setup.js b/packages/redux-devtools-inspector-monitor-test-tab/test/setup.ts
similarity index 100%
rename from packages/redux-devtools-core/test/setup.js
rename to packages/redux-devtools-inspector-monitor-test-tab/test/setup.ts
diff --git a/packages/redux-devtools-inspector-monitor-test-tab/test/tsconfig.json b/packages/redux-devtools-inspector-monitor-test-tab/test/tsconfig.json
new file mode 100644
index 00000000..ca19def4
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-test-tab/test/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../../tsconfig.react.base.json",
+ "include": ["../src", "."]
+}
diff --git a/packages/redux-devtools-test-generator/tsconfig.json b/packages/redux-devtools-inspector-monitor-test-tab/tsconfig.json
similarity index 100%
rename from packages/redux-devtools-test-generator/tsconfig.json
rename to packages/redux-devtools-inspector-monitor-test-tab/tsconfig.json
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/.babelrc b/packages/redux-devtools-inspector-monitor-trace-tab/.babelrc
new file mode 100644
index 00000000..0d42ef44
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/.babelrc
@@ -0,0 +1,8 @@
+{
+ "presets": [
+ "@babel/preset-env",
+ "@babel/preset-react",
+ "@babel/preset-typescript"
+ ],
+ "plugins": ["@babel/plugin-proposal-class-properties"]
+}
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/.eslintignore b/packages/redux-devtools-inspector-monitor-trace-tab/.eslintignore
new file mode 100644
index 00000000..a65b4177
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/.eslintignore
@@ -0,0 +1 @@
+lib
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/.eslintrc.js b/packages/redux-devtools-inspector-monitor-trace-tab/.eslintrc.js
new file mode 100644
index 00000000..eca0de40
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/.eslintrc.js
@@ -0,0 +1,21 @@
+module.exports = {
+ extends: '../../.eslintrc',
+ overrides: [
+ {
+ files: ['*.ts', '*.tsx'],
+ extends: '../../eslintrc.ts.react.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./tsconfig.json'],
+ },
+ },
+ {
+ files: ['test/*.ts', 'test/*.tsx'],
+ extends: '../../eslintrc.ts.react.jest.base.json',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ project: ['./test/tsconfig.json'],
+ },
+ },
+ ],
+};
diff --git a/packages/redux-devtools-trace-monitor/CHANGELOG.md b/packages/redux-devtools-inspector-monitor-trace-tab/CHANGELOG.md
similarity index 100%
rename from packages/redux-devtools-trace-monitor/CHANGELOG.md
rename to packages/redux-devtools-inspector-monitor-trace-tab/CHANGELOG.md
diff --git a/packages/redux-devtools-trace-monitor/LICENSE.md b/packages/redux-devtools-inspector-monitor-trace-tab/LICENSE.md
similarity index 100%
rename from packages/redux-devtools-trace-monitor/LICENSE.md
rename to packages/redux-devtools-inspector-monitor-trace-tab/LICENSE.md
diff --git a/packages/redux-devtools-trace-monitor/README.md b/packages/redux-devtools-inspector-monitor-trace-tab/README.md
similarity index 93%
rename from packages/redux-devtools-trace-monitor/README.md
rename to packages/redux-devtools-inspector-monitor-trace-tab/README.md
index 8aef3ba0..b2b3b8c7 100644
--- a/packages/redux-devtools-trace-monitor/README.md
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/README.md
@@ -10,11 +10,11 @@ It's integrated in Redux DevTools browser extension. To use it separately with [
import React from 'react';
import { createDevTools } from 'redux-devtools';
import InspectorMonitor from 'redux-devtools-inspector-monitor';
-import TraceMonitor from 'redux-devtools-trace-monitor';
+import TraceTab from 'redux-devtools-inspector-monitor-trace-tab';
export default createDevTools(
[...defaultTabs, { name: 'Trace', component: TraceMonitor }]
+ tabs: defaultTabs => [...defaultTabs, { name: 'Trace', component: TraceTab }]
/>
);
```
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/jest.config.js b/packages/redux-devtools-inspector-monitor-trace-tab/jest.config.js
new file mode 100644
index 00000000..8824c114
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ preset: 'ts-jest',
+};
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/package.json b/packages/redux-devtools-inspector-monitor-trace-tab/package.json
new file mode 100644
index 00000000..a928bb30
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "redux-devtools-inspector-monitor-trace-tab",
+ "version": "0.1.3",
+ "description": "Submonitor for Redux DevTools inspector to show stack traces.",
+ "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-inspector-monitor-trace-tab",
+ "license": "MIT",
+ "author": "Mark Erikson ",
+ "contributors": [
+ "Mihail Diordiev (https://github.com/zalmoxisus)"
+ ],
+ "files": [
+ "lib"
+ ],
+ "main": "lib/StackTraceTab.js",
+ "types": "lib/StackTraceTab.d.ts",
+ "repository": "https://github.com/reduxjs/redux-devtools",
+ "scripts": {
+ "build": "npm run build:types && npm run build:js",
+ "build:types": "tsc --emitDeclarationOnly",
+ "build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline",
+ "clean": "rimraf lib",
+ "test": "jest",
+ "lint": "eslint . --ext .ts,.tsx",
+ "lint:fix": "eslint . --ext .ts,.tsx --fix",
+ "type-check": "tsc --noEmit",
+ "type-check:watch": "npm run type-check -- --watch",
+ "preversion": "npm run type-check && npm run lint && npm run test",
+ "prepublishOnly": "npm run clean && npm run build"
+ },
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@types/chrome": "^0.0.124",
+ "anser": "^1.4.9",
+ "html-entities": "^1.3.1",
+ "redux-devtools-themes": "^1.0.0",
+ "settle-promise": "^1.0.0"
+ },
+ "devDependencies": {
+ "@types/babel__code-frame": "^7.0.2",
+ "@types/enzyme": "^3.10.5",
+ "@types/enzyme-adapter-react-16": "^1.0.6",
+ "@types/html-entities": "^1.2.16",
+ "@types/react": "^16.9.46",
+ "@types/redux-devtools-themes": "^1.0.0",
+ "enzyme": "^3.11.0",
+ "enzyme-adapter-react-16": "^1.15.3",
+ "enzyme-to-json": "^3.5.0",
+ "react": "^16.13.1",
+ "react-dom": "^16.13.1",
+ "react-test-renderer": "^16.13.1",
+ "redux": "^4.0.5",
+ "redux-devtools": "^3.7.0",
+ "redux-devtools-inspector-monitor": "^0.14.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.3.18",
+ "react": "^16.3.0",
+ "redux": "^3.4.0 || ^4.0.0",
+ "redux-devtools": "^3.4.0",
+ "redux-devtools-inspector-monitor": "^0.14.0"
+ }
+}
diff --git a/packages/redux-devtools-trace-monitor/src/StackTraceTab.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/StackTraceTab.tsx
similarity index 66%
rename from packages/redux-devtools-trace-monitor/src/StackTraceTab.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/StackTraceTab.tsx
index 17414b63..9d39ac14 100644
--- a/packages/redux-devtools-trace-monitor/src/StackTraceTab.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/StackTraceTab.tsx
@@ -3,26 +3,45 @@ import React, { Component } from 'react';
import { getStackFrames } from './react-error-overlay/utils/getStackFrames';
import StackTrace from './react-error-overlay/containers/StackTrace';
import openFile from './openFile';
+import { Action } from 'redux';
+import { TabComponentProps } from 'redux-devtools-inspector-monitor';
+import StackFrame from './react-error-overlay/utils/stack-frame';
+import { ErrorLocation } from './react-error-overlay/utils/parseCompileError';
const rootStyle = { padding: '5px 10px' };
-export default class StackTraceTab extends Component {
+interface Props> extends TabComponentProps {
+ openFile: (
+ fileName: string,
+ lineNumber: number,
+ stackFrame: StackFrame
+ ) => void;
+}
+
+interface State {
+ stackFrames: StackFrame[];
+ currentError?: Error;
+ showDocsLink?: boolean;
+}
+
+export default class StackTraceTab<
+ S,
+ A extends Action
+> extends Component, State> {
static defaultProps = {
openFile,
};
- constructor(props) {
- super(props);
- this.state = {
- stackFrames: [],
- };
- }
+ state: State = {
+ stackFrames: [],
+ };
+
componentDidMount() {
// console.log("StackTraceTab mounted");
this.checkForStackTrace();
}
- componentDidUpdate(prevProps) {
+ componentDidUpdate(prevProps: Props) {
const { action, actions } = prevProps;
if (action !== this.props.action || actions !== this.props.actions) {
@@ -47,25 +66,32 @@ export default class StackTraceTab extends Component {
stack: liftedAction.stack,
});
- getStackFrames(deserializedError).then((stackFrames) => {
- /* eslint-disable no-console */
- if (process.env.NODE_ENV === 'development')
- console.log('Stack frames: ', stackFrames);
- /* eslint-enable no-console */
- this.setState({ stackFrames, currentError: deserializedError });
- });
+ getStackFrames(deserializedError)
+ .then((stackFrames) => {
+ /* eslint-disable no-console */
+ if (process.env.NODE_ENV === 'development')
+ console.log('Stack frames: ', stackFrames);
+ /* eslint-enable no-console */
+ this.setState({
+ stackFrames: stackFrames!,
+ currentError: deserializedError,
+ });
+ })
+ .catch(() => {
+ // noop
+ });
} else {
this.setState({
stackFrames: [],
showDocsLink:
- liftedAction.action &&
- liftedAction.action.type &&
- liftedAction.action.type !== '@@INIT',
+ liftedAction!.action &&
+ liftedAction!.action.type &&
+ liftedAction!.action.type !== '@@INIT',
});
}
}
- onStackLocationClicked = (fileLocation = {}) => {
+ onStackLocationClicked = (fileLocation: Partial = {}) => {
// console.log("Stack location args: ", ...args);
const { fileName, lineNumber } = fileLocation;
@@ -93,7 +119,7 @@ export default class StackTraceTab extends Component {
}
};
- openDocs = (e) => {
+ openDocs: React.MouseEventHandler = (e) => {
e.stopPropagation();
window.open(
'https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/Features/Trace.md'
diff --git a/packages/redux-devtools-trace-monitor/src/openFile.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/openFile.ts
similarity index 75%
rename from packages/redux-devtools-trace-monitor/src/openFile.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/openFile.ts
index 2e257edb..bbf11a91 100644
--- a/packages/redux-devtools-trace-monitor/src/openFile.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/openFile.ts
@@ -1,31 +1,35 @@
+import StackFrame from './react-error-overlay/utils/stack-frame';
+
const isFF = navigator.userAgent.indexOf('Firefox') !== -1;
-function openResource(fileName, lineNumber, stackFrame) {
+function openResource(
+ fileName: string,
+ lineNumber: number,
+ stackFrame: StackFrame
+) {
const adjustedLineNumber = Math.max(lineNumber - 1, 0);
- chrome.devtools.panels.openResource(
- fileName,
- adjustedLineNumber,
- (result) => {
- //console.log("openResource callback args: ", callbackArgs);
- if (result.isError) {
- const {
- fileName: finalFileName,
- lineNumber: finalLineNumber,
- } = stackFrame;
- const adjustedLineNumber = Math.max(finalLineNumber - 1, 0);
- chrome.devtools.panels.openResource(
- finalFileName,
- adjustedLineNumber,
- (/* result */) => {
- // console.log("openResource result: ", result);
- }
- );
- }
+ chrome.devtools.panels.openResource(fileName, adjustedLineNumber, ((result: {
+ isError?: boolean;
+ }) => {
+ //console.log("openResource callback args: ", callbackArgs);
+ if (result.isError) {
+ const {
+ fileName: finalFileName,
+ lineNumber: finalLineNumber,
+ } = stackFrame;
+ const adjustedLineNumber = Math.max(finalLineNumber! - 1, 0);
+ chrome.devtools.panels.openResource(
+ finalFileName!,
+ adjustedLineNumber,
+ (/* result */) => {
+ // console.log("openResource result: ", result);
+ }
+ );
}
- );
+ }) as () => void);
}
-function openAndCloseTab(url) {
+function openAndCloseTab(url: string) {
chrome.tabs.create({ url }, (tab) => {
const removeTab = () => {
chrome.windows.onFocusChanged.removeListener(removeTab);
@@ -45,19 +49,19 @@ function openAndCloseTab(url) {
});
}
-function openInIframe(url) {
+function openInIframe(url: string) {
const iframe = document.createElement('iframe');
iframe.src = url;
- iframe.style = 'display:none';
+ iframe.style.display = 'none';
document.body.appendChild(iframe);
- setTimeout(() => iframe.parentNode.removeChild(iframe), 3000);
+ setTimeout(() => iframe.parentNode!.removeChild(iframe), 3000);
}
-function openInEditor(editor, path, stackFrame) {
+function openInEditor(editor: string, path: string, stackFrame: StackFrame) {
const projectPath = path.replace(/\/$/, '');
const file =
stackFrame._originalFileName ||
- stackFrame.finalFileName ||
+ ((stackFrame as unknown) as { finalFileName: string }).finalFileName ||
stackFrame.fileName ||
'';
let filePath = /^https?:\/\//.test(file)
@@ -95,7 +99,11 @@ function openInEditor(editor, path, stackFrame) {
}
}
-export default function openFile(fileName, lineNumber, stackFrame) {
+export default function openFile(
+ fileName: string,
+ lineNumber: number,
+ stackFrame: StackFrame
+) {
if (process.env.NODE_ENV === 'development')
// eslint-disable-next-line no-console
console.log(fileName, lineNumber, stackFrame);
diff --git a/packages/redux-devtools-trace-monitor/src/presets.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/presets.ts
similarity index 100%
rename from packages/redux-devtools-trace-monitor/src/presets.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/presets.ts
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/components/CodeBlock.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/CodeBlock.tsx
similarity index 82%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/components/CodeBlock.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/CodeBlock.tsx
index f9058424..2c3a1b2c 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/components/CodeBlock.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/CodeBlock.tsx
@@ -5,10 +5,9 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-import React from 'react';
+import React, { CSSProperties } from 'react';
-const preStyle = {
+const preStyle: CSSProperties = {
position: 'relative',
display: 'block',
backgroundColor: '#000',
@@ -24,10 +23,10 @@ const codeStyle = {
fontFamily: 'Consolas, Menlo, monospace',
};
-type CodeBlockPropsType = {|
- main: boolean,
- codeHTML: string,
-|};
+interface CodeBlockPropsType {
+ main: boolean;
+ codeHTML: string;
+}
function CodeBlock(props: CodeBlockPropsType) {
const codeBlock = { __html: props.codeHTML };
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/components/Collapsible.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/Collapsible.tsx
similarity index 81%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/components/Collapsible.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/Collapsible.tsx
index 6f6f565c..07e81b64 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/components/Collapsible.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/components/Collapsible.tsx
@@ -5,13 +5,10 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-import React, { Component } from 'react';
+import React, { Component, CSSProperties, ReactNode } from 'react';
import { nicinabox as theme } from 'redux-devtools-themes';
-import type { Element as ReactElement } from 'react';
-
-const _collapsibleStyle = {
+const _collapsibleStyle: CSSProperties = {
color: theme.base06,
backgroundColor: theme.base01,
cursor: 'pointer',
@@ -24,26 +21,27 @@ const _collapsibleStyle = {
lineHeight: '1.5',
};
-const collapsibleCollapsedStyle = {
+const collapsibleCollapsedStyle: CSSProperties = {
..._collapsibleStyle,
marginBottom: '1.5em',
};
-const collapsibleExpandedStyle = {
+const collapsibleExpandedStyle: CSSProperties = {
..._collapsibleStyle,
marginBottom: '0.6em',
};
-type Props = {|
- children: ReactElement[],
-|};
+interface Props {
+ collapsedByDefault?: boolean;
+ children: ReactNode[];
+}
-type State = {|
- collapsed: boolean,
-|};
+interface State {
+ collapsed: boolean | undefined;
+}
class Collapsible extends Component {
- state = {
+ state: State = {
collapsed: undefined,
};
@@ -53,7 +51,7 @@ class Collapsible extends Component {
}));
};
- isCollapsed = (state) =>
+ isCollapsed = (state: State) =>
state.collapsed === undefined
? this.props.collapsedByDefault
: state.collapsed;
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrame.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrame.tsx
similarity index 80%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrame.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrame.tsx
index ba3cbf4b..9ef06708 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrame.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrame.tsx
@@ -5,8 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-import React, { Component } from 'react';
+import React, { Component, CSSProperties } from 'react';
import CodeBlock from './StackFrameCodeBlock';
import { getPrettyURL } from '../utils/getPrettyURL';
import { nicinabox as theme } from 'redux-devtools-themes';
@@ -14,22 +13,22 @@ import { nicinabox as theme } from 'redux-devtools-themes';
import type { StackFrame as StackFrameType } from '../utils/stack-frame';
import type { ErrorLocation } from '../utils/parseCompileError';
-const linkStyle = {
+const linkStyle: CSSProperties = {
fontSize: '0.9em',
marginBottom: '0.9em',
};
-const anchorStyle = {
+const anchorStyle: CSSProperties = {
textDecoration: 'none',
color: theme.base05,
cursor: 'pointer',
};
-const codeAnchorStyle = {
+const codeAnchorStyle: CSSProperties = {
cursor: 'pointer',
};
-const toggleStyle = {
+const toggleStyle: CSSProperties = {
marginBottom: '1.5em',
color: theme.base05,
cursor: 'pointer',
@@ -44,20 +43,20 @@ const toggleStyle = {
lineHeight: '1.5',
};
-type Props = {|
- frame: StackFrameType,
- contextSize: number,
- critical: boolean,
- showCode: boolean,
- editorHandler: (errorLoc: ErrorLocation) => void,
-|};
+interface Props {
+ frame: StackFrameType;
+ contextSize: number;
+ critical: boolean;
+ showCode: boolean;
+ editorHandler: (errorLoc: ErrorLocation) => void;
+}
-type State = {|
- compiled: boolean,
-|};
+interface State {
+ compiled: boolean;
+}
class StackFrame extends Component {
- state = {
+ state: State = {
compiled: false,
};
@@ -93,7 +92,9 @@ class StackFrame extends Component {
this.props.editorHandler(errorLoc);
};
- onKeyDown = (e /* : SyntheticKeyboardEvent<> */) => {
+ onKeyDown: React.KeyboardEventHandler = (
+ e /* : SyntheticKeyboardEvent<> */
+ ) => {
if (e.key === 'Enter') {
this.editorHandler();
}
@@ -162,10 +163,10 @@ class StackFrame extends Component {
{functionName}
{url}
@@ -173,8 +174,8 @@ class StackFrame extends Component
{
{codeBlockProps && (
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrameCodeBlock.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrameCodeBlock.tsx
similarity index 76%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrameCodeBlock.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrameCodeBlock.tsx
index 4045ab5e..753c2e06 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackFrameCodeBlock.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackFrameCodeBlock.tsx
@@ -5,40 +5,31 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import React from 'react';
import CodeBlock from '../components/CodeBlock';
import { applyStyles } from '../utils/dom/css';
import { absolutifyCaret } from '../utils/dom/absolutifyCaret';
-// import type { ScriptLine } from '../utils/stack-frame';
+import { ScriptLine } from '../utils/stack-frame';
import generateAnsiHTML from '../utils/generateAnsiHTML';
import { codeFrameColumns } from '@babel/code-frame';
import { nicinabox as theme } from 'redux-devtools-themes';
-/*
-type StackFrameCodeBlockPropsType = {|
- lines: ScriptLine[],
- lineNum: number,
- columnNum: ?number,
- contextSize: number,
- main: boolean,
-|};
+interface StackFrameCodeBlockPropsType {
+ lines: ScriptLine[];
+ lineNum: number;
+ columnNum: number | null | undefined;
+ contextSize: number;
+ main: boolean;
+}
-// Exact type workaround for spread operator.
-// See: https://github.com/facebook/flow/issues/2405
-type Exact = $Shape;
-*/
-
-function StackFrameCodeBlock(
- props /* : Exact */
-) {
+function StackFrameCodeBlock(props: StackFrameCodeBlockPropsType) {
const { lines, lineNum, columnNum, contextSize, main } = props;
- const sourceCode = [];
+ const sourceCode: string[] = [];
let whiteSpace = Infinity;
lines.forEach(function (e) {
const { content: text } = e;
- const m = text.match(/^\s*/);
+ const m = /^\s*/.exec(text);
if (text === '') {
return;
}
@@ -86,16 +77,16 @@ function StackFrameCodeBlock(
const ccn2 = node.childNodes;
for (let index2 = 0; index2 < ccn2.length; ++index2) {
const lineNode = ccn2[index2];
- const text = lineNode.innerText;
+ const text = (lineNode as HTMLElement).innerText;
if (text == null) {
continue;
}
- if (text.indexOf(' ' + lineNum + ' |') === -1) {
+ if (text.indexOf(` ${lineNum} |`) === -1) {
continue;
}
// $FlowFixMe
- applyStyles(node, {
- 'background-color': main ? theme.base02 : theme.base01,
+ applyStyles(node as HTMLElement, {
+ backgroundColor: main ? theme.base02 : theme.base01,
});
// eslint-disable-next-line
break oLoop;
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackTrace.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackTrace.tsx
similarity index 86%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackTrace.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackTrace.tsx
index 35963caf..6369fe96 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/containers/StackTrace.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/containers/StackTrace.tsx
@@ -5,8 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-import React, { Component } from 'react';
+import React, { Component, ReactElement } from 'react';
import StackFrame from './StackFrame';
import Collapsible from '../components/Collapsible';
import { isInternalFile } from '../utils/isInternalFile';
@@ -22,19 +21,19 @@ const traceStyle = {
overflow: 'auto',
};
-type Props = {|
- stackFrames: StackFrameType[],
- errorName: string,
- contextSize: number,
- editorHandler: (errorLoc: ErrorLocation) => void,
-|};
+interface Props {
+ stackFrames: StackFrameType[];
+ errorName: string;
+ contextSize: number;
+ editorHandler: (errorLoc: ErrorLocation) => void;
+}
class StackTrace extends Component {
renderFrames() {
const { stackFrames, errorName, contextSize, editorHandler } = this.props;
- const renderedFrames = [];
+ const renderedFrames: ReactElement[] = [];
let hasReachedAppCode = false,
- currentBundle = [],
+ currentBundle: ReactElement[] = [],
bundleCount = 0,
anyNodeExpanded = false;
@@ -55,7 +54,7 @@ class StackTrace extends Component {
const frameEle = (
{
renderedFrames.push(
{currentBundle}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/absolutifyCaret.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/absolutifyCaret.ts
similarity index 88%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/absolutifyCaret.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/absolutifyCaret.ts
index 9049069c..7bebf317 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/absolutifyCaret.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/absolutifyCaret.ts
@@ -5,8 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-function removeNextBr(parent, component: ?Element) {
+function removeNextBr(parent: Node, component: Element | null | undefined) {
while (component != null && component.tagName.toLowerCase() !== 'br') {
component = component.nextElementSibling;
}
@@ -18,7 +17,7 @@ function removeNextBr(parent, component: ?Element) {
function absolutifyCaret(component: Node) {
const ccn = component.childNodes;
for (let index = 0; index < ccn.length; ++index) {
- const c = ccn[index];
+ const c = ccn[index] as HTMLElement;
// $FlowFixMe
if (c.tagName.toLowerCase() !== 'span') {
continue;
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/css.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/css.ts
similarity index 84%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/css.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/css.ts
index 3c71ba69..8791ecb2 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/dom/css.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/dom/css.ts
@@ -5,9 +5,8 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
let injectedCount = 0;
-const injectedCache = {};
+const injectedCache: { [key: number]: HTMLStyleElement } = {};
function getHead(document: Document) {
return document.head || document.getElementsByTagName('head')[0];
@@ -33,14 +32,17 @@ function removeCss(document: Document, ref: number) {
delete injectedCache[ref];
}
-function applyStyles(element: HTMLElement, styles: Object) {
+function applyStyles(
+ element: HTMLElement,
+ styles: Partial
+) {
element.setAttribute('style', '');
for (const key in styles) {
if (!Object.prototype.hasOwnProperty.call(styles, key)) {
continue;
}
// $FlowFixMe
- element.style[key] = styles[key];
+ element.style[key] = styles[key]!;
}
}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/generateAnsiHTML.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/generateAnsiHTML.ts
similarity index 75%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/generateAnsiHTML.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/generateAnsiHTML.ts
index 747845a4..e35d7a29 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/generateAnsiHTML.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/generateAnsiHTML.ts
@@ -5,15 +5,13 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-
import Anser from 'anser';
import { nicinabox as theme } from 'redux-devtools-themes';
import { AllHtmlEntities as Entities } from 'html-entities';
-var entities = new Entities();
+const entities = new Entities();
-var anserMap = {
+const anserMap = {
'ansi-bright-black': theme.base03,
'ansi-bright-yellow': theme.base0A,
'ansi-yellow': theme.base0B,
@@ -29,25 +27,25 @@ var anserMap = {
};
function generateAnsiHTML(txt: string): string {
- var arr = new Anser().ansiToJson(entities.encode(txt), {
+ const arr = new Anser().ansiToJson(entities.encode(txt), {
use_classes: true,
});
- var result = '';
- var open = false;
- for (var index = 0; index < arr.length; ++index) {
- var c = arr[index];
- var content = c.content,
+ let result = '';
+ let open = false;
+ for (let index = 0; index < arr.length; ++index) {
+ const c = arr[index];
+ const content = c.content,
fg = c.fg;
- var contentParts = content.split('\n');
- for (var _index = 0; _index < contentParts.length; ++_index) {
+ const contentParts = content.split('\n');
+ for (let _index = 0; _index < contentParts.length; ++_index) {
if (!open) {
result += '';
open = true;
}
- var part = contentParts[_index].replace('\r', '');
- var color = anserMap[fg];
+ const part = contentParts[_index].replace('\r', '');
+ const color = anserMap[fg as keyof typeof anserMap];
if (color != null) {
result += '' + part + ' ';
} else {
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getLinesAround.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getLinesAround.ts
similarity index 98%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getLinesAround.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getLinesAround.ts
index 4a7ffc34..dcaba0ce 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getLinesAround.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getLinesAround.ts
@@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import { ScriptLine } from './stack-frame';
/**
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getPrettyURL.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getPrettyURL.ts
similarity index 71%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getPrettyURL.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getPrettyURL.ts
index 1aa5dc77..894da6f3 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getPrettyURL.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getPrettyURL.ts
@@ -5,14 +5,13 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
function getPrettyURL(
- sourceFileName: ?string,
- sourceLineNumber: ?number,
- sourceColumnNumber: ?number,
- fileName: ?string,
- lineNumber: ?number,
- columnNumber: ?number,
+ sourceFileName: string | null | undefined,
+ sourceLineNumber: number | null | undefined,
+ sourceColumnNumber: number | null | undefined,
+ fileName: string | null | undefined,
+ lineNumber: number | null | undefined,
+ columnNumber: number | null | undefined,
compiled: boolean
): string {
let prettyURL;
@@ -26,16 +25,16 @@ function getPrettyURL(
} else {
prettyURL = sourceFileName;
}
- prettyURL += ':' + sourceLineNumber;
+ prettyURL += `:${sourceLineNumber}`;
// Note: we intentionally skip 0's because they're produced by cheap Webpack maps
if (sourceColumnNumber) {
- prettyURL += ':' + sourceColumnNumber;
+ prettyURL += `:${sourceColumnNumber}`;
}
} else if (fileName && typeof lineNumber === 'number') {
- prettyURL = fileName + ':' + lineNumber;
+ prettyURL = `${fileName}:${lineNumber}`;
// Note: we intentionally skip 0's because they're produced by cheap Webpack maps
if (columnNumber) {
- prettyURL += ':' + columnNumber;
+ prettyURL += `:${columnNumber}`;
}
} else {
prettyURL = 'unknown';
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getSourceMap.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getSourceMap.ts
similarity index 90%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getSourceMap.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getSourceMap.ts
index 644847bb..0157204a 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getSourceMap.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getSourceMap.ts
@@ -5,8 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-import { SourceMapConsumer } from 'source-map';
+import { RawSourceMap, SourceMapConsumer } from 'source-map';
/**
* A wrapped instance of a {@link https://github.com/mozilla/source-map SourceMapConsumer}
.
@@ -16,7 +15,7 @@ import { SourceMapConsumer } from 'source-map';
class SourceMap {
__source_map: SourceMapConsumer;
- constructor(sourceMap) {
+ constructor(sourceMap: SourceMapConsumer) {
this.__source_map = sourceMap;
}
@@ -28,7 +27,7 @@ class SourceMap {
getOriginalPosition(
line: number,
column: number
- ): { source: string, line: number, column: number } {
+ ): { source: string; line: number; column: number } {
const {
line: l,
column: c,
@@ -50,7 +49,7 @@ class SourceMap {
source: string,
line: number,
column: number
- ): { line: number, column: number } {
+ ): { line: number; column: number } {
const { line: l, column: c } = this.__source_map.generatedPositionFor({
source,
line,
@@ -71,7 +70,7 @@ class SourceMap {
}
getSources(): string[] {
- return this.__source_map.sources;
+ return ((this.__source_map as unknown) as { sources: string[] }).sources;
}
}
@@ -82,7 +81,7 @@ function extractSourceMapUrl(
const regex = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/gm;
let match = null;
for (;;) {
- let next = regex.exec(fileContents);
+ const next = regex.exec(fileContents);
if (next == null) {
break;
}
@@ -107,7 +106,7 @@ async function getSourceMap(
let sm = await extractSourceMapUrl(fileUri, fileContents);
if (sm.indexOf('data:') === 0) {
const base64 = /^data:application\/json;([\w=:"-]+;)*base64,/;
- const match2 = sm.match(base64);
+ const match2 = base64.exec(sm);
if (!match2) {
throw new Error(
'Sorry, non-base64 inline source-map encoding is not supported.'
@@ -116,7 +115,9 @@ async function getSourceMap(
sm = sm.substring(match2[0].length);
sm = window.atob(sm);
sm = JSON.parse(sm);
- return new SourceMap(new SourceMapConsumer(sm));
+ return new SourceMap(
+ new SourceMapConsumer((sm as unknown) as RawSourceMap)
+ );
} else {
const index = fileUri.lastIndexOf('/');
const url = fileUri.substring(0, index + 1) + sm;
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getStackFrames.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getStackFrames.ts
similarity index 76%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getStackFrames.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getStackFrames.ts
index f7d3984d..9021713a 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/getStackFrames.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/getStackFrames.ts
@@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import type { StackFrame } from './stack-frame';
import { parse } from './parser';
import { map } from './mapper';
@@ -14,15 +13,21 @@ import { toExclude } from '../../presets';
function getStackFrames(
error: Error,
- unhandledRejection: boolean = false, // eslint-disable-line no-unused-vars
- contextSize: number = 3
+ unhandledRejection = false, // eslint-disable-line no-unused-vars
+ contextSize = 3
): Promise {
const parsedFrames = parse(error);
let enhancedFramesPromise;
- if (error.__unmap_source) {
+ if (
+ ((error as unknown) as {
+ __unmap_source: string | { uri: string; contents: string };
+ }).__unmap_source
+ ) {
enhancedFramesPromise = unmap(
// $FlowFixMe
- error.__unmap_source,
+ ((error as unknown) as {
+ __unmap_source: string | { uri: string; contents: string };
+ }).__unmap_source,
parsedFrames,
contextSize
);
@@ -44,7 +49,7 @@ function getStackFrames(
(functionName == null ||
functionName.indexOf('__stack_frame_overlay_proxy_console__') ===
-1) &&
- !toExclude.test(fileName)
+ !toExclude.test(fileName!)
);
});
}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isBultinErrorName.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isBultinErrorName.ts
similarity index 88%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isBultinErrorName.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isBultinErrorName.ts
index 570f72cf..f7a82b3a 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isBultinErrorName.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isBultinErrorName.ts
@@ -5,8 +5,7 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-function isBultinErrorName(errorName: ?string) {
+function isBultinErrorName(errorName: string | null | undefined) {
switch (errorName) {
case 'EvalError':
case 'InternalError':
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isInternalFile.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isInternalFile.ts
similarity index 81%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isInternalFile.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isInternalFile.ts
index 97dbeaae..9c916d4b 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/isInternalFile.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/isInternalFile.ts
@@ -5,8 +5,10 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-function isInternalFile(sourceFileName: ?string, fileName: ?string) {
+function isInternalFile(
+ sourceFileName: string | null | undefined,
+ fileName: string | null | undefined
+) {
return (
sourceFileName == null ||
sourceFileName === '' ||
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/mapper.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/mapper.ts
similarity index 95%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/mapper.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/mapper.ts
index 3a20f538..d172e0c1 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/mapper.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/mapper.ts
@@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import StackFrame from './stack-frame';
import { getSourceMap } from './getSourceMap';
import { getLinesAround } from './getLinesAround';
@@ -18,7 +17,7 @@ import { settle } from 'settle-promise';
*/
async function map(
frames: StackFrame[],
- contextLines: number = 3
+ contextLines = 3
): Promise {
const cache: any = {};
const files: string[] = [];
@@ -41,7 +40,7 @@ async function map(
);
return frames.map((frame) => {
const { functionName, fileName, lineNumber, columnNumber } = frame;
- let { map, fileSource } = cache[fileName] || {};
+ const { map, fileSource } = cache[fileName!] || {};
if (map == null || lineNumber == null) {
return frame;
}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parseCompileError.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parseCompileError.ts
similarity index 71%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parseCompileError.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parseCompileError.ts
index e87c4562..e0bab04d 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parseCompileError.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parseCompileError.ts
@@ -1,11 +1,10 @@
-// @flow
import Anser from 'anser';
-export type ErrorLocation = {|
- fileName: string,
- lineNumber: number,
- colNumber?: number,
-|};
+export interface ErrorLocation {
+ fileName: string;
+ lineNumber: number;
+ colNumber?: number;
+}
const filePathRegex = /^\.(\/[^/\n ]+)+\.[^/\n ]+$/;
@@ -22,11 +21,11 @@ const lineNumberRegexes = [
// Based on error formatting of webpack
// https://github.com/webpack/webpack/blob/v3.5.5/lib/Stats.js#L183-L217
-function parseCompileError(message: string): ?ErrorLocation {
- const lines: Array = message.split('\n');
- let fileName: string = '';
- let lineNumber: number = 0;
- let colNumber: number = 0;
+function parseCompileError(message: string): ErrorLocation | null | undefined {
+ const lines: string[] = message.split('\n');
+ let fileName = '';
+ let lineNumber = 0;
+ let colNumber = 0;
for (let i = 0; i < lines.length; i++) {
const line: string = Anser.ansiToText(lines[i]).trim();
@@ -34,13 +33,15 @@ function parseCompileError(message: string): ?ErrorLocation {
continue;
}
- if (!fileName && line.match(filePathRegex)) {
+ if (!fileName && filePathRegex.exec(line)) {
fileName = line;
}
let k = 0;
while (k < lineNumberRegexes.length) {
- const match: ?Array = line.match(lineNumberRegexes[k]);
+ const match: string[] | null | undefined = lineNumberRegexes[k].exec(
+ line
+ );
if (match) {
lineNumber = parseInt(match[1], 10);
// colNumber starts with 0 and hence add 1
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parser.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parser.ts
similarity index 92%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parser.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parser.ts
index 5a8efd37..786d98e0 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/parser.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/parser.ts
@@ -5,14 +5,13 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import StackFrame from './stack-frame';
const regexExtractLocation = /\(?(.+?)(?::(\d+))?(?::(\d+))?\)?$/;
function extractLocation(token: string): [string, number, number] {
return regexExtractLocation
- .exec(token)
+ .exec(token)!
.slice(1)
.map((v) => {
const p = Number(v);
@@ -20,7 +19,7 @@ function extractLocation(token: string): [string, number, number] {
return p;
}
return v;
- });
+ }) as [string, number, number];
}
const regexValidFrame_Chrome = /^\s*(at|in)\s.+(:\d+)/;
@@ -46,7 +45,7 @@ function parseStack(stack: string[]): StackFrame[] {
const last = data.pop();
return new StackFrame(
data.join('@') || (isEval ? 'eval' : null),
- ...extractLocation(last)
+ ...extractLocation(last!)
);
} else {
// Strip eval, we don't care about it
@@ -58,7 +57,10 @@ function parseStack(stack: string[]): StackFrame[] {
}
const data = e.trim().split(/\s+/g).slice(1);
const last = data.pop();
- return new StackFrame(data.join(' ') || null, ...extractLocation(last));
+ return new StackFrame(
+ data.join(' ') || null,
+ ...extractLocation(last!)
+ );
}
});
return frames;
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/pollyfills.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/pollyfills.ts
similarity index 91%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/pollyfills.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/pollyfills.ts
index ddd5aeb9..d740eff1 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/pollyfills.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/pollyfills.ts
@@ -9,6 +9,7 @@ if (typeof Promise === 'undefined') {
// Rejection tracking prevents a common issue where React gets into an
// inconsistent state due to an error, but it gets swallowed by a Promise,
// and the user has no idea what causes React's erratic future behavior.
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
require('promise/lib/rejection-tracking').enable();
window.Promise = require('promise/lib/es6-extensions.js');
}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/stack-frame.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/stack-frame.ts
similarity index 95%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/stack-frame.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/stack-frame.ts
index cbbea6a0..4406aa7d 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/stack-frame.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/stack-frame.ts
@@ -5,8 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
-
/** A container holding a script line. */
class ScriptLine {
/** The line number of this line of source. */
@@ -16,7 +14,7 @@ class ScriptLine {
/** Whether or not this line should be highlighted. Particularly useful for error reporting with context. */
highlight: boolean;
- constructor(lineNumber: number, content: string, highlight: boolean = false) {
+ constructor(lineNumber: number, content: string, highlight = false) {
this.lineNumber = lineNumber;
this.content = content;
this.highlight = highlight;
@@ -98,10 +96,10 @@ class StackFrame {
str += this.fileName + ':';
}
if (this.lineNumber != null) {
- str += this.lineNumber + ':';
+ str += `${this.lineNumber}:`;
}
if (this.columnNumber != null) {
- str += this.columnNumber + ':';
+ str += `${this.columnNumber}:`;
}
return str.slice(0, -1);
}
diff --git a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/unmapper.js b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/unmapper.ts
similarity index 93%
rename from packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/unmapper.js
rename to packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/unmapper.ts
index 7b8ab87a..72c9b4b5 100644
--- a/packages/redux-devtools-trace-monitor/src/react-error-overlay/utils/unmapper.js
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/react-error-overlay/utils/unmapper.ts
@@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*/
-/* @flow */
import StackFrame from './stack-frame';
import { getSourceMap } from './getSourceMap';
import { getLinesAround } from './getLinesAround';
@@ -32,16 +31,16 @@ function count(search: string, string: string): number {
* @param {number} [fileContents=3] The number of lines to provide before and after the line specified in the StackFrame
.
*/
async function unmap(
- _fileUri: string | { uri: string, contents: string },
+ _fileUri: string | { uri: string; contents: string },
frames: StackFrame[],
- contextLines: number = 3
+ contextLines = 3
): Promise {
let fileContents = typeof _fileUri === 'object' ? _fileUri.contents : null;
- let fileUri = typeof _fileUri === 'object' ? _fileUri.uri : _fileUri;
+ const fileUri = typeof _fileUri === 'object' ? _fileUri.uri : _fileUri;
if (fileContents == null) {
fileContents = await fetch(fileUri).then((res) => res.text());
}
- const map = await getSourceMap(fileUri, fileContents);
+ const map = await getSourceMap(fileUri, fileContents!);
return frames.map((frame) => {
const {
functionName,
@@ -104,7 +103,7 @@ async function unmap(
sourceT,
lineNumber,
// $FlowFixMe
- columnNumber
+ columnNumber!
);
const originalSource = map.getSource(sourceT);
return new StackFrame(
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/src/settle-promise.ts b/packages/redux-devtools-inspector-monitor-trace-tab/src/settle-promise.ts
new file mode 100644
index 00000000..4168e22b
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/src/settle-promise.ts
@@ -0,0 +1,3 @@
+declare module 'settle-promise' {
+ export function settle(promises: Promise[]): Promise;
+}
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/test/StackTraceTab.spec.tsx b/packages/redux-devtools-inspector-monitor-trace-tab/test/StackTraceTab.spec.tsx
new file mode 100644
index 00000000..6e708d70
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/test/StackTraceTab.spec.tsx
@@ -0,0 +1,68 @@
+import React, { ReactComponentElement } from 'react';
+import { configure, mount, ReactWrapper } from 'enzyme';
+import toJson from 'enzyme-to-json';
+import StackTraceTab from '../src/StackTraceTab';
+
+import Adapter from 'enzyme-adapter-react-16';
+configure({ adapter: new Adapter() });
+
+function genAsyncSnapshot(
+ component: ReactWrapper,
+ done: () => void
+) {
+ setTimeout(() => {
+ component.update();
+ expect(toJson(component)).toMatchSnapshot();
+ done();
+ });
+}
+
+const actions = {
+ 0: { type: 'PERFORM_ACTION', action: { type: '@@INIT' } },
+ 1: { type: 'PERFORM_ACTION', action: { type: 'INCREMENT_COUNTER' } },
+ 2: {
+ type: 'PERFORM_ACTION',
+ action: { type: 'INCREMENT_COUNTER' },
+ stack:
+ 'Error\n at fn1 (app.js:72:24)\n at fn2 (app.js:84:31)\n ' +
+ 'at fn3 (chrome-extension://lmhkpmbekcpmknklioeibfkpmmfibljd/js/page.bundle.js:1269:80)',
+ },
+};
+
+const StackTraceTabAsAny = StackTraceTab as any;
+
+describe('StackTraceTab component', () => {
+ it('should render with no props', () => {
+ return new Promise((done) => {
+ const component = mount( );
+ genAsyncSnapshot(component, done);
+ });
+ });
+
+ it('should render with props, but without stack', () => {
+ return new Promise((done) => {
+ const component = mount(
+
+ );
+ genAsyncSnapshot(component, done);
+ });
+ });
+
+ it('should render the link to docs', () => {
+ return new Promise((done) => {
+ const component = mount(
+
+ );
+ genAsyncSnapshot(component, done);
+ });
+ });
+
+ it('should render with trace stack', () => {
+ return new Promise((done) => {
+ const component = mount(
+
+ );
+ genAsyncSnapshot(component, done);
+ });
+ });
+});
diff --git a/packages/redux-devtools-trace-monitor/test/__snapshots__/StackTraceTab.spec.js.snap b/packages/redux-devtools-inspector-monitor-trace-tab/test/__snapshots__/StackTraceTab.spec.tsx.snap
similarity index 95%
rename from packages/redux-devtools-trace-monitor/test/__snapshots__/StackTraceTab.spec.js.snap
rename to packages/redux-devtools-inspector-monitor-trace-tab/test/__snapshots__/StackTraceTab.spec.tsx.snap
index 2788de7c..ce4cb318 100644
--- a/packages/redux-devtools-trace-monitor/test/__snapshots__/StackTraceTab.spec.js.snap
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/test/__snapshots__/StackTraceTab.spec.tsx.snap
@@ -301,12 +301,7 @@ exports[`StackTraceTab component should render with trace stack 1`] = `
}
}
>
-
+
app.js:72:24
@@ -345,12 +340,7 @@ exports[`StackTraceTab component should render with trace stack 1`] = `
}
}
>
-
+
app.js:84:31
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/test/tsconfig.json b/packages/redux-devtools-inspector-monitor-trace-tab/test/tsconfig.json
new file mode 100644
index 00000000..ca19def4
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/test/tsconfig.json
@@ -0,0 +1,4 @@
+{
+ "extends": "../../../tsconfig.react.base.json",
+ "include": ["../src", "."]
+}
diff --git a/packages/redux-devtools-inspector-monitor-trace-tab/tsconfig.json b/packages/redux-devtools-inspector-monitor-trace-tab/tsconfig.json
new file mode 100644
index 00000000..7b7d1492
--- /dev/null
+++ b/packages/redux-devtools-inspector-monitor-trace-tab/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "extends": "../../tsconfig.react.base.json",
+ "compilerOptions": {
+ "outDir": "lib"
+ },
+ "include": ["src"]
+}
diff --git a/packages/redux-devtools-inspector-monitor/README.md b/packages/redux-devtools-inspector-monitor/README.md
index c2b0572f..4ef8cc97 100644
--- a/packages/redux-devtools-inspector-monitor/README.md
+++ b/packages/redux-devtools-inspector-monitor/README.md
@@ -60,7 +60,7 @@ If `tabs` is an array, only provided tabs are rendered.
`component` is provided with `action` and other props, see [`ActionPreview.jsx`](src/ActionPreview.jsx#L42) for reference.
-Usage example: [`redux-devtools-test-generator`](https://github.com/zalmoxisus/redux-devtools-test-generator#containersdevtoolsjs).
+Usage example: [`redux-devtools-inspector-monitor-test-tab`](https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-inspector-monitor-test-tab#containersdevtoolsjs).
### License
diff --git a/packages/redux-devtools-inspector-monitor/src/ActionPreview.tsx b/packages/redux-devtools-inspector-monitor/src/ActionPreview.tsx
index 37c7d887..71b3f0c2 100644
--- a/packages/redux-devtools-inspector-monitor/src/ActionPreview.tsx
+++ b/packages/redux-devtools-inspector-monitor/src/ActionPreview.tsx
@@ -25,7 +25,7 @@ export interface TabComponentProps> {
base16Theme: Base16Theme;
invertTheme: boolean;
isWideLayout: boolean;
- dataTypeKey: string | undefined;
+ dataTypeKey: string | symbol | undefined;
delta: Delta | null | undefined | false;
action: A;
nextState: S;
@@ -67,7 +67,7 @@ interface Props> {
actions: { [actionId: number]: PerformAction };
selectedActionId: number | null;
startActionId: number | null;
- dataTypeKey: string | undefined;
+ dataTypeKey: string | symbol | undefined;
monitorState: DevtoolsInspectorState;
updateMonitorState: (monitorState: Partial) => void;
styling: StylingFunction;
diff --git a/packages/redux-devtools-inspector-monitor/src/DevtoolsInspector.tsx b/packages/redux-devtools-inspector-monitor/src/DevtoolsInspector.tsx
index 5800feab..a5714b20 100644
--- a/packages/redux-devtools-inspector-monitor/src/DevtoolsInspector.tsx
+++ b/packages/redux-devtools-inspector-monitor/src/DevtoolsInspector.tsx
@@ -128,7 +128,7 @@ function createThemeState>(
return { base16Theme, styling };
}
-interface ExternalProps> {
+export interface ExternalProps> {
dispatch: Dispatch<
DevtoolsInspectorAction | LiftedAction
>;
@@ -142,7 +142,7 @@ interface ExternalProps> {
hideMainButtons?: boolean;
hideActionButtons?: boolean;
invertTheme: boolean;
- dataTypeKey?: string;
+ dataTypeKey?: string | symbol;
tabs: Tab[] | ((tabs: Tab[]) => Tab[]);
}
@@ -169,7 +169,7 @@ export interface DevtoolsInspectorProps>
hideMainButtons?: boolean;
hideActionButtons?: boolean;
invertTheme: boolean;
- dataTypeKey?: string;
+ dataTypeKey?: string | symbol;
tabs: Tab[] | ((tabs: Tab[]) => Tab[]);
}
diff --git a/packages/redux-devtools-inspector-monitor/src/redux.ts b/packages/redux-devtools-inspector-monitor/src/redux.ts
index e7f14c87..93b2835d 100644
--- a/packages/redux-devtools-inspector-monitor/src/redux.ts
+++ b/packages/redux-devtools-inspector-monitor/src/redux.ts
@@ -4,7 +4,7 @@ import { DevtoolsInspectorProps } from './DevtoolsInspector';
const UPDATE_MONITOR_STATE =
'@@redux-devtools-inspector-monitor/UPDATE_MONITOR_STATE';
-interface UpdateMonitorStateAction {
+export interface UpdateMonitorStateAction {
type: typeof UPDATE_MONITOR_STATE;
monitorState: Partial;
}
diff --git a/packages/redux-devtools-inspector-monitor/src/tabs/JSONDiff.tsx b/packages/redux-devtools-inspector-monitor/src/tabs/JSONDiff.tsx
index efcd8038..74213aaa 100644
--- a/packages/redux-devtools-inspector-monitor/src/tabs/JSONDiff.tsx
+++ b/packages/redux-devtools-inspector-monitor/src/tabs/JSONDiff.tsx
@@ -60,7 +60,7 @@ interface Props {
expandable: boolean
) => React.ReactNode;
isWideLayout: boolean;
- dataTypeKey: string | undefined;
+ dataTypeKey: string | symbol | undefined;
}
interface State {
diff --git a/packages/redux-devtools-inspector-monitor/src/tabs/getItemString.tsx b/packages/redux-devtools-inspector-monitor/src/tabs/getItemString.tsx
index 85eb261a..515643ea 100644
--- a/packages/redux-devtools-inspector-monitor/src/tabs/getItemString.tsx
+++ b/packages/redux-devtools-inspector-monitor/src/tabs/getItemString.tsx
@@ -73,7 +73,7 @@ const getItemString = (
styling: StylingFunction,
type: string,
data: any,
- dataTypeKey: string | undefined,
+ dataTypeKey: string | symbol | undefined,
isWideLayout: boolean,
isDiff?: boolean
) => (
diff --git a/packages/redux-devtools-instrument/package.json b/packages/redux-devtools-instrument/package.json
index 60084abe..03ab19bd 100644
--- a/packages/redux-devtools-instrument/package.json
+++ b/packages/redux-devtools-instrument/package.json
@@ -41,7 +41,7 @@
},
"dependencies": {
"lodash": "^4.17.19",
- "symbol-observable": "^1.2.0"
+ "symbol-observable": "^2.0.3"
},
"devDependencies": {
"@types/lodash": "^4.14.159",
diff --git a/packages/redux-devtools-log-monitor/package.json b/packages/redux-devtools-log-monitor/package.json
index bb95f078..58d85770 100644
--- a/packages/redux-devtools-log-monitor/package.json
+++ b/packages/redux-devtools-log-monitor/package.json
@@ -55,7 +55,7 @@
"redux-devtools": "^3.7.0"
},
"peerDependencies": {
- "@types/react": "^16.9.46",
+ "@types/react": "^16.3.18",
"react": "^16.3.0",
"redux": "^3.4.0 || ^4.0.0",
"redux-devtools": "^3.4.0"
diff --git a/packages/redux-devtools-serialize/src/immutable/index.ts b/packages/redux-devtools-serialize/src/immutable/index.ts
index b8fd874b..08382573 100644
--- a/packages/redux-devtools-serialize/src/immutable/index.ts
+++ b/packages/redux-devtools-serialize/src/immutable/index.ts
@@ -35,3 +35,4 @@ export default function (
serialize: serialize,
};
}
+export { default as serialize } from './serialize';
diff --git a/packages/redux-devtools-serialize/src/index.ts b/packages/redux-devtools-serialize/src/index.ts
index 600d22c0..c2f42ae8 100644
--- a/packages/redux-devtools-serialize/src/index.ts
+++ b/packages/redux-devtools-serialize/src/index.ts
@@ -1,5 +1,4 @@
-import immutable from './immutable';
-
-module.exports = {
- immutable: immutable,
-};
+export {
+ default as immutable,
+ serialize as immutableSerialize,
+} from './immutable';
diff --git a/packages/redux-devtools-test-generator/src/es6template.ts b/packages/redux-devtools-test-generator/src/es6template.ts
deleted file mode 100644
index 9828d0ef..00000000
--- a/packages/redux-devtools-test-generator/src/es6template.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-declare module 'es6template' {
- const _default: {
- compile(template: string): (locals: Locals) => string;
- };
- export default _default;
-}
diff --git a/packages/redux-devtools-test-generator/src/simple-diff.ts b/packages/redux-devtools-test-generator/src/simple-diff.ts
deleted file mode 100644
index e5fcafff..00000000
--- a/packages/redux-devtools-test-generator/src/simple-diff.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-declare module 'simple-diff' {
- interface AddEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'add';
- oldValue: undefined;
- newValue: unknown;
- }
-
- interface RemoveEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'remove';
- oldValue: unknown;
- newValue: undefined;
- }
-
- interface ChangeEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'change';
- oldValue: unknown;
- newValue: unknown;
- }
-
- interface AddItemEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'add-item';
- oldIndex: -1;
- curIndex: -1;
- newIndex: number;
- newValue: unknown;
- }
-
- interface RemoveItemEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'remove-item';
- oldIndex: number;
- curIndex: number;
- newIndex: -1;
- oldValue: unknown;
- }
-
- interface MoveItemEvent {
- oldPath: (string | number)[];
- newPath: (string | number)[];
- type: 'move-item';
- oldIndex: number;
- curIndex: number;
- newIndex: number;
- }
-
- export type Event =
- | AddEvent
- | RemoveEvent
- | ChangeEvent
- | AddItemEvent
- | RemoveItemEvent
- | MoveItemEvent;
-
- export default function (oldObj: unknown, newObj: unknown): Event[];
-}
diff --git a/packages/redux-devtools-trace-monitor/.babelrc b/packages/redux-devtools-trace-monitor/.babelrc
deleted file mode 100644
index 2a38a7b6..00000000
--- a/packages/redux-devtools-trace-monitor/.babelrc
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-flow"],
- "plugins": [
- [
- "@babel/plugin-transform-runtime",
- {
- "regenerator": true
- }
- ],
- ["@babel/plugin-proposal-decorators", { "legacy": true }],
- "@babel/plugin-proposal-class-properties"
- ]
-}
diff --git a/packages/redux-devtools-trace-monitor/package.json b/packages/redux-devtools-trace-monitor/package.json
deleted file mode 100644
index d00d1548..00000000
--- a/packages/redux-devtools-trace-monitor/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "redux-devtools-trace-monitor",
- "version": "0.1.3",
- "description": "Submonitor for Redux DevTools inspector to show stack traces.",
- "repository": "https://github.com/reduxjs/redux-devtools",
- "homepage": "https://github.com/reduxjs/redux-devtools",
- "author": "Mark Erikson ",
- "contributors": [
- "Mihail Diordiev (https://github.com/zalmoxisus)"
- ],
- "license": "MIT",
- "main": "lib/StackTraceTab.js",
- "files": [
- "lib"
- ],
- "scripts": {
- "clean": "rimraf lib",
- "build": "babel src --out-dir lib",
- "test": "jest --no-cache",
- "prepare": "npm run clean && npm run build",
- "prepublishOnly": "npm run test && npm run clean && npm run build"
- },
- "devDependencies": {
- "@babel/cli": "^7.10.5",
- "@babel/core": "^7.11.1",
- "@babel/plugin-proposal-class-properties": "^7.10.4",
- "@babel/plugin-proposal-decorators": "^7.10.5",
- "@babel/plugin-transform-runtime": "^7.11.0",
- "@babel/preset-env": "^7.11.0",
- "@babel/preset-flow": "^7.10.4",
- "@babel/preset-react": "^7.10.4",
- "enzyme": "^3.11.0",
- "enzyme-adapter-react-16": "^1.15.3",
- "enzyme-to-json": "^3.5.0",
- "jest": "^26.2.2",
- "react-dom": "^16.13.1",
- "react-test-renderer": "^16.13.1",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "anser": "^1.4.9",
- "html-entities": "^1.3.1",
- "react": "^16.13.1",
- "redux-devtools-themes": "^1.0.0",
- "settle-promise": "^1.0.0"
- }
-}
diff --git a/packages/redux-devtools-trace-monitor/test/StackTraceTab.spec.js b/packages/redux-devtools-trace-monitor/test/StackTraceTab.spec.js
deleted file mode 100644
index d8f21163..00000000
--- a/packages/redux-devtools-trace-monitor/test/StackTraceTab.spec.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import React from 'react';
-import { configure, mount } from 'enzyme';
-import toJson from 'enzyme-to-json';
-import StackTraceTab from '../src/StackTraceTab';
-
-import Adapter from 'enzyme-adapter-react-16';
-configure({ adapter: new Adapter() });
-
-function genAsyncSnapshot(component, done) {
- setTimeout(() => {
- component.update();
- expect(toJson(component)).toMatchSnapshot();
- done();
- });
-}
-
-const actions = {
- 0: { type: 'PERFORM_ACTION', action: { type: '@@INIT' } },
- 1: { type: 'PERFORM_ACTION', action: { type: 'INCREMENT_COUNTER' } },
- 2: {
- type: 'PERFORM_ACTION',
- action: { type: 'INCREMENT_COUNTER' },
- stack:
- 'Error\n at fn1 (app.js:72:24)\n at fn2 (app.js:84:31)\n ' +
- 'at fn3 (chrome-extension://lmhkpmbekcpmknklioeibfkpmmfibljd/js/page.bundle.js:1269:80)',
- },
-};
-
-describe('StackTraceTab component', () => {
- it('should render with no props', (done) => {
- const component = mount( );
- genAsyncSnapshot(component, done);
- });
-
- it('should render with props, but without stack', (done) => {
- const component = mount(
-
- );
- genAsyncSnapshot(component, done);
- });
-
- it('should render the link to docs', (done) => {
- const component = mount(
-
- );
- genAsyncSnapshot(component, done);
- });
-
- it('should render with trace stack', (done) => {
- const component = mount(
-
- );
- genAsyncSnapshot(component, done);
- });
-});
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 2a17a794..55204414 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -8,6 +8,6 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
// See https://github.com/DefinitelyTyped/DefinitelyTyped/issues/33311
- "types": ["node", "jest", "webpack-env"]
+ "types": ["node", "jest", "webpack-env", "chrome"]
}
}
diff --git a/yarn.lock b/yarn.lock
index 58a70246..72990645 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,39 @@
# yarn lockfile v1
+"@apollo/protobufjs@^1.0.3":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.0.5.tgz#a78b726147efc0795e74c8cb8a11aafc6e02f773"
+ integrity sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA==
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.2"
+ "@protobufjs/base64" "^1.1.2"
+ "@protobufjs/codegen" "^2.0.4"
+ "@protobufjs/eventemitter" "^1.1.0"
+ "@protobufjs/fetch" "^1.1.0"
+ "@protobufjs/float" "^1.0.2"
+ "@protobufjs/inquire" "^1.1.0"
+ "@protobufjs/path" "^1.1.2"
+ "@protobufjs/pool" "^1.1.0"
+ "@protobufjs/utf8" "^1.1.0"
+ "@types/long" "^4.0.0"
+ "@types/node" "^10.1.0"
+ long "^4.0.0"
+
+"@apollographql/apollo-tools@^0.4.3":
+ version "0.4.8"
+ resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz#d81da89ee880c2345eb86bddb92b35291f6135ed"
+ integrity sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==
+ dependencies:
+ apollo-env "^0.6.5"
+
+"@apollographql/graphql-playground-html@1.6.26":
+ version "1.6.26"
+ resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz#2f7b610392e2a872722912fc342b43cf8d641cb3"
+ integrity sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==
+ dependencies:
+ xss "^1.0.6"
+
"@babel/cli@^7.10.5":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.5.tgz#57df2987c8cf89d0fc7d4b157ec59d7619f1b77a"
@@ -378,7 +411,7 @@
"@babel/helper-create-class-features-plugin" "^7.10.4"
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-proposal-decorators@^7.10.5", "@babel/plugin-proposal-decorators@^7.8.3":
+"@babel/plugin-proposal-decorators@^7.8.3":
version "7.10.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4"
integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ==
@@ -395,7 +428,7 @@
"@babel/helper-plugin-utils" "^7.10.4"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
-"@babel/plugin-proposal-export-default-from@^7.10.4", "@babel/plugin-proposal-export-default-from@^7.8.3":
+"@babel/plugin-proposal-export-default-from@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.4.tgz#08f66eef0067cbf6a7bc036977dcdccecaf0c6c5"
integrity sha512-G1l00VvDZ7Yk2yRlC5D8Ybvu3gmeHS3rCHoUYdjrqGYUtdeOBoRypnvDZ5KQqxyaiiGHWnVDeSEzA5F9ozItig==
@@ -1110,7 +1143,7 @@
levenary "^1.1.1"
semver "^5.5.0"
-"@babel/preset-flow@^7.0.0", "@babel/preset-flow@^7.10.4":
+"@babel/preset-flow@^7.0.0":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f"
integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g==
@@ -1161,7 +1194,7 @@
pirates "^4.0.0"
source-map-support "^0.5.16"
-"@babel/runtime-corejs2@^7.4.5":
+"@babel/runtime-corejs2@^7.8.7":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.11.2.tgz#700a03945ebad0d31ba6690fc8a6bcc9040faa47"
integrity sha512-AC/ciV28adSSpEkBglONBWq4/Lvm6GAZuxIoyVtsnUpZMl0bxLtoChEnYAkP+47KyOCayZanojtflUEUJtR/6Q==
@@ -2561,6 +2594,59 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.4.tgz#11d5db19bd178936ec89cd84519c4de439574398"
integrity sha512-1oO6+dN5kdIA3sKPZhRGJTfGVP4SWV6KqlMOwry4J3HfyD68sl/3KmG7DeYUzvN+RbhXDnv/D8vNNB8168tAMg==
+"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
+ integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
+
+"@protobufjs/base64@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
+ integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
+
+"@protobufjs/codegen@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
+ integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
+
+"@protobufjs/eventemitter@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
+ integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
+
+"@protobufjs/fetch@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
+ integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
+ dependencies:
+ "@protobufjs/aspromise" "^1.1.1"
+ "@protobufjs/inquire" "^1.1.0"
+
+"@protobufjs/float@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
+ integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
+
+"@protobufjs/inquire@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
+ integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
+
+"@protobufjs/path@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
+ integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
+
+"@protobufjs/pool@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
+ integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
+
+"@protobufjs/utf8@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
+ integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
+
"@reach/router@^1.3.3":
version "1.3.4"
resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c"
@@ -2584,6 +2670,23 @@
lodash "^4.17.15"
lodash-es "^4.17.15"
+"@rjsf/core@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-2.4.0.tgz#c50bcff0d8178948ce08123177399d8816d51929"
+ integrity sha512-8zlydBkGldOxGXFEwNGFa1gzTxpcxaYn7ofegcu8XHJ7IKMCfpnU3ABg+H3eml1KZCX3FODmj1tHFJKuTmfynw==
+ dependencies:
+ "@babel/runtime-corejs2" "^7.8.7"
+ "@types/json-schema" "^7.0.4"
+ ajv "^6.7.0"
+ core-js "^2.5.7"
+ json-schema-merge-allof "^0.6.0"
+ jsonpointer "^4.0.1"
+ lodash "^4.17.15"
+ prop-types "^15.7.2"
+ react-app-polyfill "^1.0.4"
+ react-is "^16.9.0"
+ shortid "^2.2.14"
+
"@sindresorhus/is@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
@@ -3246,11 +3349,28 @@
dependencies:
defer-to-connect "^1.0.1"
+"@types/accepts@*", "@types/accepts@^1.3.5":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575"
+ integrity sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+"@types/async@*":
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/@types/async/-/async-3.2.3.tgz#c56f5e0fc02f8b37196f79239cc857e789b97bb4"
+ integrity sha512-deXFjLZc1h6SOh3hicVgD+S2EAkhSBGX/vdlD4nTzCjjOFQ+bfNiXocQ21xJjFAUwqaCeyvOQMgrnbg4QEV63A==
+
+"@types/babel__code-frame@^7.0.2":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__code-frame/-/babel__code-frame-7.0.2.tgz#e0c0f1648cbc09a9d4e5b4ed2ae9a6f7c8f5aeb0"
+ integrity sha512-imO+jT/yjOKOAS5GQZ8SDtwiIloAGGr6OaZDKB0V5JVaSfGZLat5K5/ZRtyKW6R60XHV3RHYPTFfhYb+wDKyKg==
+
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
version "7.1.9"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d"
@@ -3289,7 +3409,7 @@
resolved "https://registry.yarnpkg.com/@types/base16/-/base16-1.0.2.tgz#eb3a07db52309bfefb9ba010dfdb3c0784971f65"
integrity sha512-oYO/U4VD1DavwrKuCSQWdLG+5K22SLPem2OQaHmFcQuwHoVeGC+JGVRji2MUqZUAIQZHEonOeVfAX09hYiLsdg==
-"@types/body-parser@*":
+"@types/body-parser@*", "@types/body-parser@1.19.0":
version "1.19.0"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==
@@ -3309,6 +3429,14 @@
dependencies:
"@types/node" "*"
+"@types/chrome@^0.0.124":
+ version "0.0.124"
+ resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.124.tgz#1cdb8e1c1ddb04b15844f5a71b9907f73bbb84a2"
+ integrity sha512-0UmDQ6A9gaahvztKryIonSTyUMEhuhKNyyJAnBB7ZJN/YXP7YRkL4onPFSTxnIbXcMnYsQFo8TxsGP8jY2mdEw==
+ dependencies:
+ "@types/filesystem" "*"
+ "@types/har-format" "*"
+
"@types/classnames@^2.2.10":
version "2.2.10"
resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999"
@@ -3340,6 +3468,11 @@
dependencies:
"@types/color-convert" "*"
+"@types/component-emitter@*":
+ version "1.2.10"
+ resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea"
+ integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==
+
"@types/connect-history-api-fallback@*":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.3.tgz#4772b79b8b53185f0f4c9deab09236baf76ee3b4"
@@ -3355,6 +3488,40 @@
dependencies:
"@types/node" "*"
+"@types/content-disposition@*":
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.3.tgz#0aa116701955c2faa0717fc69cd1596095e49d96"
+ integrity sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==
+
+"@types/cookiejar@*":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8"
+ integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==
+
+"@types/cookies@*":
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.7.4.tgz#26dedf791701abc0e36b5b79a5722f40e455f87b"
+ integrity sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw==
+ dependencies:
+ "@types/connect" "*"
+ "@types/express" "*"
+ "@types/keygrip" "*"
+ "@types/node" "*"
+
+"@types/cors@2.8.7":
+ version "2.8.7"
+ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.7.tgz#ab2f47f1cba93bce27dfd3639b006cc0e5600889"
+ integrity sha512-sOdDRU3oRS7LBNTIqwDkPJyq0lpHYcbMTt0TrjzsXbk/e37hcLTH6eZX7CdbDeN0yJJvzw9hFBZkbtCSbk/jAQ==
+ dependencies:
+ "@types/express" "*"
+
+"@types/cross-spawn@^6.0.2":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.2.tgz#168309de311cd30a2b8ae720de6475c2fbf33ac7"
+ integrity sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==
+ dependencies:
+ "@types/node" "*"
+
"@types/d3@^3.5.43":
version "3.5.43"
resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.43.tgz#e9b4992817e0b6c5efaa7d6e5bb2cee4d73eab58"
@@ -3385,6 +3552,11 @@
"@types/cheerio" "*"
"@types/react" "*"
+"@types/es6template@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/es6template/-/es6template-1.0.0.tgz#aeff9046c3332b587a65485a8383292afba82b10"
+ integrity sha512-wvlFvfUd3FAJyRhgjfibljYSPJ/XKmB3sSlPV+1P5dinRmdSE0lYOFXfJ/ZiWSfBN0Cex5MENBUw8kjsvft+8w==
+
"@types/eslint-visitor-keys@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
@@ -3395,7 +3567,12 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884"
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
-"@types/express-serve-static-core@*":
+"@types/expirymanager@*":
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/@types/expirymanager/-/expirymanager-0.9.0.tgz#b2ca7610e517924e26b27221603cbe5f92c0e8fc"
+ integrity sha512-xulG8b5SiBhpRE1Arfx3ji428mfhwQdas6/i+1IJhTLkyFifJ4rF+vve522ds2ZTiBKCUv9WHNuVF/V9PJCa2Q==
+
+"@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.9":
version "4.17.9"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz#2d7b34dcfd25ec663c25c85d76608f8b249667f1"
integrity sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA==
@@ -3404,7 +3581,7 @@
"@types/qs" "*"
"@types/range-parser" "*"
-"@types/express@*":
+"@types/express@*", "@types/express@4.17.7":
version "4.17.7"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.7.tgz#42045be6475636d9801369cd4418ef65cdb0dd59"
integrity sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==
@@ -3414,6 +3591,30 @@
"@types/qs" "*"
"@types/serve-static" "*"
+"@types/filesystem@*":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748"
+ integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==
+ dependencies:
+ "@types/filewriter" "*"
+
+"@types/filewriter@*":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3"
+ integrity sha1-wFTor02d11205jq8dviFFocU1LM=
+
+"@types/fleximap@*":
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/@types/fleximap/-/fleximap-0.9.0.tgz#8f084b26bf7284800ee82d960df97324888f555d"
+ integrity sha512-7VsHgMM7l3jY+MXptDgzvROcEoikVgIxu+8d/qT0WijDl6RXdwAbAQYxu5sBCwUvlf0cEQwiDC4rOvkcm3h+hw==
+
+"@types/fs-capacitor@*":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz#17113e25817f584f58100fb7a08eed288b81956e"
+ integrity sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/glob-base@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@types/glob-base/-/glob-base-0.3.0.tgz#a581d688347e10e50dd7c17d6f2880a10354319d"
@@ -3434,6 +3635,21 @@
dependencies:
"@types/node" "*"
+"@types/graphql-upload@^8.0.0":
+ version "8.0.4"
+ resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.4.tgz#23a8ffb3d2fe6e0ee07e6f16ee9d9d5e995a2f4f"
+ integrity sha512-0TRyJD2o8vbkmJF8InppFcPVcXKk+Rvlg/xvpHBIndSJYpmDWfmtx/ZAtl4f3jR2vfarpTqYgj8MZuJssSoU7Q==
+ dependencies:
+ "@types/express" "*"
+ "@types/fs-capacitor" "*"
+ "@types/koa" "*"
+ graphql "^15.3.0"
+
+"@types/har-format@*":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.4.tgz#3275842095abb60d14b47fa798cc9ff708dab6d4"
+ integrity sha512-iUxzm1meBm3stxUMzRqgOVHjj4Kgpgu5w9fm4X7kPRfSgVRzythsucEN7/jtOo8SQzm+HfcxWWzJS0mJDH/3DQ==
+
"@types/hast@^2.0.0":
version "2.3.1"
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9"
@@ -3459,11 +3675,26 @@
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
+"@types/html-entities@^1.2.16":
+ version "1.2.16"
+ resolved "https://registry.yarnpkg.com/@types/html-entities/-/html-entities-1.2.16.tgz#4d1fe208c4c33727ac4657e6f5d92bfe52427023"
+ integrity sha512-CI6fHfFvkTtX2Nlr4JBA6yIFTfA4p9E6w9ky64X6PrfXiTALhUh/SOa+Sxvv2p87m+y5AH71lAUrx0lSYx4hKQ==
+
"@types/html-minifier-terser@^5.0.0":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880"
integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==
+"@types/http-assert@*":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b"
+ integrity sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==
+
+"@types/http-errors@*":
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69"
+ integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==
+
"@types/http-proxy-middleware@*":
version "0.19.3"
resolved "https://registry.yarnpkg.com/@types/http-proxy-middleware/-/http-proxy-middleware-0.19.3.tgz#b2eb96fbc0f9ac7250b5d9c4c53aade049497d03"
@@ -3530,16 +3761,49 @@
resolved "https://registry.yarnpkg.com/@types/jsan/-/jsan-3.1.0.tgz#128fdb14a102134ede764b11682e795d1b380c43"
integrity sha512-V5wfm0++TqM92D0ZkAhl9MDQHPTi88fXhMNVin5LV/Y3RnuU/FUv6wML4Vt/amZmPN9WaFTmDhKW+h58kAFmIg==
-"@types/json-schema@*":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
- integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
-
"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5":
version "7.0.5"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==
+"@types/json-schema@^7.0.6":
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
+ integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
+
+"@types/jsonwebtoken@*":
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#2531d5e300803aa63279b232c014acf780c981c5"
+ integrity sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/keygrip@*":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
+ integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
+
+"@types/koa-compose@*":
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.5.tgz#85eb2e80ac50be95f37ccf8c407c09bbe3468e9d"
+ integrity sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==
+ dependencies:
+ "@types/koa" "*"
+
+"@types/koa@*":
+ version "2.11.4"
+ resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.4.tgz#8af02a069a9f8e08fa47b8da28d982e652f69cfb"
+ integrity sha512-Etqs0kdqbuAsNr5k6mlZQelpZKVwMu9WPRHVVTLnceZlhr0pYmblRNJbCgoCMzKWWePldydU0AYEOX4Q9fnGUQ==
+ dependencies:
+ "@types/accepts" "*"
+ "@types/content-disposition" "*"
+ "@types/cookies" "*"
+ "@types/http-assert" "*"
+ "@types/http-errors" "*"
+ "@types/keygrip" "*"
+ "@types/koa-compose" "*"
+ "@types/node" "*"
+
"@types/lodash.curry@^4.1.6":
version "4.1.6"
resolved "https://registry.yarnpkg.com/@types/lodash.curry/-/lodash.curry-4.1.6.tgz#f26c490c80c92d7cbaa2300d542e89781d44b1ff"
@@ -3566,6 +3830,11 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.159.tgz#61089719dc6fdd9c5cb46efc827f2571d1517065"
integrity sha512-gF7A72f7WQN33DpqOWw9geApQPh4M3PxluMtaHxWHXEGSN12/WbcEk/eNSqWNQcQhF66VSZ06vCF94CrHwXJDg==
+"@types/long@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
+ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
+
"@types/markdown-to-jsx@^6.11.0":
version "6.11.2"
resolved "https://registry.yarnpkg.com/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.2.tgz#05d1aaffbf15be7be12c70535fa4fed65cc7c64f"
@@ -3602,7 +3871,21 @@
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
-"@types/node-fetch@^2.5.4":
+"@types/morgan@^1.9.1":
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.1.tgz#6457872df95647c1dbc6b3741e8146b71ece74bf"
+ integrity sha512-2j5IKrgJpEP6xw/uiVb2Xfga0W0sSVD9JP9t7EZLvpBENdB0OKgcnoKS8IsjNeNnZ/86robdZ61Orl0QCFGOXg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/ncom@*":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/ncom/-/ncom-1.0.0.tgz#8e33d06fc4914c941ba40ceca042081b947ba699"
+ integrity sha512-9fmYuP/lvEVfzY+5nZ61ewM/ub9mDINn88BBflTyHX6D7wH5b8oFR3GXrmYjelx79shuogHhHMOtXODDBatVPQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node-fetch@2.5.7", "@types/node-fetch@^2.5.4":
version "2.5.7"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c"
integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==
@@ -3615,6 +3898,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1"
integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==
+"@types/node@^10.1.0":
+ version "10.17.39"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.39.tgz#ce1122758d0608de8303667cebf171f44192629b"
+ integrity sha512-dJLCxrpQmgyxYGcl0Ae9MTsQgI22qHHcGFj/8VKu7McJA5zQpnuGjoksnxbo1JxSjW/Nahnl13W8MYZf01CZHA==
+
"@types/node@^12.0.12":
version "12.12.54"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.54.tgz#a4b58d8df3a4677b6c08bfbc94b7ad7a7a5f82d1"
@@ -3722,14 +4010,6 @@
dependencies:
"@types/dragula" "*"
-"@types/react-jsonschema-form@^1.7.4":
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.4.tgz#b9dded80f830bce11a623107633b13964a143cca"
- integrity sha512-TSsntIuB8bfheC/ZpjUmgB6+m5cLR4Gbh8rnqpSYB6T4e2TwzNICuKC5AykZI0XTxqLJmShyVsJxuo4aih64Gw==
- dependencies:
- "@types/json-schema" "*"
- "@types/react" "*"
-
"@types/react-native@*":
version "0.63.8"
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.63.8.tgz#73ec087122c64c309eeaf150b565b8d755f0fb1f"
@@ -3814,6 +4094,52 @@
dependencies:
redux "^4.0.0"
+"@types/sc-auth@*":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@types/sc-auth/-/sc-auth-5.0.0.tgz#b9bca82783419233ed938f59e37ae940bfdb454a"
+ integrity sha512-V+wuOweEJDrVCMduXmS7zc60O6HGyd5Xm3ClzEXKJfQdrSuhoqvhDjOwbtRZAXCjHll12lBXECb2sht5Glp/6A==
+ dependencies:
+ "@types/jsonwebtoken" "*"
+
+"@types/sc-broker-cluster@^6":
+ version "6.1.3"
+ resolved "https://registry.yarnpkg.com/@types/sc-broker-cluster/-/sc-broker-cluster-6.1.3.tgz#b6b0c3cedb635b1ee5098ebd1453e121c6a3d2cc"
+ integrity sha512-ttxBDnqq+Kcd3lMRQKW471sbv8KBXhJNaKHfFGrRRjWnSpSMa/zhhyAf/ew7/r8S7ZKuR4MFYmKYOwMXv5mm3g==
+ dependencies:
+ "@types/async" "*"
+ "@types/expirymanager" "*"
+ "@types/fleximap" "*"
+ "@types/sc-broker" "*"
+ "@types/sc-channel" "^1"
+ "@types/socketcluster" "*"
+ "@types/socketcluster-server" "^14"
+
+"@types/sc-broker@*":
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/@types/sc-broker/-/sc-broker-8.0.1.tgz#7dcf741386ab08ca9ca39ea6eb9af7fbb77faff2"
+ integrity sha512-JacbIkcjKs3PIMyw8yuM3rrJf2kw39GMoT83tNyJfvhF0DBLU26OBsO4kxmi82SdnVUubeiSN4/whC4lhOpAYg==
+ dependencies:
+ "@types/expirymanager" "*"
+ "@types/fleximap" "*"
+ "@types/ncom" "*"
+
+"@types/sc-channel@^1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@types/sc-channel/-/sc-channel-1.2.1.tgz#82e7f50155699b751a7150b679960ca363bfa0b1"
+ integrity sha512-RYT2V1XlViii3CmPqlZQfv3ADaCzxGPhZfk6MWPfnv3z1dR9wCE/c9lehLtuCz0TYPJYPV48PoocvIdaPAMsUA==
+ dependencies:
+ "@types/component-emitter" "*"
+
+"@types/sc-errors@*":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@types/sc-errors/-/sc-errors-1.4.0.tgz#dba1309b695ee8aafc3f574dfedfe4f3c5153419"
+ integrity sha512-WfBEiw/SVja1ZvJRdt37dOJFxp2llV35n9cPiDCDsFRSvTTYlO4iMFg+NyeEhiWBk1O4bvmyYpAEYzJx1DbHHQ==
+
+"@types/semver@^7.3.4":
+ version "7.3.4"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb"
+ integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==
+
"@types/serve-static@*":
version "1.13.5"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.5.tgz#3d25d941a18415d3ab092def846e135a08bbcf53"
@@ -3822,11 +4148,48 @@
"@types/express-serve-static-core" "*"
"@types/mime" "*"
+"@types/simple-diff@^1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@types/simple-diff/-/simple-diff-1.6.0.tgz#f27f0a9a849a97695795a46e5b91ad86bbe66986"
+ integrity sha512-qWru8xXShCbzXVk1YbQ1nomukLjTvF/FZ1BKxQBAp4UHuVxjsXvc6mur2WFXWHcRjDl9FAS7BygfCenDNjbsog==
+
"@types/simple-element-resize-detector@^1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@types/simple-element-resize-detector/-/simple-element-resize-detector-1.3.0.tgz#19b40d71fefa1876ac5d4ba585197ef438946353"
integrity sha512-z89ForrCNg+4uwTHjwBCM9LjcsXYC/4O8u3tSi+82v2LCbfiYFpkjH/qQVkDewFBK6FUG7RRV7jw78EGs2maoQ==
+"@types/socketcluster-client@^13.0.3":
+ version "13.0.4"
+ resolved "https://registry.yarnpkg.com/@types/socketcluster-client/-/socketcluster-client-13.0.4.tgz#945593f0a67d09d51b8fb39ea1f750fb6c19aea1"
+ integrity sha512-kJcm1V+iu09O7+zHY+zkdokNsvu2D965yqs8NhswgWxWU9ctk5f3IcbqMWnNqIe28aEFhvseJrlNM+NCjAEIwQ==
+ dependencies:
+ "@types/component-emitter" "*"
+ "@types/sc-auth" "*"
+ "@types/sc-channel" "^1"
+ "@types/sc-errors" "*"
+ "@types/socketcluster-server" "^14"
+ "@types/ws" "*"
+
+"@types/socketcluster-server@^14":
+ version "14.2.5"
+ resolved "https://registry.yarnpkg.com/@types/socketcluster-server/-/socketcluster-server-14.2.5.tgz#ed323b27e29de8a68dee851096d5fe2d164a8fd1"
+ integrity sha512-mDdLtv8R43mh6K4w/HmHEkZZMlCKN/B1Cm/seh6NSPBtVxbHhH0hN0KV4em4eY+2+S7FoNi9sFYINDPitOaBwA==
+ dependencies:
+ "@types/component-emitter" "*"
+ "@types/jsonwebtoken" "*"
+ "@types/sc-auth" "*"
+ "@types/sc-broker-cluster" "^6"
+ "@types/ws" "*"
+
+"@types/socketcluster@*":
+ version "14.0.3"
+ resolved "https://registry.yarnpkg.com/@types/socketcluster/-/socketcluster-14.0.3.tgz#62a89c3c08c2ee0fca5c265263e3a15fb544dd83"
+ integrity sha512-E+myXJK1zKtqydI+qWUxthvi4Z76+Ovzz5ijIa/yR8hfOvk1K7VhsbyNrnrk8KWLtJFpostisbPp8eLBAQrnkA==
+ dependencies:
+ "@types/sc-auth" "*"
+ "@types/sc-broker-cluster" "^6"
+ "@types/socketcluster-server" "^14"
+
"@types/source-list-map@*":
version "0.1.2"
resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
@@ -3847,6 +4210,21 @@
"@types/react-native" "*"
csstype "^3.0.2"
+"@types/superagent@*":
+ version "4.1.10"
+ resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.10.tgz#5e2cc721edf58f64fe9b819f326ee74803adee86"
+ integrity sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==
+ dependencies:
+ "@types/cookiejar" "*"
+ "@types/node" "*"
+
+"@types/supertest@^2.0.10":
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.10.tgz#630d79b4d82c73e043e43ff777a9ca98d457cab7"
+ integrity sha512-Xt8TbEyZTnD5Xulw95GLMOkmjGICrOQyJ2jqgkSjAUR3mm7pAIzSR0NFBaMcwlzVvlpCjNwbATcWWwjNiZiFrQ==
+ dependencies:
+ "@types/superagent" "*"
+
"@types/tapable@*", "@types/tapable@^1.0.5":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74"
@@ -3871,6 +4249,11 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+"@types/uuid@^8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f"
+ integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==
+
"@types/warning@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
@@ -3913,6 +4296,13 @@
"@types/webpack-sources" "*"
source-map "^0.6.0"
+"@types/ws@*", "@types/ws@^7.0.0":
+ version "7.2.7"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.7.tgz#362ad1a1d62721bdb725e72c8cccf357078cf5a3"
+ integrity sha512-UUFC/xxqFLP17hTva8/lVT0SybLUrfSD9c+iapKb0fEiC8uoDbA+xuZ3pAN603eW+bY8ebSMLm9jXdIPnD0ZgA==
+ dependencies:
+ "@types/node" "*"
+
"@types/yargs-parser@*":
version "15.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
@@ -4209,7 +4599,7 @@ abbrev@1:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
+accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
@@ -4444,12 +4834,39 @@ anymatch@^3.0.3, anymatch@~3.1.1:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-apollo-cache-control@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.1.1.tgz#173d14ceb3eb9e7cb53de7eb8b61bee6159d4171"
- integrity sha512-XJQs167e9u+e5ybSi51nGYr70NPBbswdvTEHtbtXbwkZ+n9t0SLPvUcoqceayOSwjK1XYOdU/EKPawNdb3rLQA==
+apollo-cache-control@^0.11.3:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.11.3.tgz#caa409692bccc35da582cb133c023c0175b84e91"
+ integrity sha512-21GCeC9AIIa22uD0Vtqn/N0D5kOB4rY/Pa9aQhxVeLN+4f8Eu4nmteXhFypUD0LL1/58dmm8lS5embsfoIGjEA==
dependencies:
- graphql-extensions "^0.0.x"
+ apollo-server-env "^2.4.5"
+ apollo-server-plugin-base "^0.10.1"
+
+apollo-datasource@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-0.7.2.tgz#1662ee93453a9b89af6f73ce561bde46b41ebf31"
+ integrity sha512-ibnW+s4BMp4K2AgzLEtvzkjg7dJgCaw9M5b5N0YKNmeRZRnl/I/qBTQae648FsRKgMwTbRQIvBhQ0URUFAqFOw==
+ dependencies:
+ apollo-server-caching "^0.5.2"
+ apollo-server-env "^2.4.5"
+
+apollo-env@^0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.5.tgz#5a36e699d39e2356381f7203493187260fded9f3"
+ integrity sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==
+ dependencies:
+ "@types/node-fetch" "2.5.7"
+ core-js "^3.0.1"
+ node-fetch "^2.2.0"
+ sha.js "^2.4.11"
+
+apollo-graphql@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.0.tgz#37bee7dc853213269137f4c60bfdf2ee28658669"
+ integrity sha512-BxTf5LOQe649e9BNTPdyCGItVv4Ll8wZ2BKnmiYpRAocYEXAVrQPWuSr3dO4iipqAU8X0gvle/Xu9mSqg5b7Qg==
+ dependencies:
+ apollo-env "^0.6.5"
+ lodash.sortby "^4.7.0"
apollo-link@^1.2.14:
version "1.2.14"
@@ -4461,34 +4878,122 @@ apollo-link@^1.2.14:
tslib "^1.9.3"
zen-observable-ts "^0.8.21"
-apollo-server-core@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.4.0.tgz#4faff7f110bfdd6c3f47008302ae24140f94c592"
- integrity sha512-BP1Vh39krgEjkQxbjTdBURUjLHbFq1zeOChDJgaRsMxGtlhzuLWwwC6lLdPatN8jEPbeHq8Tndp9QZ3iQZOKKA==
+apollo-reporting-protobuf@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.6.0.tgz#179e49e99229851d588b1fe6faff4ffdcf503224"
+ integrity sha512-AFLQIuO0QhkoCF+41Be/B/YU0C33BZ0opfyXorIjM3MNNiEDSyjZqmUozlB3LqgfhT9mn2IR5RSsA+1b4VovDQ==
dependencies:
- apollo-cache-control "^0.1.0"
- apollo-tracing "^0.1.0"
- graphql-extensions "^0.0.x"
+ "@apollo/protobufjs" "^1.0.3"
-apollo-server-express@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-1.4.0.tgz#7d7c58d6d6f9892b83fe575669093bb66738b125"
- integrity sha512-zkH00nxhLnJfO0HgnNPBTfZw8qI5ILaPZ5TecMCI9+Y9Ssr2b0bFr9pBRsXy9eudPhI+/O4yqegSUsnLdF/CPw==
+apollo-server-caching@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/apollo-server-caching/-/apollo-server-caching-0.5.2.tgz#bef5d5e0d48473a454927a66b7bb947a0b6eb13e"
+ integrity sha512-HUcP3TlgRsuGgeTOn8QMbkdx0hLPXyEJehZIPrcof0ATz7j7aTPA4at7gaiFHCo8gk07DaWYGB3PFgjboXRcWQ==
dependencies:
- apollo-server-core "^1.4.0"
- apollo-server-module-graphiql "^1.4.0"
+ lru-cache "^5.0.0"
-apollo-server-module-graphiql@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/apollo-server-module-graphiql/-/apollo-server-module-graphiql-1.4.0.tgz#c559efa285578820709f1769bb85d3b3eed3d8ec"
- integrity sha512-GmkOcb5he2x5gat+TuiTvabnBf1m4jzdecal3XbXBh/Jg+kx4hcvO3TTDFQ9CuTprtzdcVyA11iqG7iOMOt7vA==
-
-apollo-tracing@^0.1.0:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.1.4.tgz#5b8ae1b01526b160ee6e552a7f131923a9aedcc7"
- integrity sha512-Uv+1nh5AsNmC3m130i2u3IqbS+nrxyVV3KYimH5QKsdPjxxIQB3JAT+jJmpeDxBel8gDVstNmCh82QSLxLSIdQ==
+apollo-server-core@^2.18.2:
+ version "2.18.2"
+ resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.18.2.tgz#1b8a625531a92e137f68c730bc42b9e3f7d7fcbb"
+ integrity sha512-phz57BFBukMa3Ta7ZVW7pj1pdUne9KYLbcBdEcITr+I0+nbhy+YM8gcgpOnjrokWYiEZgIe52XeM3m4BMLw5dg==
dependencies:
- graphql-extensions "~0.0.9"
+ "@apollographql/apollo-tools" "^0.4.3"
+ "@apollographql/graphql-playground-html" "1.6.26"
+ "@types/graphql-upload" "^8.0.0"
+ "@types/ws" "^7.0.0"
+ apollo-cache-control "^0.11.3"
+ apollo-datasource "^0.7.2"
+ apollo-graphql "^0.6.0"
+ apollo-reporting-protobuf "^0.6.0"
+ apollo-server-caching "^0.5.2"
+ apollo-server-env "^2.4.5"
+ apollo-server-errors "^2.4.2"
+ apollo-server-plugin-base "^0.10.1"
+ apollo-server-types "^0.6.0"
+ apollo-tracing "^0.11.4"
+ async-retry "^1.2.1"
+ fast-json-stable-stringify "^2.0.0"
+ graphql-extensions "^0.12.5"
+ graphql-tag "^2.9.2"
+ graphql-tools "^4.0.0"
+ graphql-upload "^8.0.2"
+ loglevel "^1.6.7"
+ lru-cache "^5.0.0"
+ sha.js "^2.4.11"
+ subscriptions-transport-ws "^0.9.11"
+ uuid "^8.0.0"
+ ws "^6.0.0"
+
+apollo-server-env@^2.4.5:
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-2.4.5.tgz#73730b4f0439094a2272a9d0caa4079d4b661d5f"
+ integrity sha512-nfNhmGPzbq3xCEWT8eRpoHXIPNcNy3QcEoBlzVMjeglrBGryLG2LXwBSPnVmTRRrzUYugX0ULBtgE3rBFNoUgA==
+ dependencies:
+ node-fetch "^2.1.2"
+ util.promisify "^1.0.0"
+
+apollo-server-errors@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-2.4.2.tgz#1128738a1d14da989f58420896d70524784eabe5"
+ integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ==
+
+apollo-server-express@^2.18.2:
+ version "2.18.2"
+ resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-2.18.2.tgz#eb5f1ba566268080dd56269d9a7dfade55ccded8"
+ integrity sha512-9P5YOSE2amcNdkXqxqU3oulp+lpwoIBdwS2vOP69kl6ix+n7vEWHde4ulHwwl4xLdtZ88yyxgdKJEIkhaepiNw==
+ dependencies:
+ "@apollographql/graphql-playground-html" "1.6.26"
+ "@types/accepts" "^1.3.5"
+ "@types/body-parser" "1.19.0"
+ "@types/cors" "2.8.7"
+ "@types/express" "4.17.7"
+ "@types/express-serve-static-core" "4.17.9"
+ accepts "^1.3.5"
+ apollo-server-core "^2.18.2"
+ apollo-server-types "^0.6.0"
+ body-parser "^1.18.3"
+ cors "^2.8.4"
+ express "^4.17.1"
+ graphql-subscriptions "^1.0.0"
+ graphql-tools "^4.0.0"
+ parseurl "^1.3.2"
+ subscriptions-transport-ws "^0.9.16"
+ type-is "^1.6.16"
+
+apollo-server-plugin-base@^0.10.1:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-0.10.1.tgz#b053d43b1ff5f728735ed35095cf4427657bfa9f"
+ integrity sha512-XChCBDNyfByWqVXptsjPwrwrCj5cxMmNbchZZi8KXjtJ0hN2C/9BMNlInJd6bVGXvUbkRJYUakfKCfO5dZmwIg==
+ dependencies:
+ apollo-server-types "^0.6.0"
+
+apollo-server-types@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-0.6.0.tgz#6085f8389881b79911384dab6c0e8a8b91c0e1a2"
+ integrity sha512-usqXaz81bHxD2IZvKEQNnLpSbf2Z/BmobXZAjEefJEQv1ItNn+lJNUmSSEfGejHvHlg2A7WuAJKJWyDWcJrNnA==
+ dependencies:
+ apollo-reporting-protobuf "^0.6.0"
+ apollo-server-caching "^0.5.2"
+ apollo-server-env "^2.4.5"
+
+apollo-server@^2.18.2:
+ version "2.18.2"
+ resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-2.18.2.tgz#de55a8b7e90e6ddaba29331ecc9469d6945fff23"
+ integrity sha512-I8B7Zd7WrqUhOWAVMQRmKhgJkvdTlCY7C74WToCdkeOyHl1/myiA7tERKedgv111xOTpIMZHyBzcCRX5CH/oqQ==
+ dependencies:
+ apollo-server-core "^2.18.2"
+ apollo-server-express "^2.18.2"
+ express "^4.0.0"
+ graphql-subscriptions "^1.0.0"
+ graphql-tools "^4.0.0"
+
+apollo-tracing@^0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/apollo-tracing/-/apollo-tracing-0.11.4.tgz#e953547064bc50dfa337cbe56836271bfd2d2efc"
+ integrity sha512-zBu/SwQlXfbdpcKLzWARGVjrEkIZUW3W9Mb4CCIzv07HbBQ8IQpmf9w7HIJJefC7rBiBJYg6JBGyuro3N2lxCA==
+ dependencies:
+ apollo-server-env "^2.4.5"
+ apollo-server-plugin-base "^0.10.1"
apollo-utilities@^1.0.1, apollo-utilities@^1.3.0:
version "1.3.4"
@@ -4666,7 +5171,7 @@ arrify@^2.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
-asap@^2.0.0:
+asap@^2.0.0, asap@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
@@ -4732,6 +5237,13 @@ async-limiter@^1.0.0, async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+async-retry@^1.2.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.1.tgz#139f31f8ddce50c0870b0ba558a6079684aaed55"
+ integrity sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==
+ dependencies:
+ retry "0.12.0"
+
async@0.9.x:
version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
@@ -5183,6 +5695,11 @@ babel-preset-jest@^26.2.0:
babel-plugin-transform-undefined-to-void "^6.9.4"
lodash "^4.17.11"
+backo2@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
+
bail@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
@@ -5301,7 +5818,7 @@ bn.js@^5.1.1:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
-body-parser@1.19.0, body-parser@^1.19.0:
+body-parser@1.19.0, body-parser@^1.18.3, body-parser@^1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
@@ -5546,6 +6063,13 @@ builtins@^1.0.3:
resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og=
+busboy@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
+ integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==
+ dependencies:
+ dicer "0.3.0"
+
byline@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
@@ -6172,7 +6696,7 @@ comma-separated-tokens@^1.0.0:
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
-commander@^2.19.0, commander@^2.20.0:
+commander@^2.19.0, commander@^2.20.0, 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==
@@ -6235,6 +6759,25 @@ compression@^1.7.4:
safe-buffer "5.1.2"
vary "~1.1.2"
+compute-gcd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.0.tgz#fc1ede5b65001e950226502f46543863e4fea10e"
+ integrity sha1-/B7eW2UAHpUCJlAvRlQ4Y+T+oQ4=
+ dependencies:
+ validate.io-array "^1.0.3"
+ validate.io-function "^1.0.2"
+ validate.io-integer-array "^1.0.0"
+
+compute-lcm@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.0.tgz#abd96d040b41b0a166f89944b5c8b7c511e21ad5"
+ integrity sha1-q9ltBAtBsKFm+JlEtci3xRHiGtU=
+ dependencies:
+ compute-gcd "^1.2.0"
+ validate.io-array "^1.0.3"
+ validate.io-function "^1.0.2"
+ validate.io-integer-array "^1.0.0"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -6457,12 +7000,12 @@ core-js-pure@^3.0.1:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
-core-js@^2.5.3, core-js@^2.5.7, core-js@^2.6.5:
+core-js@^2.5.7, core-js@^2.6.5:
version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
-core-js@^3.0.1, core-js@^3.0.4, core-js@^3.6.5:
+core-js@^3.0.1, core-js@^3.0.4, core-js@^3.5.0, core-js@^3.6.5:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
@@ -6472,7 +7015,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cors@^2.8.5:
+cors@^2.8.4, cors@^2.8.5:
version "2.8.5"
resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
@@ -6716,6 +7259,11 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+cssfilter@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
+ integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=
+
csso@^4.0.2:
version "4.0.3"
resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903"
@@ -7079,6 +7627,13 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
+dicer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
+ integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==
+ dependencies:
+ streamsearch "0.1.2"
+
diff-match-patch@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
@@ -8033,7 +8588,7 @@ expirymanager@^0.9.3:
resolved "https://registry.yarnpkg.com/expirymanager/-/expirymanager-0.9.3.tgz#e5f6b3ba00d8d76cf63311c2b71d7dfc9bde3e4f"
integrity sha1-5fazugDY12z2MxHCtx19/JvePk8=
-express@^4.17.0, express@^4.17.1:
+express@^4.0.0, express@^4.17.0, express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
@@ -8575,6 +9130,11 @@ from2@^2.1.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
+fs-capacitor@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-2.0.4.tgz#5a22e72d40ae5078b4fe64fe4d08c0d3fc88ad3c"
+ integrity sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==
+
fs-extra@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
@@ -9098,22 +9658,28 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
-graphql-extensions@^0.0.x, graphql-extensions@~0.0.9:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.0.10.tgz#34bdb2546d43f6a5bc89ab23c295ec0466c6843d"
- integrity sha512-TnQueqUDCYzOSrpQb3q1ngDSP2otJSF+9yNLrQGPzkMsvnQ+v6e2d5tl+B35D4y+XpmvVnAn4T3ZK28mkILveA==
+graphql-extensions@^0.12.5:
+ version "0.12.5"
+ resolved "https://registry.yarnpkg.com/graphql-extensions/-/graphql-extensions-0.12.5.tgz#b0e6b218f26f5aafe9dd73642410fec6beac0575"
+ integrity sha512-mGyGaktGpK3TVBtM0ZoyPX6Xk0mN9GYX9DRyFzDU4k4A2w93nLX7Ebcp+9/O5nHRmgrc0WziYYSmoWq2WNIoUQ==
dependencies:
- core-js "^2.5.3"
- source-map-support "^0.5.1"
+ "@apollographql/apollo-tools" "^0.4.3"
+ apollo-server-env "^2.4.5"
+ apollo-server-types "^0.6.0"
-graphql-server-express@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/graphql-server-express/-/graphql-server-express-1.4.1.tgz#b096743fb8e3380a3e93cefbe635d0f18f7a57f5"
- integrity sha512-7HEIz2USTCXgk4YMKIcOVUdVZQT429nZnPQr4Gqp5pydZ08KJM9Y2sl9+VU+3a91HGKyrtF04eUumuYeS2fDcg==
+graphql-subscriptions@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11"
+ integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==
dependencies:
- apollo-server-express "^1.4.0"
+ iterall "^1.2.1"
-graphql-tools@^4.0.8:
+graphql-tag@^2.9.2:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd"
+ integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==
+
+graphql-tools@^4.0.0:
version "4.0.8"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.8.tgz#e7fb9f0d43408fb0878ba66b522ce871bafe9d30"
integrity sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==
@@ -9124,12 +9690,27 @@ graphql-tools@^4.0.8:
iterall "^1.1.3"
uuid "^3.1.0"
-graphql@^0.13.2:
- version "0.13.2"
- resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.13.2.tgz#4c740ae3c222823e7004096f832e7b93b2108270"
- integrity sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==
+graphql-upload@^8.0.2:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-8.1.0.tgz#6d0ab662db5677a68bfb1f2c870ab2544c14939a"
+ integrity sha512-U2OiDI5VxYmzRKw0Z2dmfk0zkqMRaecH9Smh1U277gVgVe9Qn+18xqf4skwr4YJszGIh7iQDZ57+5ygOK9sM/Q==
dependencies:
- iterall "^1.2.1"
+ busboy "^0.3.1"
+ fs-capacitor "^2.0.4"
+ http-errors "^1.7.3"
+ object-path "^0.11.4"
+
+graphql@^14.7.0:
+ version "14.7.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72"
+ integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==
+ dependencies:
+ iterall "^1.2.2"
+
+graphql@^15.3.0:
+ version "15.3.0"
+ resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.3.0.tgz#3ad2b0caab0d110e3be4a5a9b2aa281e362b5278"
+ integrity sha512-GTCJtzJmkFLWRfFJuoo9RWWa/FfamUHgiFosxi/X1Ani4AVWbeyBenZTNX6dM+7WSbbFfTo/25eh0LLkwHMw2w==
growly@^1.3.0:
version "1.3.0"
@@ -9534,6 +10115,17 @@ http-errors@1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
+http-errors@^1.7.3:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
+ integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@@ -10487,7 +11079,7 @@ istanbul-reports@^3.0.2:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-iterall@^1.1.3, iterall@^1.2.1:
+iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2:
version "1.3.0"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea"
integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==
@@ -11040,6 +11632,22 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-bet
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+json-schema-compare@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56"
+ integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==
+ dependencies:
+ lodash "^4.17.4"
+
+json-schema-merge-allof@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5"
+ integrity sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==
+ dependencies:
+ compute-lcm "^1.1.0"
+ json-schema-compare "^0.2.2"
+ lodash "^4.17.4"
+
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"
@@ -11115,6 +11723,11 @@ jsonparse@^1.2.0:
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+jsonpointer@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc"
+ integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==
+
jsonwebtoken@^8.3.0:
version "8.5.1"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
@@ -11728,6 +12341,11 @@ log-symbols@^4.0.0:
dependencies:
chalk "^4.0.0"
+loglevel@^1.6.7:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0"
+ integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==
+
loglevel@^1.6.8:
version "1.6.8"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
@@ -11741,6 +12359,11 @@ loglevelnext@^1.0.1:
es6-symbol "^3.1.1"
object.assign "^4.1.0"
+long@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
+ integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
+
longest-streak@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
@@ -11786,7 +12409,7 @@ lowlight@1.12.1:
fault "^1.0.2"
highlight.js "~9.15.0"
-lru-cache@^5.1.1:
+lru-cache@^5.0.0, lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
@@ -12502,6 +13125,11 @@ ncom@^1.0.2:
dependencies:
sc-formatter "~3.0.1"
+ncp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
+ integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=
+
nearley@^2.7.10:
version "2.19.5"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.5.tgz#6be78e4942eeb9a043b17c563413111d4ad849b7"
@@ -12571,6 +13199,11 @@ node-fetch-npm@^2.0.2:
json-parse-better-errors "^1.0.0"
safe-buffer "^5.1.1"
+node-fetch@^2.1.2, node-fetch@^2.2.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
+ integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
+
node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
@@ -13383,7 +14016,7 @@ parse5@^6.0.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
-parseurl@~1.3.2, parseurl@~1.3.3:
+parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
@@ -13886,6 +14519,13 @@ promise.prototype.finally@^3.1.0:
es-abstract "^1.17.0-next.0"
function-bind "^1.1.1"
+promise@^8.0.3:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
+ integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==
+ dependencies:
+ asap "~2.0.6"
+
prompts@^2.0.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
@@ -14144,6 +14784,18 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
+react-app-polyfill@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0"
+ integrity sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==
+ dependencies:
+ core-js "^3.5.0"
+ object-assign "^4.1.1"
+ promise "^8.0.3"
+ raf "^3.4.1"
+ regenerator-runtime "^0.13.3"
+ whatwg-fetch "^3.0.0"
+
react-bootstrap@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.3.0.tgz#d9dde4ad554e9cd21d1465e8b5e5ef6679cae6a1"
@@ -14349,25 +15001,11 @@ react-inspector@^5.0.1:
is-dom "^1.1.0"
prop-types "^15.6.1"
-react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6, react-is@^16.9.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-jsonschema-form@^1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz#9c962f29a55b3fe071d8edf2fc3430f05f1b7ed9"
- integrity sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==
- dependencies:
- "@babel/runtime-corejs2" "^7.4.5"
- ajv "^6.7.0"
- core-js "^2.5.7"
- lodash "^4.17.15"
- prop-types "^15.5.8"
- react-is "^16.8.4"
- react-lifecycles-compat "^3.0.4"
- shortid "^2.2.14"
-
react-lifecycles-compat@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
@@ -14408,11 +15046,6 @@ react-popper@^1.3.7:
typed-styles "^0.0.7"
warning "^4.0.2"
-react-pure-render@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb"
- integrity sha1-nYqSjH8sN1E8LQZOV7Pjw1bp+rs=
-
react-redux@^7.2.1:
version "7.2.1"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985"
@@ -15102,16 +15735,16 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+retry@0.12.0, retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
+
retry@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4"
integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=
-retry@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
- integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
-
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -15510,12 +16143,17 @@ setprototypeof@1.1.1:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
settle-promise@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/settle-promise/-/settle-promise-1.0.0.tgz#697adb58b821f387ce2757c06efc9de5f0ee33d8"
integrity sha1-aXrbWLgh84fOJ1fAbvyd5fDuM9g=
-sha.js@^2.4.0, sha.js@^2.4.8:
+sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8:
version "2.4.11"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
@@ -15807,7 +16445,7 @@ source-map-resolve@^0.5.0:
source-map-url "^0.4.0"
urix "^0.1.0"
-source-map-support@^0.5.1, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12:
+source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@@ -16036,6 +16674,11 @@ stream-shift@^1.0.0:
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+streamsearch@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
+ integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
+
string-length@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1"
@@ -16372,6 +17015,17 @@ stylelint@^13.6.1:
v8-compile-cache "^2.1.1"
write-file-atomic "^3.0.3"
+subscriptions-transport-ws@^0.9.11, subscriptions-transport-ws@^0.9.16:
+ version "0.9.18"
+ resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97"
+ integrity sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA==
+ dependencies:
+ backo2 "^1.0.2"
+ eventemitter3 "^3.1.0"
+ iterall "^1.2.1"
+ symbol-observable "^1.0.4"
+ ws "^5.2.0"
+
sugarss@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
@@ -16478,11 +17132,16 @@ symbol-observable@1.0.1:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
-symbol-observable@^1.2.0:
+symbol-observable@^1.0.4, symbol-observable@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+symbol-observable@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a"
+ integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==
+
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -17029,7 +17688,7 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-type-is@~1.6.17, type-is@~1.6.18:
+type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
@@ -17379,7 +18038,7 @@ util.promisify@1.0.0:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
-util.promisify@~1.0.0:
+util.promisify@^1.0.0, util.promisify@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
@@ -17469,6 +18128,36 @@ validate-npm-package-name@^3.0.0:
dependencies:
builtins "^1.0.3"
+validate.io-array@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
+ integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00=
+
+validate.io-function@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7"
+ integrity sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=
+
+validate.io-integer-array@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089"
+ integrity sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=
+ dependencies:
+ validate.io-array "^1.0.3"
+ validate.io-integer "^1.0.4"
+
+validate.io-integer@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068"
+ integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=
+ dependencies:
+ validate.io-number "^1.0.3"
+
+validate.io-number@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8"
+ integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg=
+
value-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
@@ -17764,6 +18453,11 @@ whatwg-encoding@^1.0.5:
dependencies:
iconv-lite "0.4.24"
+whatwg-fetch@^3.0.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3"
+ integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==
+
whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
@@ -17939,7 +18633,14 @@ ws@7.1.0:
dependencies:
async-limiter "^1.0.0"
-ws@^6.2.1:
+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"
+
+ws@^6.0.0, ws@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
@@ -17961,6 +18662,14 @@ xmlchars@^2.2.0:
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+xss@^1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.8.tgz#32feb87feb74b3dcd3d404b7a68ababf10700535"
+ integrity sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw==
+ dependencies:
+ commander "^2.20.3"
+ cssfilter "0.0.10"
+
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"