diff --git a/.ackrc b/.ackrc index 79f35bcac7..aa845ffeae 100644 --- a/.ackrc +++ b/.ackrc @@ -1 +1,2 @@ --ignore-file=match:/^yarn\.lock$/ +--ignore-dir=coverage diff --git a/.eslintrc b/.eslintrc index 218d092d07..2f8e4121d9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,8 +7,8 @@ "env": { "browser": true, "webextensions": true, - "mocha": true, - "jest": true + "jest": true, + "jasmine": true }, "rules": { "class-methods-use-this": 0, diff --git a/.gitignore b/.gitignore index 8ad43e6555..6c9565d182 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ node_modules /dev-server/api-config.js /localization /demo-extension-build + +.env +*.snap diff --git a/.travis.yml b/.travis.yml index c439f629dd..cd31d82fdf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,11 @@ language: node_js node_js: - - '6' - '7' - '8' -# after_success: -# - 'cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js' +script: + - yarn test:coverage +after_success: + - cat ./coverage/lcov.info | ./node_modules/.bin/coveralls before_deploy: - ./scripts/prepare_release.sh && cd release after_deploy: diff --git a/README.md b/README.md index 66e93781a1..42ca0f0ecb 100644 --- a/README.md +++ b/README.md @@ -50,3 +50,14 @@ Open up your browser and access http://localhost:8191 to see how it works. Note that the development server is using OAuth for authorization process. Please make sure the app you specified in configuration above is setup with Redirect Uri `http://localhost:8191/redirect.html`. + + +## Test + +Create `.env` file in `test`, with the following content: + +```ini +appKey=your-appKey +appSecret=your-appSecret +server=sever_url +``` diff --git a/gulpfile.js b/gulpfile.js index 7312f1901f..f72eedde78 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,5 +1,4 @@ import gulp from 'gulp'; -import mocha from 'gulp-mocha'; import istanbul from 'gulp-istanbul'; import babelIstanbul from 'babel-istanbul'; import yargs from 'yargs'; diff --git a/package.json b/package.json index d37656a986..59fd14931b 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,15 @@ "description": "RingCentral Integration Widget Library", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 0", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", "build": "node ./node_modules/babel-cli/bin/babel-node.js ./node_modules/gulp/bin/gulp.js build", "gulp": "node ./node_modules/babel-cli/bin/babel-node.js ./node_modules/gulp/bin/gulp.js", "dev-server": "node ./node_modules/babel-cli/bin/babel-node.js ./node_modules/gulp/bin/gulp.js dev-server", "release": "node ./node_modules/babel-cli/bin/babel-node.js ./node_modules/gulp/bin/gulp.js release", - "eslint": "node ./node_modules/eslint/bin/eslint.js --quiet src --ignore-pattern *.test.js" + "eslint": "node ./node_modules/eslint/bin/eslint.js --quiet src --ignore-pattern *.test.js", + "prepush": "yarn test" }, "repository": { "type": "git", @@ -48,11 +51,11 @@ "babel-preset-react": "^6.16.0", "babel-preset-stage-0": "^6.16.0", "babel-runtime": "^6.20.0", - "chai": "^4.0.2", - "chai-enzyme": "^0.7.1", "coveralls": "^2.11.15", "css-loader": "^0.28.4", - "enzyme": "^2.7.1", + "dotenv": "^4.0.0", + "enzyme": "^2.9.1", + "enzyme-to-json": "^1.5.1", "eslint": "3.19.0", "eslint-config-airbnb": "^15.0.1", "eslint-plugin-import": "^2.2.0", @@ -64,24 +67,26 @@ "gulp": "^3.9.1", "gulp-babel": "^6.1.2", "gulp-istanbul": "^1.1.1", - "gulp-mocha": "^3.0.1", "gulp-sourcemaps": "^2.4.0", + "husky": "^0.14.3", + "identity-obj-proxy": "^3.0.0", "intl": "^1.2.5", + "jest": "^20.0.4", "json-loader": "^0.5.4", "locale-loader": "^1.3.0", "node-sass": "^4.5.3", "postcss-loader": "^2.0.5", - "react": "^15.4.1", + "react": "^15.6.1", "react-addons-perf": "^15.4.2", - "react-addons-test-utils": "^15.4.2", - "react-dom": "^15.4.1", - "react-redux": "^5.0.1", + "react-dom": "^15.6.1", + "react-redux": "^5.0.5", "react-router": "^3.0.0", "react-router-redux": "^4.0.7", "react-svg-loader": "^1.1.1", - "redux": "^3.6.0", + "react-test-renderer": "^15.6.1", + "redux": "^3.7.2", "redux-logger": "^3.0.6", - "redux-thunk": "^2.1.0", + "redux-thunk": "^2.2.0", "ringcentral": "^3.1.1", "ringcentral-client": "^1.0.0-rc1", "ringcentral-integration": "^0.7.0-rc17", @@ -104,5 +109,21 @@ "rc-tooltip": "^3.4.6", "react-svg-loader": "^1.1.1", "through2": "^2.0.3" + }, + "jest": { + "moduleNameMapper": { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|ogg)$": "/test/__mocks__/fileMock.js", + "\\.(css|less|scss)$": "/test/__mocks__/styleMock.js" + }, + "transform": { + "loadLocale\\.js$": "/test/__mocks__/loadLocale.js", + "^.+\\.js$": "babel-jest" + }, + "setupFiles": [ + "./test/setup.js" + ], + "snapshotSerializers": [ + "/node_modules/enzyme-to-json/serializer" + ] } } diff --git a/src/components/DialPad/index.js b/src/components/DialPad/index.js index ebdb96a9c2..6e705a447b 100644 --- a/src/components/DialPad/index.js +++ b/src/components/DialPad/index.js @@ -17,7 +17,7 @@ const keyConfig = [ const ALTERNATIVE_TIMEOUT = 1000; -class DialButton extends Component { +export class DialButton extends Component { constructor(props, ...args) { super(props, ...args); this.state = { diff --git a/src/components/PresenceSettingSection/index.js b/src/components/PresenceSettingSection/index.js index 38d8a9c501..c87a66a564 100644 --- a/src/components/PresenceSettingSection/index.js +++ b/src/components/PresenceSettingSection/index.js @@ -20,7 +20,7 @@ function getPresenceStatusName(currentUserStatus, currentDndStatus, currentLocal return i18n.getString(currentUserStatus + currentDndStatus, currentLocale); } -function PresenceItem(props) { +export function PresenceItem(props) { const className = classnames( styles.presenceItem, props.selected ? styles.selected : null diff --git a/src/components/TextInput/index.test.js b/src/components/TextInput/index.test.js deleted file mode 100644 index 30273d2ea9..0000000000 --- a/src/components/TextInput/index.test.js +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; -import { expect } from 'chai'; -import Textinput from '../TextInput'; - -describe('', () => { - it('should render correct', () => { - const wrapper = shallow(); - expect(wrapper).to.have.exactly(1).descendants('div'); - expect(wrapper).to.have.exactly(1).descendants('input'); - }); - - it('props received', () => { - const onChange = jest.fn(); - const onKeyDown = jest.fn(); - const wrapper = shallow( - ); - const div = wrapper.find('div'); - - expect(div).to.have.prop('className'); - - expect(div).to.have.prop('className').equal('helloClass'); - - const input = wrapper.find('input'); - - expect(input).to.have.prop('onChange'); - expect(input).to.have.prop('placeholder'); - expect(input).to.have.prop('disabled'); - expect(input).to.have.prop('readOnly'); - expect(input).to.have.prop('pattern'); - expect(input).to.have.prop('name'); - expect(input).to.have.prop('maxLength'); - expect(input).to.have.prop('defaultValue'); - expect(input).to.have.prop('onKeyDown'); - - expect(input).to.have.prop('onChange').equal(onChange); - expect(input).to.have.prop('placeholder').equal('hello placeholder'); - expect(input).to.have.prop('disabled').equal(false); - expect(input).to.have.prop('readOnly').equal(false); - expect(input).to.have.prop('pattern').equal('hello pattern'); - expect(input).to.have.prop('name').equal('hello name'); - expect(input).to.have.prop('maxLength').equal(20); - expect(input).to.have.prop('defaultValue').equal('hello default value'); - expect(input).to.have.prop('onKeyDown').equal(onKeyDown); - }); - - it('onChange event bind success', () => { - const onChnageSpy = jest.fn(); - const wrapper = shallow(); - wrapper.find('input').simulate('change', { target: { value: 'hello' } }); - expect(onChnageSpy).to.have.been.calledOnce; - }); - - it('onKeyDown event bind success', () => { - const onKeyDown = jest.fn(); - const wrapper = shallow(); - wrapper.find('input').simulate('keyDown', { which: 'a' }); - expect(onKeyDown).to.have.been.calledOnce; - }); -}); diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 977318f468..0000000000 --- a/src/setupTests.js +++ /dev/null @@ -1,31 +0,0 @@ -const chai = require('chai'); -const chaiEnzyme = require('chai-enzyme'); - -chai.use(chaiEnzyme()); - -if (!global.document) { - try { - const jsdom = require('jsdom').jsdom; // could throw - - global.document = jsdom(''); - global.window = document.defaultView; - Object.keys(document.defaultView).forEach((property) => { - if (typeof global[property] === 'undefined') { - global[property] = document.defaultView[property]; - } - }); - - global.navigator = { - userAgent: 'node.js', - }; - } catch (e) { - // jsdom is not supported... - if (e.message === "Cannot find module 'jsdom'") { - console.error('[enzyme/withDom] Error: missing required module "jsdom"'); - console.error('[enzyme/withDom] To fix this you must run:'); - console.error('[enzyme/withDom] npm install jsdom --save-dev'); - } else { - console.error('[enzyme withDom] ' + (e.stack || e.message)); - } - } -} \ No newline at end of file diff --git a/test/CallsPanel.spec.js b/test/CallsPanel.spec.js new file mode 100644 index 0000000000..5c039b8ad8 --- /dev/null +++ b/test/CallsPanel.spec.js @@ -0,0 +1,29 @@ +import { Provider } from 'react-redux'; +import { Router } from 'react-router'; + +import { getWrapper, getState } from './shared'; +import CallsPanel from '../src/components/CallsPanel'; +import NavigationBar from '../src/components/NavigationBar'; + +let wrapper = null; +let panel = null; +beforeEach(async () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 32000; + wrapper = await getWrapper(); + const navigationBar = wrapper.find(Provider).first() + .find(Router).first() + .find(NavigationBar) + .first(); + await navigationBar.props().goTo('/history'); + panel = wrapper.find(Provider).first() + .find(Router).first() + .find(CallsPanel) + .first(); +}); + +describe('history', () => { + test('initial state', () => { + expect(panel).toBeDefined(); + expect(panel.props()).toBeDefined(); + }); +}); diff --git a/test/ComposeTextPanel.spec.js b/test/ComposeTextPanel.spec.js new file mode 100644 index 0000000000..dceb4b938c --- /dev/null +++ b/test/ComposeTextPanel.spec.js @@ -0,0 +1,34 @@ +import { Provider } from 'react-redux'; +import { Router } from 'react-router'; + +import { getWrapper, getState, timeout } from './shared'; +import NavigationBar from '../src/components/NavigationBar'; +import ComposeTextPanel from '../src/components/ComposeTextPanel'; + +let wrapper = null; +let panel = null; +beforeEach(async () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 32000; + wrapper = await getWrapper(); + const navigationBar = wrapper.find(Provider).first() + .find(Router).first() + .find(NavigationBar) + .first(); + await navigationBar.props().goTo('/composeText'); + panel = wrapper.find(Provider).first() + .find(Router).first() + .find(ComposeTextPanel) + .first(); +}); + +describe('compose text panel', () => { + test('initial state', () => { + expect(panel).toBeDefined(); + expect(panel.props()).toBeDefined(); + // expect(panel).toMatchSnapshot(); + }); + + test('send button status', () => { + // todo: need to login first + }); +}); diff --git a/test/DialerPanel.spec.js b/test/DialerPanel.spec.js new file mode 100644 index 0000000000..fcf14a7e07 --- /dev/null +++ b/test/DialerPanel.spec.js @@ -0,0 +1,126 @@ +import { Provider } from 'react-redux'; +import { Router } from 'react-router'; + +import { getWrapper, getState } from './shared'; +import DialerPanel from '../src/components/DialerPanel'; +import DialTextInput from '../src/components/DialTextInput'; +import TextInput from '../src/components/TextInput'; +import DialPad, { DialButton } from '../src/components/DialPad'; + +let panel = null; +let wrapper = null; +beforeEach(async () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 32000; + wrapper = await getWrapper(); + panel = wrapper.find(Provider).first() + .find(Router).first() + .find(DialerPanel) + .first(); +}); + +const clickButton = (button) => { + button.find('g').first().props().onMouseDown(); + button.find('g').first().props().onMouseUp(); +}; + +describe('dialer panel', () => { + test('dial text input', () => { + const dialTextInput = panel.find(DialTextInput).first(); + expect(dialTextInput).toBeDefined(); + const textInput = dialTextInput.find(TextInput).first(); + expect(textInput).toBeDefined(); + expect(textInput.props().value).toEqual(''); + + textInput.props().onChange({ currentTarget: { value: '16506417422' } }); + expect(textInput.props().value).toEqual('16506417422'); + expect(getState(wrapper).call.toNumber).toEqual('16506417422'); + }); + + test('dial buttons', () => { + const dialPad = panel.find(DialPad).first(); + const buttons = dialPad.find(DialButton); + expect(buttons.length).toEqual(12); + const button1 = buttons.at(0); + expect(button1.props().btn.value).toEqual('1'); + const button2 = buttons.at(1); + expect(button2.props().btn.value).toEqual('2'); + const button3 = buttons.at(2); + expect(button3.props().btn.value).toEqual('3'); + const button4 = buttons.at(3); + expect(button4.props().btn.value).toEqual('4'); + const button5 = buttons.at(4); + expect(button5.props().btn.value).toEqual('5'); + const button6 = buttons.at(5); + expect(button6.props().btn.value).toEqual('6'); + const button7 = buttons.at(6); + expect(button7.props().btn.value).toEqual('7'); + const button8 = buttons.at(7); + expect(button8.props().btn.value).toEqual('8'); + const button9 = buttons.at(8); + expect(button9.props().btn.value).toEqual('9'); + const buttonStar = buttons.at(9); + expect(buttonStar.props().btn.value).toEqual('*'); + const button0 = buttons.at(10); + expect(button0.props().btn.value).toEqual('0'); + const buttonSharp = buttons.at(11); + expect(buttonSharp.props().btn.value).toEqual('#'); + + const textInput = panel.find(DialTextInput).first().find(TextInput).first(); + expect(textInput.props().value).toEqual(''); + clickButton(button0); + clickButton(button1); + clickButton(button2); + clickButton(button3); + clickButton(button4); + clickButton(button5); + clickButton(button6); + clickButton(button7); + clickButton(button8); + clickButton(button9); + clickButton(buttonStar); + clickButton(buttonSharp); + expect(textInput.props().value).toEqual('0123456789*#'); + + expect(getState(wrapper).call.toNumber).toEqual('0123456789*#'); + }); + + test('invalid number', async () => { + const textInput = panel.find(DialTextInput).first().find(TextInput).first(); + await textInput.props().onChange({ currentTarget: { value: 'Hello world' } }); + expect(getState(wrapper).call.toNumber).toEqual('Hello world'); + + const callButton = panel.find('.callBtnRow').first().find('.btnSvgGroup').first(); + await callButton.props().onClick(); + const messages = getState(wrapper).alert.messages; + expect(messages.length).toEqual(1); + const message = messages[0]; + expect(message.level).toEqual('warning'); + expect(message.message).toEqual('callErrors-noToNumber'); + }); + + test('clear input', async () => { + const textInput = panel.find(DialTextInput).first().find(TextInput).first(); + await textInput.props().onChange({ currentTarget: { value: 'Hello world' } }); + expect(getState(wrapper).call.toNumber).toEqual('Hello world'); + + const deleteButton = panel.find(DialTextInput).first().find('.delete').first(); + await deleteButton.props().onClick(); + expect(getState(wrapper).call.toNumber).toEqual(''); + }); + + test('click call button to restore last number', async () => { + const textInput = panel.find(DialTextInput).first().find(TextInput).first(); + await textInput.props().onChange({ currentTarget: { value: 'Hello world' } }); + expect(getState(wrapper).call.toNumber).toEqual('Hello world'); + + const callButton = panel.find('.callBtnRow').first().find('.btnSvgGroup').first(); + await callButton.props().onClick(); + + const deleteButton = panel.find(DialTextInput).first().find('.delete').first(); + await deleteButton.props().onClick(); + expect(getState(wrapper).call.toNumber).toEqual(''); + + await callButton.props().onClick(); + expect(getState(wrapper).call.toNumber).toEqual('Hello world'); + }); +}); diff --git a/test/SettingsPanel.spec.js b/test/SettingsPanel.spec.js new file mode 100644 index 0000000000..951205bc2d --- /dev/null +++ b/test/SettingsPanel.spec.js @@ -0,0 +1,80 @@ +import { getWrapper } from './shared'; +import SettingsPanel from '../src/components/SettingsPanel'; +import LinkLine from '../src/components/LinkLine'; +import IconLine from '../src/components/IconLine'; +import PresenceSettingSection, { PresenceItem } from '../src/components/PresenceSettingSection'; +import Eula from '../src/components/Eula'; +import NavigationBar from '../src/components/NavigationBar'; + +let store = null; +let panel = null; +beforeEach(async () => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 32000; + const wrapper = await getWrapper(); + store = wrapper.props().phone.store; + const navigationBar = wrapper.find(NavigationBar).first(); + await navigationBar.props().goTo('/settings'); + panel = wrapper.find(SettingsPanel).first(); +}); + +describe('settings panel', () => { + test('initial state', () => { + const linkLines = panel.find(LinkLine); + expect(linkLines.length).toBe(2); + expect(linkLines.at(0).props().children).toEqual('calling'); + expect(linkLines.at(1).props().children).toEqual('region'); + + expect(panel.find(PresenceSettingSection).length).toBe(1); + expect(panel.find(Eula).length).toBe(1); + expect(panel.find('span.logout').length).toBe(1); + expect(panel.find('div.versionContainer').length).toBe(1); + }); + + test('logout', async () => { + const logoutIcon = panel.find('span.logout').first(); + const logoutLines = logoutIcon.closest(IconLine); + expect(logoutLines.length).toBe(1); + const logoutLine = logoutLines.at(0); + expect(store.getState().auth.loginStatus).toMatch(/-loggedIn$/); + await logoutLine.props().onClick(); + expect(store.getState().auth.loginStatus).toMatch(/-loggingOut$/); + + // need to login again, otherwise other tests will fail + window.authData = null; // set it to null will trigger login + }); + + test('change presence status', async () => { + const presenceSettingSection = panel.find(PresenceSettingSection).first(); + + const presenceItems = presenceSettingSection.find('.presenceList').first().find(PresenceItem); + expect(presenceItems.length).toBe(4); + const availableItem = presenceItems.at(0); + const busyItem = presenceItems.at(1); + const noDisturbItem = presenceItems.at(2); + const invisibleItem = presenceItems.at(3); + + await availableItem.props().onClick(); + expect(presenceSettingSection.props().userStatus).toEqual('Available'); + expect(store.getState().presence.userStatus).toEqual('Available'); + expect(presenceSettingSection.props().dndStatus).toEqual('TakeAllCalls'); + expect(store.getState().presence.dndStatus).toEqual('TakeAllCalls'); + + await busyItem.props().onClick(); + expect(presenceSettingSection.props().userStatus).toEqual('Busy'); + expect(store.getState().presence.userStatus).toEqual('Busy'); + expect(presenceSettingSection.props().dndStatus).toEqual('TakeAllCalls'); + expect(store.getState().presence.dndStatus).toEqual('TakeAllCalls'); + + await noDisturbItem.props().onClick(); + expect(presenceSettingSection.props().userStatus).toEqual('Busy'); + expect(store.getState().presence.userStatus).toEqual('Busy'); + expect(presenceSettingSection.props().dndStatus).toEqual('DoNotAcceptAnyCalls'); + expect(store.getState().presence.dndStatus).toEqual('DoNotAcceptAnyCalls'); + + await invisibleItem.props().onClick(); + expect(presenceSettingSection.props().userStatus).toEqual('Offline'); + expect(store.getState().presence.userStatus).toEqual('Offline'); + expect(presenceSettingSection.props().dndStatus).toEqual('TakeAllCalls'); + expect(store.getState().presence.dndStatus).toEqual('TakeAllCalls'); + }); +}); diff --git a/test/__mocks__/fileMock.js b/test/__mocks__/fileMock.js new file mode 100644 index 0000000000..86059f3629 --- /dev/null +++ b/test/__mocks__/fileMock.js @@ -0,0 +1 @@ +module.exports = 'test-file-stub'; diff --git a/test/__mocks__/loadLocale.js b/test/__mocks__/loadLocale.js new file mode 100644 index 0000000000..91632f6c3d --- /dev/null +++ b/test/__mocks__/loadLocale.js @@ -0,0 +1,5 @@ +module.exports = { + process(src, filename, config, options) { + return "const enUS =require('./en-US'); module.exports = async function loadLocale() { return enUS; };"; + }, +}; diff --git a/test/__mocks__/styleMock.js b/test/__mocks__/styleMock.js new file mode 100644 index 0000000000..2d8c2ba7c7 --- /dev/null +++ b/test/__mocks__/styleMock.js @@ -0,0 +1,3 @@ +const idObj = require('identity-obj-proxy'); + +module.exports = idObj; diff --git a/test/initial.spec.js b/test/initial.spec.js new file mode 100644 index 0000000000..7a886e42b7 --- /dev/null +++ b/test/initial.spec.js @@ -0,0 +1,19 @@ +import { Provider } from 'react-redux'; +import { Router } from 'react-router'; + +import { getWrapper } from './shared'; + +let wrapper = null; +beforeEach(async () => { + wrapper = await getWrapper(); +}); + +describe('initial test', () => { + test('initial state', () => { + expect(wrapper).toBeDefined(); + const provider = wrapper.find(Provider).first(); + expect(provider).toBeDefined(); + const router = provider.find(Router).first(); + expect(router).toBeDefined(); + }); +}); diff --git a/test/legacy/TextInput.spec.js b/test/legacy/TextInput.spec.js new file mode 100644 index 0000000000..8bcc5f919f --- /dev/null +++ b/test/legacy/TextInput.spec.js @@ -0,0 +1,69 @@ +import React from 'react'; +import { shallow, mount } from 'enzyme'; +import Textinput from '../../src/components/TextInput'; + +describe('', () => { + it('should render correct', () => { + const wrapper = shallow(); + expect(wrapper.find('div').length).toEqual(1); + expect(wrapper.find('input').length).toEqual(1); + }); + + it('props received', () => { + const onChange = jest.fn(); + const onKeyDown = jest.fn(); + const wrapper = shallow( + ); + const div = wrapper.find('div').first(); + + expect(div.props().className).toBeDefined(); + expect(div.props().className).toEqual('root helloClass'); + + const input = wrapper.find('input').first(); + + expect(input.props().onChange).toBeDefined(); + expect(input.props().placeholder).toBeDefined(); + expect(input.props().disabled).toBeDefined(); + expect(input.props().readOnly).toBeDefined(); + expect(input.props().pattern).toBeDefined(); + expect(input.props().name).toBeDefined(); + expect(input.props().maxLength).toBeDefined(); + expect(input.props().defaultValue).toBeDefined(); + expect(input.props().onKeyDown).toBeDefined(); + + expect(input.props().placeholder).toEqual('hello placeholder'); + expect(input.props().disabled).toEqual(false); + expect(input.props().readOnly).toEqual(false); + expect(input.props().pattern).toEqual('hello pattern'); + expect(input.props().name).toEqual('hello name'); + expect(input.props().maxLength).toEqual(20); + expect(input.props().defaultValue).toEqual('hello default value'); + }); + + it('onChange event bind success', () => { + const onChangeSpy = jest.fn(); + const wrapper = mount(); + wrapper.find('input').simulate('change', { target: { value: 'hello' } }); + expect(onChangeSpy.mock.calls.length).toEqual(1); + }); + + it('onKeyDown event bind success', () => { + const onKeyDown = jest.fn(); + const wrapper = mount(); + wrapper.find('input').simulate('keydown', { which: 'a' }); + expect(onKeyDown.mock.calls.length).toEqual(1); + }); +}); diff --git a/test/localstorage.js b/test/localstorage.js new file mode 100644 index 0000000000..569376e5e6 --- /dev/null +++ b/test/localstorage.js @@ -0,0 +1,36 @@ +import storage from './storage.json'; + +export default class LocalStorage { + constructor() { + this.store = storage; + } + + clear() { + this.store = {}; + } + + getItem(key) { + return this.store[key] || null; + } + + setItem(key, value) { + this.store[key] = value; + } + + removeItem(key) { + delete this.store[key]; + } + + key(index) { + const keys = Object.keys(this.store); + return keys[index] || null; + } + + get length() { + return Object.keys(this.store).length; + } + + toString() { + return '[object Storage]'; + } +} diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 0000000000..be66c1ecbc --- /dev/null +++ b/test/setup.js @@ -0,0 +1,25 @@ +import path from 'path'; +import fs from 'fs'; +import dotenv from 'dotenv'; + +import LocalStorage from './localstorage'; + +window.localStorage = new LocalStorage(); + +function mockedMatchMedia() { + return { + matches: false, + addListener() { }, + removeListener() { } + }; +} +window.matchMedia = window.matchMedia || mockedMatchMedia; + +console.log = () => { }; + +const dotenvPath = path.join(__dirname, '.env'); +if (fs.existsSync(dotenvPath)) { + dotenv.config({ path: dotenvPath }); +} + +window.authData = null; diff --git a/test/shared.js b/test/shared.js new file mode 100644 index 0000000000..c59272bf0f --- /dev/null +++ b/test/shared.js @@ -0,0 +1,50 @@ +import React from 'react'; +import { mount } from 'enzyme'; +import { createStore } from 'redux'; + +import Phone from '../dev-server/Phone'; +import App from '../dev-server/containers/App'; +import brandConfig from '../dev-server/brandConfig'; +import version from '../dev-server/version'; +import prefix from '../dev-server/prefix'; +import state from './state.json'; + +console.info(process.env); + +const apiConfig = { + appKey: process.env.appKey, + appSecret: process.env.appSecret, + server: process.env.server, +}; + +export const getPhone = async () => { + const phone = new Phone({ + apiConfig, + brandConfig, + prefix, + appVersion: version, + }); + if (window.authData === null) { + await phone.client.service.platform().login({ + username: process.env.username, + extension: process.env.extension, + password: process.env.password + }); + window.authData = phone.client.service.platform().auth().data(); + } else { + phone.client.service.platform().auth().setData(window.authData); + } + state.storage.status = 'module-initializing'; + const store = createStore(phone.reducer, state); + phone.setStore(store); + return phone; +}; + +export const getWrapper = async () => { + const phone = await getPhone(); + return mount(); +}; + +export const getState = wrapper => wrapper.props().phone.store.getState(); + +export const timeout = ms => new Promise(resolve => setTimeout(resolve, ms)); diff --git a/test/state.json b/test/state.json new file mode 100644 index 0000000000..9798c44562 --- /dev/null +++ b/test/state.json @@ -0,0 +1,1733 @@ +{ + "alert": { + "messages": [ + + ] + }, + "brand": { + "id": "1210", + "name": "RingCentral", + "fullName": "RingCentral" + }, + "locale": { + "currentLocale": "en-US", + "status": "module-ready" + }, + "dateTimeFormat": { + "status": "module-ready" + }, + "tabManager": { + "status": "module-ready", + "active": true, + "event": null + }, + "globalStorage": { + "status": "module-ready", + "data": { + "environmentEnabled": false, + "environmentRecordingHost": "https://s3.ap-northeast-2.amazonaws.com/fetch-call-recording/test/index.html", + "environmentServer": "https://platform.devtest.ringcentral.com", + "rateLimiterTimestamp": null, + "userMadia": false + }, + "storageKey": "rc-widget-GlobalStorage" + }, + "environment": { + "status": "module-ready", + "changeCounter": 0 + }, + "auth": { + "status": "module-ready", + "loginStatus": "loginStatus-loggedIn", + "freshLogin": false, + "ownerId": "130829004", + "endpointId": "4mzothYuTAyQUmJFTAIKzQ", + "proxyLoaded": false, + "proxyRetryCount": 0 + }, + "ringout": { + "status": "module-ready", + "ringoutStatus": "ringoutStatus-idle" + }, + "connectivityMonitor": { + "status": "module-ready", + "connectivity": true + }, + "rateLimiter": { + "status": "module-ready" + }, + "storage": { + "status": "module-ready", + "data": { + "accountExtensionData": [ + { + "ext": "101", + "name": "Jitender Kumar", + "id": 130829004, + "status": "Enabled", + "type": "User", + "contact": { + "firstName": "Jitender", + "lastName": "Kumar", + "company": "RingCentral Integration Team", + "department": "mndholder@gmail.com", + "email": "joe@idp.com", + "businessPhone": "+16501234567", + "emailAsLoginName": true, + "pronouncedName": { + "type": "TextToSpeech", + "text": "Something New" + } + }, + "hasProfileImage": "b15c113aeddbeb606d938010b88cf8e6" + } + ], + "accountExtensionTimestamp": 1501039146415, + "accountInfoData": { + "id": 130829004, + "mainNumber": "+17322764403", + "status": "Confirmed", + "operator": { + "id": 130829004, + "extensionNumber": "101" + }, + "serviceInfo": { + "brand": { + "id": "1210", + "homeCountry": { + "isoCode": "US" + } + } + }, + "regionalSettings": { + "timezone": { + "id": "58", + "name": "US/Pacific", + "bias": "-480" + }, + "homeCountry": { + "id": "1" + }, + "language": { + "localeCode": "en-US" + }, + "formattingLocale": { + "localeCode": "en-US" + }, + "timeFormat": "12h" + } + }, + "accountInfoTimestamp": 1501075446757, + "extensionDeviceData": [ + { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/device/22174004", + "id": "22174004", + "type": "SoftPhone", + "sku": "DV-1", + "name": "Jitender Kumar RingCentral for Desktop", + "serial": "noname-ac:87:a3:18:fc:cd (3)", + "computerName": "noname-ac:87:a3:18:fc:cd (3)", + "status": "Offline", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004", + "id": 130829004, + "extensionNumber": "101" + }, + "phoneLines": [ + { + "lineType": "Standalone", + "emergencyAddress": { + "required": true, + "localOnly": false + }, + "phoneInfo": { + "id": 244125004, + "phoneNumber": "+16502578497", + "paymentType": "Local", + "type": "VoiceFax", + "usageType": "DirectNumber", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + } + } + } + ], + "emergencyServiceAddress": { + "street": "1400 Fashion Island Blvd, 7th Floor", + "city": "San Mateo", + "state": "CA", + "country": "US", + "zip": "94404", + "customerName": "Jitender Kumar" + }, + "shipping": { + "status": "Won't ship" + }, + "linePooling": "Host" + } + ], + "extensionDeviceTimestamp": 1501075443494, + "extensionInfoData": { + "id": 130829004, + "extensionNumber": "101", + "contact": { + "firstName": "Jitender", + "lastName": "Kumar", + "company": "RingCentral Integration Team", + "department": "mndholder@gmail.com", + "email": "joe@idp.com", + "businessPhone": "+16501234567", + "businessAddress": { + "street": "20 Davis Drive", + "city": "Belmont", + "zip": "94002", + "country": "United States" + }, + "emailAsLoginName": true, + "pronouncedName": { + "type": "TextToSpeech", + "text": "Something New" + } + }, + "name": "Jitender Kumar", + "type": "User", + "status": "Enabled", + "permissions": { + "admin": { + "enabled": true + }, + "internationalCalling": { + "enabled": true + } + }, + "profileImage": { + "uri": "https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image", + "etag": "b15c113aeddbeb606d938010b88cf8e6", + "contentType": "image/png", + "lastModified": "2017-07-14T03:12:58.496Z", + "scales": [ + { + "uri": "https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/90x90" + }, + { + "uri": "https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/195x195" + }, + { + "uri": "https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/584x584" + } + ] + }, + "regionalSettings": { + "timezone": { + "id": "58", + "name": "US/Pacific", + "bias": "-480" + }, + "homeCountry": { + "id": "1", + "isoCode": "US", + "callingCode": "1" + }, + "language": { + "localeCode": "en-US" + }, + "formattingLocale": { + "localeCode": "en-US" + }, + "timeFormat": "12h" + }, + "serviceFeatures": { + "SMS": { + "enabled": true + }, + "SMSReceiving": { + "enabled": true + }, + "Pager": { + "enabled": true + }, + "PagerReceiving": { + "enabled": true + }, + "Voicemail": { + "enabled": true + }, + "Fax": { + "enabled": true + }, + "FaxReceiving": { + "enabled": true + }, + "DND": { + "enabled": true + }, + "RingOut": { + "enabled": true + }, + "InternationalCalling": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "Presence": { + "enabled": true + }, + "VideoConferencing": { + "enabled": true + }, + "SalesForce": { + "enabled": true + }, + "Intercom": { + "enabled": true + }, + "Paging": { + "enabled": false, + "reason": "AccountLimitation" + }, + "Conferencing": { + "enabled": true + }, + "VoipCalling": { + "enabled": true + }, + "FreeSoftPhoneLines": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "HipaaCompliance": { + "enabled": false, + "reason": "AccountLimitation" + }, + "CallPark": { + "enabled": true + }, + "OnDemandCallRecording": { + "enabled": true + }, + "Reports": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "CallForwarding": { + "enabled": true + }, + "DeveloperPortal": { + "enabled": false, + "reason": "AccountLimitation" + }, + "EncryptionAtRest": { + "enabled": false, + "reason": "AccountLimitation" + }, + "BlockedMessageForwarding": { + "enabled": false, + "reason": "AccountLimitation" + }, + "EmergencyCalling": { + "enabled": false, + "reason": "AccountLimitation" + }, + "HDVoice": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "SingleExtensionUI": { + "enabled": false, + "reason": "AccountLimitation" + }, + "CallSupervision": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "VoicemailToText": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "WebPhone": { + "enabled": true + }, + "RCTeams": { + "enabled": true + }, + "UserManagement": { + "enabled": true + }, + "Calendar": { + "enabled": true + }, + "PasswordAuth": { + "enabled": false, + "reason": "AccountLimitation" + }, + "CallerIdControl": { + "enabled": false, + "reason": "AccountLimitation" + }, + "AutomaticInboundCallRecording": { + "enabled": true + }, + "AutomaticOutboundCallRecording": { + "enabled": true + }, + "AutomaticCallRecordingMute": { + "enabled": false, + "reason": "AccountLimitation" + }, + "SoftPhoneUpdate": { + "enabled": true + }, + "LinkedSoftphoneLines": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "CallQualitySurvey": { + "enabled": false, + "reason": "AccountLimitation" + }, + "AccountFederation": { + "enabled": false, + "reason": "AccountLimitation" + }, + "MMS": { + "enabled": true + }, + "CallParkLocations": { + "enabled": true + }, + "ExternalDirectoryIntegration": { + "enabled": false, + "reason": "AccountTypeLimitation" + }, + "CallSwitch": { + "enabled": false, + "reason": "AccountLimitation" + }, + "PromoMessage": { + "enabled": true + }, + "InternationalSMS": { + "enabled": false, + "reason": "AccountLimitation" + } + } + }, + "extensionInfoTimestamp": 1501075443983, + "rolesAndPermissionsData": { + "AccountAdministration": true, + "AccountValidation": true, + "ActiveDirectory": true, + "AddRemoveDevices": true, + "AddRemoveGroups": true, + "AddRemovePhoneNumbers": true, + "AddRemoveUsers": true, + "Appearance": true, + "AutoReceptionist": true, + "BotInstall": true, + "BotUninstall": true, + "BusinessSms": true, + "CallHandling": true, + "CompanyCallLog": true, + "CompanyNumbersAndInfo": true, + "ConfigureIntercom": true, + "ConfigurePresence": true, + "DeviceOrdering": true, + "DomesticCalls": true, + "EditAdvancedFeaturesInfo": true, + "EditAssignedRoles": true, + "EditBlockedNumbers": true, + "EditCallInfo": true, + "EditCallLog": true, + "EditCallLogDelivery": true, + "EditCallerIDSettings": true, + "EditCompanyAnsweringRules": true, + "EditCompanyCallLog": true, + "EditCompanyCallerIDSettings": true, + "EditCompanyDevices": true, + "EditCompanyGreetings": true, + "EditCompanyInfo": true, + "EditCompanyPhoneNumbers": true, + "EditExtensionGrant": true, + "EditInternationalCallingPolicy": true, + "EditMessages": true, + "EditMessagesNotificationsSettings": true, + "EditOutboundFaxSettings": true, + "EditPaymentMethod": true, + "EditPersonalContacts": true, + "EditPresenceSettings": true, + "EditPresenceStatus": true, + "EditServicePlanInfo": true, + "EditUserAnsweringRules": true, + "EditUserCredentials": true, + "EditUserDevices": true, + "EditUserForwardingFlipNumbers": true, + "EditUserHours": true, + "EditUserInfo": true, + "EditUserPhoneNumbers": true, + "EditUserRoles": true, + "EditUserScreeningGreetingSettings": true, + "General": true, + "Glip": true, + "Groups": true, + "InboundSMS": true, + "InternalCalls": true, + "InternalSMS": true, + "InternationalCalling": true, + "InternationalCalls": true, + "InternationalSMS": true, + "LiveReportsLicense": true, + "LocalSMS": true, + "Meetings": true, + "MeetingsConfiguration": true, + "MeetingsPlan": true, + "MessagesAndNotifications": true, + "OrganizeConference": true, + "OutboundCallerId": true, + "OutboundFaxSettings": true, + "OutboundFaxes": true, + "OutboundSMS": true, + "PaymentMethod": true, + "PhonesAndDevices": true, + "PhonesAndNumbers": true, + "PremiumDestinations": true, + "QoSReports": true, + "ReadAdvancedFeaturesInfo": true, + "ReadAssignedRoles": true, + "ReadBlockedNumbers": true, + "ReadCallLog": true, + "ReadCallRecordings": true, + "ReadCallerIDSettings": true, + "ReadCompanyAnsweringRules": true, + "ReadCompanyCallLog": true, + "ReadCompanyDevices": true, + "ReadCompanyGreetings": true, + "ReadCompanyInfo": true, + "ReadCompanyPhoneNumbers": true, + "ReadExtensionGrant": true, + "ReadExtensions": true, + "ReadInternationalCallingPolicy": true, + "ReadMessageContent": true, + "ReadMessages": true, + "ReadMessagesNotificationsSettings": true, + "ReadOutboundFaxSettings": true, + "ReadPaymentMethod": true, + "ReadPersonalContacts": true, + "ReadPresenceSettings": true, + "ReadPresenceStatus": true, + "ReadServicePlanInfo": true, + "ReadUserAnsweringRules": true, + "ReadUserDevices": true, + "ReadUserForwardingFlipNumbers": true, + "ReadUserInfo": true, + "ReadUserPhoneNumbers": true, + "ReadUserRoles": true, + "ReadUserScreeningGreetingSettings": true, + "ReassignDevices": true, + "ReassignPhoneNumbers": true, + "RingCentralDesktopApp": true, + "RingCentralMobileApp": true, + "Roles": true, + "ScreeningGreetingHoldMusic": true, + "ServicePlan": true, + "ServiceWebAccess": true, + "ThirdPartyAppAccess": true, + "UserInfo": true, + "Users": true + }, + "rolesAndPermissionsTimestamp": 1501039146681, + "dialingPlanData": [ + { + "id": "1", + "isoCode": "US", + "callingCode": "1" + } + ], + "dialingPlanTimestamp": 1501079802702, + "extensionPhoneNumberData": [ + { + "id": 246314004, + "phoneNumber": "+15623535396", + "paymentType": "Local", + "location": "La Puente, CA", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + }, + "features": [ + "MmsSender", + "CallerId", + "SmsSender", + "InternationalSmsSender" + ] + }, + { + "id": 244125004, + "phoneNumber": "+16502578497", + "paymentType": "Local", + "location": "Redwood Cy, CA", + "type": "VoiceFax", + "usageType": "DirectNumber", + "status": "Normal", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + }, + "features": [ + "MmsSender", + "CallerId", + "SmsSender", + "InternationalSmsSender" + ] + }, + { + "id": 244155004, + "phoneNumber": "+16505819951", + "paymentType": "Local", + "location": "San Mateo, CA", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + }, + "features": [ + "MmsSender", + "CallerId", + "SmsSender", + "InternationalSmsSender" + ] + }, + { + "id": 242863004, + "phoneNumber": "+17322764403", + "paymentType": "Local", + "location": "Lakewood, NJ", + "type": "VoiceFax", + "usageType": "MainCompanyNumber", + "status": "Normal", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + }, + "features": [ + "MmsSender", + "CallerId", + "SmsSender", + "InternationalSmsSender" + ] + }, + { + "id": 255764004, + "phoneNumber": "+19295755900", + "paymentType": "Local", + "location": "New York City, NY", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal", + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States" + }, + "features": [ + "MmsSender", + "CallerId", + "SmsSender", + "InternationalSmsSender" + ] + } + ], + "extensionPhoneNumberTimestamp": 1501075442989, + "forwardingNumberData": [ + { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/444216004", + "id": "444216004", + "phoneNumber": "+16502578497", + "label": "Jitender Kumar RingCentral for Desktop", + "features": [ + "CallFlip" + ], + "flipNumber": "1" + }, + { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/451131005", + "id": "451131005", + "phoneNumber": "+16507411615", + "label": "test", + "features": [ + "CallFlip", + "CallForwarding" + ], + "flipNumber": "3" + }, + { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/455288004", + "id": "455288004", + "phoneNumber": "+18657118279", + "label": "Mobile", + "features": [ + "CallFlip", + "CallForwarding" + ], + "flipNumber": "2" + } + ], + "forwardingNumberTimestamp": 1501075442558, + "contactMatcherData": { + "+16504776476": { + "contacts": { + "_t": 1501080540132, + "data": [ + + ] + } + }, + "+16505819951": { + "contacts": { + "_t": 1501080540132, + "data": [ + + ] + } + } + }, + "regionSettingsCountryCode": "US", + "regionSettingsAreaCode": "", + "webphoneCounts": -1, + "callingSettingsCallWith": "callingOptions-browser", + "callingSettingsRingoutPrompt": true, + "callingSettingsMyLocation": "", + "callingSettingsTimestamp": 1496999528769, + "fromCallIdNumber": "+15623535396", + "lastCallNumber": "fdsafdsa", + "cachedSubscription": { + "uri": "https://platform.devtest.ringcentral.com:-1/restapi/v1.0/subscription/31939860-32d5-4b1e-9ed6-dcedd34c91ff", + "id": "31939860-32d5-4b1e-9ed6-dcedd34c91ff", + "creationTime": "2017-07-26T10:42:36.196+0000", + "status": "Active", + "eventFilters": [ + "/restapi/v1.0/account/130829004/extension/130829004/presence?detailedTelephonyState=true", + "/restapi/v1.0/account/130829004/extension/130829004/message-store", + "/restapi/v1.0/account/130829004/extension/130829004/presence?detailedTelephonyState=true&sipData=true" + ], + "expirationTime": "2017-07-26T14:58:16.001+0000", + "expiresIn": 899, + "deliveryMode": { + "transportType": "PubNub", + "encryption": true, + "address": "598058594260333_c143834d", + "subscriberKey": "sub-c-b8b9cd8c-e906-11e2-b383-02ee2ddab7fe", + "encryptionAlgorithm": "AES", + "encryptionKey": "K1rQz/U3vSoNuHe+OnmvEA==" + } + }, + "contactSearchCache": { + "contactSearch": { + } + }, + "composeText": { + "senderNumber": "+15623535396" + }, + "messageStore": { + "data": { + "conversations": [ + + ], + "conversationMap": { + }, + "messages": [ + + ] + }, + "updatedTimestamp": 1501075441312, + "syncToken": "AQEAAAAAAwAAAV1bBPizBgAAAPoFAAABXX8QlvwTAAgAAAAAB8xKzAkBCgEyB7lQ", + "syncTimestamp": 1501075379964 + }, + "callLogData": [ + { + "id": "AWWXiBvhhYuKzUA", + "sessionId": "16886801004", + "startTime": 1501026867970, + "duration": 10, + "type": "Voice", + "direction": "Inbound", + "action": "Phone Call", + "result": "Missed", + "to": { + "phoneNumber": "+16505819951", + "name": "Jitender Kumar" + }, + "from": { + "phoneNumber": "+16504776476", + "location": "San Mateo, CA" + } + }, + { + "id": "AWWXc0rPeBB0zUA", + "sessionId": "16886786004", + "startTime": 1501026708820, + "duration": 10, + "type": "Voice", + "direction": "Inbound", + "action": "Phone Call", + "result": "Missed", + "to": { + "phoneNumber": "+16505819951", + "name": "Jitender Kumar" + }, + "from": { + "phoneNumber": "+16504776476", + "location": "San Mateo, CA" + } + } + ], + "callLogToken": "FAMAAAFdVm10AAQAAAFdfO0QtAgAAAAAB8xKzA0AAAAD7ofn1A4AAAFapmrx2BIAAAFdf19QGBQBFQCUA04i", + "callLogTimestamp": 1501080539160, + "activityMatcherData": { + }, + "callLoggerData": { + "autoLog": true, + "logOnRinging": true + }, + "accountPhoneNumberData": [ + { + "id": 246422004, + "phoneNumber": "+12678414056", + "paymentType": "Local", + "location": "Ambler, PA", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/137228004", + "id": 137228004, + "extensionNumber": "122" + }, + "status": "Normal" + }, + { + "id": 246423004, + "phoneNumber": "+12678414058", + "paymentType": "Local", + "location": "Ambler, PA", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/136393004", + "id": 136393004, + "extensionNumber": "121" + }, + "status": "Normal" + }, + { + "id": 246314004, + "phoneNumber": "+15623535396", + "paymentType": "Local", + "location": "La Puente, CA", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal" + }, + { + "id": 244125004, + "phoneNumber": "+16502578497", + "paymentType": "Local", + "location": "Redwood Cy, CA", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004", + "id": 130829004, + "extensionNumber": "101" + }, + "status": "Normal" + }, + { + "id": 244155004, + "phoneNumber": "+16505819951", + "paymentType": "Local", + "location": "San Mateo, CA", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal" + }, + { + "id": 244158004, + "phoneNumber": "+16505819954", + "paymentType": "Local", + "location": "San Mateo, CA", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146768004", + "id": 146768004, + "extensionNumber": "102" + }, + "status": "Normal" + }, + { + "id": 242863004, + "phoneNumber": "+17322764403", + "paymentType": "Local", + "location": "Lakewood, NJ", + "type": "VoiceFax", + "usageType": "MainCompanyNumber", + "status": "Normal" + }, + { + "id": 255764004, + "phoneNumber": "+19295755900", + "paymentType": "Local", + "location": "New York City, NY", + "type": "VoiceFax", + "usageType": "CompanyNumber", + "status": "Normal" + }, + { + "id": 249517004, + "phoneNumber": "+19298889482", + "paymentType": "Local", + "location": "Queens (Nwyrcyzn08), NY", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146770004", + "id": 146770004, + "extensionNumber": "104" + }, + "status": "Normal" + }, + { + "id": 249519004, + "phoneNumber": "+19298889759", + "paymentType": "Local", + "location": "Queens (Nwyrcyzn09), NY", + "type": "VoiceFax", + "usageType": "DirectNumber", + "extension": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146769004", + "id": 146769004, + "extensionNumber": "103" + }, + "status": "Normal" + } + ], + "accountPhoneNumberTimestamp": 1501075440053, + "contactsSyncToken": "HgAAAAAHzErMAQEAAAAAAAANGJA7OzQ", + "contactsSyncTimestamp": 1501079038682, + "addressBookContactsList": [ + { + "availability": "Alive", + "id": 386979004, + "firstName": "Test", + "lastName": "Testov", + "homePhone": "+79085552102", + "homePhone2": "+79873819682", + "businessPhone": "+79085571499" + }, + { + "availability": "Alive", + "id": 389986005, + "firstName": "Vanessa", + "lastName": "May", + "businessPhone": "+1234567890" + }, + { + "availability": "Alive", + "id": 389987005, + "firstName": "Jhon", + "lastName": "Travolta", + "homePhone": "+122334455", + "businessPhone": "+1875434343" + }, + { + "availability": "Alive", + "id": 390003005, + "firstName": "Donald", + "lastName": "Duck", + "businessPhone": "+12098135681" + }, + { + "availability": "Alive", + "id": 391101004, + "company": "Test", + "firstName": "Test", + "lastName": "Test", + "middleName": "Test", + "jobTitle": "Test", + "nickName": "Test", + "homePhone": "+11231231212" + }, + { + "availability": "Alive", + "id": 391247004, + "firstName": "qwer", + "lastName": "qwer", + "homePhone": "+18885287464" + }, + { + "availability": "Alive", + "id": 391248004, + "firstName": "Ivan's", + "lastName": "phone", + "homePhone": "+14158021958" + }, + { + "availability": "Alive", + "id": 391249004, + "firstName": "IvanPetrov", + "homePhone": "+12098134928" + }, + { + "availability": "Alive", + "id": 391250004, + "firstName": "Call me!", + "homePhone": "+13193660139" + }, + { + "availability": "Alive", + "id": 391251004, + "firstName": "Peter & Julia" + }, + { + "availability": "Alive", + "id": 391252004, + "firstName": "Alex@gmail.com" + }, + { + "availability": "Alive", + "id": 391253004, + "firstName": "#145" + }, + { + "availability": "Alive", + "id": 391254004, + "firstName": "50% she'll call me" + }, + { + "availability": "Alive", + "id": 391255004, + "firstName": "hi^" + }, + { + "availability": "Alive", + "id": 391256004, + "firstName": "qwer*qwer~xcd`[as]" + }, + { + "availability": "Alive", + "id": 391594004, + "firstName": "Petr", + "lastName": "Ivanov", + "homePhone": "+15856234100" + }, + { + "availability": "Alive", + "id": 391595004, + "firstName": "qwe", + "lastName": "qwe", + "homePhone": "+12098135681", + "homePhone2": "+15856234100", + "businessPhone": "+17322764403" + }, + { + "availability": "Alive", + "id": 391621004, + "firstName": "Nicola", + "lastName": "Tesla", + "homePhone": "+14567891212" + }, + { + "availability": "Alive", + "id": 391920004, + "firstName": "_test", + "lastName": "~!@#$%^&*(){}[]:\";'?>,.</_+-=\|", + "homePhone": "+17322764403" + }, + { + "availability": "Alive", + "id": 392045004, + "firstName": "Jitender", + "lastName": "Kumar", + "mobilePhone": "+16502578497" + }, + { + "availability": "Alive", + "id": 394775004, + "firstName": "Dmitry", + "lastName": "Markov", + "homePhone": "+16506429155" + }, + { + "availability": "Alive", + "id": 395494004, + "firstName": "Tyler", + "lastName": "Long" + }, + { + "availability": "Alive", + "id": 395495004, + "firstName": "Tyler", + "lastName": "Long" + }, + { + "availability": "Alive", + "id": 395564005, + "firstName": "Test" + }, + { + "availability": "Alive", + "id": 395565005, + "firstName": "Test" + }, + { + "availability": "Alive", + "id": 470276004, + "firstName": "Tyler", + "lastName": "Liu", + "homePhone": "+15889546648" + } + ], + "conversationMatcherData": { + }, + "conversationLoggerData": { + "autoLog": false + } + }, + "storageKey": "rc-widget-storage-130829004" + }, + "accountExtension": { + "status": "module-ready" + }, + "accountInfo": { + "status": "module-ready" + }, + "extensionDevice": { + "status": "module-ready" + }, + "extensionInfo": { + "status": "module-ready" + }, + "rolesAndPermissions": { + "status": "module-ready" + }, + "dialingPlan": { + "status": "module-ready" + }, + "extensionPhoneNumber": { + "status": "module-ready" + }, + "forwardingNumber": { + "status": "module-ready" + }, + "contactMatcher": { + "status": "module-ready" + }, + "regionSettings": { + "status": "module-ready" + }, + "numberValidate": { + "status": "module-ready" + }, + "webphone": { + "status": "module-ready", + "videoElementPrepared": true, + "connectionStatus": "connectionStatus-connected", + "connectRetryCounts": 0, + "errorCode": null, + "webphoneCounts": 1, + "currentSession": null, + "sessions": [ + + ], + "minimized": false + }, + "callingSettings": { + "status": "module-ready" + }, + "call": { + "status": "module-ready", + "callStatus": "callStatus-idle", + "toNumber": "" + }, + "subscription": { + "status": "module-ready", + "message": null, + "filters": [ + "/account/~/extension/~/presence?detailedTelephonyState=true", + "/account/~/extension/~/message-store", + "/account/~/extension/~/presence?detailedTelephonyState=true&sipData=true", + "/account/~/extension/~/presence" + ], + "subscriptionStatus": "subscriptionStatus-subscribed" + }, + "activeCalls": { + "timestamp": 1501075441958, + "data": [ + + ], + "status": "module-ready" + }, + "presence": { + "lastNotDisturbDndStatus": null, + "status": "module-ready", + "dndStatus": "TakeAllCalls", + "presenceStatus": "Offline", + "userStatus": "Offline", + "message": null + }, + "detailedPresence": { + "lastNotDisturbDndStatus": null, + "status": "module-ready", + "data": [ + + ], + "dndStatus": "TakeAllCalls", + "presenceStatus": "Offline", + "userStatus": "Offline", + "message": null, + "telephonyStatus": "NoCall" + }, + "contactSearch": { + "status": "module-ready", + "searchStatus": "contactSearchStatus-idle", + "searching": { + "searchString": "", + "result": [ + + ] + } + }, + "messageSender": { + "status": "module-ready", + "sendStatus": "messageSender-idle" + }, + "composeText": { + "status": "module-ready", + "senderNumber": "+15623535396", + "typingToNumber": "", + "toNumbers": [ + + ], + "messageText": "" + }, + "messageStore": { + "status": "module-ready", + "messageStoreStatus": "messageStore-idle" + }, + "conversation": { + "status": "module-ready", + "conversationStatus": "conversation-idle", + "id": null, + "messages": [ + + ], + "senderNumber": null, + "recipients": [ + + ], + "messageStoreUpdatedAt": null + }, + "conference": { + "timestamp": 1501075440905, + "data": { + "phoneNumber": "+12679304000", + "hostCode": "628456073", + "participantCode": "314228036", + "phoneNumbers": [ + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1", + "id": "1", + "name": "United States", + "isoCode": "US", + "callingCode": "1" + }, + "phoneNumber": "+12679304000" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/11", + "id": "11", + "name": "Argentina", + "isoCode": "AR", + "callingCode": "54" + }, + "phoneNumber": "+541159842371" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/16", + "id": "16", + "name": "Austria", + "isoCode": "AT", + "callingCode": "43" + }, + "phoneNumber": "+4312675024" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/19", + "id": "19", + "name": "Bahrain", + "isoCode": "BH", + "callingCode": "973" + }, + "phoneNumber": "+97316198814" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/31", + "id": "31", + "name": "Brazil", + "isoCode": "BR", + "callingCode": "55" + }, + "phoneNumber": "+556135500673" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/34", + "id": "34", + "name": "Bulgaria", + "isoCode": "BG", + "callingCode": "359" + }, + "phoneNumber": "+35924917819" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/39", + "id": "39", + "name": "Canada", + "isoCode": "CA", + "callingCode": "1" + }, + "phoneNumber": "+14378000918" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/45", + "id": "45", + "name": "Chile", + "isoCode": "CL", + "callingCode": "56" + }, + "phoneNumber": "+56229382089" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/46", + "id": "46", + "name": "China", + "isoCode": "CN", + "callingCode": "86" + }, + "phoneNumber": "+861059045554" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/54", + "id": "54", + "name": "Croatia", + "isoCode": "HR", + "callingCode": "385" + }, + "phoneNumber": "+38517776559" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/56", + "id": "56", + "name": "Cyprus", + "isoCode": "CY", + "callingCode": "357" + }, + "phoneNumber": "+35722022567" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/57", + "id": "57", + "name": "Czech Republic", + "isoCode": "CZ", + "callingCode": "420" + }, + "phoneNumber": "+420228881000" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/58", + "id": "58", + "name": "Denmark", + "isoCode": "DK", + "callingCode": "45" + }, + "phoneNumber": "+4578793531" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/62", + "id": "62", + "name": "Dominican Republic", + "isoCode": "DO", + "callingCode": "1" + }, + "phoneNumber": "+18299560014" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/69", + "id": "69", + "name": "Estonia", + "isoCode": "EE", + "callingCode": "372" + }, + "phoneNumber": "+3726681362" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/74", + "id": "74", + "name": "Finland", + "isoCode": "FI", + "callingCode": "358" + }, + "phoneNumber": "+358942704107" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/75", + "id": "75", + "name": "France", + "isoCode": "FR", + "callingCode": "33" + }, + "phoneNumber": "+33177696813" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/83", + "id": "83", + "name": "Germany", + "isoCode": "DE", + "callingCode": "49" + }, + "phoneNumber": "+498944396537" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/101", + "id": "101", + "name": "Hungary", + "isoCode": "HU", + "callingCode": "36" + }, + "phoneNumber": "+3618480332" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/107", + "id": "107", + "name": "Ireland", + "isoCode": "IE", + "callingCode": "353" + }, + "phoneNumber": "+35315136078" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/108", + "id": "108", + "name": "Israel", + "isoCode": "IL", + "callingCode": "972" + }, + "phoneNumber": "+97239121841" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/109", + "id": "109", + "name": "Italy", + "isoCode": "IT", + "callingCode": "39" + }, + "phoneNumber": "+390689970127" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/112", + "id": "112", + "name": "Japan", + "isoCode": "JP", + "callingCode": "81" + }, + "phoneNumber": "+81345406728" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/121", + "id": "121", + "name": "Latvia", + "isoCode": "LV", + "callingCode": "371" + }, + "phoneNumber": "+37166163239" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/127", + "id": "127", + "name": "Lithuania", + "isoCode": "LT", + "callingCode": "370" + }, + "phoneNumber": "+37052140076" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/128", + "id": "128", + "name": "Luxembourg", + "isoCode": "LU", + "callingCode": "352" + }, + "phoneNumber": "+35227862004" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/133", + "id": "133", + "name": "Malaysia", + "isoCode": "MY", + "callingCode": "60" + }, + "phoneNumber": "+60392122033" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/143", + "id": "143", + "name": "Mexico", + "isoCode": "MX", + "callingCode": "52" + }, + "phoneNumber": "+525541629041" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/157", + "id": "157", + "name": "Netherlands", + "isoCode": "NL", + "callingCode": "31" + }, + "phoneNumber": "+31208086212" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/167", + "id": "167", + "name": "Norway", + "isoCode": "NO", + "callingCode": "47" + }, + "phoneNumber": "+4721939591" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/171", + "id": "171", + "name": "Panama", + "isoCode": "PA", + "callingCode": "507" + }, + "phoneNumber": "+5078338516" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/176", + "id": "176", + "name": "Poland", + "isoCode": "PL", + "callingCode": "48" + }, + "phoneNumber": "+48221168039" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/177", + "id": "177", + "name": "Portugal", + "isoCode": "PT", + "callingCode": "351" + }, + "phoneNumber": "+351308800106" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/182", + "id": "182", + "name": "Romania", + "isoCode": "RO", + "callingCode": "40" + }, + "phoneNumber": "+40377881044" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/189", + "id": "189", + "name": "Slovakia", + "isoCode": "SK", + "callingCode": "421" + }, + "phoneNumber": "+421233325709" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/190", + "id": "190", + "name": "Slovenia", + "isoCode": "SI", + "callingCode": "386" + }, + "phoneNumber": "+38618888089" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/195", + "id": "195", + "name": "Spain", + "isoCode": "ES", + "callingCode": "34" + }, + "phoneNumber": "+34911827803" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/205", + "id": "205", + "name": "Sweden", + "isoCode": "SE", + "callingCode": "46" + }, + "phoneNumber": "+46852503839" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/206", + "id": "206", + "name": "Switzerland", + "isoCode": "CH", + "callingCode": "41" + }, + "phoneNumber": "+41315208019" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/217", + "id": "217", + "name": "Turkey", + "isoCode": "TR", + "callingCode": "90" + }, + "phoneNumber": "+902129003695" + }, + { + "country": { + "uri": "https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/224", + "id": "224", + "name": "United Kingdom", + "isoCode": "GB", + "callingCode": "44" + }, + "phoneNumber": "+442035409587" + } + ] + }, + "status": "module-ready" + }, + "router": { + "locationBeforeTransitions": { + "pathname": "/", + "search": "", + "hash": "", + "action": "POP", + "key": null, + "query": { + } + } + }, + "callLog": { + "status": "module-ready" + }, + "callMonitor": { + "status": "module-ready" + }, + "callHistory": { + "status": "module-ready", + "endedCalls": [ + + ] + }, + "activityMatcher": { + "status": "module-ready" + }, + "callLogger": { + "status": "module-ready", + "loggingList": [ + + ] + }, + "accountPhoneNumber": { + "status": "module-ready" + }, + "addressBook": { + "status": "module-ready", + "syncStatus": "address-book-idle" + }, + "contacts": { + "status": "module-ready", + "profileImages": { + } + }, + "conversationMatcher": { + "status": "module-ready" + }, + "conversationLogger": { + "status": "module-ready", + "loggingList": [ + + ] + }, + "messages": { + "status": "module-ready", + "currentPage": 0, + "perPage": 20, + "searchInput": "" + }, + "recentMessages": { + "status": "module-ready", + "messages": [ + + ], + "messageStatus": null + }, + "app": { + "name": "RingCentral JS Widget", + "version": "1.0.0" + }, + "lastAction": { + "type": "webphone-registered" + } +} diff --git a/test/storage.json b/test/storage.json new file mode 100644 index 0000000000..814cd6e8bf --- /dev/null +++ b/test/storage.json @@ -0,0 +1,55 @@ +{ + "rc-webPhone-uuid": "6861ca41-1052-4636-8344-2c73246cae58", + "rc-widget-GlobalStorage-environmentEnabled": "{\"value\":false,\"setter\":\"961a0ed8-df85-4265-8941-07d9e1beddb7\"}", + "rc-widget-GlobalStorage-environmentRecordingHost": "{\"value\":\"https://s3.ap-northeast-2.amazonaws.com/fetch-call-recording/test/index.html\",\"setter\":\"961a0ed8-df85-4265-8941-07d9e1beddb7\"}", + "rc-widget-GlobalStorage-environmentServer": "{\"value\":\"https://platform.devtest.ringcentral.com\",\"setter\":\"961a0ed8-df85-4265-8941-07d9e1beddb7\"}", + "rc-widget-GlobalStorage-rateLimiterTimestamp": "{\"value\":null,\"setter\":\"961a0ed8-df85-4265-8941-07d9e1beddb7\"}", + "rc-widget-GlobalStorage-userMadia": "{\"value\":false,\"setter\":\"44bccee4-234e-4a61-a6cd-8f3ee7aff918\"}", + "rc-widget-storage-130829004-accountExtensionData": "{\"value\":[{\"ext\":\"101\",\"name\":\"Jitender Kumar\",\"id\":130829004,\"status\":\"Enabled\",\"type\":\"User\",\"contact\":{\"firstName\":\"Jitender\",\"lastName\":\"Kumar\",\"company\":\"RingCentral Integration Team\",\"department\":\"mndholder@gmail.com\",\"email\":\"joe@idp.com\",\"businessPhone\":\"+16501234567\",\"emailAsLoginName\":true,\"pronouncedName\":{\"type\":\"TextToSpeech\",\"text\":\"Something New\"}},\"hasProfileImage\":\"b15c113aeddbeb606d938010b88cf8e6\"}],\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-accountExtensionTimestamp": "{\"value\":1501039146415,\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-accountInfoData": "{\"value\":{\"id\":130829004,\"mainNumber\":\"+17322764403\",\"status\":\"Confirmed\",\"operator\":{\"id\":130829004,\"extensionNumber\":\"101\"},\"serviceInfo\":{\"brand\":{\"id\":\"1210\",\"homeCountry\":{\"isoCode\":\"US\"}}},\"regionalSettings\":{\"timezone\":{\"id\":\"58\",\"name\":\"US/Pacific\",\"bias\":\"-480\"},\"homeCountry\":{\"id\":\"1\"},\"language\":{\"localeCode\":\"en-US\"},\"formattingLocale\":{\"localeCode\":\"en-US\"},\"timeFormat\":\"12h\"}},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-accountInfoTimestamp": "{\"value\":1501075446757,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-accountPhoneNumberData": "{\"value\":[{\"id\":246422004,\"phoneNumber\":\"+12678414056\",\"paymentType\":\"Local\",\"location\":\"Ambler, PA\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/137228004\",\"id\":137228004,\"extensionNumber\":\"122\"},\"status\":\"Normal\"},{\"id\":246423004,\"phoneNumber\":\"+12678414058\",\"paymentType\":\"Local\",\"location\":\"Ambler, PA\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/136393004\",\"id\":136393004,\"extensionNumber\":\"121\"},\"status\":\"Normal\"},{\"id\":246314004,\"phoneNumber\":\"+15623535396\",\"paymentType\":\"Local\",\"location\":\"La Puente, CA\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\"},{\"id\":244125004,\"phoneNumber\":\"+16502578497\",\"paymentType\":\"Local\",\"location\":\"Redwood Cy, CA\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004\",\"id\":130829004,\"extensionNumber\":\"101\"},\"status\":\"Normal\"},{\"id\":244155004,\"phoneNumber\":\"+16505819951\",\"paymentType\":\"Local\",\"location\":\"San Mateo, CA\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\"},{\"id\":244158004,\"phoneNumber\":\"+16505819954\",\"paymentType\":\"Local\",\"location\":\"San Mateo, CA\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146768004\",\"id\":146768004,\"extensionNumber\":\"102\"},\"status\":\"Normal\"},{\"id\":242863004,\"phoneNumber\":\"+17322764403\",\"paymentType\":\"Local\",\"location\":\"Lakewood, NJ\",\"type\":\"VoiceFax\",\"usageType\":\"MainCompanyNumber\",\"status\":\"Normal\"},{\"id\":255764004,\"phoneNumber\":\"+19295755900\",\"paymentType\":\"Local\",\"location\":\"New York City, NY\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\"},{\"id\":249517004,\"phoneNumber\":\"+19298889482\",\"paymentType\":\"Local\",\"location\":\"Queens (Nwyrcyzn08), NY\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146770004\",\"id\":146770004,\"extensionNumber\":\"104\"},\"status\":\"Normal\"},{\"id\":249519004,\"phoneNumber\":\"+19298889759\",\"paymentType\":\"Local\",\"location\":\"Queens (Nwyrcyzn09), NY\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/146769004\",\"id\":146769004,\"extensionNumber\":\"103\"},\"status\":\"Normal\"}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-accountPhoneNumberTimestamp": "{\"value\":1501075440053,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-activityMatcherData": "{\"value\":{},\"setter\":\"00508f56-370e-4a79-ad9a-d2c292d22671\"}", + "rc-widget-storage-130829004-addressBookContactsList": "{\"value\":[{\"availability\":\"Alive\",\"id\":386979004,\"firstName\":\"Test\",\"lastName\":\"Testov\",\"homePhone\":\"+79085552102\",\"homePhone2\":\"+79873819682\",\"businessPhone\":\"+79085571499\"},{\"availability\":\"Alive\",\"id\":389986005,\"firstName\":\"Vanessa\",\"lastName\":\"May\",\"businessPhone\":\"+1234567890\"},{\"availability\":\"Alive\",\"id\":389987005,\"firstName\":\"Jhon\",\"lastName\":\"Travolta\",\"homePhone\":\"+122334455\",\"businessPhone\":\"+1875434343\"},{\"availability\":\"Alive\",\"id\":390003005,\"firstName\":\"Donald\",\"lastName\":\"Duck\",\"businessPhone\":\"+12098135681\"},{\"availability\":\"Alive\",\"id\":391101004,\"company\":\"Test\",\"firstName\":\"Test\",\"lastName\":\"Test\",\"middleName\":\"Test\",\"jobTitle\":\"Test\",\"nickName\":\"Test\",\"homePhone\":\"+11231231212\"},{\"availability\":\"Alive\",\"id\":391247004,\"firstName\":\"qwer\",\"lastName\":\"qwer\",\"homePhone\":\"+18885287464\"},{\"availability\":\"Alive\",\"id\":391248004,\"firstName\":\"Ivan's\",\"lastName\":\"phone\",\"homePhone\":\"+14158021958\"},{\"availability\":\"Alive\",\"id\":391249004,\"firstName\":\"IvanPetrov\",\"homePhone\":\"+12098134928\"},{\"availability\":\"Alive\",\"id\":391250004,\"firstName\":\"Call me!\",\"homePhone\":\"+13193660139\"},{\"availability\":\"Alive\",\"id\":391251004,\"firstName\":\"Peter & Julia\"},{\"availability\":\"Alive\",\"id\":391252004,\"firstName\":\"Alex@gmail.com\"},{\"availability\":\"Alive\",\"id\":391253004,\"firstName\":\"#145\"},{\"availability\":\"Alive\",\"id\":391254004,\"firstName\":\"50% she'll call me\"},{\"availability\":\"Alive\",\"id\":391255004,\"firstName\":\"hi^\"},{\"availability\":\"Alive\",\"id\":391256004,\"firstName\":\"qwer*qwer~xcd`[as]\"},{\"availability\":\"Alive\",\"id\":391594004,\"firstName\":\"Petr\",\"lastName\":\"Ivanov\",\"homePhone\":\"+15856234100\"},{\"availability\":\"Alive\",\"id\":391595004,\"firstName\":\"qwe\",\"lastName\":\"qwe\",\"homePhone\":\"+12098135681\",\"homePhone2\":\"+15856234100\",\"businessPhone\":\"+17322764403\"},{\"availability\":\"Alive\",\"id\":391621004,\"firstName\":\"Nicola\",\"lastName\":\"Tesla\",\"homePhone\":\"+14567891212\"},{\"availability\":\"Alive\",\"id\":391920004,\"firstName\":\"_test\",\"lastName\":\"~!@#$%^&*(){}[]:\\\";'?>,.</_+-=\|\",\"homePhone\":\"+17322764403\"},{\"availability\":\"Alive\",\"id\":392045004,\"firstName\":\"Jitender\",\"lastName\":\"Kumar\",\"mobilePhone\":\"+16502578497\"},{\"availability\":\"Alive\",\"id\":394775004,\"firstName\":\"Dmitry\",\"lastName\":\"Markov\",\"homePhone\":\"+16506429155\"},{\"availability\":\"Alive\",\"id\":395494004,\"firstName\":\"Tyler\",\"lastName\":\"Long\"},{\"availability\":\"Alive\",\"id\":395495004,\"firstName\":\"Tyler\",\"lastName\":\"Long\"},{\"availability\":\"Alive\",\"id\":395564005,\"firstName\":\"Test\"},{\"availability\":\"Alive\",\"id\":395565005,\"firstName\":\"Test\"},{\"availability\":\"Alive\",\"id\":470276004,\"firstName\":\"Tyler\",\"lastName\":\"Liu\",\"homePhone\":\"+15889546648\"}],\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-cachedSubscription": "{\"value\":{\"uri\":\"https://platform.devtest.ringcentral.com:-1/restapi/v1.0/subscription/31939860-32d5-4b1e-9ed6-dcedd34c91ff\",\"id\":\"31939860-32d5-4b1e-9ed6-dcedd34c91ff\",\"creationTime\":\"2017-07-26T10:42:36.196+0000\",\"status\":\"Active\",\"eventFilters\":[\"/restapi/v1.0/account/130829004/extension/130829004/presence?detailedTelephonyState=true\",\"/restapi/v1.0/account/130829004/extension/130829004/message-store\",\"/restapi/v1.0/account/130829004/extension/130829004/presence?detailedTelephonyState=true&sipData=true\"],\"expirationTime\":\"2017-07-26T14:45:15.409+0000\",\"expiresIn\":899,\"deliveryMode\":{\"transportType\":\"PubNub\",\"encryption\":true,\"address\":\"598058594260333_c143834d\",\"subscriberKey\":\"sub-c-b8b9cd8c-e906-11e2-b383-02ee2ddab7fe\",\"encryptionAlgorithm\":\"AES\",\"encryptionKey\":\"K1rQz/U3vSoNuHe+OnmvEA==\"}},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-callLogData": "{\"value\":[{\"id\":\"AWWXiBvhhYuKzUA\",\"sessionId\":\"16886801004\",\"startTime\":1501026867970,\"duration\":10,\"type\":\"Voice\",\"direction\":\"Inbound\",\"action\":\"Phone Call\",\"result\":\"Missed\",\"to\":{\"phoneNumber\":\"+16505819951\",\"name\":\"Jitender Kumar\"},\"from\":{\"phoneNumber\":\"+16504776476\",\"location\":\"San Mateo, CA\"}},{\"id\":\"AWWXc0rPeBB0zUA\",\"sessionId\":\"16886786004\",\"startTime\":1501026708820,\"duration\":10,\"type\":\"Voice\",\"direction\":\"Inbound\",\"action\":\"Phone Call\",\"result\":\"Missed\",\"to\":{\"phoneNumber\":\"+16505819951\",\"name\":\"Jitender Kumar\"},\"from\":{\"phoneNumber\":\"+16504776476\",\"location\":\"San Mateo, CA\"}}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-callLogTimestamp": "{\"value\":1501079640264,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-callLogToken": "{\"value\":\"FAMAAAFdVm10AAQAAAFdfO0QtAgAAAAAB8xKzA0AAAAD7ofn1A4AAAFapmrx2BIAAAFdf1GYyBQBFQCwctb_\",\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-callLoggerData": "{\"value\":{\"autoLog\":true,\"logOnRinging\":true},\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-callingSettingsCallWith": "{\"value\":\"callingOptions-browser\",\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-callingSettingsMyLocation": "{\"value\":\"\",\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-callingSettingsRingoutPrompt": "{\"value\":true,\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-callingSettingsTimestamp": "{\"value\":1496999528769,\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-composeText": "{\"value\":{\"senderNumber\":\"+15623535396\"},\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-contactMatcherData": "{\"value\":{\"+16504776476\":{\"contacts\":{\"_t\":1501079641237,\"data\":[]}},\"+16505819951\":{\"contacts\":{\"_t\":1501079641237,\"data\":[]}}},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-contactSearchCache": "{\"value\":{\"contactSearch\":{}},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-contactsSyncTimestamp": "{\"value\":1501079038682,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-contactsSyncToken": "{\"value\":\"HgAAAAAHzErMAQEAAAAAAAANGJA7OzQ\",\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-conversationLoggerData": "{\"value\":{\"autoLog\":false},\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-conversationMatcherData": "{\"value\":{},\"setter\":\"00508f56-370e-4a79-ad9a-d2c292d22671\"}", + "rc-widget-storage-130829004-dialingPlanData": "{\"value\":[{\"id\":\"1\",\"isoCode\":\"US\",\"callingCode\":\"1\"}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-dialingPlanTimestamp": "{\"value\":1501078002169,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionDeviceData": "{\"value\":[{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/device/22174004\",\"id\":\"22174004\",\"type\":\"SoftPhone\",\"sku\":\"DV-1\",\"name\":\"Jitender Kumar RingCentral for Desktop\",\"serial\":\"noname-ac:87:a3:18:fc:cd (3)\",\"computerName\":\"noname-ac:87:a3:18:fc:cd (3)\",\"status\":\"Offline\",\"extension\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004\",\"id\":130829004,\"extensionNumber\":\"101\"},\"phoneLines\":[{\"lineType\":\"Standalone\",\"emergencyAddress\":{\"required\":true,\"localOnly\":false},\"phoneInfo\":{\"id\":244125004,\"phoneNumber\":\"+16502578497\",\"paymentType\":\"Local\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"}}}],\"emergencyServiceAddress\":{\"street\":\"1400 Fashion Island Blvd, 7th Floor\",\"city\":\"San Mateo\",\"state\":\"CA\",\"country\":\"US\",\"zip\":\"94404\",\"customerName\":\"Jitender Kumar\"},\"shipping\":{\"status\":\"Won't ship\"},\"linePooling\":\"Host\"}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionDeviceTimestamp": "{\"value\":1501075443494,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionInfoData": "{\"value\":{\"id\":130829004,\"extensionNumber\":\"101\",\"contact\":{\"firstName\":\"Jitender\",\"lastName\":\"Kumar\",\"company\":\"RingCentral Integration Team\",\"department\":\"mndholder@gmail.com\",\"email\":\"joe@idp.com\",\"businessPhone\":\"+16501234567\",\"businessAddress\":{\"street\":\"20 Davis Drive\",\"city\":\"Belmont\",\"zip\":\"94002\",\"country\":\"United States\"},\"emailAsLoginName\":true,\"pronouncedName\":{\"type\":\"TextToSpeech\",\"text\":\"Something New\"}},\"name\":\"Jitender Kumar\",\"type\":\"User\",\"status\":\"Enabled\",\"permissions\":{\"admin\":{\"enabled\":true},\"internationalCalling\":{\"enabled\":true}},\"profileImage\":{\"uri\":\"https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image\",\"etag\":\"b15c113aeddbeb606d938010b88cf8e6\",\"contentType\":\"image/png\",\"lastModified\":\"2017-07-14T03:12:58.496Z\",\"scales\":[{\"uri\":\"https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/90x90\"},{\"uri\":\"https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/195x195\"},{\"uri\":\"https://media.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/profile-image/584x584\"}]},\"regionalSettings\":{\"timezone\":{\"id\":\"58\",\"name\":\"US/Pacific\",\"bias\":\"-480\"},\"homeCountry\":{\"id\":\"1\",\"isoCode\":\"US\",\"callingCode\":\"1\"},\"language\":{\"localeCode\":\"en-US\"},\"formattingLocale\":{\"localeCode\":\"en-US\"},\"timeFormat\":\"12h\"},\"serviceFeatures\":{\"SMS\":{\"enabled\":true},\"SMSReceiving\":{\"enabled\":true},\"Pager\":{\"enabled\":true},\"PagerReceiving\":{\"enabled\":true},\"Voicemail\":{\"enabled\":true},\"Fax\":{\"enabled\":true},\"FaxReceiving\":{\"enabled\":true},\"DND\":{\"enabled\":true},\"RingOut\":{\"enabled\":true},\"InternationalCalling\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"Presence\":{\"enabled\":true},\"VideoConferencing\":{\"enabled\":true},\"SalesForce\":{\"enabled\":true},\"Intercom\":{\"enabled\":true},\"Paging\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"Conferencing\":{\"enabled\":true},\"VoipCalling\":{\"enabled\":true},\"FreeSoftPhoneLines\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"HipaaCompliance\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"CallPark\":{\"enabled\":true},\"OnDemandCallRecording\":{\"enabled\":true},\"Reports\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"CallForwarding\":{\"enabled\":true},\"DeveloperPortal\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"EncryptionAtRest\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"BlockedMessageForwarding\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"EmergencyCalling\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"HDVoice\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"SingleExtensionUI\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"CallSupervision\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"VoicemailToText\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"WebPhone\":{\"enabled\":true},\"RCTeams\":{\"enabled\":true},\"UserManagement\":{\"enabled\":true},\"Calendar\":{\"enabled\":true},\"PasswordAuth\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"CallerIdControl\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"AutomaticInboundCallRecording\":{\"enabled\":true},\"AutomaticOutboundCallRecording\":{\"enabled\":true},\"AutomaticCallRecordingMute\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"SoftPhoneUpdate\":{\"enabled\":true},\"LinkedSoftphoneLines\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"CallQualitySurvey\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"AccountFederation\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"MMS\":{\"enabled\":true},\"CallParkLocations\":{\"enabled\":true},\"ExternalDirectoryIntegration\":{\"enabled\":false,\"reason\":\"AccountTypeLimitation\"},\"CallSwitch\":{\"enabled\":false,\"reason\":\"AccountLimitation\"},\"PromoMessage\":{\"enabled\":true},\"InternationalSMS\":{\"enabled\":false,\"reason\":\"AccountLimitation\"}}},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionInfoTimestamp": "{\"value\":1501075443983,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionPhoneNumberData": "{\"value\":[{\"id\":246314004,\"phoneNumber\":\"+15623535396\",\"paymentType\":\"Local\",\"location\":\"La Puente, CA\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"},\"features\":[\"MmsSender\",\"CallerId\",\"SmsSender\",\"InternationalSmsSender\"]},{\"id\":244125004,\"phoneNumber\":\"+16502578497\",\"paymentType\":\"Local\",\"location\":\"Redwood Cy, CA\",\"type\":\"VoiceFax\",\"usageType\":\"DirectNumber\",\"status\":\"Normal\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"},\"features\":[\"MmsSender\",\"CallerId\",\"SmsSender\",\"InternationalSmsSender\"]},{\"id\":244155004,\"phoneNumber\":\"+16505819951\",\"paymentType\":\"Local\",\"location\":\"San Mateo, CA\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"},\"features\":[\"MmsSender\",\"CallerId\",\"SmsSender\",\"InternationalSmsSender\"]},{\"id\":242863004,\"phoneNumber\":\"+17322764403\",\"paymentType\":\"Local\",\"location\":\"Lakewood, NJ\",\"type\":\"VoiceFax\",\"usageType\":\"MainCompanyNumber\",\"status\":\"Normal\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"},\"features\":[\"MmsSender\",\"CallerId\",\"SmsSender\",\"InternationalSmsSender\"]},{\"id\":255764004,\"phoneNumber\":\"+19295755900\",\"paymentType\":\"Local\",\"location\":\"New York City, NY\",\"type\":\"VoiceFax\",\"usageType\":\"CompanyNumber\",\"status\":\"Normal\",\"country\":{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/dictionary/country/1\",\"id\":\"1\",\"name\":\"United States\"},\"features\":[\"MmsSender\",\"CallerId\",\"SmsSender\",\"InternationalSmsSender\"]}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-extensionPhoneNumberTimestamp": "{\"value\":1501075442989,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-forwardingNumberData": "{\"value\":[{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/444216004\",\"id\":\"444216004\",\"phoneNumber\":\"+16502578497\",\"label\":\"Jitender Kumar RingCentral for Desktop\",\"features\":[\"CallFlip\"],\"flipNumber\":\"1\"},{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/451131005\",\"id\":\"451131005\",\"phoneNumber\":\"+16507411615\",\"label\":\"test\",\"features\":[\"CallFlip\",\"CallForwarding\"],\"flipNumber\":\"3\"},{\"uri\":\"https://platform.devtest.ringcentral.com/restapi/v1.0/account/130829004/extension/130829004/forwarding-number/455288004\",\"id\":\"455288004\",\"phoneNumber\":\"+18657118279\",\"label\":\"Mobile\",\"features\":[\"CallFlip\",\"CallForwarding\"],\"flipNumber\":\"2\"}],\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-forwardingNumberTimestamp": "{\"value\":1501075442558,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-fromCallIdNumber": "{\"value\":\"+15623535396\",\"setter\":\"a7455fd4-3ed6-41e6-bac5-7f01adf5b009\"}", + "rc-widget-storage-130829004-lastCallNumber": "{\"value\":\"fdsafdsa\",\"setter\":\"dfc6c386-2d6e-449d-b419-abedeb909d16\"}", + "rc-widget-storage-130829004-messageStore": "{\"value\":{\"data\":{\"conversations\":[],\"conversationMap\":{},\"messages\":[]},\"updatedTimestamp\":1501075441312,\"syncToken\":\"AQEAAAAAAwAAAV1bBPizBgAAAPoFAAABXX8QlvwTAAgAAAAAB8xKzAkBCgEyB7lQ\",\"syncTimestamp\":1501075379964},\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-storage-130829004-regionSettingsAreaCode": "{\"value\":\"\",\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-regionSettingsCountryCode": "{\"value\":\"US\",\"setter\":\"3ba5b83e-c2ab-4f26-bd22-64042feb2507\"}", + "rc-widget-storage-130829004-rolesAndPermissionsData": "{\"value\":{\"AccountAdministration\":true,\"AccountValidation\":true,\"ActiveDirectory\":true,\"AddRemoveDevices\":true,\"AddRemoveGroups\":true,\"AddRemovePhoneNumbers\":true,\"AddRemoveUsers\":true,\"Appearance\":true,\"AutoReceptionist\":true,\"BotInstall\":true,\"BotUninstall\":true,\"BusinessSms\":true,\"CallHandling\":true,\"CompanyCallLog\":true,\"CompanyNumbersAndInfo\":true,\"ConfigureIntercom\":true,\"ConfigurePresence\":true,\"DeviceOrdering\":true,\"DomesticCalls\":true,\"EditAdvancedFeaturesInfo\":true,\"EditAssignedRoles\":true,\"EditBlockedNumbers\":true,\"EditCallInfo\":true,\"EditCallLog\":true,\"EditCallLogDelivery\":true,\"EditCallerIDSettings\":true,\"EditCompanyAnsweringRules\":true,\"EditCompanyCallLog\":true,\"EditCompanyCallerIDSettings\":true,\"EditCompanyDevices\":true,\"EditCompanyGreetings\":true,\"EditCompanyInfo\":true,\"EditCompanyPhoneNumbers\":true,\"EditExtensionGrant\":true,\"EditInternationalCallingPolicy\":true,\"EditMessages\":true,\"EditMessagesNotificationsSettings\":true,\"EditOutboundFaxSettings\":true,\"EditPaymentMethod\":true,\"EditPersonalContacts\":true,\"EditPresenceSettings\":true,\"EditPresenceStatus\":true,\"EditServicePlanInfo\":true,\"EditUserAnsweringRules\":true,\"EditUserCredentials\":true,\"EditUserDevices\":true,\"EditUserForwardingFlipNumbers\":true,\"EditUserHours\":true,\"EditUserInfo\":true,\"EditUserPhoneNumbers\":true,\"EditUserRoles\":true,\"EditUserScreeningGreetingSettings\":true,\"General\":true,\"Glip\":true,\"Groups\":true,\"InboundSMS\":true,\"InternalCalls\":true,\"InternalSMS\":true,\"InternationalCalling\":true,\"InternationalCalls\":true,\"InternationalSMS\":true,\"LiveReportsLicense\":true,\"LocalSMS\":true,\"Meetings\":true,\"MeetingsConfiguration\":true,\"MeetingsPlan\":true,\"MessagesAndNotifications\":true,\"OrganizeConference\":true,\"OutboundCallerId\":true,\"OutboundFaxSettings\":true,\"OutboundFaxes\":true,\"OutboundSMS\":true,\"PaymentMethod\":true,\"PhonesAndDevices\":true,\"PhonesAndNumbers\":true,\"PremiumDestinations\":true,\"QoSReports\":true,\"ReadAdvancedFeaturesInfo\":true,\"ReadAssignedRoles\":true,\"ReadBlockedNumbers\":true,\"ReadCallLog\":true,\"ReadCallRecordings\":true,\"ReadCallerIDSettings\":true,\"ReadCompanyAnsweringRules\":true,\"ReadCompanyCallLog\":true,\"ReadCompanyDevices\":true,\"ReadCompanyGreetings\":true,\"ReadCompanyInfo\":true,\"ReadCompanyPhoneNumbers\":true,\"ReadExtensionGrant\":true,\"ReadExtensions\":true,\"ReadInternationalCallingPolicy\":true,\"ReadMessageContent\":true,\"ReadMessages\":true,\"ReadMessagesNotificationsSettings\":true,\"ReadOutboundFaxSettings\":true,\"ReadPaymentMethod\":true,\"ReadPersonalContacts\":true,\"ReadPresenceSettings\":true,\"ReadPresenceStatus\":true,\"ReadServicePlanInfo\":true,\"ReadUserAnsweringRules\":true,\"ReadUserDevices\":true,\"ReadUserForwardingFlipNumbers\":true,\"ReadUserInfo\":true,\"ReadUserPhoneNumbers\":true,\"ReadUserRoles\":true,\"ReadUserScreeningGreetingSettings\":true,\"ReassignDevices\":true,\"ReassignPhoneNumbers\":true,\"RingCentralDesktopApp\":true,\"RingCentralMobileApp\":true,\"Roles\":true,\"ScreeningGreetingHoldMusic\":true,\"ServicePlan\":true,\"ServiceWebAccess\":true,\"ThirdPartyAppAccess\":true,\"UserInfo\":true,\"Users\":true},\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-rolesAndPermissionsTimestamp": "{\"value\":1501039146681,\"setter\":\"d8d3e538-7722-4841-9b4f-47affe3b7602\"}", + "rc-widget-storage-130829004-webphoneCounts": "{\"value\":-1,\"setter\":\"837f6cdf-ab89-4bed-80c9-e0d08b56197e\"}", + "rc-widget-tabbie-heartBeat-d5506d70-ad08-4e1d-9fba-e127e5751dca": "1501079775085", + "rc-widget-tabbie-mainTab-id": "d5506d70-ad08-4e1d-9fba-e127e5751dca", + "sdk-rc-widgetplatform": "{\"token_type\":\"bearer\",\"access_token\":\"U0pDMTFQMDFQQVMwMHxBQUJuRktXM2pDVHNuY1Y1OGwyNm4tSko5LUdiWExpNS1Vc18wa29vajdQSVdYZDFRX1prenZGR0x1VWcxa19OZEZJOEVhRHNxRWdJVUNYQjd4dmJsWHJoSjJRUmFIOHJHQWRNVzFnSjlKX3NJa1ZQQnhsVVdWT3pQb0k3Q0doNXpuRW9FY01aMzBGTGhDN2xIU1VVcXV6bWtYeDFCMWZuNElLcUVfeHVObHkyNWJYSjJSVHZURWZDOV9hMG02NXpvdUV8WUlycEl3fGN4UTYwRGRMZGl3YmpFYVVZRFNQd1E\",\"expires_in\":3600,\"refresh_token\":\"U0pDMTFQMDFQQVMwMHxBQUJuRktXM2pDVHNuY1Y1OGwyNm4tSko5LUdiWExpNS1Vc18wa29vajdQSVdYZDFRX1prenZGR0x1VWcxa19OZEZJOEVhRHNxRWdJVUNYQjd4dmJsWHJoaEdUTTc0ZlZ4SmhNVzFnSjlKX3NJcjAtajl5bUR4OTRQb0k3Q0doNXpuRW9FY01aMzBGTGhDN2xIU1VVcXV6bWtYeDFCMWZuNElLcUVfeHVObHkyNWRTTkdyZ3dTQUI0b3N1M0dBNWxRS1l8WUlycEl3fGRmZWh4blRKVE5YZEVSNWZ6V3RmYVE\",\"refresh_token_expires_in\":604800,\"scope\":\"EditAccounts ReadMessages Faxes ReadPresence EditCallLog Meetings VoipCalling ReadCallRecording Glip ReadContacts EditCustomData Contacts ReadAccounts EditExtensions RingOut NumberLookup SMS InternalMessages ReadCallLog SubscriptionWebhook EditPaymentInfo Accounts EditMessages EditPresence\",\"owner_id\":\"130829004\",\"endpoint_id\":\"4mzothYuTAyQUmJFTAIKzQ\",\"expire_time\":1501082639072,\"refresh_token_expire_time\":1501683839072}", + "sub-c-b8b9cd8c-e906-11e2-b383-02ee2ddab7fe": "14971590001617439", + "sub-c-b8b9cd8c-e906-11e2-b383-02ee2ddab7feuuid": "663f2324-e428-4f98-a8e2-9440e44b6c6f" +} diff --git a/yarn.lock b/yarn.lock index ce5d06d8f4..e6389b4c33 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19,6 +19,10 @@ normalize-path "^2.0.1" through2 "^2.0.3" +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + abbrev@1, abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -36,13 +40,19 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" -acorn@4.X, acorn@^4.0.3: +acorn@4.X, acorn@^4.0.3, acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" @@ -107,7 +117,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0: +ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -115,7 +125,7 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -123,6 +133,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + dependencies: + color-convert "^1.0.0" + any-promise@^1.0.0, any-promise@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -134,6 +150,12 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" @@ -175,6 +197,10 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + 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" @@ -204,7 +230,7 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -242,10 +268,6 @@ assert@^1.1.1: dependencies: util "0.10.3" -assertion-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" - ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -276,6 +298,12 @@ async@^2.1.2, async@^2.1.5: dependencies: lodash "^4.14.0" +async@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -349,7 +377,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, ba esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.0.2, babel-core@^6.21.0, babel-core@^6.24.1: +babel-core@^6.0.0, babel-core@^6.0.2, babel-core@^6.21.0, babel-core@^6.24.1: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" dependencies: @@ -408,7 +436,7 @@ babel-eslint@^7.1.1: babel-types "^6.23.0" babylon "^6.17.0" -babel-generator@^6.11.4, babel-generator@^6.25.0: +babel-generator@^6.11.4, babel-generator@^6.18.0, babel-generator@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" dependencies: @@ -568,6 +596,14 @@ babel-istanbul@^0.12.1: which "1.2.x" wordwrap "1.0.x" +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + babel-loader@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" @@ -588,6 +624,18 @@ babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -1031,6 +1079,12 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + babel-preset-react@^6.16.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -1108,7 +1162,7 @@ babel-runtime@6.x, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6 core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.24.1, babel-template@^6.25.0, babel-template@^6.3.0, babel-template@^6.9.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0, babel-template@^6.3.0, babel-template@^6.9.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: @@ -1118,7 +1172,7 @@ babel-template@^6.24.1, babel-template@^6.25.0, babel-template@^6.3.0, babel-tem babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.13.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: +babel-traverse@^6.13.0, babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: @@ -1132,7 +1186,7 @@ babel-traverse@^6.13.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.13.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: +babel-types@^6.13.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: @@ -1145,6 +1199,10 @@ babylon@^6.16.1, babylon@^6.17.0, babylon@^6.17.2, babylon@^6.7.0: version "6.17.3" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.3.tgz#1327d709950b558f204e5352587fd0290f8d8e48" +babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1214,9 +1272,11 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" @@ -1283,6 +1343,18 @@ browserslist@^2.1.3: caniuse-lite "^1.0.30000670" electron-to-chromium "^1.3.11" +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-xor@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1321,6 +1393,10 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1376,24 +1452,6 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai-enzyme@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/chai-enzyme/-/chai-enzyme-0.7.1.tgz#a945c81989bcc4fd96af6263f9c0a9c668f29b66" - dependencies: - html "^1.0.0" - react-element-to-jsx-string "^5.0.0" - -chai@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.0.2.tgz#2f7327c4de6f385dd7787999e2ab02697a32b83b" - dependencies: - assertion-error "^1.0.1" - check-error "^1.0.1" - deep-eql "^2.0.1" - get-func-name "^2.0.0" - pathval "^1.0.0" - type-detect "^4.0.0" - chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1404,10 +1462,6 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -check-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" @@ -1444,6 +1498,10 @@ chokidar@^1.4.3, chokidar@^1.6.0, chokidar@^1.6.1: optionalDependencies: fsevents "^1.0.0" +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" @@ -1530,11 +1588,7 @@ 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" -collapse-white-space@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.2.tgz#9c463fb9c6d190d2dcae21a356a01bcae9eeef6d" - -color-convert@^1.3.0: +color-convert@^1.0.0, color-convert@^1.3.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: @@ -1576,7 +1630,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.0, commander@^2.8.1, commander@^2.9.0: +commander@^2.8.1, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1621,7 +1675,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.7, concat-stream@^1.5.2: +concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1655,11 +1709,15 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +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" + content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@1.X, convert-source-map@^1.1.0: +convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1744,6 +1802,14 @@ create-react-class@15.x, create-react-class@^15.5.1, create-react-class@^15.5.3: loose-envify "^1.3.1" object-assign "^4.1.1" +create-react-class@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -1893,6 +1959,16 @@ csso@~2.3.1: clap "^1.0.9" source-map "^0.5.3" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + 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" @@ -1940,7 +2016,7 @@ debug-fabulous@0.1.X: debug "2.X" object-assign "4.1.0" -debug@2, debug@2.6.8, debug@2.X, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@2, debug@2.6.8, debug@2.X, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -1952,12 +2028,6 @@ debug@2.2.0, debug@~2.2.0: dependencies: ms "0.7.1" -debug@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" - dependencies: - ms "0.7.2" - debug@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" @@ -1976,12 +2046,6 @@ deep-diff@^0.3.5: version "0.3.8" resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" -deep-eql@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a" - dependencies: - type-detect "^3.0.0" - deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -1990,6 +2054,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + defaults@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2074,9 +2144,9 @@ detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" -diff@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +diff@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" diffie-hellman@^5.0.0: version "5.0.2" @@ -2136,6 +2206,10 @@ domutils@1.5.1, domutils@^1.5.1: dom-serializer "0" domelementtype "1" +dotenv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -2148,10 +2222,6 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -editions@^1.1.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2209,22 +2279,34 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -enzyme@^2.7.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" +enzyme-to-json@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-1.5.1.tgz#e34f4d126bb3f4696ce3800b51f9ed83df708799" + dependencies: + lodash.filter "^4.6.0" + lodash.isnil "^4.0.0" + lodash.isplainobject "^4.0.6" + lodash.omitby "^4.5.0" + lodash.range "^3.2.0" + object-values "^1.0.0" + object.entries "^1.0.3" + +enzyme@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" dependencies: cheerio "^0.22.0" function.prototype.name "^1.0.0" is-subset "^0.1.1" - lodash "^4.17.2" + lodash "^4.17.4" object-is "^1.0.1" object.assign "^4.0.4" - object.entries "^1.0.3" - object.values "^1.0.3" - prop-types "^15.5.4" - uuid "^2.0.3" + object.entries "^1.0.4" + object.values "^1.0.4" + prop-types "^15.5.10" + uuid "^3.0.1" -errno@^0.1.3: +errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2313,11 +2395,11 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x, escodegen@1.x.x, escodegen@^1.8.1: +escodegen@1.8.x, escodegen@1.x.x, escodegen@^1.6.1, escodegen@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -2452,6 +2534,10 @@ esprima@3.x.x: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -2512,6 +2598,12 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + execa@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" @@ -2620,6 +2712,18 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -2666,6 +2770,13 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -2707,7 +2818,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -2952,10 +3063,6 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -3030,17 +3137,6 @@ glob@5.x, glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^4.3.1: version "4.5.3" resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" @@ -3122,7 +3218,7 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -graceful-fs@4.X, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: +graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -3140,9 +3236,9 @@ graceful-fs@~1.2.0: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" gulp-babel@^6.1.2: version "6.1.2" @@ -3166,17 +3262,6 @@ gulp-istanbul@^1.1.1: through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.1" -gulp-mocha@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/gulp-mocha/-/gulp-mocha-3.0.1.tgz#ab0ca2c39403718174dddad750e63a61be17e041" - dependencies: - gulp-util "^3.0.0" - mocha "^3.0.0" - plur "^2.1.0" - req-cwd "^1.0.1" - temp "^0.8.3" - through "^2.3.4" - gulp-sourcemaps@^2.4.0: version "2.6.0" resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.0.tgz#7ccce899a8a3bfca1593a3348d0fbf41dd3f51e5" @@ -3245,7 +3330,7 @@ handle-thing@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" -handlebars@^4.0.1: +handlebars@^4.0.1, handlebars@^4.0.3: version "4.0.10" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: @@ -3275,6 +3360,10 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +harmony-reflect@^1.4.6: + version "1.5.1" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3377,16 +3466,16 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" -html@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/html/-/html-1.0.0.tgz#a544fa9ea5492bfb3a2cca8210a10be7b5af1f61" - dependencies: - concat-stream "^1.4.7" - htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -3461,6 +3550,18 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + iconv-lite@0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -3479,6 +3580,12 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + dependencies: + harmony-reflect "^1.4.6" + ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" @@ -3584,10 +3691,6 @@ ipaddr.js@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" -irregular-plurals@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" - is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -3623,6 +3726,12 @@ 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" +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -3746,10 +3855,6 @@ is-regex@^1.0.3: dependencies: has "^1.0.1" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - is-relative@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" @@ -3831,6 +3936,69 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +istanbul-api@^1.1.1: + version "1.1.11" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.11.tgz#fcc0b461e2b3bda71e305155138238768257d9de" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.4" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.17.4" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" + dependencies: + handlebars "^4.0.3" + istanbul-threshold-checker@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/istanbul-threshold-checker/-/istanbul-threshold-checker-0.2.1.tgz#c5dc94e8f2cc5cd3ffd335452f84b553c4248331" @@ -3857,6 +4025,217 @@ istanbul@^0.4.0, istanbul@~0.4.5: which "^1.1.1" wordwrap "^1.0.0" +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.5" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + js-base64@^2.1.8, js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" @@ -3872,6 +4251,13 @@ js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@~3.6.0: argparse "^1.0.7" esprima "^2.6.0" +js-yaml@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -3883,6 +4269,30 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -3913,7 +4323,7 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json3@3.3.2, json3@^3.3.2: +json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -3988,6 +4398,10 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4072,21 +4486,10 @@ lodash-es@^4.2.0, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -4147,14 +4550,6 @@ lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -4165,7 +4560,7 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash.filter@^4.4.0: +lodash.filter@^4.4.0, lodash.filter@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" @@ -4189,7 +4584,11 @@ lodash.isempty@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" -lodash.isplainobject@^4.0.4, lodash.isplainobject@~4.0.4: +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + +lodash.isplainobject@^4.0.4, lodash.isplainobject@^4.0.6, lodash.isplainobject@~4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -4225,10 +4624,18 @@ lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" +lodash.omitby@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.omitby/-/lodash.omitby-4.6.0.tgz#5c15ff4754ad555016b53c041311e8f079204791" + lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" +lodash.range@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d" + lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" @@ -4334,6 +4741,12 @@ macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4382,6 +4795,10 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -4464,7 +4881,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" -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4481,28 +4898,12 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@*, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mocha@^3.0.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.6.0" - diff "3.2.0" - escape-string-regexp "1.0.5" - glob "7.1.1" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - modify-babel-preset@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/modify-babel-preset/-/modify-babel-preset-1.2.0.tgz#d1b7c8c24896e19dbc4847347213e6b7144d1bc7" @@ -4513,10 +4914,6 @@ ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - ms@2.0.0, ms@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4592,6 +4989,10 @@ node-gyp@^3.3.1: tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -4620,6 +5021,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + node-pre-gyp@^0.6.29: version "0.6.36" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" @@ -4685,6 +5095,10 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + normalize-path@^2.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" @@ -4733,6 +5147,10 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -4757,6 +5175,10 @@ object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object-values/-/object-values-1.0.0.tgz#72af839630119e5b98c3b02bb8c27e3237158105" + object.assign@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" @@ -4765,7 +5187,7 @@ object.assign@^4.0.4: function-bind "^1.1.0" object-keys "^1.0.10" -object.entries@^1.0.3: +object.entries@^1.0.3, object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" dependencies: @@ -4781,7 +5203,7 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.values@^1.0.3: +object.values@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" dependencies: @@ -4804,7 +5226,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@1.x, once@^1.3.0, once@^1.3.3: +once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -4922,6 +5344,10 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + pac-proxy-agent@1: version "1.1.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" @@ -4987,6 +5413,10 @@ parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" @@ -5053,10 +5483,6 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pathval@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - pbkdf2@^3.0.3: version "3.0.12" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" @@ -5095,12 +5521,6 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" -plur@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" - dependencies: - irregular-plurals "^1.0.0" - pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -5403,6 +5823,13 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -5439,7 +5866,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.7: +prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: @@ -5620,34 +6047,16 @@ react-addons-perf@^15.4.2: fbjs "^0.8.4" object-assign "^4.1.0" -react-addons-test-utils@^15.4.2: - version "15.5.1" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.5.1.tgz#e0d258cda2a122ad0dff69f838260d0c3958f5f7" - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" - -react-dom@^15.4.1: - version "15.5.4" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" +react-dom@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.1.tgz#2cb0ed4191038e53c209eb3a79a23e2a4cf99470" dependencies: fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" - prop-types "~15.5.7" - -react-element-to-jsx-string@^5.0.0: - version "5.0.7" - resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-5.0.7.tgz#c663a4800a9c712115c0d8519cb0215a46a1f0f2" - dependencies: - collapse-white-space "^1.0.0" - is-plain-object "^2.0.1" - lodash "^4.17.4" - sortobject "^1.0.0" - stringify-object "2.4.0" - traverse "^0.6.6" + prop-types "^15.5.10" -react-redux@^5.0.1: +react-redux@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.5.tgz#f8e8c7b239422576e52d6b7db06439469be9846a" dependencies: @@ -5690,14 +6099,22 @@ react-svg-loader@^1.1.1: svgo "~0.6.3" yargs "~4.8.0" -react@^15.4.1: - version "15.5.4" - resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" +react-test-renderer@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.1.tgz#026f4a5bb5552661fd2cc4bbcd0d4bc8a35ebf7e" dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + +react@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df" + 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.7" + prop-types "^15.5.10" read-pkg-up@^1.0.1: version "1.0.1" @@ -5809,11 +6226,11 @@ redux-logger@^3.0.6: dependencies: deep-diff "^0.3.5" -redux-thunk@^2.1.0: +redux-thunk@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" -redux@^3.5.2, redux@^3.6.0: +redux@^3.5.2: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" dependencies: @@ -5822,6 +6239,15 @@ redux@^3.5.2, redux@^3.6.0: loose-envify "^1.1.0" symbol-observable "^1.0.2" +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" @@ -5893,18 +6319,6 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -req-cwd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-1.0.1.tgz#0d73aeae9266e697a78f7976019677e76acf0fff" - dependencies: - req-from "^1.0.1" - -req-from@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-1.0.1.tgz#bf81da5147947d32d13b947dc12a58ad4587350e" - dependencies: - resolve-from "^2.0.0" - request@2, request@2.79.0, request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" @@ -5999,19 +6413,15 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - resolve-url@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" -resolve@1.1.x: +resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.0, resolve@^1.1.6, resolve@^1.1.7: +resolve@^1.1.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -6030,7 +6440,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@~2.2.6: +rimraf@2: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" @@ -6103,6 +6513,18 @@ safe-buffer@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sass-graph@^2.1.1: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -6247,6 +6669,10 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + sigmund@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" @@ -6320,12 +6746,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sortobject@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sortobject/-/sortobject-1.1.1.tgz#4f695d4d44ed0a4c06482c34c2582a2dcdc2ab34" - dependencies: - editions "^1.1.1" - source-list-map@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" @@ -6477,6 +6897,12 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -6502,13 +6928,6 @@ string_decoder@~1.0.0: dependencies: safe-buffer "~5.0.1" -stringify-object@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-2.4.0.tgz#c62d11023eb21fe2d9b087be039a26df3b22a09d" - dependencies: - is-plain-obj "^1.0.0" - is-regexp "^1.0.0" - stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -6523,6 +6942,10 @@ strip-bom-string@1.X: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" @@ -6536,10 +6959,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -6550,6 +6969,10 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -6583,7 +7006,7 @@ superagent@^2.3.0: qs "^6.1.0" readable-stream "^2.0.5" -supports-color@3.1.2, supports-color@3.1.x, supports-color@^3.1.0, supports-color@^3.1.1: +supports-color@3.1.x, supports-color@^3.1.0, supports-color@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" dependencies: @@ -6593,7 +7016,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.2.3: +supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -6623,10 +7046,14 @@ svgo@~0.6.3: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -6663,12 +7090,15 @@ tar@^2.0.0, tar@^2.2.1: fstream "^1.0.2" inherits "2" -temp@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" text-table@~0.2.0: version "0.2.0" @@ -6686,6 +7116,10 @@ thenify-all@^1.0.0, thenify-all@^1.6.0: dependencies: any-promise "^1.0.0" +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" + through2@2.X, through2@^2.0.0, through2@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -6700,7 +7134,7 @@ through2@^0.6.1: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through@^2.3.4, through@^2.3.6: +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -6724,6 +7158,10 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -6732,15 +7170,15 @@ to-fast-properties@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -tough-cookie@~2.3.0: +tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" trim-newlines@^1.0.0: version "1.0.0" @@ -6778,14 +7216,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-3.0.0.tgz#46d0cc8553abb7b13a352b0d6dea2fd58f2d9b55" - -type-detect@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" - type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -6904,7 +7334,7 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^2.0.2, uuid@^2.0.3: +uuid@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -6987,12 +7417,22 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" dependencies: loose-envify "^1.0.0" +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + watchpack@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" @@ -7007,6 +7447,14 @@ wbuf@^1.1.0, wbuf@^1.7.2: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + webpack-dev-middleware@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" @@ -7081,10 +7529,23 @@ websocket-extensions@>=0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -7125,6 +7586,13 @@ wordwrap@1.0.x, wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-farm@^1.3.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.4.1.tgz#a438bc993a7a7d133bcb6547c95eca7cff4897d8" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7155,11 +7623,15 @@ xml-js@^1.0.2: dependencies: sax "^1.2.1" +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -7220,7 +7692,7 @@ yargs@^6.0.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^7.0.0: +yargs@^7.0.0, yargs@^7.0.2: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" dependencies: