diff --git a/.stylelintrc b/.stylelintrc index f665a0aef..af2b3f750 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,7 +1,7 @@ { "extends": ["stylelint-config-standard", "stylelint-config-recommended-scss"], "rules": { - "max-nesting-depth": 5, + "max-nesting-depth": 9, "string-quotes": "single", "declaration-colon-space-after": "always", "declaration-colon-space-before": "never", diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a41b83aa..0f15c2e02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,26 @@ # 更新日志 +## 2.1.0 + +- 新增 `` 面包屑组件 [#573](https://github.com/XiaoMi/hiui/issues/573) +- 新增 `` 线型展示模式 [#541](https://github.com/XiaoMi/hiui/issues/541) +- 修复 `` 中的自定义上传同一个文件失败的问题 [#567](https://github.com/XiaoMi/hiui/issues/567) +- 修复 `` 重复渲染问题 [#565](https://github.com/XiaoMi/hiui/issues/565) +- 修复 `` activeId 无效的问题 [#560](https://github.com/XiaoMi/hiui/issues/560) + ## 2.0.5 - 修复 `` hover 的闪烁问题 [#522](https://github.com/XiaoMi/hiui/issues/522) -- 修复 `` maxCount 结合 onChange return false的计算错误问题 [#549](https://github.com/XiaoMi/hiui/issues/549) +- 修复 `` maxCount 结合 onChange return false 的计算错误问题 [#549](https://github.com/XiaoMi/hiui/issues/549) - 修复 `` 部分区域点击无效的问题 [#555](https://github.com/XiaoMi/hiui/issues/555) - 修复 `` 高亮项计算错误的问题 [#556](https://github.com/XiaoMi/hiui/issues/556) ## 2.0.4 -- 修复:`DatePicker.format` 方法丢失的问题 [#540](https://github.com/XiaoMi/hiui/issues/540) -- 修复:`` 垂直布局的问题 [#545](https://github.com/XiaoMi/hiui/issues/545) -- 修复:`` 增加默认背景色 [#546](https://github.com/XiaoMi/hiui/issues/546) -- 优化:过滤`` 、 `` 无关属性 [#547](https://github.com/XiaoMi/hiui/issues/547) +- 修复:`DatePicker.format` 方法丢失的问题 [#540](https://github.com/XiaoMi/hiui/issues/540) +- 修复:`` 垂直布局的问题 [#545](https://github.com/XiaoMi/hiui/issues/545) +- 修复:`` 增加默认背景色 [#546](https://github.com/XiaoMi/hiui/issues/546) +- 优化:过滤`` 、 `` 无关属性 [#547](https://github.com/XiaoMi/hiui/issues/547) ## 2.0.2 diff --git a/components/alert/__tests__/index.test.js b/components/alert/__tests__/index.test.js new file mode 100644 index 000000000..ebd4882be --- /dev/null +++ b/components/alert/__tests__/index.test.js @@ -0,0 +1,90 @@ +import React from 'react' +import { mount, shallow } from 'enzyme' +import { spy, fake } from 'sinon' +import Alert from '../alert' + +describe('Alert', () => { + beforeAll(() => { + jest.useFakeTimers() + }) + afterAll(() => { + jest.useRealTimers() + }) + + describe('Lifecycle', () => { + it('componentDidMount', () => { + const componentDidMountSpy = spy(Alert.prototype, 'componentDidMount') + const wrapper = mount() + + expect(wrapper.instance()).toBeInstanceOf(Alert) + + expect(componentDidMountSpy.callCount).toEqual(1) + componentDidMountSpy.restore() + + expect(wrapper.find('.icon-info-circle-o')).toHaveLength(1) + expect(wrapper.find('.close-btn')).toHaveLength(1) + }) + }) + + describe('PropTypes', () => { + it('type', () => { + const wrapper = mount( +
+ + + + +
+ ) + + // NOTE 缺少 type 对应唯一标识 + expect(wrapper.find('.icon-info-circle-o')).toHaveLength(2) + expect(wrapper.find('.icon-close-circle-o')).toHaveLength(1) + expect(wrapper.find('.icon-check-circle-o')).toHaveLength(1) + }) + + it('onClose', () => { + const callback = fake() + const wrapper = shallow( + + ) + + wrapper.find('.close-btn').first().simulate('click') + expect(callback.callCount).toEqual(1) + }) + + it('content', () => { + const content = 'text-content' + const wrapper = shallow( + + ) + + expect(wrapper.text()).toEqual(expect.stringMatching(content)) + }) + + it('title', () => { + const title = 'text-title' + const wrapper = shallow( + + ) + + expect(wrapper.text()).toEqual(expect.stringMatching(title)) + }) + + it('duration', () => { + const duration = 100 + const wrapper = shallow( + + ) + const handleCloseSpy = spy(Alert.prototype, 'handleClose') + + expect(handleCloseSpy.callCount).toEqual(0) + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), duration) + + jest.runAllTimers() + expect(handleCloseSpy.callCount).toEqual(1) + handleCloseSpy.restore() + }) + }) +}) diff --git a/components/badge/__tests__/index.test.js b/components/badge/__tests__/index.test.js new file mode 100644 index 000000000..63412b7a7 --- /dev/null +++ b/components/badge/__tests__/index.test.js @@ -0,0 +1,86 @@ +import React from 'react' +import { mount, shallow } from 'enzyme' +import Badge from '../Badge' + +describe('Badge', () => { + describe('Lifecycle', () => { + // FIXME #34 typeof +content === 'number' always be true + it('componentDidMount', () => { + const wrapper = mount() + + expect(wrapper.instance()).toBeInstanceOf(Badge) + + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-base`)).toHaveLength(1) + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-value`)).toHaveLength(1) + }) + }) + + describe('PropTypes', () => { + it('type', () => { + const wrapper = mount( +
+ + +
+ ) + + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-dot`)).toHaveLength(1) + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-value`)).toHaveLength(1) + }) + + it('content', () => { + const content = 'test-content' + const contentNumber1 = 1 + const contentNumber2 = 100 + const wrapper = shallow( + + ) + + expect(wrapper.text()).toEqual(expect.stringMatching(content)) + + wrapper.setProps({ content: contentNumber1 }) + expect(wrapper.text()).toEqual(expect.stringMatching(`${contentNumber1}`)) + + wrapper.setProps({ content: contentNumber2 }) + expect(wrapper.text()).toEqual(expect.stringMatching(`${Badge.defaultProps.max}+`)) + }) + + it('max', () => { + const props = { + max: 33, + content: 1 + } + const wrapper = shallow( + + ) + + expect(wrapper.text()).toEqual(expect.stringMatching(`${props.content}`)) + + wrapper.setProps({ content: 34 }) + expect(wrapper.text()).toEqual(expect.stringMatching(`${props.max}+`)) + }) + + it('visible', () => { + const wrapper = mount( +
+ + +
+ ) + + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-dot.hi-hide`)).toHaveLength(1) + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-value.hi-hide`)).toHaveLength(1) + }) + + it('style', () => { + const style = { + color: '#ffff00' + } + const wrapper = shallow( + + ) + + expect(wrapper.find(`.${Badge.defaultProps.prefixCls}-base`).prop('style')).toMatchObject(style) + }) + }) +}) diff --git a/components/breadcrumb/index.js b/components/breadcrumb/index.js new file mode 100644 index 000000000..4896ac75c --- /dev/null +++ b/components/breadcrumb/index.js @@ -0,0 +1,32 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import Icon from '../icon' +import './style/index' + +class Breadcrumb extends Component { + render () { + const { separator, data, onClick } = this.props + return
+ { + data.map((item, index) => { + return + { onClick(item.path) }}>{item.icon && }{item.content} + {separator} + + }) + } +
+ } +} + +Breadcrumb.propTypes = { + separator: PropTypes.string, + data: PropTypes.array, + onClick: PropTypes.func +} +Breadcrumb.defaultProps = { + separator: '|', + data: [], + onClick: () => {} +} +export default Breadcrumb diff --git a/components/breadcrumb/style/index.js b/components/breadcrumb/style/index.js new file mode 100644 index 000000000..63810a681 --- /dev/null +++ b/components/breadcrumb/style/index.js @@ -0,0 +1 @@ +import './index.scss' diff --git a/components/breadcrumb/style/index.scss b/components/breadcrumb/style/index.scss new file mode 100644 index 000000000..10cda5d73 --- /dev/null +++ b/components/breadcrumb/style/index.scss @@ -0,0 +1,33 @@ +.hi-breadcrumb { + color: rgba(153, 153, 153, 1); + + &__content { + cursor: pointer; + + &:hover { + color: #4284f5; + } + + .hi-icon { + margin: 0 4px; + } + } + + &__separator { + margin: 0 10px; + } + + &__item:last-child { + .hi-breadcrumb__content { + cursor: text; + + &:hover { + color: rgba(153, 153, 153, 1); + } + } + + .hi-breadcrumb__separator { + display: none; + } + } +} diff --git a/components/button/__test__/index.test.js b/components/button/__test__/index.test.js deleted file mode 100644 index cf7254c8c..000000000 --- a/components/button/__test__/index.test.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import Button from '../' - -let wrapper -const clickCallback = jest.fn(val => val) - -describe('Dropdown', () => { - beforeEach(() => {}) - - afterEach(() => { - wrapper && wrapper.unmount() - clickCallback.mockClear() - }) - - it('点击事件', () => { - wrapper = mount( -
- -
- ) - - wrapper.find(Button).simulate('click') - - expect(clickCallback).toHaveBeenCalled() - }) -}) diff --git a/components/button/__tests__/index.test.js b/components/button/__tests__/index.test.js new file mode 100644 index 000000000..b29480186 --- /dev/null +++ b/components/button/__tests__/index.test.js @@ -0,0 +1,231 @@ +import React, { Fragment } from 'react' +import { mount } from 'enzyme' +import { fake } from 'sinon' +import Button from '../' +import Icon from '../../icon' +import IconLoading from '../IconLoading' + +describe('Button', () => { + describe('Lifecycle', () => { + it('componentDidMount', () => { + const wrapper = mount( + ) + + expect(wrapper.find(Children)).toHaveLength(1) + }) + + it('onClick', () => { + const callback = fake() + const wrapper = mount( + + ) + + expect(wrapper.find(Icon)).toHaveLength(1) + expect(wrapper.text()).toEqual(expect.stringContaining(children)) + }) + + it('props: type && appearance', () => { + const props = { + type: 'primary', + appearance: 'line' + } + const wrapper = mount( + + + + + + + + ) + + describe('Lifecycle', () => { + it('componentDidMount', () => { + const wrapper = mount( + + + + ) + + expect(wrapper.instance()).toBeInstanceOf(Button.Group) + + expect(wrapper.find(`.hi-btn-group`)).toHaveLength(1) + }) + }) +}) diff --git a/components/card/__tests__/index.test.js b/components/card/__tests__/index.test.js new file mode 100644 index 000000000..3da84a404 --- /dev/null +++ b/components/card/__tests__/index.test.js @@ -0,0 +1,221 @@ +import React from 'react' +import { mount } from 'enzyme' +import Card from '../' + +describe('Card', () => { + describe('Lifecycle', () => { + it('componentDidMount', () => { + const wrapper = mount() + + expect(wrapper.instance()).toBeInstanceOf(Card) + + expect(wrapper.find(`.hi-card`)).toHaveLength(1) + }) + }) + + describe('PropTypes', () => { + it('type', () => { + const types = [ + 'simple', + 'default' + ] + + const wrapper = mount( +
+ { types.map((type, index) => ) } +
+ ) + + expect(wrapper.find(`.hi-card`)).toHaveLength(2) + expect(wrapper.find(`.hi-card__content--simple`)).toHaveLength(1) + }) + + it('extraType', () => { + const extraTypes = [ + 'hover', + 'default' + ] + + const wrapper = mount( +
+ { extraTypes.map((extraType, index) => ) } +
+ ) + + const firstCard = wrapper.find(Card).first() + + expect(firstCard.state().extraShow).toBeFalsy() + + firstCard.find('.hi-card').simulate('mouseenter') + expect(firstCard.state().extraShow).toBeTruthy() + + firstCard.find('.hi-card').simulate('mouseleave') + expect(firstCard.state().extraShow).toBeFalsy() + }) + + // NOTE 将要废弃 添加 it.skip + it('extraShow', () => { + const extraShows = [ + 'hover', + 'stay' + ] + + const wrapper = mount( +
+ { extraShows.map((extraShow, index) => ) } +
+ ) + + const firstCard = wrapper.find(Card).first() + + expect(firstCard.state().extraShow).toEqual(false) + + firstCard.find('.hi-card').simulate('mouseenter') + expect(firstCard.state().extraShow).toEqual(true) + + firstCard.find('.hi-card').simulate('mouseleave') + expect(firstCard.state().extraShow).toEqual(false) + }) + + // NOTE 将要废弃 添加 it.skip + it('disabled', () => { + const wrapper = mount( + + ) + + expect(wrapper.find(`.hi-card--disabled`)).toHaveLength(1) + }) + + it('children', () => { + const Children = function () { + return
children
+ } + + const wrapper = mount( + + ) + + expect(wrapper.find(Children)).toHaveLength(1) + }) + + it('content', () => { + const content = 'custom-content' + + const wrapper = mount( + } {...{content}} /> + ) + + expect(wrapper.text()).toEqual(expect.stringContaining(content)) + }) + + // NOTE 将要废弃 添加 it.skip + it('description', () => { + const description = 'custom-description' + + const wrapper = mount( + } {...{description}} /> + ) + + expect(wrapper.text()).toEqual(expect.stringContaining(description)) + }) + + it('coverUrl', () => { + const coverUrl = 'custom-coverUrl' + + const wrapper = mount( + + ) + + expect(wrapper.find('img').prop('src')).toEqual(coverUrl) + }) + + it('cover', () => { + const cover =
+ + const wrapper = mount( + + ) + + expect(wrapper.find(`.cover-class`)).toHaveLength(1) + }) + + it('extra', () => { + const extras = [ + , + 'extra-string', + [ + , + 'extra-array-string' + ] + ] + + const wrapper = mount( +
+ { extras.map((extra, index) => ) } +
+ ) + + expect(wrapper.find(`.extra-element-class`)).toHaveLength(1) + expect(wrapper.find(`.extra-array-element`)).toHaveLength(1) + + expect(wrapper.text()).toEqual(expect.stringContaining('extra-string')) + expect(wrapper.text()).toEqual(expect.stringContaining('extra-array-string')) + }) + + it('title', () => { + const titles = [ + , + 'title-string' + ] + + const wrapper = mount( +
+ { titles.map((title, index) => ) } +
+ ) + + expect(wrapper.find(`.title-element-class`)).toHaveLength(1) + + expect(wrapper.text()).toEqual(expect.stringContaining('title-string')) + }) + + it('hoverable', () => { + const wrapper = mount( + + ) + + expect(wrapper.find(`.hi-card--hover`)).toHaveLength(1) + }) + + it('size', () => { + const sizes = [ + 'small', + 'default', + 'large' + ] + + const wrapper = mount( +
+ { sizes.map((size, index) => ) } +
+ ) + + expect(wrapper.find(`.hi-card--small`)).toHaveLength(1) + expect(wrapper.find(`.hi-card--middle`)).toHaveLength(1) + expect(wrapper.find(`.hi-card--large`)).toHaveLength(1) + }) + + it('style', () => { + const style = { + color: '#ffff00' + } + const wrapper = mount( + + ) + + expect(wrapper.find(`.hi-card`).prop('style')).toMatchObject(style) + }) + }) +}) + + diff --git a/components/cascader/Cascader.js b/components/cascader/Cascader.js index b085ef24f..debf5fbde 100644 --- a/components/cascader/Cascader.js +++ b/components/cascader/Cascader.js @@ -378,3 +378,6 @@ Cascader.childContextTypes = { } export default Provider(Cascader) +export { + Cascader +} diff --git a/components/cascader/__test__/index.test.js b/components/cascader/__test__/index.test.js deleted file mode 100644 index 6390082d9..000000000 --- a/components/cascader/__test__/index.test.js +++ /dev/null @@ -1,307 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import Cascader from '../' - -let wrapper -const changeCallback = jest.fn(value => value) -const activeItemChangeCallback = jest.fn(value => value) -jest.mock('lodash/debounce', () => jest.fn(fn => fn)) -const options = [ - { - value: '手机', - label: '手机', - children: [ - { - value: '小米', - label: '小米', - children: [ - { - value: '小米3', - label: '小米3' - }, - { - value: '小米4', - label: '小米4' - } - ] - }, - { - value: '红米', - label: '红米', - children: [ - { - value: '红米3', - label: '红米3', - disabled: true - }, - { - value: '红米4', - label: '红米4' - } - ] - } - ] - }, - { - value: '电视', - label: '电视', - children: [ - { - value: '小米电视4A', - label: '小米电视4A' - }, - { - value: '小米电视4C', - label: '小米电视4C' - } - ] - } -] - -describe('Cascader', () => { - beforeEach(() => { - jest.useFakeTimers() - jest.setTimeout(10000) - }) - - afterEach(() => { - wrapper && wrapper.unmount() - changeCallback.mockClear() - activeItemChangeCallback.mockClear() - jest.useRealTimers() - }) - - it('禁用', () => { - wrapper = mount( - - ) - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(0) - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(0) - }) - - it('基础用法', () => { - wrapper = mount( - - ) - // 测试默认值 - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '红米', '红米4']) - - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(0) - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(1) - - // 测试默认值选中 - expect(document.querySelectorAll('.hi-cascader-menu')[0].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('手机') - expect(document.querySelectorAll('.hi-cascader-menu')[1].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('红米') - expect(document.querySelectorAll('.hi-cascader-menu')[2].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('红米4') - - // 测试禁用项不可点击 - document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(1) - expect(changeCallback).not.toHaveBeenCalled() - - // 切换 - document.querySelectorAll('.hi-cascader-menu')[1].querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')).toHaveLength(2) - expect(document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].textContent).toEqual('小米3') - expect(document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[1].textContent).toEqual('小米4') - - // 选中小米3 - document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '小米', '小米3']) - expect(changeCallback).toHaveBeenCalledTimes(1) - expect(changeCallback.mock.results[0].value).toEqual(['手机', '小米', '小米3']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(1) // 收起 - }) - - it('自定义字段名', () => { - const options = [ - { - goodsId: '手机', - goodsName: '手机', - subGoods: [ - { - goodsId: '小米', - goodsName: '小米', - subGoods: [ - { - goodsId: '小米3', - goodsName: '小米3' - }, - { - goodsId: '小米4', - goodsName: '小米4' - } - ] - }, - { - goodsId: '红米', - goodsName: '红米', - subGoods: [ - { - goodsId: '红米3', - goodsName: '红米3' - }, - { - goodsId: '红米4', - goodsName: '红米4' - } - ] - } - ] - }, - { - goodsId: '电视', - goodsName: '电视', - subGoods: [ - { - goodsId: '小米电视4A', - goodsName: '小米电视4A' - }, - { - goodsId: '小米电视4C', - goodsName: '小米电视4C' - } - ] - } - ] - wrapper = mount( - - ) - - // 测试默认值 - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '红米', '红米4']) - - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(0) - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(1) - - // 测试默认值选中 - expect(document.querySelectorAll('.hi-cascader-menu')[0].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('手机') - expect(document.querySelectorAll('.hi-cascader-menu')[1].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('红米') - expect(document.querySelectorAll('.hi-cascader-menu')[2].querySelector('.hi-cascader-menu__item-active').textContent).toEqual('红米4') - - // 选中红米3 - document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '红米', '红米3']) - expect(changeCallback).toHaveBeenCalledTimes(1) - expect(changeCallback.mock.results[0].value).toEqual(['手机', '红米', '红米3']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(1) // 收起 - }) - - it('选择即改变', () => { - wrapper = mount( - - ) - - // 测试默认值 - expect(wrapper.find('Cascader').state().cascaderValue).toEqual([]) - - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - - document.querySelectorAll('.hi-cascader-menu')[0].querySelectorAll('.hi-cascader-menu__item')[0].click() - // test onChange - expect(changeCallback).toHaveBeenCalledTimes(1) - expect(changeCallback.mock.results[0].value).toEqual(['手机']) - // test onActiveItemChange - expect(activeItemChangeCallback).toHaveBeenCalledTimes(1) - expect(activeItemChangeCallback.mock.results[0].value).toEqual(['手机']) - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(0) // 未收起 - - document.querySelectorAll('.hi-cascader-menu')[1].querySelectorAll('.hi-cascader-menu__item')[0].click() - // test onChange - expect(changeCallback).toHaveBeenCalledTimes(2) - expect(changeCallback.mock.results[1].value).toEqual(['手机', '小米']) - // test onActiveItemChange - expect(activeItemChangeCallback).toHaveBeenCalledTimes(2) - expect(activeItemChangeCallback.mock.results[1].value).toEqual(['手机', '小米']) - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '小米']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(0) // 未收起 - - document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].click() - // test onChange - expect(changeCallback).toHaveBeenCalledTimes(3) - expect(changeCallback.mock.results[2].value).toEqual(['手机', '小米', '小米3']) - // test onActiveItemChange - expect(activeItemChangeCallback).toHaveBeenCalledTimes(2) - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '小米', '小米3']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(1) // 收起 - }) - - it('自定义显示', () => { - wrapper = mount( - { - return values.join(' > ') - }} - /> - ) - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - document.querySelectorAll('.hi-cascader-menu')[0].querySelectorAll('.hi-cascader-menu__item')[0].click() - document.querySelectorAll('.hi-cascader-menu')[1].querySelectorAll('.hi-cascader-menu__item')[0].click() - document.querySelectorAll('.hi-cascader-menu')[2].querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(changeCallback).toHaveBeenCalledTimes(1) - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '小米', '小米3']) - expect(wrapper.find('.hi-cascader__input-keyword').instance().value).toEqual('手机 > 小米 > 小米3') - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(1) // 收起 - }) - - it('搜索', () => { - wrapper = mount( - - ) - wrapper.find('.hi-cascader__input-container').simulate('click') // 展开 - - wrapper.find('input').simulate('change', { target: { value: '00' } }) // 无搜索结果 - wrapper.find('input').simulate('keyUp') - expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) - expect(document.querySelector('.hi-cascader-menu__item').textContent).toEqual('未搜索到相关内容') - - wrapper.find('input').simulate('change', { target: { value: '3' } }) - wrapper.find('input').simulate('keyUp') - expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) - expect(document.querySelectorAll('.hi-cascader-menu__item')).toHaveLength(2) - - document.querySelectorAll('.hi-cascader-menu__item')[0].click() - expect(changeCallback).toHaveBeenCalledTimes(1) - expect(wrapper.find('Cascader').state().cascaderValue).toEqual(['手机', '小米', '小米3']) - expect(document.querySelectorAll('.hi-popper__container--hide')).toHaveLength(1) // 收起 - }) -}) diff --git a/components/cascader/__tests__/index.test.js b/components/cascader/__tests__/index.test.js new file mode 100644 index 000000000..b3e0a5a1a --- /dev/null +++ b/components/cascader/__tests__/index.test.js @@ -0,0 +1,455 @@ +import React from 'react' +import { mount } from 'enzyme' +import sinon, { spy, stub } from 'sinon' +import CascaderProvider, { Cascader } from '../Cascader' + +describe('Cascader', () => { + const data = [ + { + content: '手机', + id: '手机', + children: [ + { + content: '小米', + id: '小米', + children: [ + { + content: '小米3', + id: '小米3' + }, + { + content: '小米4', + id: '小米4' + } + ] + }, + { + content: '红米', + id: '红米', + children: [ + { + content: '红米3', + id: '红米3', + disabled: true + }, + { + content: '红米4', + id: '红米4' + } + ] + } + ] + }, + { + content: '电视', + id: '电视', + children: [ + { + content: '小米电视4A', + id: '小米电视4A' + }, + { + content: '小米电视4C', + id: '小米电视4C', + disabled: true + } + ] + } + ] + + let clock + + beforeEach(() => { + clock = sinon.useFakeTimers() + }) + + afterEach(() => { + clock.restore() + }) + + describe('Lifecycle', () => { + it('componentDidMount', () => { + const componentDidMountSpy = spy(Cascader.prototype, 'componentDidMount') + const wrapper = mount() + + expect(wrapper.find(Cascader).instance()).toBeInstanceOf(Cascader) + + expect(componentDidMountSpy.callCount).toEqual(1) + componentDidMountSpy.restore() + + expect(wrapper.find(`.hi-cascader`)).toHaveLength(1) + }) + + it('componentWillUnmount', () => { + const componentWillUnmountSpy = spy(Cascader.prototype, 'componentWillUnmount') + const wrapper = mount() + + wrapper.unmount() + + expect(componentWillUnmountSpy.callCount).toEqual(1) + componentWillUnmountSpy.restore() + + expect(wrapper.find(`.hi-cascader`)).toHaveLength(0) + }) + + it('componentWillReceiveProps', () => { + const componentWillReceivePropsSpy = spy(Cascader.prototype, 'componentWillReceiveProps') + const wrapper = mount() + + wrapper.setProps({ + disabled: true + }) + + expect(componentWillReceivePropsSpy.callCount).toEqual(1) + componentWillReceivePropsSpy.restore() + }) + }) + + describe('PropTypes', () => { + it('data', () => { + const wrapper = mount() + + expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(0) + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(document.querySelectorAll('.hi-cascader__popper')).toHaveLength(1) + + wrapper.unmount() + }) + + it('value', () => { + const value = ['手机', '红米', '红米4'] + const nextValue = ['电视', '电磁炉', '空调'] + const wrapper = mount( + + ) + + expect(wrapper.find(Cascader).state().cascaderValue).toEqual(value) + + wrapper.setProps({ value: nextValue }) + expect(wrapper.find(Cascader).state().cacheValue).toEqual(nextValue) + expect(nextValue.join(' / ')).toEqual( + expect.stringContaining(wrapper.find(Cascader).state().cascaderLabel) + ) + }) + + // NOTE 默认 fieldNames 与线上文档不一致 + it('fieldNames', () => { + const fieldNames = { + label: 'label', + value: 'value', + children: 'child' + } + const data = [ + { + label: '电视', + value: '电视', + child: [ + { + label: '小米电视4A', + value: '小米电视4A' + } + ] + } + ] + const wrapper = mount( + + ) + + expect(wrapper.find(Cascader).instance()).toBeInstanceOf(Cascader) + expect(wrapper.find(Cascader).prop('data')).toMatchObject(data) + }) + + it('searchable', () => { + const wrapper = mount( + + ) + + expect(wrapper.find('input').prop('readOnly')).toEqual(false) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + + wrapper.find('input').simulate('change', { target: { value: 'empty' } }) + wrapper.find('input').simulate('keyUp') + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) + clock.tick(500) + expect(document.querySelector('.hi-cascader-menu__item').textContent).toEqual('无匹配数据') + + wrapper.find('input').simulate('change', { target: { value: '电视' } }) + wrapper.find('input').simulate('keyUp') + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) + clock.tick(500) + expect(document.querySelector('.hi-cascader-menu__item').textContent).toEqual(expect.stringContaining('电视')) + + wrapper.unmount() + }) + + it('clearable', () => { + const wrapper = mount( + + ) + + expect(wrapper.find('.hi-cascader--clearable')).toHaveLength(1) + expect(wrapper.find('.hi-cascader__icon--clear')).toHaveLength(1) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + document.querySelectorAll('.hi-cascader-menu')[0].children[0].click() + document.querySelectorAll('.hi-cascader-menu')[1].children[0].click() + document.querySelectorAll('.hi-cascader-menu')[2].children[0].click() + wrapper.update() + expect(wrapper.find('input').prop('value')).not.toEqual('') + + wrapper.find('.hi-cascader__icon--clear').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(false) + + wrapper.setProps({ clearable: false }) + + expect(wrapper.find('.hi-cascader--clearable')).toHaveLength(0) + expect(wrapper.find('.hi-cascader__icon--clear')).toHaveLength(0) + + wrapper.unmount() + }) + + it('disabled', () => { + const wrapper = mount( + + ) + + + expect(wrapper.find('.hi-cascader--disabled')).toHaveLength(1) + expect(wrapper.find('input').prop('disabled')).toEqual(true) + + wrapper.find('.hi-cascader__input-container').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(false) + + wrapper.unmount() + }) + + it('changeOnSelect', () => { + const wrapper = mount( + + ) + let cascaderLabel = '' + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) + expect(document.querySelectorAll('.hi-cascader-menu')[0].children).toHaveLength(2) + + cascaderLabel = data[0].content + document.querySelectorAll('.hi-cascader-menu')[0].children[0].click() + wrapper.update() + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(2) + expect(document.querySelectorAll('.hi-cascader-menu')[1].children).toHaveLength(2) + expect(wrapper.find('input').prop('placeholder')).toEqual(cascaderLabel) + wrapper.find(Cascader).setState({ popperShow: false }) + expect(wrapper.find('input').prop('value')).toEqual(cascaderLabel) + wrapper.find(Cascader).setState({ popperShow: true }) + + cascaderLabel = [data[0].content, data[0].children[0].content].join(' / ') + document.querySelectorAll('.hi-cascader-menu')[1].children[0].click() + wrapper.update() + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(3) + expect(document.querySelectorAll('.hi-cascader-menu')[2].children).toHaveLength(2) + expect(wrapper.find('input').prop('placeholder')).toEqual(cascaderLabel) + wrapper.find(Cascader).setState({ popperShow: false }) + expect(wrapper.find('input').prop('value')).toEqual(cascaderLabel) + wrapper.find(Cascader).setState({ popperShow: true }) + + cascaderLabel = [data[0].content, data[0].children[0].content, data[0].children[0].children[0].content].join(' / ') + document.querySelectorAll('.hi-cascader-menu')[2].children[0].click() + wrapper.update() + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(3) + expect(wrapper.find(Cascader).state('popperShow')).toEqual(false) + expect(wrapper.find('input').prop('value')).toEqual(cascaderLabel) + + wrapper.unmount() + }) + + it('className', () => { + const className = 'custom-className' + const wrapper = mount( + + ) + + expect(wrapper.find(`.hi-cascader.${className}`)).toHaveLength(1) + }) + + it('className', () => { + const placeholder = 'custom-placeholder' + const wrapper = mount( + + ) + + expect(wrapper.find('input').prop('placeholder')).toEqual(placeholder) + }) + + // NOTE emptyContent 没有展示预期内容 + it.skip('emptyContent', () => { + const emptyContent = 'custom-emptyContent' + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(document.querySelectorAll('.hi-cascader-menu')[0].innerHTML).toEqual(expect.stringContaining(emptyContent)) + + wrapper.unmount() + }) + + it('style', () => { + const style = { + color: '#ffff00' + } + const wrapper = mount( + + ) + + expect(wrapper.find(`.hi-cascader`).prop('style')).toMatchObject(style) + }) + + it('onActiveItemChange', () => { + const onActiveItemChange = stub() + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + document.querySelectorAll('.hi-cascader-menu')[0].children[0].click() + expect(onActiveItemChange.callCount).toEqual(1) + + document.querySelectorAll('.hi-cascader-menu')[1].children[0].click() + expect(onActiveItemChange.callCount).toEqual(2) + + document.querySelectorAll('.hi-cascader-menu')[2].children[0].click() + expect(onActiveItemChange.callCount).toEqual(2) + + onActiveItemChange.reset() + wrapper.unmount() + }) + + it('onChange', () => { + const onChange = stub() + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + document.querySelectorAll('.hi-cascader-menu')[0].children[0].click() + expect(onChange.callCount).toEqual(0) + + document.querySelectorAll('.hi-cascader-menu')[1].children[0].click() + expect(onChange.callCount).toEqual(0) + + document.querySelectorAll('.hi-cascader-menu')[2].children[0].click() + expect(onChange.callCount).toEqual(1) + + onChange.reset() + wrapper.unmount() + }) + + it('displayRender', () => { + const displayRender = stub() + const returnValue = 'displayRender-return' + displayRender.returns(returnValue) + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + document.querySelectorAll('.hi-cascader-menu')[0].children[0].click() + document.querySelectorAll('.hi-cascader-menu')[1].children[0].click() + document.querySelectorAll('.hi-cascader-menu')[2].children[0].click() + wrapper.update() + + expect(wrapper.find('input').prop('value')).toEqual(returnValue) + + displayRender.reset() + wrapper.unmount() + }) + }) + + describe('Branch', () => { + it('state: { popperShow: true } && props: { disabled: false } && handleClick', () => { + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-container').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(true) + + wrapper.find('.hi-cascader__input-container').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(false) + + wrapper.unmount() + }) + + it('state: { keyword:undefined }', () => { + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + + wrapper.find('input').simulate('change', { target: { value: undefined } }) + wrapper.find('input').simulate('keyUp') + expect(document.querySelectorAll('.hi-cascader-menu')).toHaveLength(1) + clock.tick(500) + expect(document.querySelector('.hi-cascader-menu__item').textContent).toEqual(data[0].content) + + wrapper.unmount() + }) + + it('clickOutside', () => { + const outsideDom = document.createElement('div') + const wrapper = mount( + + ) + + document.body.appendChild(outsideDom) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(true) + + outsideDom.click() + wrapper.update() + expect(wrapper.find(Cascader).state('popperShow')).toEqual(false) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(wrapper.find(Cascader).state('popperShow')).toEqual(true) + + document.querySelector('.hi-cascader-menu').click() + expect(wrapper.find(Cascader).state('popperShow')).toEqual(true) + + outsideDom.remove() + wrapper.unmount() + }) + + it('props: { data: [] }', () => { + const data = [] + const wrapper = mount( + + ) + + wrapper.find('.hi-cascader__input-keyword').simulate('click') + expect(document.querySelectorAll('.hi-cascader-menu__item')).toHaveLength(0) + }) + }) +}) diff --git a/components/collapse/index.js b/components/collapse/index.js index 844422ab8..f514cceeb 100755 --- a/components/collapse/index.js +++ b/components/collapse/index.js @@ -56,17 +56,13 @@ class Collapse extends Component { renderPanels () { const activeKey = this.state.activeId const { children, accordion, arrow, arrowPlacement, showArrow } = this.props + const newChildren = [] Children.forEach(children, (child, index) => { if (!child) return - const key = child.id || child.key || String(index) + const key = child.props.id || child.key || String(index) const { header, disabled, title } = child.props - let isActive = false - if (accordion) { - isActive = activeKey[0] === key - } else { - isActive = activeKey.indexOf(key) > -1 - } + let isActive = accordion ? activeKey[0] === key : activeKey.includes(key) const props = { key, header: title || header, diff --git a/components/index.js b/components/index.js index 8a5528bfe..823896e3c 100755 --- a/components/index.js +++ b/components/index.js @@ -41,4 +41,5 @@ export { default as Switch } from './switch' export { default as Rate } from './rate' export { default as Message } from './message' export { default as Tag } from './tag' +export { default as Breadcrumb } from './breadcrumb' export { ThemeContext, LocaleContext } from './context' diff --git a/components/notification/HandleNotification.js b/components/notification/HandleNotification/index.js similarity index 94% rename from components/notification/HandleNotification.js rename to components/notification/HandleNotification/index.js index ef90334a2..54bfd1d64 100755 --- a/components/notification/HandleNotification.js +++ b/components/notification/HandleNotification/index.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { render, unmountComponentAtNode } from 'react-dom' import PropTypes from 'prop-types' import classNames from 'classnames' -import './style-legacy/index' +import './style/index' /** * * @@ -109,16 +109,6 @@ class Notification extends Component { } render () { - // const { - // autoClose, - // duration, - // positionAlign, - // positionFrom, - // type, - // onClose, - // title, - // message - // } = this.props const classnames = classNames(this.props.prefixCls, this.props.type, { show: this.state.show }) diff --git a/components/notification/HandleNotification/style/index.js b/components/notification/HandleNotification/style/index.js new file mode 100755 index 000000000..1f02fd8f1 --- /dev/null +++ b/components/notification/HandleNotification/style/index.js @@ -0,0 +1,2 @@ +import './index.scss' +import '../../../style/icon/index.scss' diff --git a/components/notification/style-legacy/index.scss b/components/notification/HandleNotification/style/index.scss similarity index 97% rename from components/notification/style-legacy/index.scss rename to components/notification/HandleNotification/style/index.scss index 9e12651c6..26bb2033d 100755 --- a/components/notification/style-legacy/index.scss +++ b/components/notification/HandleNotification/style/index.scss @@ -1,4 +1,4 @@ -@import '../../style/icon/index.scss'; +@import '../../../style/icon/index.scss'; .hi-notification-legacy { position: fixed; diff --git a/components/notification/style-legacy/index.js b/components/notification/style-legacy/index.js deleted file mode 100755 index 14dd01250..000000000 --- a/components/notification/style-legacy/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './index.scss' -import '../../style/icon/index.scss' diff --git a/components/style/icon/index.scss b/components/style/icon/index.scss index 3577107ac..3547aea9e 100644 --- a/components/style/icon/index.scss +++ b/components/style/icon/index.scss @@ -2,7 +2,7 @@ @font-face { font-family: 'hi-icon'; src: - url('data:application/octet-stream;base64,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') + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'); } @@ -606,3 +606,11 @@ .icon-packup::before { content: '\e67b'; } + +.icon-TreeMinus::before { + content: '\e697'; +} + +.icon-TreePlus::before { + content: '\e698'; +} diff --git a/components/switch/index.js b/components/switch/index.js index 88f3246e0..3222742dc 100755 --- a/components/switch/index.js +++ b/components/switch/index.js @@ -13,10 +13,8 @@ class Switch extends Component { } componentWillReceiveProps (nextProps) { - if (nextProps.checked !== this.state.checked) { - this.setState({ - checked: nextProps.checked - }, () => { + if (nextProps.checked !== this.props.checked) { + this.setState({ checked: nextProps.checked }, () => { this.props.onChange(nextProps.checked) }) } @@ -29,9 +27,7 @@ class Switch extends Component { if (typeof res === 'boolean' && !res) { return } - this.setState({ - checked: !this.state.checked - }, () => { + this.setState({ checked: !this.state.checked }, () => { onChange(this.state.checked) }) } @@ -46,18 +42,13 @@ class Switch extends Component { !checked && 'hi-switch--closed', disabled && 'hi-switch--disabled' ) - return - - { - content.length > 0 && ( - checked ? content[0] : content[1] - ) - } + return ( + + + {content.length > 0 && (checked ? content[0] : content[1])} + - + ) } } @@ -66,7 +57,9 @@ Switch.defaultProps = { checked: false, disabled: false, onChange: () => {}, - onClick: () => { return true } + onClick: () => { + return true + } } Switch.propTypes = { content: PropTypes.array, diff --git a/components/table/__test__/index.test.js b/components/table/__test__/index.test.js deleted file mode 100644 index 21cc0c376..000000000 --- a/components/table/__test__/index.test.js +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import Table from '../index' - -let wrapper -const changeCallback = jest.fn(items => items) -const successCallback = jest.fn(res => res.data) -const errorCallback = jest.fn(err => err) -jest.mock('lodash/debounce', () => jest.fn(fn => fn)) - -const columns = [ - { - key: 'name', - dataIndex: 'name', - title: '姓名' - }, - { - key: 'age', - dataIndex: 'age', - title: '年龄' - }, - { - key: 'sex', - dataIndex: 'sex', - title: '性别' - } -] - -const data = [ - -] - -for (let i=0; i<10; i++) { - data.push({ - name: `siri${i}`, - age: i, - sex: i%2 === 0 ? 'boy' : 'girl' - }) -} - -describe('Table', () => { - - let random = Math.floor(Math.random()) - it('base', () => { - wrapper = mount( - - ) - expect(wrapper.find('table tbody tr').at(random).find('td').at(0).text()).toEqual(data[random].name) - }) - - it('sort', () => { - let sorterColumns = [...columns] - sorterColumns[1].sorter = function() { - return pre.age - next.age - } - wrapper = mount( -
- ) - expect(wrapper.find('table tbody tr').at(random).find('td').at(0).text()).toEqual(data[random].name) - wrapper.find('table thead tr th').at(1).find('div span').at(1).simulate('click') - expect(wrapper.find('table tbody tr').at(random).find('td').at(0).text()).toEqual(data[9-random].name) - }) -}) diff --git a/components/table/__tests__/index.test.js b/components/table/__tests__/index.test.js new file mode 100644 index 000000000..dd36b910b --- /dev/null +++ b/components/table/__tests__/index.test.js @@ -0,0 +1,157 @@ +import React from 'react' +import { mount, shallow } from 'enzyme' +import sinon, { spy, stub } from 'sinon' +import Table from '../' + +describe('Table', () => { + const dataLength = 10 + const columns = [ + { title: 'Column 1', dataIndex: 'name', key: '1'}, + { title: 'Column 1', dataIndex: 'age', key: '2'}, + { title: 'Column 1', dataIndex: 'address', key: '3'}, + { + title: ()=>
自定义标题
, + dataIndex: 'address', key: '4', + width: '500px', + render(text,record,index){ + return ( +
+ {text} --- {index} --- 自定义渲染 +
+ ) + }}, + { + title: 'Action', + key: 'operation', + width: 100, + render: () => action, + }, + ] + const generateData = (length) => { + const data = [] + for (let i = 0; i < dataLength; i++) { + data.push({ + // key: i, + name: `Don Diablo ${i}`, + age: `${i}${i}`, + address: `EDC Las Vegas no. ${i}`, + }) + } + return data + } + + const data = generateData(dataLength) + + let clock + + beforeEach(() => { + clock = sinon.useFakeTimers() + }) + + afterEach(() => { + clock.restore() + }) + + describe('Lifecycle', () => { + it('componentDidMount', () => { + const componentDidMountSpy = spy(Table.prototype, 'componentDidMount') + const wrapper = mount(
) + + expect(wrapper.instance()).toBeInstanceOf(Table) + + expect(componentDidMountSpy.callCount).toEqual(1) + componentDidMountSpy.restore() + + expect(wrapper.find(`.hi-table`)).toHaveLength(1) + }) + + it('shouldComponentUpdate', () => { + const shouldComponentUpdateSpy = spy(Table.prototype, 'shouldComponentUpdate') + const wrapper = mount(
) + + // runMemory() in componentDidmount() and setState() + expect(shouldComponentUpdateSpy.callCount).toEqual(1) + shouldComponentUpdateSpy.restore() + }) + + it('componentDidUpdate', () => { + const componentDidUpdateSpy = spy(Table.prototype, 'componentDidUpdate') + const wrapper = mount(
) + + // runMemory() in componentDidmount() and setState() + expect(componentDidUpdateSpy.callCount).toEqual(1) + componentDidUpdateSpy.restore() + }) + + it('componentWillReceiveProps', () => { + const componentWillReceivePropsSpy = spy(Table.prototype, 'componentWillReceiveProps') + const wrapper = mount(
) + + wrapper.setProps({ data: [] }) + expect(componentWillReceivePropsSpy.callCount).toEqual(1) + componentWillReceivePropsSpy.restore() + }) + }) + + describe('PropTypes', () => { + it('data', () => { + const wrapper = mount(
) + + expect(wrapper.find(`Row`)).toHaveLength(dataLength) + }) + + // NOTE useFixedHeader 源码中未使用 + it.skip('useFixedHeader', () => {}) + + it('columns', () => { + const wrapper = mount(
) + + expect(wrapper.find(`.hi-table-thead`)).toHaveLength(1) + }) + + // NOTE bodyStyle 源码中未使用 + it.skip('bodyStyle', () => {}) + + it('style', () => { + const style = { + color: '#ffff00' + } + const wrapper = mount(
) + + expect(wrapper.find(`TableContent`).prop('style')).toMatchObject(style) + }) + + // NOTE rowKey 源码中未使用 + it.skip('rowKey', () => {}) + + // NOTE rowClassName 源码中未使用 + it.skip('rowClassName', () => {}) + + // NOTE onRow 源码中未使用 + it.skip('onRow', () => {}) + + // NOTE onHeaderRow 源码中未使用 + it.skip('onHeaderRow', () => {}) + + // NOTE onRowDoubleClick 源码中未使用 + it.skip('onRowDoubleClick', () => {}) + + // NOTE onRowContextMenu 源码中未使用 + it.skip('onRowContextMenu', () => {}) + + // NOTE onRowMouseEnter 源码中未使用 + it.skip('onRowMouseEnter', () => {}) + + // NOTE onRowMouseLeave 源码中未使用 + it.skip('onRowMouseLeave', () => {}) + + // NOTE showHeader 源码中未使用 + it.skip('showHeader', () => {}) + + // NOTE title 源码中未使用 + it.skip('title', () => {}) + + // NOTE id 源码中未使用 + it.skip('id', () => {}) + }) +}) diff --git a/components/tree/Tree.js b/components/tree/Tree.js index 7b47c44a4..0ebbd9c56 100644 --- a/components/tree/Tree.js +++ b/components/tree/Tree.js @@ -26,7 +26,8 @@ class Tree extends Component { static defaultProps = { prefixCls: 'hi-tree', defaultCheckedKeys: [], - data: [] + data: [], + apperance: 'default' } static getDerivedStateFromProps (props, state) { @@ -188,13 +189,18 @@ class Tree extends Component { onDropEnd, onDelete, onSave, - onClick + onClick, + apperance } = this.props const { data } = this.state return ( -
+
item.semi).map(item => item.id)} diff --git a/components/tree/TreeItem.js b/components/tree/TreeItem.js index 1f8e8fcbd..438eab6f3 100644 --- a/components/tree/TreeItem.js +++ b/components/tree/TreeItem.js @@ -1,6 +1,7 @@ import React, { Component } from 'react' import Checkbox from '../table/checkbox/index' import { DragSource, DropTarget } from 'react-dnd' +import classNames from 'classnames' import Input from '../input' import { findDOMNode } from 'react-dom' import TreeDivider from './TreeDivider' @@ -43,14 +44,30 @@ class TreeItem extends Component { targetNode, saveEditNode, origin, - loadChildren + loadChildren, + isRoot, + showLine } = this.props const treeItem = ( -
  • +
  • {targetNode === item.id && dropDividerPosition === 'up' && isOver && ( )} -
    +
    0, + 'item__wrapper--expanded': expanded + })} + > {(!item.children || (item.children && !expanded)) && targetNode === item.id && dropDividerPosition === 'down' && @@ -63,10 +80,12 @@ class TreeItem extends Component { loadChildren(item.id) } }} + style={{ position: 'relative' }} className={`${prefixCls}_item-icon`} > - {((item.children && item.children.length > 0) || (origin && !expanded)) && - renderSwitcher(expanded)} + {(item.children && item.children.length > 0) || (origin && !expanded) + ? renderSwitcher(expanded) + : showLine && } } {checkable ? ( diff --git a/components/tree/TreeNode.js b/components/tree/TreeNode.js index 9d2207801..bdd5bb756 100644 --- a/components/tree/TreeNode.js +++ b/components/tree/TreeNode.js @@ -97,11 +97,15 @@ export default class TreeNode extends Component { return count } renderSwitcher = expanded => { - const { prefixCls, openIcon, closeIcon } = this.props + const { prefixCls, openIcon, closeIcon, showLine } = this.props const switcherClsName = classNames( `${prefixCls}-switcher`, 'hi-icon', - `icon-${expanded ? openIcon || 'open' : closeIcon || 'packup'}` + `icon-${ + expanded + ? openIcon || (showLine && 'TreeMinus') || 'open' + : closeIcon || (showLine && 'TreePlus') || 'packup' + }` ) return } @@ -445,7 +449,7 @@ export default class TreeNode extends Component { currentDeleteNode: nodeId }) } - renderTree = data => { + renderTree = (data, allData = []) => { const { draggable, prefixCls, @@ -461,7 +465,8 @@ export default class TreeNode extends Component { checked, expanded, origin, - onDragStart + onDragStart, + showLine } = this.props const { highlight, @@ -473,14 +478,16 @@ export default class TreeNode extends Component { positionX, positionY } = this.state - return (
      - {data.map(item => { + {data.map((item, index) => { return ( d.id === item.id)} + isLevelLast={index === data.length - 1} editable={editable} dropDividerPosition={dropDividerPosition} prefixCls={prefixCls} @@ -560,8 +567,8 @@ export default class TreeNode extends Component { )} {searchable - ? this.renderTree(this.highlightData(cloneDeep(dataCache), searchValue)) - : this.renderTree(cloneDeep(dataCache))} + ? this.renderTree(this.highlightData(cloneDeep(dataCache), searchValue), dataCache) + : this.renderTree(cloneDeep(dataCache), dataCache)} ul { + position: relative; + + &::after { + position: absolute; + top: 0; + left: -10px; + width: 1px; + height: 100%; + background: #c8c8c8; + content: ''; + } + } + + &.is-root { + > .item__wrapper { + &::before { + display: none; + } + + &::after { + display: none; + } + } + + & > ul { + position: relative; + + &::after { + display: none; + } + } + + &:not(:last-of-type) { + > ul { + > li { + &:last-of-type { + > ul { + &::after { + display: block; + height: calc(100% + 4px); + } + } + + > .item__wrapper { + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(100% + 8px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + } + } + } + + &.no-expanded { + &::before { + position: absolute; + top: calc(50% + 5px); + left: 9px; + width: 1px; + height: calc(50% - 5px); + background: #c8c8c8; + content: ''; + } + } + } + + &:not(:first-of-type) { + &:not(.no-expanded) { + > .item__wrapper { + &::before { + position: absolute; + top: 1px; + left: 7px; + width: 1px; + height: calc(50% - 9px); + background: #c8c8c8; + content: ''; + display: block; + } + } + } + + &.no-expanded { + &::after { + position: absolute; + top: 0; + left: 9px; + width: 1px; + height: calc(50% - 11px); + background: #c8c8c8; + content: ''; + } + } + } + } + + &:last-of-type { + > .item__wrapper { + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(50% + 2px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + + & > ul { + &::after { + display: none; + } + } + } + } + + .item__wrapper { + .hi-checkbox-legacy { + height: 24px; + } + + &.can-expand { + &::before { + width: 10px; + } + } + + &--expanded { + &.can-expand { + > .hi-tree_item-text { + &::before { + position: absolute; + top: calc(50% + 8px); + left: -11px; + height: calc(50% - 4px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + + > .editing { + position: relative; + + &::before { + position: absolute; + top: calc(50% + 7px); + left: -11px; + height: calc(50% - 2px); + width: 1px; + background: #c8c8c8; + content: ''; + } + } + } + } - li:last-child { - &.with-line { &::before { - display: none; + position: absolute; + left: -10px; + top: 50%; + height: 1px; + width: 14px; + background: #c8c8c8; + transform: translateY(-3px); + content: ''; + } + + &::after { + position: absolute; + top: -4px; + left: -10px; + height: calc(100% + 4px); + width: 1px; + background: #c8c8c8; + content: ''; } } } + ul { + padding-left: 15px; + } + li { position: relative; padding: 2px; - & > .item--wrapper { + & > .item__wrapper { display: flex; + align-items: center; padding-bottom: 5px; - } - - &.with-line { - &::before { - content: ' '; - width: 1px; - border-left: 1px dashed #bfc1c3; - height: calc(100% - 16px); - position: absolute; - left: 6px; - margin: 22px 0; - } + position: relative; } .editing { @@ -205,6 +376,17 @@ $tree: 'hi-tree' !default; color: #999; font-size: 16px; } + + .hi-tree__dot { + position: absolute; + width: 7px; + height: 7px; + border-radius: 3.5px; + background: #c8c8c8; + transform: translateY(-50%); + top: 50%; + left: 3.5px; + } } .#{$tree} { diff --git a/docs/demo/breadcrumb/section-base.jsx b/docs/demo/breadcrumb/section-base.jsx new file mode 100644 index 000000000..4a7f39e5f --- /dev/null +++ b/docs/demo/breadcrumb/section-base.jsx @@ -0,0 +1,35 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Breadcrumb from '../../../components/breadcrumb' +const prefix = 'alert-base' +const code = `import React from 'react' +import Alert from '@hi-ui/hiui/es/alert'\n +class Demo extends React.Component { + render () { + const data = [{ + content: '首页', + path: '/home' + }, { + content: '产品类', + icon: 'document', + path: '/product' + }, { + icon: 'component', + path: '/phone' + }, { + content: '红米系列', + path: '/redmi' + }, { + content: 'Note7', + path: '/note7' + }] + return ( +
      + +
      + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/breadcrumb/section-icon.jsx b/docs/demo/breadcrumb/section-icon.jsx new file mode 100644 index 000000000..bea6eba06 --- /dev/null +++ b/docs/demo/breadcrumb/section-icon.jsx @@ -0,0 +1,35 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Breadcrumb from '../../../components/breadcrumb' +const prefix = 'breadcrumb-base' +const code = `import React from 'react' +import Breadcrumb from '@hi-ui/hiui/es/Breadcrumb'\n +class Demo extends React.Component { + render () { + const data = [{ + content: '首页', + path: '/home' + }, { + icon: 'document', + path: '/product' + }, { + icon: 'component', + content: '手机', + path: '/phone' + }, { + content: '红米系列', + path: '/redmi' + }, { + content: 'Note7', + path: '/note7' + }] + return ( +
      + +
      + ) + } +}` + +const DemoBase = () => +export default DemoBase diff --git a/docs/demo/notification/section-base.jsx b/docs/demo/notification/section-base.jsx index d284bc0df..d8946d15d 100755 --- a/docs/demo/notification/section-base.jsx +++ b/docs/demo/notification/section-base.jsx @@ -11,7 +11,7 @@ class Demo extends React.Component { return(
      - +
      ) } @@ -22,7 +22,7 @@ class Demo extends React.Component { content:'通知内容', }) } - open1(){ + openManual(){ Notification.open({ title:'通知', content:'通知内容', diff --git a/docs/demo/tree/section-edit.jsx b/docs/demo/tree/section-edit.jsx index b9b2c2d17..3549e10e3 100644 --- a/docs/demo/tree/section-edit.jsx +++ b/docs/demo/tree/section-edit.jsx @@ -43,6 +43,7 @@ class Demo extends React.Component {
      { diff --git a/docs/demo/tree/section-line.jsx b/docs/demo/tree/section-line.jsx new file mode 100644 index 000000000..203782c7d --- /dev/null +++ b/docs/demo/tree/section-line.jsx @@ -0,0 +1,57 @@ +import React from 'react' +import DocViewer from '../../../libs/doc-viewer' +import Tree from '../../../components/tree' +const prefix = 'tree-line' +const code = `import React from 'react' +import Tree from '@hi-ui/hiui/es/tree'\n +class Demo extends React.Component { + constructor(props) { + super(props) + this.state = { + treeData: [ + { id: 1, title: '小米', + children: [ + { id: 2, title: '技术', + children: [ + { id: 3, title: '后端', onClick: data => {console.log('后端:', data)} }, + { id: 4, title: '运维' }, + { id: 5, title: '前端' } + ] + }, + { id: 6, title: '产品' } + ] + }, + { id: 11, title: '小米', + children: [ + { id: 22, title: '技术', + children: [ + { id: 33, title: '后端' }, + { id: 44, title: '运维' }, + { id: 55, title: '前端' } + ] + }, + { id: 66, title: '产品' } + ] + }, + ] + } + + } + + render() { + return ( +
      + {console.log('Tree data:', data)}} + highlightable + onClick={(item) => console.log('------click node', item)} + /> +
      + ) + } +}` +const DemoLine = () => +export default DemoLine diff --git a/docs/zh-CN/components/breadcrumb.mdx b/docs/zh-CN/components/breadcrumb.mdx new file mode 100644 index 000000000..4f18e3d3f --- /dev/null +++ b/docs/zh-CN/components/breadcrumb.mdx @@ -0,0 +1,32 @@ +# Breadcrumb 面包屑 + +## 基础用法 + +import DemoBase from '../../demo/breadcrumb/section-base.jsx' + + + +## 自定义图标 + +import DemoIcon from '../../demo/breadcrumb/section-icon.jsx' + + + +## Props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| --------- | ------------------------ | ----------------------- | ------------------------------------------- | ------ | +| data | 面包屑数据 | DataItem [] | - | - | +| separator | 自定义分隔符 | string | - | '|' | +| onClick | 点击回调函数 | (path: string)=> void | - | - | + + +## Type + +### DataItem + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| -------- | ----------------------------------- | ------------------- | ------------- | ------ | +| content | 面包屑的内容 | string \| ReactNode | - | - | +| path | 要跳转的路径 | string | - | - | +| icon | 自定义图标 | string | 详见 [``](/hiui/zh-CN/docs/icon) 组件 ︎ | - | diff --git a/docs/zh-CN/components/dropdown.mdx b/docs/zh-CN/components/dropdown.mdx index f15a133c6..314674e06 100755 --- a/docs/zh-CN/components/dropdown.mdx +++ b/docs/zh-CN/components/dropdown.mdx @@ -48,7 +48,7 @@ import { Badge } from '@libs' ## Type -### DateItem +### DataItem | 参数 | 说明 | 类型 | 可选值 | 默认值 | | -------- | ----------------------------------- | ------------------- | ------------- | ------ | diff --git a/docs/zh-CN/components/radio.mdx b/docs/zh-CN/components/radio.mdx index 2b2f9a124..ab6ae2724 100755 --- a/docs/zh-CN/components/radio.mdx +++ b/docs/zh-CN/components/radio.mdx @@ -26,8 +26,8 @@ import DemoType from '../../demo/radio/section-type' | --------- | ---------------------------------------- | ----------------------- | -------------------------- | ------------ | | data | 选择项数据源 | DataItem[] | - | - | | placement | 设置水平或垂直展示 | string | 'vertical' \| 'horizontal' | 'horizontal' | -| value | 选中项的值(受控) | string | - | - | -| defaultValue | 默认选中项的值 | string | - | - | +| value | 选中项的值(受控) | string \| number | - | - | +| defaultValue | 默认选中项的值 | string \| number | - | - | | onChange | 选中项改变时的回调,回调值为新选中项的值 | (value: string) => void | - | - | | disabled | 是否禁用 | boolean | - | - | | type | 单选按钮展示形状 | string | 'default' \| 'button' | 'default' | diff --git a/docs/zh-CN/components/stepper.mdx b/docs/zh-CN/components/stepper.mdx index e0265cd47..17e8a91df 100755 --- a/docs/zh-CN/components/stepper.mdx +++ b/docs/zh-CN/components/stepper.mdx @@ -54,7 +54,7 @@ import DemoVerticalIcon from '../../demo/stepper/section-vertical-icon.jsx' ## Type -### DateItem +### DataItem | 参数 | 说明 | 类型 | 可选值 | 默认值 | | ------- | ---------- | ------------------- | ------ | ------ | diff --git a/docs/zh-CN/components/theme.mdx b/docs/zh-CN/components/theme.mdx index bfe7c4e44..1075a4781 100644 --- a/docs/zh-CN/components/theme.mdx +++ b/docs/zh-CN/components/theme.mdx @@ -7,7 +7,7 @@ ## 使用 ```bash -npm i @hi-ui/classic-theme --save +npm i @hi-ui/classic-theme@next --save ``` ```diff diff --git a/docs/zh-CN/components/transfer.mdx b/docs/zh-CN/components/transfer.mdx index ee6eddc63..cf5d19fab 100755 --- a/docs/zh-CN/components/transfer.mdx +++ b/docs/zh-CN/components/transfer.mdx @@ -54,7 +54,7 @@ import DemoArea from '../../demo/transfer/section-area.jsx' | searchable | 是否可筛选 | boolean | true \| false | false | | emptyContent | 数据为空时的显示内容 | string[] \| ReactNode[] | - | - | | disabled | 是否禁用 | boolean | true \| false | false | -| data | 穿梭框数据源 | string | DateItem[] | - | +| data | 穿梭框数据源 | string | DataItem[] | - | | targetLimit | 最大可穿梭上线 | number | - | - | | targetIds | 目标框内的元素 id 集合 | number[] \| string[] | | - | | onChange | 选中元素被移动到目标框内后的回调,回调值为目标框的值 | (targetKey: number[] \| string[]) => void | - | - | diff --git a/docs/zh-CN/components/tree.mdx b/docs/zh-CN/components/tree.mdx index 80b460a3d..2272dddd9 100755 --- a/docs/zh-CN/components/tree.mdx +++ b/docs/zh-CN/components/tree.mdx @@ -44,29 +44,36 @@ import DemoDrag from '../../demo/tree/section-drag.jsx' +## 不同的视觉风格 + +import DemoLine from '../../demo/tree/section-line.jsx' + + + ## Props -| 参数 | 说明 | 类型 | 可选值 | 默认值 | -| ---------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------- | ------ | -| data | 展示数据 | DataItem [] | - | - | -| checkable | 节点前添加 Checkbox 复选框(暂不支持与 draggable 和 editable 同时使用) | boolean | true \| false | false | -| editable | 节点右键可编辑(添加同级节点、添加子节点、编辑节点、删除节点) | boolean | true \| false | false | -| draggable | 节点可拖拽 | boolean | true \| false | false | -| searchable | 节点可搜索 | boolean | true \| false | false | -| loadTreeNode | 点击异步加载子项 | object | - | - | -| defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false | -| checkedIds | 选中的 checkbox | string[] | - | - | -| openIcon | 表示展开的图标 | string | Icon 图标名称 | - | -| closeIcon | 表示闭合的图标 | string | Icon 图标名称 | - | -| onChange | 树组件改变时触发 | (data:TreeNode[]) => void | - | - | -| onExpand | 节点被点击(展开/收起)时触发 | (expanded: boolean, expandIds: string[], expandedNode: TreeNode) => void | - | - | -| onCheck | 点击节点多选框触发 | (checked: boolean, checkedIds: string[], checkedNode: TreeNode) => void | - | - | -| onClick | 点击节点文字时触发 | (clickNode: TreeNode) => void | - | - | -| onDragStart | 节点开始拖拽时触发 | (dragNode: TreeNode) => void | - | - | -| onDrop | 节点拖拽时触发 | (dragNode: TreeNode, dropNode: TreeNode) => boolean | - | - | -| onDropEnd | 节点拖拽成功时触发 | (dragNode: TreeNode, dropNode: TreeNode) => void | - | - | -| onDelete | 节点删除时触发 | (deletedNode: TreeNode, data: TreeNode[]) => void | - | - | -| onSave | 节点保存新增、编辑状态时触发 | (savedNode: TreeNode, data: TreeNode[]) => void | - | - | +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| ---------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------- | --------- | +| data | 展示数据 | DataItem [] | - | - | +| checkable | 节点前添加 Checkbox 复选框(暂不支持与 draggable 和 editable 同时使用) | boolean | true \| false | false | +| editable | 节点右键可编辑(添加同级节点、添加子节点、编辑节点、删除节点) | boolean | true \| false | false | +| draggable | 节点可拖拽 | boolean | true \| false | false | +| searchable | 节点可搜索 | boolean | true \| false | false | +| loadTreeNode | 点击异步加载子项 | object | - | - | +| defaultExpandAll | 是否默认展开所有树节点 | boolean | true \| false | false | +| checkedIds | 选中的 checkbox | string[] | - | - | +| openIcon | 表示展开的图标 | string | Icon 图标名称 | - | +| closeIcon | 表示闭合的图标 | string | Icon 图标名称 | - | +| apperance | 树形控件的展现形态 | string | 'default' \| 'line' | 'default' | +| onChange | 树组件改变时触发 | (data:TreeNode[]) => void | - | - | +| onExpand | 节点被点击(展开/收起)时触发 | (expanded: boolean, expandIds: string[], expandedNode: TreeNode) => void | - | - | +| onCheck | 点击节点多选框触发 | (checked: boolean, checkedIds: string[], checkedNode: TreeNode) => void | - | - | +| onClick | 点击节点文字时触发 | (clickNode: TreeNode) => void | - | - | +| onDragStart | 节点开始拖拽时触发 | (dragNode: TreeNode) => void | - | - | +| onDrop | 节点拖拽时触发 | (dragNode: TreeNode, dropNode: TreeNode) => boolean | - | - | +| onDropEnd | 节点拖拽成功时触发 | (dragNode: TreeNode, dropNode: TreeNode) => void | - | - | +| onDelete | 节点删除时触发 | (deletedNode: TreeNode, data: TreeNode[]) => void | - | - | +| onSave | 节点保存新增、编辑状态时触发 | (savedNode: TreeNode, data: TreeNode[]) => void | - | - | ## Type diff --git a/jest.config.js b/jest.config.js index c75be2294..57e588a5e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,24 +1,61 @@ -const transformIgnorePatterns = [ - '/output/', - 'node_modules/[^/]+?/(?!(es|node_modules)/)' -] - module.exports = { - // automock: true, - // clearMocks: true, - // verbose: false, - // testEnvironment: 'jsdom', - setupFiles: [ '/jest.setup.js' ], - moduleFileExtensions: [ 'ts', 'tsx', 'js', 'jsx' ], - modulePathIgnorePatterns: [ '/_site/', '/output/' ], - // unmockedModulePathPatterns: [ - // 'node_modules/react/', - // 'node_modules/enzyme/' + // Stop running tests after the first failure + bail: true, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: false, + + // An array of regexp pattern strings used to skip coverage collection + coveragePathIgnorePatterns: [ + '/node_modules/' + ], + + // The directory where Jest should output its coverage files + coverageDirectory: '/test/coverage', + + // A list of reporter names that Jest uses when writing coverage reports + coverageReporters: [ + 'json-summary', + 'text', + 'lcov' + ], + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: [ + '/components/**/*', + '!/components/(alert|badge|button)/index.js', + '!/components/**/style/**/*', + '!/components/**/__test__/**/*', + '!/components/**/(*-legacy)/**/*' + ], + // 本地单测使用 + // 1. 修改范围 /components/[组件名称]/**/* + // 2. 运行单测命令 npx jest components/[组件名称]/__tests__/index.test.js --coverage 即可看到当前文件夹的覆盖率 + // collectCoverageFrom: [ + // '/components/table/**/*', + // '!/components/**/style/**/*', + // '!/components/**/__test__/**/*', + // '!/components/**/(*-legacy)/**/*' // ], + + // The test environment that will be used for testing + testEnvironment: 'jest-environment-jsdom-global', + + // The paths to modules that run some code to configure or set up the testing environment before each test + setupFiles: [ + '/jest.setup.js' + ], + + // An array of file extensions your modules use + moduleFileExtensions: [ 'ts', 'tsx', 'js', 'jsx' ], + + // A map from regular expressions to module names that allow to stub out resources with a single module moduleNameMapper: { '\\.(css|scss)$': '/test/stylesMock.js', '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/test/fileMock.js' }, + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped testPathIgnorePatterns: [ '/node_modules/', '/output/', @@ -26,19 +63,17 @@ module.exports = { 'dekko', 'node' ], + + // A map from regular expressions to paths to transformers transform: { '^.+\\.(js|jsx|mjs)$': '/node_modules/babel-jest' }, - testRegex: '(.*/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$', - collectCoverage: false, // 是否收集测试时的覆盖率信息 - collectCoverageFrom: ['/components/**/*.{js,jsx,mjs}'], // 哪些文件需要收集覆盖率信息 - coverageDirectory: '/test/coverage', - // setupTestFrameworkScriptFile: './node_modules/jest-enzyme/lib/index.js', - transformIgnorePatterns - // runner: 'jest-electron-runner', - // testEnvironment: 'jest-environment-electron', - // snapshotSerializers: [ - // 'enzyme-to-json/serializer', - // ], + // The regexp pattern Jest uses to detect test files + testRegex: '(.*/__tests__/.*(\\.|/)(test|spec))\\.[jt]sx?$', + + transformIgnorePatterns: [ + '/output/', + 'node_modules/[^/]+?/(?!(es|node_modules)/)' + ] } diff --git a/jest.setup.js b/jest.setup.js index 83643328f..cbab40ee3 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,5 +1,5 @@ -var enzyme = require('enzyme') -var Adapter = require('enzyme-adapter-react-16') +const enzyme = require('enzyme') +const Adapter = require('enzyme-adapter-react-16') global.fetch = require('jest-fetch-mock') enzyme.configure({ adapter: new Adapter() }) diff --git a/package-lock.json b/package-lock.json index 8825681c2..181fff307 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@hi-ui/hiui", - "version": "2.0.3", + "version": "2.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1003,84 +1003,85 @@ "integrity": "sha512-r9Upmf27iN0A9hEcgcNxEWNDqMHjmtbGBhq/imqe44B01PmiHQkVlyjhGWJxHNJ78J2pQOAzd9yPO6s4K5AKIw==" }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.0" } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -1088,13 +1089,13 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" @@ -1109,9 +1110,9 @@ } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -1128,45 +1129,46 @@ } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", @@ -1182,14 +1184,14 @@ } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/yargs": "^13.0.0" } }, "@mapbox/rehype-prism": { @@ -1203,43 +1205,81 @@ } }, "@mdx-js/loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.1.6.tgz", - "integrity": "sha512-YReLLyALz/O22fpX2eXSLFY376JZH0aCgSARxoelf7pOViMs4KMqhKARWeV45A5vHNhCDA8mf+ayOGtH2IkbyQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.3.1.tgz", + "integrity": "sha512-wg1uxBZ+7lkfawtznD29Acrh9UJ/sySeaDzgi+Q3zk55A25tPmVxKVjwGXWDC0mrRRJ8cjcoWant3whok+WPDw==", "dev": true, "requires": { - "@mdx-js/mdx": "^1.1.6", - "@mdx-js/react": "^1.1.6", + "@mdx-js/mdx": "^1.3.1", + "@mdx-js/react": "^1.3.1", "loader-utils": "1.2.3" } }, "@mdx-js/mdx": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.1.6.tgz", - "integrity": "sha512-DyHEQ+17/XrzBOV+Jxt8PuzpJ5iZ1L7G7My7qtUrIjstQXu24emfo3E0/uIt/rizEXu4CuX/ryBVWrqUwcJPYQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.3.1.tgz", + "integrity": "sha512-mLP4iN6OhDnA9IqAiKAFb/wSnmwU1Mb9gy0szzV0QbDHtlinmzQmK2YyEv9Stf8NXvWbsNVTj9p3hy01nZY9yA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", + "@babel/core": "7.5.5", "@babel/plugin-syntax-jsx": "7.2.0", "@babel/plugin-syntax-object-rest-spread": "7.2.0", + "@mdx-js/util": "^1.3.1", + "babel-plugin-apply-mdx-type-prop": "^1.3.1", + "babel-plugin-extract-import-names": "^1.3.1", "camelcase-css": "2.0.1", "detab": "2.0.2", "hast-util-raw": "5.0.1", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "6.0.1", - "remark-mdx": "^1.1.6", - "remark-parse": "7.0.0", + "remark-mdx": "^1.3.1", + "remark-parse": "7.0.1", "remark-squeeze-paragraphs": "3.0.4", "style-to-object": "0.2.3", "unified": "8.3.2", "unist-builder": "1.0.4", - "unist-util-visit": "1.4.1" + "unist-util-visit": "2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.0.tgz", + "integrity": "sha512-E5JLUKRQlAYiJmN2PVBdSz01R3rUKRSM00X+0DB/yLqxdLu6wZZkRdTIsxDp9X+bkxh8Eq+O2YYRbZvLZtQT1A==", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.0.tgz", + "integrity": "sha512-kiTpWKsF54u/78L/UU/i7lxrnqGiEWBgqCpaIZBYP0gwUC+Akq0Ajm4U8JiNIoQNfAioBdsyarnOcTEAb9mLeQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.0.tgz", + "integrity": "sha512-H3K8d81S4V3XVXVwLvrLGk+R5VILryfUotD06/R/rLsTsPLGjkn6gIP8qEEVITcuIySNYj0ocJLsePjm9F/Vcg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "unist-util-is": "^4.0.0" + } + } } }, "@mdx-js/react": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.1.6.tgz", - "integrity": "sha512-IQf5WIuInyk85liH1jXoK16pRr3ExQAuR4tzE1GnXK6IyuZoj3DBKMlwKZ93Fa5WF31o3Vc39CIkosuC/xIHhQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.3.1.tgz", + "integrity": "sha512-HwpA0r4XiydiUXceAtzguLs3FH8Jbfpgoff3L+pejemiqyxol/FYMxwMu0WcBxti5eJYBqZEwL+C5od6OsS7Gw==", + "dev": true + }, + "@mdx-js/util": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.3.1.tgz", + "integrity": "sha512-YOlSyl/EfTRoO7Twzad6RYJlHcyW1WZo8gDRO+4uFTy6+AHMaqSCMAPJIJkmKwgi+IPojQUGuMzKJ47qxQ9BbA==", "dev": true }, "@mrmlnc/readdir-enhanced": { @@ -1301,9 +1341,9 @@ } }, "@oclif/config": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.13.2.tgz", - "integrity": "sha512-RUOKeuAaopo3zrA5hcgE0PT2lbAUT72+eJdqTlWyI9sbPrGHZgUwV+vrL6Qal7ywWYDkL0vrKd1YS4yXtKIDKw==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.13.3.tgz", + "integrity": "sha512-qs5XvGRw+1M41abOKCjd0uoeHCgsMxa2MurD2g2K8CtQlzlMXl0rW5idVeimIg5208LLuxkfzQo8TKAhhRCWLg==", "dev": true, "requires": { "@oclif/parser": "^3.8.0", @@ -1401,9 +1441,9 @@ } }, "@oclif/plugin-help": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.0.tgz", - "integrity": "sha512-56iIgE7NQfwy/ZrWrvrEfJGb5rrMUt409yoQGw4feiU101UudA1btN1pbUbcKBr7vY9KFeqZZcftXEGxOp7zBg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.1.tgz", + "integrity": "sha512-psEA3t41MSGBErLk6xCaAq2jKrRtx3Br+kHpd43vZeGEeZ7Gos4wgK0JAaHBbvhvUQskCHg8dzoqv4XEeTWeVQ==", "dev": true, "requires": { "@oclif/command": "^1.5.13", @@ -1430,16 +1470,16 @@ } }, "@oclif/plugin-not-found": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-1.2.2.tgz", - "integrity": "sha512-SPlmiJFmTFltQT/owdzQwKgq6eq5AEKVwVK31JqbzK48bRWvEL1Ye60cgztXyZ4bpPn2Fl+KeL3FWFQX41qJuA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-1.2.3.tgz", + "integrity": "sha512-Igbw2T4gLrb/f28Llr730FeMXBSI2PXdky2YvQfsZeQGDsyBZmC4gprJJtmrMWQcjz0B51IInRBnZYERvwfIpw==", "dev": true, "requires": { "@oclif/color": "^0.0.0", "@oclif/command": "^1.5.3", "cli-ux": "^4.9.0", "fast-levenshtein": "^2.0.6", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@oclif/plugin-update": { @@ -1553,6 +1593,42 @@ "any-observable": "^0.3.0" } }, + "@sinonjs/commons": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz", + "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/formatio": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", + "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "@sinonjs/samsam": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, "@types/babel__core": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", @@ -1671,9 +1747,9 @@ "dev": true }, "@types/node": { - "version": "12.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", - "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==", + "version": "12.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz", + "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg==", "dev": true }, "@types/prop-types": { @@ -1688,9 +1764,9 @@ "dev": true }, "@types/react": { - "version": "16.8.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.25.tgz", - "integrity": "sha512-ydAAkLnNTC4oYSxJ3zwK/4QcVmEecACJ4ZdxXITbxz/dhahBSDKY6OQ1uawAW6rE/7kfHccxulYLSAIZVrSq0A==", + "version": "16.9.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.2.tgz", + "integrity": "sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -1736,9 +1812,18 @@ } }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==", "dev": true }, "@webassemblyjs/ast": { @@ -1968,9 +2053,9 @@ }, "dependencies": { "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true } } @@ -2014,9 +2099,9 @@ } }, "airbnb-prop-types": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.14.0.tgz", - "integrity": "sha512-Yb09vUkr3KP9r9NqfRuYtDYZG76wt8mhTUi2Vfzsghk+qkg01/gOc9NU8n63ZcMCLzpAdMEXyKjCHlxV62yN1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", + "integrity": "sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA==", "dev": true, "requires": { "array.prototype.find": "^2.1.0", @@ -2028,7 +2113,7 @@ "object.entries": "^1.1.0", "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", - "react-is": "^16.8.6" + "react-is": "^16.9.0" } }, "ajv": { @@ -2242,6 +2327,12 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -2666,16 +2757,16 @@ } }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", + "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" } @@ -2709,6 +2800,16 @@ "babel-runtime": "^6.22.0" } }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.3.1.tgz", + "integrity": "sha512-tyh0iGhU4upNy4ruxOOOnqTO9Ci43gcXrH0vtcVmOMvGjyfhDHzug8ULoZZJqSTl5V77qUskafQsYHF3f1UV9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0", + "@mdx-js/util": "^1.3.1" + } + }, "babel-plugin-dynamic-import-node": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", @@ -2718,6 +2819,15 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-extract-import-names": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.3.1.tgz", + "integrity": "sha512-7KqXFwbzj9y6anLoIpMKQsC2J3PsiZMRaSP3qTCP9PY38Bz2cwsJnTIMKvottVQB2evBCYPqjp3VPSZ74jM1Dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0" + } + }, "babel-plugin-istanbul": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", @@ -2731,9 +2841,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" @@ -2763,13 +2873,13 @@ "dev": true }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^24.9.0" } }, "babel-runtime": { @@ -3333,9 +3443,9 @@ "dev": true }, "cacache": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", - "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -3353,6 +3463,23 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } } }, "cache-base": { @@ -3623,9 +3750,9 @@ } }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3928,76 +4055,36 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } } } @@ -4009,15 +4096,14 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "clone-regexp": { @@ -4357,14 +4443,13 @@ "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" }, "core-js-compat": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", - "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "dev": true, "requires": { - "browserslist": "^4.6.2", - "core-js-pure": "3.1.4", - "semver": "^6.1.1" + "browserslist": "^4.6.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { @@ -4375,12 +4460,6 @@ } } }, - "core-js-pure": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", - "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -5712,10 +5791,16 @@ "defined": "^1.0.0" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, "diffie-hellman": { @@ -5956,9 +6041,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.220", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.220.tgz", - "integrity": "sha512-ZsaFWi+9J9Nsm4OmGM/BvZF3HEeZL4bte1+CcN9vHUcqdkOOVAXP4SeacPZ/W5uCQZEKPYBXg6yUjZx8/jpD0Q==", + "version": "1.3.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.237.tgz", + "integrity": "sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg==", "dev": true }, "elegant-spinner": { @@ -6169,9 +6254,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -6310,12 +6395,6 @@ "requires": { "ansi-regex": "^3.0.0" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, @@ -6617,9 +6696,9 @@ } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { @@ -6657,9 +6736,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -6795,17 +6874,17 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "express": { @@ -7318,6 +7397,17 @@ "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -7461,25 +7551,29 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, "requires": { @@ -7489,13 +7583,15 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, "requires": { @@ -7505,37 +7601,43 @@ }, "chownr": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, "requires": { @@ -7544,25 +7646,29 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { @@ -7571,13 +7677,15 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { @@ -7593,7 +7701,8 @@ }, "glob": { "version": "7.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, "requires": { @@ -7607,13 +7716,15 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "bundled": true, + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "optional": true, "requires": { @@ -7622,7 +7733,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { @@ -7631,7 +7743,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, "requires": { @@ -7641,19 +7754,22 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "requires": { @@ -7662,13 +7778,15 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, "requires": { @@ -7677,13 +7795,15 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true }, "minipass": { "version": "2.3.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "optional": true, "requires": { @@ -7693,7 +7813,8 @@ }, "minizlib": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "optional": true, "requires": { @@ -7702,7 +7823,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "optional": true, "requires": { @@ -7711,13 +7833,15 @@ }, "ms": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true }, "needle": { "version": "2.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, "requires": { @@ -7728,7 +7852,8 @@ }, "node-pre-gyp": { "version": "0.12.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, "requires": { @@ -7746,7 +7871,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { @@ -7756,13 +7882,15 @@ }, "npm-bundled": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, "requires": { @@ -7772,7 +7900,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { @@ -7784,19 +7913,22 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, "requires": { @@ -7805,19 +7937,22 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { @@ -7827,19 +7962,22 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, "requires": { @@ -7851,7 +7989,8 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } @@ -7859,7 +7998,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { @@ -7874,7 +8014,8 @@ }, "rimraf": { "version": "2.6.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, "requires": { @@ -7883,43 +8024,50 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.7.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, "requires": { @@ -7930,7 +8078,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { @@ -7939,7 +8088,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "requires": { @@ -7948,13 +8098,15 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "4.4.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, "requires": { @@ -7969,13 +8121,15 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, "requires": { @@ -7984,13 +8138,15 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, "optional": true } @@ -8107,9 +8263,9 @@ } }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-own-enumerable-property-symbols": { @@ -8161,9 +8317,9 @@ } }, "gh-pages": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.1.0.tgz", - "integrity": "sha512-QmV1fh/2W5GZkfoLsG4g6dRTWiNYuCetMQmm8CL6Us8JVnAufYtS0uJPD8NYogmNB4UZzdRG44uPAL+jcBzEwQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.1.1.tgz", + "integrity": "sha512-yNW2SFp9xGRP/8Sk2WXuLI/Gn92oOL4HBgudn6PsqAnuWT90Y1tozJoTfX1WdrDSW5Rb90kLVOf5mm9KJ/2fDw==", "dev": true, "requires": { "async": "^2.6.1", @@ -8423,12 +8579,6 @@ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", "dev": true }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, "minimatch": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", @@ -8476,9 +8626,9 @@ } }, "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, "growly": { @@ -8978,13 +9128,10 @@ } }, "hosted-git-info": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.2.tgz", - "integrity": "sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w==", - "dev": true, - "requires": { - "lru-cache": "^5.1.1" - } + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true }, "hpack.js": { "version": "2.1.6", @@ -9546,9 +9693,9 @@ } }, "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "ip": { @@ -10138,133 +10285,148 @@ } }, "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "jest-cli": "^24.9.0" }, "dependencies": { "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } } } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", + "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" } }, + "jest-coverage-badges": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/jest-coverage-badges/-/jest-coverage-badges-1.1.2.tgz", + "integrity": "sha512-44A7i2xR6os8+fWk8ZRM6W4fKiD2jwKOLU9eB3iTIIWACd9RbdvmiCNpQZTOsUBhKvz7aQ/ASFhu5JOEhWUOlg==", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", "dev": true, "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", "jsdom": "^11.5.1" } }, + "jest-environment-jsdom-global": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-global/-/jest-environment-jsdom-global-1.2.0.tgz", + "integrity": "sha512-41cDl0OxzmFY/cnW0COUN+lnt2N2ks1r3V4fAKOnlZ9xIrGy0PNPan+Bz8HP+uQy/8bGV6T7J4Oi7X+h43It6g==", + "dev": true + }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, "jest-fetch-mock": { @@ -10278,85 +10440,86 @@ } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", "dev": true }, "jest-haste-map": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", - "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^24.9.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", "throat": "^4.0.0" } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "dev": true, "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -10365,12 +10528,12 @@ } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { @@ -10380,18 +10543,18 @@ "dev": true }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -10399,111 +10562,120 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -10522,41 +10694,41 @@ } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.0" } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -10821,6 +10993,12 @@ } } }, + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -10865,12 +11043,12 @@ } }, "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "^1.0.0" } }, "left-pad": { @@ -10880,9 +11058,9 @@ "dev": true }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -11006,6 +11184,12 @@ "pretty-format": "^23.6.0" } }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -11025,12 +11209,6 @@ "ansi-regex": "^3.0.0", "ansi-styles": "^3.2.0" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, @@ -11329,12 +11507,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -11422,6 +11594,12 @@ "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", "dev": true }, + "lolex": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", + "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", + "dev": true + }, "longest-streak": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.3.tgz", @@ -11453,13 +11631,10 @@ "dev": true }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true }, "magic-string": { "version": "0.25.3", @@ -11655,6 +11830,14 @@ "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } } }, "memory-fs": { @@ -11782,13 +11965,10 @@ "dev": true }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { "version": "1.2.4", @@ -11855,9 +12035,9 @@ } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "min-document": { @@ -11989,24 +12169,6 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -12154,6 +12316,19 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "nise": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.1.tgz", + "integrity": "sha512-edFWm0fsFG2n318rfEnKlTZTkjlbVOFF9XIA+fj+Ed+Qz1laYW2lobwavWoMzGrYDHH1EpiNJgDfvGnkZztR/g==", + "dev": true, + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^4.1.0", + "path-to-regexp": "^1.7.0" + } + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -12258,9 +12433,9 @@ "dev": true }, "node-notifier": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.1.tgz", - "integrity": "sha512-p52B+onAEHKW1OF9MGO/S7k/ahGEHfhP5/tvwYzog/5XLYOd8ZuD6vdNZdUuWMONRnKPneXV43v3s6Snx1wsCQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "dev": true, "requires": { "growly": "^1.3.0", @@ -12271,9 +12446,9 @@ } }, "node-releases": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", - "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", + "version": "1.1.28", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.28.tgz", + "integrity": "sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==", "dev": true, "requires": { "semver": "^5.3.0" @@ -12383,12 +12558,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, @@ -12715,14 +12884,6 @@ "dev": true, "requires": { "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } } }, "opn": { @@ -12832,14 +12993,12 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -12886,9 +13045,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -13272,9 +13431,9 @@ } }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -13305,9 +13464,9 @@ "dev": true }, "portfinder": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", - "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==", + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz", + "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==", "dev": true, "requires": { "async": "^1.5.2", @@ -16134,12 +16293,12 @@ } }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -16488,14 +16647,13 @@ "dev": true }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "prop-types": "^15.6.2" } }, "react-addons-css-transition-group": { @@ -16580,14 +16738,14 @@ } }, "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.15.0" } }, "react-hot-loader": { @@ -16605,9 +16763,9 @@ } }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -16615,9 +16773,9 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-live": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-live/-/react-live-2.1.2.tgz", - "integrity": "sha512-RAyu0FaFPnSqC3mG3ira0qmAGfPmGKEmGcAkXHwUNTFgbhVa38gbUSz8K1kvLSZ4yi19EbtVEa7LWQwxO5mEsA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-live/-/react-live-2.2.0.tgz", + "integrity": "sha512-Ebbqz2hJGdC0OisXk1XbJ5gb3M3xn7ZdaheisVVFCbivM901Pixy12k1tqBTLoMYjlY2wGAGwgDBTE63Lqaweg==", "requires": { "buble": "0.19.6", "core-js": "^2.4.1", @@ -16714,15 +16872,15 @@ "integrity": "sha512-doNaIIt4w7QIiB6ysWHMtYL4M3xOGPvZJH8vGq3W/hGk43pn25RDA27IS8GkbfhA1eLX72CWDhuC7KmDKax13g==" }, "react-test-renderer": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", - "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz", + "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.13.6" + "react-is": "^16.9.0", + "scheduler": "^0.15.0" } }, "react-transition-group": { @@ -16987,12 +17145,12 @@ "dev": true }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -17104,24 +17262,25 @@ } }, "remark-mdx": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.1.6.tgz", - "integrity": "sha512-asKqUQbXgWvc8AUSGl/Pjlfv9wrVlItaWodeemVGp7xmC87QL9PdbiRpEerJrPQpEujG9iFEw4A4J1GVT12GiA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.3.1.tgz", + "integrity": "sha512-meOzRZRatApALyx8uPugc+O97e7CsMUOCMC8mJq4agdRG2J1Upg7+PAQiTiDJnT2TRok4EbLoz7OXWjDDDHIRw==", "dev": true, "requires": { "@babel/core": "7.5.5", "@babel/helper-plugin-utils": "7.0.0", "@babel/plugin-proposal-object-rest-spread": "7.5.5", "@babel/plugin-syntax-jsx": "7.2.0", + "@mdx-js/util": "^1.3.1", "is-alphabetical": "1.0.3", - "remark-parse": "7.0.0", + "remark-parse": "7.0.1", "unified": "8.3.2" } }, "remark-parse": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.0.tgz", - "integrity": "sha512-UlfoqASKUnwSrzOcLSa7fwYdkpbeWwAs49YYdQmoYXK1TUJ2CvDBb3v8Lkt2GQzdPW9dWbjhteOsJJ27p1rNFg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.1.tgz", + "integrity": "sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ==", "dev": true, "requires": { "collapse-white-space": "^1.0.2", @@ -17466,9 +17625,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -17787,10 +17946,10 @@ "pinkie-promise": "^2.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "is-fullwidth-code-point": { @@ -17802,15 +17961,6 @@ "number-is-nan": "^1.0.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -17824,15 +17974,6 @@ "strip-bom": "^2.0.0" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -17979,17 +18120,30 @@ } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", "dev": true, "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^6.3.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "sax": { @@ -17999,9 +18153,9 @@ "dev": true }, "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -18059,9 +18213,9 @@ } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "semver-compare": { @@ -18123,9 +18277,9 @@ "dev": true }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.8.0.tgz", + "integrity": "sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg==", "dev": true }, "serve-index": { @@ -18241,22 +18395,12 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shallowequal": { @@ -18314,6 +18458,21 @@ } } }, + "sinon": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.4.1.tgz", + "integrity": "sha512-7s9buHGHN/jqoy/v4bJgmt0m1XEkCEd/tqdHXumpBp0JSujaT4Ng84JU5wDdK4E85ZMq78NuDe0I3NAqXY8TFg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.4.0", + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/samsam": "^3.3.2", + "diff": "^3.5.0", + "lolex": "^4.2.0", + "nise": "^1.5.1", + "supports-color": "^5.5.0" + } + }, "sisteransi": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", @@ -19301,9 +19460,15 @@ } }, "ignore": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", - "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", "dev": true }, "locate-path": { @@ -19435,6 +19600,15 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -19473,9 +19647,9 @@ } }, "table": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.5.tgz", - "integrity": "sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -19535,16 +19709,16 @@ } }, "stylelint-scss": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.9.3.tgz", - "integrity": "sha512-pLLpwSpUwiqpAga/C22ZuN/d5ql2zVWGzG8MO+P3DQYcDNue3eZGvda/bJdkx4mDcVy06jlDt+BgSvMYUrwleQ==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.9.4.tgz", + "integrity": "sha512-RHUHnEDRi2TONwFm2l0OMLo5y78aEYljabZsaf2+27JHM5aLjlO5waMlIwcK7xNfHlD/Ma9LoRAiFtI5ikNI2g==", "dev": true, "requires": { - "lodash": "^4.17.11", + "lodash": "^4.17.15", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" + "postcss-value-parser": "^4.0.2" }, "dependencies": { "cssesc": { @@ -19767,9 +19941,9 @@ } }, "terser": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.3.tgz", - "integrity": "sha512-on13d+cnpn5bMouZu+J8tPYQecsdRJCJuxFJ+FVoPBoLJgk5bCBkp+Uen2hWyi0KIUm6eDarnlAlH+KgIx/PuQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz", + "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -19883,9 +20057,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -20144,6 +20318,12 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -20580,9 +20760,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "v8-compile-cache": { @@ -20709,12 +20889,12 @@ "dev": true }, "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", + "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", "dev": true, "requires": { - "natives": "^1.1.0" + "natives": "^1.1.3" } }, "readable-stream": { @@ -20846,9 +21026,9 @@ "dev": true }, "webpack": { - "version": "4.39.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz", - "integrity": "sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ==", + "version": "4.39.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.2.tgz", + "integrity": "sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -20877,9 +21057,9 @@ }, "dependencies": { "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, "eslint-scope": { @@ -20906,9 +21086,9 @@ } }, "webpack-cli": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.6.tgz", - "integrity": "sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.7.tgz", + "integrity": "sha512-OhTUCttAsr+IZSMVwGROGRHvT+QAs8H6/mHIl4SvhAwYywjiylYjpwybGx7WQ9Hkb45FhjtsymkwiRRbGJ1SZQ==", "dev": true, "requires": { "chalk": "2.4.2", @@ -20924,17 +21104,6 @@ "yargs": "13.2.4" }, "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, "findup-sync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", @@ -20947,12 +21116,6 @@ "resolve-dir": "^1.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, "global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -20973,6 +21136,12 @@ "which": "^1.3.1" } }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -20982,6 +21151,26 @@ "is-extglob": "^2.1.1" } }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -21002,17 +21191,6 @@ "has-flag": "^3.0.0" } }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, "yargs": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", @@ -21031,16 +21209,6 @@ "y18n": "^4.0.0", "yargs-parser": "^13.1.0" } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -21065,9 +21233,9 @@ } }, "webpack-dev-server": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz", - "integrity": "sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -21083,23 +21251,25 @@ "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.0", "killable": "^1.0.1", "loglevel": "^1.6.3", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.20", + "portfinder": "^1.0.21", "schema-utils": "^1.0.0", "selfsigned": "^1.10.4", - "semver": "^6.1.1", + "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "spdy": "^4.0.1", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", "webpack-dev-middleware": "^3.7.0", "webpack-log": "^2.0.0", + "ws": "^6.2.1", "yargs": "12.0.5" }, "dependencies": { @@ -21109,6 +21279,34 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -21118,12 +21316,65 @@ "ms": "^2.1.1" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz", + "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -21158,6 +21409,59 @@ "requires": { "has-flag": "^3.0.0" } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -21401,43 +21705,46 @@ "dev": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" }, "dependencies": { - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index e1d1ed276..f7f95972d 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,12 @@ { "name": "@hi-ui/hiui", - "version": "2.0.5", + "version": "2.1.1", "description": "HIUI for React", "scripts": { "test": "node_modules/.bin/standard && node_modules/.bin/stylelint --config .stylelintrc 'components/**/*.scss'", "jest": "jest", + "jest:coverage": "npm run jest -- --coverage", + "jest:badges": "npm run jest:coverage && jest-coverage-badges --input ./test/coverage/coverage-summary.json --output ./test/badges", "fix": "node_modules/.bin/standard --fix && node_modules/.bin/stylelint --config .stylelintrc 'components/**/*.scss' --fix", "precommit": "lint-staged", "compile": "cross-env NODE_ENV=production gulp", @@ -96,6 +98,8 @@ "html-webpack-plugin": "^3.2.0", "husky": "^0.14.3", "jest": "^24.8.0", + "jest-coverage-badges": "^1.1.2", + "jest-environment-jsdom-global": "^1.2.0", "jest-fetch-mock": "^2.1.2", "jsx-loader": "^0.13.2", "lint-staged": "^7.2.2", @@ -114,6 +118,7 @@ "rucksack-css": "^1.0.2", "run-sequence": "^2.2.1", "sass-loader": "^7.0.1", + "sinon": "^7.3.2", "standard": "^11.0.1", "style-loader": "^0.21.0", "stylelint": "^9.10.1", diff --git a/site/locales/zh-CN.js b/site/locales/zh-CN.js index bca5709c5..2ba8da091 100755 --- a/site/locales/zh-CN.js +++ b/site/locales/zh-CN.js @@ -50,7 +50,8 @@ module.exports = { timeline: 'Timeline 时间轴', transfer: 'Transfer 穿梭框', switch: 'Switch 开关', - rate: 'Rate 评分' + rate: 'Rate 评分', + breadcrumb: 'Breadcrumb 面包屑' }, designs: { summarize: '概述', diff --git a/site/pages/components/index.js b/site/pages/components/index.js index e114de768..1581ea15a 100755 --- a/site/pages/components/index.js +++ b/site/pages/components/index.js @@ -24,7 +24,8 @@ export default { dropdown: components['dropdown'], pagination: components['pagination'], stepper: components['stepper'], - menu: components['menu'] + menu: components['menu'], + breadcrumb: components['breadcrumb'] }, 'group-form': { form: components['form'], diff --git a/test/badges/badge-branches.svg b/test/badges/badge-branches.svg new file mode 100644 index 000000000..b37aee0d8 --- /dev/null +++ b/test/badges/badge-branches.svg @@ -0,0 +1 @@ + Coverage:branchesCoverage:branches9.8%9.8% \ No newline at end of file diff --git a/test/badges/badge-functions.svg b/test/badges/badge-functions.svg new file mode 100644 index 000000000..0ff92a74f --- /dev/null +++ b/test/badges/badge-functions.svg @@ -0,0 +1 @@ + Coverage:functionsCoverage:functions9.55%9.55% \ No newline at end of file diff --git a/test/badges/badge-lines.svg b/test/badges/badge-lines.svg new file mode 100644 index 000000000..6c0e26496 --- /dev/null +++ b/test/badges/badge-lines.svg @@ -0,0 +1 @@ + Coverage:linesCoverage:lines10.78%10.78% \ No newline at end of file diff --git a/test/badges/badge-statements.svg b/test/badges/badge-statements.svg new file mode 100644 index 000000000..847991441 --- /dev/null +++ b/test/badges/badge-statements.svg @@ -0,0 +1 @@ + Coverage:statementsCoverage:statements10.79%10.79% \ No newline at end of file