diff --git a/package.json b/package.json index 70ecb51d55..306cb2fab8 100644 --- a/package.json +++ b/package.json @@ -132,6 +132,7 @@ "mapbox": "^1.0.0-beta10", "mini-svg-data-uri": "^1.0.3", "moment": "^2.10.6", + "moment-timezone": "^0.5.32", "pbf": "^3.1.0", "prop-types": "^15.6.0", "react-color": "^2.17.3", diff --git a/scripts/ts-smoosh/tests/02-imports/c.js b/scripts/ts-smoosh/tests/02-imports/c.js index 5ddcf5ea38..17eb8f8872 100644 --- a/scripts/ts-smoosh/tests/02-imports/c.js +++ b/scripts/ts-smoosh/tests/02-imports/c.js @@ -18,7 +18,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - /** * A function with a JSDoc type import that is different from its name * @type {typeof import('./b').MyFn} diff --git a/src/actions/vis-state-actions.d.ts b/src/actions/vis-state-actions.d.ts index 3283042f7b..cc5593eebb 100644 --- a/src/actions/vis-state-actions.d.ts +++ b/src/actions/vis-state-actions.d.ts @@ -476,3 +476,26 @@ export type ProcessFileContentUpdaterAction = { export function processFileContent( payload: ProcessFileContentUpdaterAction['payload'] ): Merge; + +export type SetLayerAnimationTimeConfigAction = { + config: { + timezone?: string; + timeFormat?: string; + }; +}; + +export function setLayerAnimationTimeConfig( + config: SetLayerAnimationTimeConfigAction['config'] +): Merge; + +export type SetFilterAnimationTimeConfigAction = { + idx: number; + config: { + timezone?: string; + timeFormat?: string; + }; +} +export function setFilterAnimationTimeConfig( + idx: SetFilterAnimationTimeConfigAction['idx'], + config: SetFilterAnimationTimeConfigAction['config'] +): Merge; diff --git a/src/actions/vis-state-actions.js b/src/actions/vis-state-actions.js index d21f19cf23..01cef993de 100644 --- a/src/actions/vis-state-actions.js +++ b/src/actions/vis-state-actions.js @@ -853,6 +853,36 @@ export function processFileContent(payload) { }; } +/** + * Set layer animation time format and timezone + * @memberof visStateActions + * @param config - {timeFormat: string, timezone: string} + * @type {typeof import('./vis-state-actions').setLayerAnimationTimeConfig} + * @return action + */ +export function setLayerAnimationTimeConfig(config) { + return { + type: ActionTypes.SET_LAYER_ANIMATION_TIME_CONFIG, + config + }; +} + +/** + * Set Filter animation time format and timezone + * @memberof visStateActions + * @param idx + * @param config + * @type {typeof import('./vis-state-actions').setFilterAnimationTimeConfig} + * @return action + */ +export function setFilterAnimationTimeConfig(idx, config) { + return { + type: ActionTypes.SET_FILTER_ANIMATION_TIME_CONFIG, + idx, + config + }; +} + /** * This declaration is needed to group actions in docs */ diff --git a/src/components/bottom-widget.js b/src/components/bottom-widget.js index 97ae680e3a..a0f3c99208 100644 --- a/src/components/bottom-widget.js +++ b/src/components/bottom-widget.js @@ -182,7 +182,7 @@ export default function BottomWidgetFactory( animationConfig={animationConfig} setLayerAnimationTime={visStateActions.setLayerAnimationTime} > - {animationControlProps => + {(isAnimating, start, pause, reset) => showAnimationControl ? ( ) : null } @@ -201,9 +202,12 @@ export default function BottomWidgetFactory( filterIdx={animatedFilterIdx > -1 ? animatedFilterIdx : enlargedFilterIdx} setFilterAnimationTime={visStateActions.setFilterAnimationTime} > - {animationControlProps => + {(isAnimating, start, pause, resetAnimation) => showTimeWidget ? ( ) : null diff --git a/src/components/common/animation-control/animation-control.js b/src/components/common/animation-control/animation-control.js index 384b7a6b03..02f226e26a 100644 --- a/src/components/common/animation-control/animation-control.js +++ b/src/components/common/animation-control/animation-control.js @@ -18,9 +18,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import React, {useCallback} from 'react'; +import React, {useCallback, useMemo} from 'react'; import styled from 'styled-components'; -import moment from 'moment'; import Slider from 'components/common/slider/slider'; import {BottomWidgetInner} from 'components/common/styled-components'; @@ -28,6 +27,7 @@ import PlaybackControlsFactory from './playback-controls'; import FloatingTimeDisplayFactory from './floating-time-display'; import {snapToMarks} from 'utils/data-utils'; import {DEFAULT_TIME_FORMAT} from 'constants/default-settings'; +import {datetimeFormatter} from 'utils/data-utils'; const SliderWrapper = styled.div` display: flex; @@ -49,7 +49,9 @@ const AnimationWidgetInner = styled.div` } `; -const StyledDomain = styled.div` +const StyledDomain = styled.div.attrs({ + className: 'animation-control__time-domain' +})` color: ${props => props.theme.titleTextColor}; font-weight: 400; font-size: 10px; @@ -60,13 +62,23 @@ AnimationControlFactory.deps = [PlaybackControlsFactory, FloatingTimeDisplayFact function AnimationControlFactory(PlaybackControls, FloatingTimeDisplay) { const AnimationControl = ({ isAnimatable, - animationControlProps, + isAnimating, + resetAnimation, toggleAnimation, setLayerAnimationTime, updateAnimationSpeed, animationConfig }) => { - const {currentTime, domain, speed, step, timeSteps} = animationConfig; + const { + currentTime, + domain, + speed, + step, + timeSteps, + timeFormat, + timezone, + defaultTimeFormat + } = animationConfig; const onSlider1Change = useCallback( val => { if (Array.isArray(timeSteps)) { @@ -80,21 +92,30 @@ function AnimationControlFactory(PlaybackControls, FloatingTimeDisplay) { [domain, timeSteps, setLayerAnimationTime] ); + const dateFunc = useMemo(() => { + const hasUserFormat = typeof timeFormat === 'string'; + const currentFormat = (hasUserFormat ? timeFormat : defaultTimeFormat) || DEFAULT_TIME_FORMAT; + return datetimeFormatter(timezone)(currentFormat); + }, [timeFormat, defaultTimeFormat, timezone]); + + const timeStart = useMemo(() => (domain ? dateFunc(domain[0]) : ''), [domain, dateFunc]); + const timeEnd = useMemo(() => (domain ? dateFunc(domain[1]) : ''), [domain, dateFunc]); + return ( - - {domain ? moment.utc(domain[0]).format(DEFAULT_TIME_FORMAT) : ''} + + {timeStart} - - {domain ? moment.utc(domain[1]).format(DEFAULT_TIME_FORMAT) : ''} + + {timeEnd} - + ); }; diff --git a/src/components/common/animation-control/animation-controller.js b/src/components/common/animation-control/animation-controller.js index bce3cbadac..94c9c66825 100644 --- a/src/components/common/animation-control/animation-controller.js +++ b/src/components/common/animation-control/animation-controller.js @@ -213,12 +213,7 @@ function AnimationControllerFactory() { const {children} = this.props; return typeof children === 'function' - ? children({ - isAnimating, - start: this._startAnimation, - pause: this._pauseAnimation, - reset: this._resetAnimation - }) + ? children(isAnimating, this._startAnimation, this._pauseAnimation, this._resetAnimation) : null; } } diff --git a/src/components/common/animation-control/floating-time-display.js b/src/components/common/animation-control/floating-time-display.js index c26a149e49..2a74440508 100644 --- a/src/components/common/animation-control/floating-time-display.js +++ b/src/components/common/animation-control/floating-time-display.js @@ -18,27 +18,36 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import React, {PureComponent} from 'react'; +import React, {useMemo} from 'react'; import styled from 'styled-components'; -import moment from 'moment'; -import {createSelector} from 'reselect'; import {Minus} from 'components/common/icons'; import {DEFAULT_TIME_FORMAT} from 'constants/default-settings'; import {CenterFlexbox} from 'components/common/styled-components'; +import {datetimeFormatter} from 'utils/data-utils'; -const StyledTimeDisplay = styled.div` +const StyledTimeDisplayWrapper = styled.div.attrs({ + className: 'floating-time-display' +})` + bottom: ${props => `calc(100% + ${props.theme.bottomPanelGap}px)`}; + display: flex; + position: absolute; + width: 100%; + margin-left: -${props => props.theme.bottomInnerPdSide}px; + justify-content: center; +`; + +const StyledTimeDisplay = styled.div.attrs({ + className: 'floating-time-display__inner' +})` background-color: ${props => props.theme.panelBackground}; border-radius: ${props => props.theme.timeDisplayBorderRadius}px; - bottom: ${props => `calc(100% + ${props.theme.bottomPanelGap}px)`}; color: ${props => props.theme.titleTextColor}; display: flex; height: ${props => props.theme.timeDisplayHeight}px; justify-content: center; - left: calc(50% - 88px); min-width: ${props => props.theme.timeDisplayMinWidth}px; opacity: ${props => props.theme.timeDisplayOpacity}; padding: ${props => props.theme.timeDisplayPadding}; - position: absolute; `; const StyledTimeDisplayGroups = styled.div` @@ -94,45 +103,52 @@ const TimeDivider = () => ( const TimeDisplayRow = ({timeValues = []}) => ( -
{timeValues[0]}
+
{timeValues[0]}
{timeValues[1] ? : null} - {timeValues[1] ?
{timeValues[1]}
: null} + {timeValues[1] ?
{timeValues[1]}
: null}
); export default function FloatingTimeDisplayFactory() { - class FloatingTimeDisplay extends PureComponent { - timeSelector = props => props.currentTime; - formatSelector = props => props.format; - displayTimeSelector = createSelector( - this.timeSelector, - this.formatSelector, - (currentTime, format) => { - const groupTime = Array.isArray(currentTime) ? currentTime : [currentTime]; - return groupTime.reduce( - (accu, curr) => { - const displayDateTime = moment.utc(curr).format(format); - const [displayDate, displayTime] = displayDateTime.split(' '); - - if (!accu.displayDate.includes(displayDate)) { - accu.displayDate.push(displayDate); - } - accu.displayTime.push(displayTime); - - return accu; - }, - {displayDate: [], displayTime: []} - ); + const FloatingTimeDisplay = ({currentTime, defaultTimeFormat, timeFormat, timezone}) => { + const {displayDate, displayTime} = useMemo(() => { + const groupTime = Array.isArray(currentTime) ? currentTime : [currentTime]; + const hasUserFormat = typeof timeFormat === 'string'; + const currentFormat = (hasUserFormat ? timeFormat : defaultTimeFormat) || DEFAULT_TIME_FORMAT; + const dateFunc = datetimeFormatter(timezone); + + if (hasUserFormat) { + // dont split time if user defined it + return { + displayDate: groupTime.map(dateFunc(currentFormat)), + displayTime: [] + }; } - ); + return groupTime.reduce( + (accu, curr) => { + const [dateFormat, datetimeFormat] = currentFormat.split(' '); + const dateString = dateFunc(dateFormat)(curr); + const timeString = datetimeFormat ? dateFunc(datetimeFormat)(curr) : null; + + if (!accu.displayDate.includes(dateString)) { + accu.displayDate.push(dateString); + } + if (timeString) { + accu.displayTime.push(timeString); + } + + return accu; + }, + {displayDate: [], displayTime: []} + ); + }, [currentTime, timeFormat, defaultTimeFormat, timezone]); - render() { - const {displayDate, displayTime} = this.displayTimeSelector(this.props); - const twoGroups = displayDate.length === 2 && displayTime.length === 2; - const bottomRow = displayTime.length ? displayTime : displayDate.length ? displayDate : null; - const topRow = displayDate.length && displayTime.length ? displayDate : null; + const twoGroups = displayDate.length === 2 && displayTime.length === 2; + const bottomRow = displayTime.length ? displayTime : displayDate.length ? displayDate : null; + const topRow = displayDate.length && displayTime.length ? displayDate : null; - return ( + return ( + {twoGroups ? ( @@ -163,13 +179,8 @@ export default function FloatingTimeDisplayFactory() { )} - ); - } - } - - FloatingTimeDisplay.defaultProps = { - format: DEFAULT_TIME_FORMAT, - currentTime: null + + ); }; return FloatingTimeDisplay; diff --git a/src/components/common/line-chart.js b/src/components/common/line-chart.js index 63483516a8..2daca1dd20 100644 --- a/src/components/common/line-chart.js +++ b/src/components/common/line-chart.js @@ -19,7 +19,6 @@ // THE SOFTWARE. import React, {useMemo} from 'react'; -import moment from 'moment'; import { HorizontalGridLines, LineSeries, @@ -30,7 +29,7 @@ import { MarkSeries } from 'react-vis'; import styled from 'styled-components'; -import {getTimeWidgetHintFormatter} from 'utils/filter-utils'; +import {datetimeFormatter} from 'utils/data-utils'; const LineChartWrapper = styled.div` .rv-xy-plot { @@ -84,16 +83,19 @@ function LineChartFactory() { lineChart, margin, onMouseMove, - width + width, + timezone, + timeFormat }) => { - const {xDomain, series, yDomain} = lineChart; - const hintFormatter = useMemo(() => { - return getTimeWidgetHintFormatter(xDomain); - }, [xDomain]); + const {series, yDomain} = lineChart; const brushData = useMemo(() => { return [{x: series[0].x, y: yDomain[1], customComponent: () => brushComponent}]; }, [series, yDomain, brushComponent]); + const hintFormatter = useMemo(() => datetimeFormatter(timezone)(timeFormat), [ + timezone, + timeFormat + ]); return ( @@ -119,7 +121,7 @@ function LineChartFactory() { {isEnlarged && } {hoveredDP && enableChartHover && !brushing ? ( - moment.utc(val).format(hintFormatter)} /> + ) : null} diff --git a/src/components/common/range-plot.js b/src/components/common/range-plot.js index 9f964d7b50..f5d05ca969 100644 --- a/src/components/common/range-plot.js +++ b/src/components/common/range-plot.js @@ -24,6 +24,7 @@ import styled, {withTheme} from 'styled-components'; import RangeBrushFactory from './range-brush'; import HistogramPlotFactory from './histogram-plot'; import LineChartFactory from './line-chart'; +import {isTest} from 'utils/utils'; const StyledRangePlot = styled.div` margin-bottom: ${props => props.theme.sliderBarHeight}px; @@ -72,7 +73,8 @@ export default function RangePlotFactory(RangeBrush, HistogramPlot, LineChart) { setEnableChartHover(true); }, [setEnableChartHover]); - const brushComponent = ( + // JsDom have limited support for SVG, d3 will fail + const brushComponent = isTest() ? null : ( { + this.sliderContainer = element; this._resize(); - } - - sliderContainer = createRef(); + }; inputValue0 = createRef(); inputValue1 = createRef(); value0Selector = props => props.value0; @@ -137,12 +137,15 @@ export default function RangeSliderFactory(RangePlot) { return true; }; - _resize() { - const width = this.sliderContainer.current.offsetWidth; - if (width !== this.state.width) { - this.setState({width}); + _resize = () => { + if (this.sliderContainer) { + const width = this.sliderContainer.offsetWidth; + if (width !== this.state.width) { + this.setState({width}); + } } - } + }; + _onChangeInput = (key, e) => { this.setState({[key]: e.target.value}); }; @@ -191,18 +194,23 @@ export default function RangeSliderFactory(RangePlot) { range, onChange, sliderHandleWidth, - step + step, + timezone, + timeFormat, + playbackControlWidth } = this.props; const {width} = this.state; const plotWidth = Math.max(width - sliderHandleWidth, 0); const renderPlot = (histogram && histogram.length) || lineChart; - + if (!Array.isArray(range) || !range.every(Number.isFinite)) { + return null; + } return (
{renderPlot ? ( ) : null} diff --git a/src/components/common/slider/slider-handle.js b/src/components/common/slider/slider-handle.js index 9e37242b96..008dec2fe3 100644 --- a/src/components/common/slider/slider-handle.js +++ b/src/components/common/slider/slider-handle.js @@ -24,7 +24,9 @@ import classnames from 'classnames'; import styled from 'styled-components'; import MouseEventHandler from './mouse-event'; -const StyledSliderHandle = styled.span` +const StyledSliderHandle = styled.span.attrs({ + className: 'kg-range-slider__handle' +})` position: absolute; z-index: 10; ${props => (props.vertical ? 'margin-left' : 'margin-top')}: -${props => @@ -162,7 +164,7 @@ export default class SliderHandle extends Component { /> ) : null} props.theme.timeTitleFontSize}; + justify-content: ${props => (props.isEnlarged ? 'center' : 'space-between')}; + + .horizontal-bar { + padding: 0 12px; + color: ${props => props.theme.textColor}; + } + + .time-value { + display: flex; + flex-direction: ${props => (props.isEnlarged ? 'row' : 'column')}; + align-items: flex-start; + max-width: ${props => (!props.isEnlarged ? '40%' : 'auto')}; + span { + color: ${props => props.theme.textColor}; + } + } + + .time-value:last-child { + align-items: flex-end; + text-align: right; + } +`; + +const TimeValue = ({value}) => ( + // render two lines if not enlarged +
+ {value} +
+); + +function TimeRangeSliderTimeTitleFactory() { + const TimeTitle = ({value, isEnlarged, timezone, timeFormat}) => ( + + + {isEnlarged ? ( +
+ +
+ ) : null} + +
+ ); + + return TimeTitle; +} + +export default TimeRangeSliderTimeTitleFactory; diff --git a/src/components/common/time-range-slider.js b/src/components/common/time-range-slider.js index f8715ad735..e52ba443b9 100644 --- a/src/components/common/time-range-slider.js +++ b/src/components/common/time-range-slider.js @@ -18,19 +18,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import React, {Component} from 'react'; +import React, {useMemo} from 'react'; import PropTypes from 'prop-types'; -import moment from 'moment'; import throttle from 'lodash.throttle'; import styled from 'styled-components'; -import {createSelector} from 'reselect'; -import {Minus} from 'components/common/icons'; import RangeSliderFactory from 'components/common/range-slider'; import TimeSliderMarkerFactory from 'components/common/time-slider-marker'; import PlaybackControlsFactory from 'components/common/animation-control/playback-controls'; - -import {DEFAULT_TIME_FORMAT} from 'constants/default-settings'; +import TimeRangeSliderTimeTitleFactory from 'components/common/time-range-slider-time-title'; const animationControlWidth = 176; @@ -53,164 +49,115 @@ const StyledSliderContainer = styled.div` TimeRangeSliderFactory.deps = [ PlaybackControlsFactory, RangeSliderFactory, - TimeSliderMarkerFactory + TimeSliderMarkerFactory, + TimeRangeSliderTimeTitleFactory ]; -export default function TimeRangeSliderFactory(PlaybackControls, RangeSlider, TimeSliderMarker) { - class TimeRangeSlider extends Component { - static propTypes = { - onChange: PropTypes.func.isRequired, - domain: PropTypes.arrayOf(PropTypes.number).isRequired, - value: PropTypes.arrayOf(PropTypes.number).isRequired, - step: PropTypes.number.isRequired, - plotType: PropTypes.string, - histogram: PropTypes.arrayOf(PropTypes.any), - lineChart: PropTypes.object, - toggleAnimation: PropTypes.func.isRequired, - isAnimatable: PropTypes.bool, - isEnlarged: PropTypes.bool, - speed: PropTypes.number, - timeFormat: PropTypes.string, - hideTimeTitle: PropTypes.bool - }; - - constructor(props) { - super(props); - this._sliderThrottle = throttle((...value) => this.props.onChange(...value), 20); - } - - timeSelector = props => props.currentTime; - formatSelector = props => props.format; - displayTimeSelector = createSelector( - this.timeSelector, - this.formatSelector, - (currentTime, format) => { - const groupTime = Array.isArray(currentTime) ? currentTime : [currentTime]; - return groupTime.reduce( - (accu, curr) => { - const displayDateTime = moment.utc(curr).format(format); - const [displayDate, displayTime] = displayDateTime.split(' '); - - if (!accu.displayDate.includes(displayDate)) { - accu.displayDate.push(displayDate); - } - accu.displayTime.push(displayTime); - - return accu; - }, - {displayDate: [], displayTime: []} - ); - } - ); - - _sliderUpdate = args => { - this._sliderThrottle.cancel(); - this._sliderThrottle(args); - }; - - render() { - const {domain, value, isEnlarged, hideTimeTitle, animationControlProps} = this.props; - - return ( -
- {!hideTimeTitle ? ( - +export default function TimeRangeSliderFactory( + PlaybackControls, + RangeSlider, + TimeSliderMarker, + TimeRangeSliderTimeTitle +) { + const TimeRangeSlider = props => { + const { + domain, + value, + isEnlarged, + hideTimeTitle, + isAnimating, + resetAnimation, + timeFormat, + timezone, + histogram, + plotType, + lineChart, + step, + isAnimatable, + speed, + animationWindow, + updateAnimationSpeed, + setFilterAnimationWindow, + toggleAnimation, + onChange + } = props; + const throttledOnchange = useMemo(() => throttle(onChange, 20), [onChange]); + return ( +
+ {!hideTimeTitle ? ( +
+ +
+ ) : null} + +
+ +
+ {isEnlarged ? ( + ) : null} - -
- -
- - {isEnlarged ? ( - - ) : null} -
-
- ); - } - } + +
+ ); + }; - TimeRangeSlider.defaultProps = { - timeFormat: DEFAULT_TIME_FORMAT + TimeRangeSlider.propTypes = { + onChange: PropTypes.func.isRequired, + domain: PropTypes.arrayOf(PropTypes.number), + value: PropTypes.arrayOf(PropTypes.number).isRequired, + step: PropTypes.number.isRequired, + plotType: PropTypes.string, + histogram: PropTypes.arrayOf(PropTypes.any), + lineChart: PropTypes.object, + toggleAnimation: PropTypes.func.isRequired, + exportAnimation: PropTypes.func, + isAnimatable: PropTypes.bool, + isEnlarged: PropTypes.bool, + speed: PropTypes.number, + timeFormat: PropTypes.string, + timezone: PropTypes.string, + hideTimeTitle: PropTypes.bool }; - return TimeRangeSlider; + return React.memo(TimeRangeSlider); } - -const TimeValueWrapper = styled.div` - display: flex; - align-items: center; - font-size: ${props => props.theme.timeTitleFontSize}; - justify-content: ${props => (props.isEnlarged ? 'center' : 'space-between')}; - - .horizontal-bar { - padding: 0 12px; - color: ${props => props.theme.textColor}; - } - - .time-value { - display: flex; - flex-direction: ${props => (props.isEnlarged ? 'row' : 'column')}; - align-items: flex-start; - - span { - color: ${props => props.theme.textColor}; - } - } - - .time-value:last-child { - align-items: flex-end; - } -`; - -const TimeTitle = ({value, isEnlarged, timeFormat = DEFAULT_TIME_FORMAT}) => ( - - - {isEnlarged ? ( -
- -
- ) : null} - -
-); - -const TimeValue = ({value, split}) => ( - // render two lines if not enlarged -
- {split ? ( - value - .split(' ') - .map((v, i) =>
{i === 0 ? {v} : {v}}
) - ) : ( - {value} - )} -
-); diff --git a/src/components/common/time-slider-marker.js b/src/components/common/time-slider-marker.js index fb7abf29fb..26d9b8ee6f 100644 --- a/src/components/common/time-slider-marker.js +++ b/src/components/common/time-slider-marker.js @@ -19,11 +19,13 @@ // THE SOFTWARE. import React, {useRef, useEffect, useMemo} from 'react'; +import moment from 'moment'; import PropTypes from 'prop-types'; import {scaleUtc} from 'd3-scale'; import {select} from 'd3-selection'; import {axisBottom} from 'd3-axis'; import styled from 'styled-components'; +import {datetimeFormatter} from 'utils/data-utils'; const MIN_TICK_WIDTH_LARGE = 80; const MIN_TICK_WIDTH_SMALL = 50; @@ -34,6 +36,7 @@ const TimeSliderContainer = styled.svg` position: absolute; top: 0; overflow: visible; + margin-top: 6px; .axis text { font-size: ${props => props.theme.axisFontSize}; @@ -66,38 +69,87 @@ const TimeSliderContainer = styled.svg` } `; -function TimeSliderMarkerFactory() { - function updateAxis(scale, width, xAxisRef, isEnlarged) { - if (!scale) { - return; - } +const TICK_FORMATS = { + millisecond: '.SSS', + second: ':ss', + minute: 'HH:ss', + hour: 'HH A', + day: 'ddd DD', + week: 'MMM DD', + month: 'MMM', + year: 'YYYY' +}; + +// timezone sensitive tick formatter based on moment +// adapted based on d3 time scale tick format https://github.com/d3/d3-scale/blob/master/src/time.js#L59 +export function getTickFormat(timezone) { + // date is js date object + const toMoment = timezone ? date => moment(date).tz(timezone) : moment; + const formatter = datetimeFormatter(timezone); + + return date => + (toMoment(date).startOf('second') < date + ? formatter(TICK_FORMATS.millisecond) + : toMoment(date).startOf('minute') < date + ? formatter(TICK_FORMATS.second) + : toMoment(date).startOf('hour') < date + ? formatter(TICK_FORMATS.minute) + : toMoment(date).startOf('day') < date + ? formatter(TICK_FORMATS.hour) + : toMoment(date).startOf('month') < date + ? toMoment(date).startOf('isoWeek') < date + ? formatter(TICK_FORMATS.day) + : formatter(TICK_FORMATS.week) + : toMoment(date).startOf('year') < date + ? formatter(TICK_FORMATS.month) + : formatter(TICK_FORMATS.year))(date); +} - // TODO: pass in ticks if interval is defined - const ticks = Math.floor(width / (isEnlarged ? MIN_TICK_WIDTH_LARGE : MIN_TICK_WIDTH_SMALL)); +// create a helper function so we can test it +export function getXAxis(domain, width, isEnlarged, timezone) { + if (!Array.isArray(domain) || !domain.every(Number.isFinite)) { + return null; + } + const scale = scaleUtc() + .domain(domain) + .range([0, width]); + if (!scale) { + return null; + } - const xAxis = axisBottom(scale) - .ticks(ticks) - .tickSize(0) - .tickPadding(12); + const ticks = Math.floor(width / (isEnlarged ? MIN_TICK_WIDTH_LARGE : MIN_TICK_WIDTH_SMALL)); + const tickFormat = timezone ? getTickFormat(timezone) : null; + const xAxis = axisBottom(scale) + .ticks(ticks) + .tickSize(0) + .tickPadding(12); + if (tickFormat) { + xAxis.tickFormat(tickFormat); + } - select(xAxisRef.current).call(xAxis); + return xAxis; +} + +export function updateAxis(xAxisRef, xAxis) { + if (!xAxis) { + return; } - const TimeSliderMarker = ({width, domain, isEnlarged = true, height = HEIGHT}) => { - const xAxisRef = useRef(null); - const scale = useMemo( - () => - Array.isArray(domain) - ? scaleUtc() - .domain(domain) - .range([0, width]) - : null, - [domain, width] - ); + select(xAxisRef.current).call(xAxis); +} +function TimeSliderMarkerFactory() { + const TimeSliderMarker = ({width, domain, isEnlarged = true, height = HEIGHT, timezone}) => { + const xAxisRef = useRef(null); + const xAxis = useMemo(() => getXAxis(domain, width, isEnlarged, timezone), [ + domain, + width, + isEnlarged, + timezone + ]); useEffect(() => { - updateAxis(scale, width, xAxisRef, isEnlarged); - }, [scale, width, xAxisRef, isEnlarged]); + updateAxis(xAxisRef, xAxis); + }, [xAxisRef, xAxis]); return ( @@ -110,7 +162,7 @@ function TimeSliderMarkerFactory() { width: PropTypes.number.isRequired }; - return TimeSliderMarker; + return React.memo(TimeSliderMarker); } export default TimeSliderMarkerFactory; diff --git a/src/components/filters/time-range-filter.js b/src/components/filters/time-range-filter.js index 4c92a0a94c..e976bec0a9 100644 --- a/src/components/filters/time-range-filter.js +++ b/src/components/filters/time-range-filter.js @@ -20,29 +20,44 @@ import React from 'react'; import TimeRangeSliderFactory from 'components/common/time-range-slider'; +import {DEFAULT_TIME_FORMAT} from 'constants/default-settings'; /* * TimeRangeFilter -> TimeRangeSlider -> RangeSlider */ +export function timeRangeSliderFieldsSelector(filter) { + const hasUserFormat = typeof filter.timeFormat === 'string'; + const timeFormat = + (hasUserFormat ? filter.timeFormat : filter.defaultTimeFormat) || DEFAULT_TIME_FORMAT; + + return { + id: filter.id, + domain: filter.domain, + bins: filter.bins, + value: filter.value, + plotType: filter.plotType, + lineChart: filter.lineChart, + yAxis: filter.yAxis, + step: filter.step, + speed: filter.speed, + histogram: filter.enlarged ? filter.enlargedHistogram : filter.histogram, + isEnlarged: filter.enlarged, + animationWindow: filter.animationWindow, + isAnimating: filter.isAnimating, + timezone: filter.timezone, + timeFormat + }; +} TimeRangeFilterFactory.deps = [TimeRangeSliderFactory]; function TimeRangeFilterFactory(TimeRangeSlider) { const TimeRangeFilter = ({filter, setFilter, isAnimatable, toggleAnimation, hideTimeTitle}) => ( ); diff --git a/src/components/filters/time-widget.js b/src/components/filters/time-widget.js index 6373067e20..52336cab8e 100644 --- a/src/components/filters/time-widget.js +++ b/src/components/filters/time-widget.js @@ -18,10 +18,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import React, {Component} from 'react'; +import React, {useCallback, useMemo} from 'react'; import styled from 'styled-components'; -import {createSelector} from 'reselect'; - import { SelectTextBold, IconRoundSmall, @@ -29,18 +27,19 @@ import { BottomWidgetInner } from 'components/common/styled-components'; import {Close, Clock, LineChart} from 'components/common/icons'; -import SpeedControlFactory from 'components/common/animation-control/speed-control'; import TimeRangeSliderFactory from 'components/common/time-range-slider'; - +import FieldSelectorFactory from 'components/common/field-selector'; import FloatingTimeDisplayFactory from 'components/common/animation-control/floating-time-display'; -import FieldSelectorFactory from '../common/field-selector'; +import {timeRangeSliderFieldsSelector} from './time-range-filter'; const TOP_SECTION_HEIGHT = '36px'; const TimeBottomWidgetInner = styled(BottomWidgetInner)` padding: 6px 32px 24px 32px; `; -const TopSectionWrapper = styled.div` +const TopSectionWrapper = styled.div.attrs({ + className: 'time-widget--top' +})` display: flex; justify-content: space-between; width: 100%; @@ -103,105 +102,127 @@ const StyledTitle = styled(CenterFlexbox)` } `; -TimeWidgetFactory.deps = [ - SpeedControlFactory, - TimeRangeSliderFactory, - FloatingTimeDisplayFactory, - FieldSelectorFactory -]; -function TimeWidgetFactory(SpeedControl, TimeRangeSlider, FloatingTimeDisplay, FieldSelector) { - class TimeWidget extends Component { - fieldSelector = props => props.fields; - yAxisFieldsSelector = createSelector(this.fieldSelector, fields => - fields.filter(f => f.type === 'integer' || f.type === 'real') +TimeWidgetTopFactory.deps = [FieldSelectorFactory]; +export function TimeWidgetTopFactory(FieldSelector) { + const TimeWidgetTop = ({filter, readOnly, datasets, setFilterPlot, index, onClose}) => { + const yAxisFields = useMemo( + () => + ((datasets[filter.dataId[0]] || {}).fields || []).filter( + f => f.type === 'integer' || f.type === 'real' + ), + [datasets, filter.dataId] + ); + const _setFilterPlotYAxis = useCallback(value => setFilterPlot(index, {yAxis: value}), [ + setFilterPlot, + index + ]); + return ( + + + + + + {filter.name} + + + + + +
+ +
+
+ {!readOnly ? ( + + + + + + ) : null} +
); + }; + return TimeWidgetTop; +} - _updateAnimationSpeed = speed => this.props.updateAnimationSpeed(this.props.index, speed); - - _toggleAnimation = () => this.props.toggleAnimation(this.props.index); - - _onClose = () => this.props.enlargeFilter(this.props.index); - - _setFilterPlotYAxis = value => this.props.setFilterPlot(this.props.index, {yAxis: value}); - - _setFilterAnimationWindow = animationWindow => { - this.props.setFilterAnimationWindow({id: this.props.filter.id, animationWindow}); - }; - - render() { - const { - datasets, - filter, - index, - readOnly, - showTimeDisplay, - setFilterAnimationTime, - animationControlProps, - isAnimatable - } = this.props; - - return ( - - - - - - - {filter.name} - - - - - -
- -
-
- {!readOnly ? ( - - - - - - ) : null} -
- setFilterAnimationTime(index, 'value', value)} - toggleAnimation={this._toggleAnimation} - updateAnimationSpeed={this._updateAnimationSpeed} - setFilterAnimationWindow={this._setFilterAnimationWindow} - isEnlarged={filter.enlarged} - animationWindow={filter.animationWindow} - isAnimating={filter.isAnimating} - hideTimeTitle={showTimeDisplay} - animationControlProps={animationControlProps} - isAnimatable={isAnimatable} +TimeWidgetFactory.deps = [TimeRangeSliderFactory, FloatingTimeDisplayFactory, TimeWidgetTopFactory]; +function TimeWidgetFactory(TimeRangeSlider, FloatingTimeDisplay, TimeWidgetTop) { + const TimeWidget = ({ + datasets, + filter, + index, + readOnly, + showTimeDisplay, + setFilterAnimationTime, + resetAnimation, + isAnimatable, + updateAnimationSpeed, + toggleAnimation, + enlargeFilter, + setFilterPlot, + setFilterAnimationWindow + }) => { + const _updateAnimationSpeed = useCallback(speed => updateAnimationSpeed(index, speed), [ + updateAnimationSpeed, + index + ]); + + const _toggleAnimation = useCallback(() => toggleAnimation(index), [toggleAnimation, index]); + + const _onClose = useCallback(() => enlargeFilter(index), [enlargeFilter, index]); + + const _setFilterAnimationWindow = useCallback( + animationWindow => setFilterAnimationWindow({id: filter.id, animationWindow}), + [setFilterAnimationWindow, filter.id] + ); + + const timeSliderOnChange = useCallback(value => setFilterAnimationTime(index, 'value', value), [ + setFilterAnimationTime, + index + ]); + + return ( + + + + {showTimeDisplay ? ( + + ) : null} + + ); + }; - {showTimeDisplay ? : null} -
- ); - } - } - return TimeWidget; + return React.memo(TimeWidget); } export default TimeWidgetFactory; diff --git a/src/components/index.js b/src/components/index.js index a721fc5cc3..208e6a381a 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -119,12 +119,16 @@ export {default as HistogramPlotFactory} from './common/histogram-plot'; export {default as LineChartFactory} from './common/line-chart'; export {default as RangeBrushFactory} from './common/range-brush'; export {default as TimeSliderMarkerFactory} from './common/time-slider-marker'; +export {default as TimeRangeSliderTimeTitleFactory} from './common/time-range-slider-time-title'; // // Filters factory -export {default as TimeWidgetFactory} from './filters/time-widget'; +export {default as TimeWidgetFactory, TimeWidgetTopFactory} from './filters/time-widget'; export {default as SingleSelectFilterFactory} from './filters/single-select-filter'; export {default as MultiSelectFilterFactory} from './filters/multi-select-filter'; -export {default as TimeRangeFilterFactory} from './filters/time-range-filter'; +export { + timeRangeSliderFieldsSelector, + default as TimeRangeFilterFactory +} from './filters/time-range-filter'; export {default as RangeFilterFactory} from './filters/range-filter'; // // Editor Factory diff --git a/src/components/kepler-gl.js b/src/components/kepler-gl.js index a2fd1cc3a1..0f22f14621 100644 --- a/src/components/kepler-gl.js +++ b/src/components/kepler-gl.js @@ -120,6 +120,7 @@ export const mapFieldsSelector = props => ({ animationConfig: props.visState.animationConfig, // uiState + activeSidePanel: props.uiState.activeSidePanel, mapControls: props.uiState.mapControls, readOnly: props.uiState.readOnly, locale: props.uiState.locale diff --git a/src/components/side-panel/panel-toggle.js b/src/components/side-panel/panel-toggle.js index 99a4149949..0b715061ed 100644 --- a/src/components/side-panel/panel-toggle.js +++ b/src/components/side-panel/panel-toggle.js @@ -55,12 +55,11 @@ export function PanelTabFactory() { margin-right: ${props => props.theme.panelToggleMarginRight}px; padding-bottom: ${props => props.theme.panelToggleBottomPadding}px; width: ${props => props.theme.panelTabWidth}; - + :hover { cursor: pointer; color: ${props => props.theme.textColorHl}; } - `; return PanelTab; diff --git a/src/constants/action-types.d.ts b/src/constants/action-types.d.ts index 3299b98ab3..80a97488f2 100644 --- a/src/constants/action-types.d.ts +++ b/src/constants/action-types.d.ts @@ -25,6 +25,7 @@ export type ActionType = { REORDER_LAYER: string; SET_FILTER: string; SET_FILTER_ANIMATION_TIME: string; + SET_FILTER_ANIMATION_TIME_CONFIG: string; SET_FILTER_ANIMATION_WINDOW: string; SHOW_DATASET_TABLE: string; UPDATE_LAYER_BLENDING: string; @@ -34,6 +35,7 @@ export type ActionType = { UPDATE_FILTER_ANIMATION_SPEED: string; PLAY_ANIMATION: string; SET_LAYER_ANIMATION_TIME: string; + SET_LAYER_ANIMATION_TIME_CONFIG: string; UPDATE_ANIMATION_SPEED: string; UPDATE_LAYER_ANIMATION_SPEED: string; TOGGLE_LAYER_CONFIG_ACTIVE: string; diff --git a/src/constants/action-types.js b/src/constants/action-types.js index cee62b2b21..d7afbb3303 100644 --- a/src/constants/action-types.js +++ b/src/constants/action-types.js @@ -77,6 +77,7 @@ const ActionTypes = { REORDER_LAYER: `${ACTION_PREFIX}REORDER_LAYER`, SET_FILTER: `${ACTION_PREFIX}SET_FILTER`, SET_FILTER_ANIMATION_TIME: `${ACTION_PREFIX}SET_FILTER_ANIMATION_TIME`, + SET_FILTER_ANIMATION_TIME_CONFIG: `${ACTION_PREFIX}SET_FILTER_ANIMATION_TIME_CONFIG`, SET_FILTER_ANIMATION_WINDOW: `${ACTION_PREFIX}SET_FILTER_ANIMATION_WINDOW`, SHOW_DATASET_TABLE: `${ACTION_PREFIX}SHOW_DATASET_TABLE`, UPDATE_LAYER_BLENDING: `${ACTION_PREFIX}UPDATE_LAYER_BLENDING`, @@ -86,6 +87,7 @@ const ActionTypes = { UPDATE_FILTER_ANIMATION_SPEED: `${ACTION_PREFIX}UPDATE_FILTER_ANIMATION_SPEED`, PLAY_ANIMATION: `${ACTION_PREFIX}PLAY_ANIMATION`, SET_LAYER_ANIMATION_TIME: `${ACTION_PREFIX}SET_LAYER_ANIMATION_TIME`, + SET_LAYER_ANIMATION_TIME_CONFIG: `${ACTION_PREFIX}SET_LAYER_ANIMATION_TIME_CONFIG`, UPDATE_ANIMATION_SPEED: `${ACTION_PREFIX}UPDATE_ANIMATION_SPEED`, UPDATE_LAYER_ANIMATION_SPEED: `${ACTION_PREFIX}UPDATE_LAYER_ANIMATION_SPEED`, TOGGLE_LAYER_ANIMATION: `${ACTION_PREFIX}TOGGLE_LAYER_ANIMATION`, diff --git a/src/reducers/composer-helpers.d.ts b/src/reducers/composer-helpers.d.ts index 162152bd35..15eaa81776 100644 --- a/src/reducers/composer-helpers.d.ts +++ b/src/reducers/composer-helpers.d.ts @@ -1,39 +1,32 @@ /** Returns a function that logs a value with a given message */ -declare export function log(text: string): (value: any) => void; +export declare function log(text: string): (value: any) => void; /** Wraps a value in an object and stores it the `payload` field */ -declare export function payload_

(payload: P): {payload: P}; +export declare function payload_

(payload: P): {payload: P}; /** Wraps a value in an object and stores it the `payload` field */ -declare export function compose_(fns: Array<(s: State) => State>): (s: State) => State; +export declare function compose_(fns: Array<(s: State) => State>): (s: State) => State; /** TBA */ -declare export function apply_( +export declare function apply_( updater: (s: State, p: P) => State, payload: P ): (s: State) => State; /** TBA */ -declare export function pick_( +export declare function pick_( prop: Prop ): (fn: (p: State[Prop]) => State[Prop]) => (state: State) => State; /** Returns a reducer function that merges props with state */ -declare export function merge_( - object: Props -): (state: State) => State & Props; +export declare function merge_(object: Props): (state: State) => State & Props; -declare export function pickKepler_(fn: (x: X) => X): (s: {keplerGL: {map: X}}) => {keplerGL: {map: X}} +export declare function pickKepler_(fn: (x: X) => X): (s: {keplerGL: {map: X}}) => {keplerGL: {map: X}}; -/** TBA */ -declare export function swap_(item: X): (arr: X[]) => X[] +export declare function swap_(item: X): (arr: X[]) => X[]; -/** TBA */ -declare export function findById(id: string): (arr: X[]) => X | undefined +export declare function findById(id: string): (arr: X[]) => X | undefined; -/** TBA */ -declare export function with_(fn: (state: State) => State): (state: State) => State; - -/** TBA */ -declare export function if_(pred: boolean, fn: (state: State) => State): (state: State) => State; +export declare function with_(fn: (state: State) => State): (state: State) => State; +export declare function if_(pred: boolean, fn: (state: State) => State): (state: State) => State; diff --git a/src/reducers/composer-helpers.js b/src/reducers/composer-helpers.js index 70ee0c9d3f..a2ad648000 100644 --- a/src/reducers/composer-helpers.js +++ b/src/reducers/composer-helpers.js @@ -56,3 +56,15 @@ export function merge_(obj) { export function pick_(prop) { return fn => state => ({...state, [prop]: fn(state[prop])}); } + +export function swap_(item) { + return arr => arr.map(a => (a.id === item.id ? item : a)); +} + +export function findById(id) { + return arr => arr.find(a => a.id === id); +} + +export function map_(fn) { + return arr => arr.map(e => fn(e)); +} diff --git a/src/reducers/vis-state-updaters.d.ts b/src/reducers/vis-state-updaters.d.ts index f51afe9450..1b61316d0b 100644 --- a/src/reducers/vis-state-updaters.d.ts +++ b/src/reducers/vis-state-updaters.d.ts @@ -33,6 +33,12 @@ export type TimeRangeFieldDomain = { histogram: HistogramBin[]; enlargedHistogram: HistogramBin[]; mappedValue: (Millisecond | null)[]; + // auto generated based on time domain + defaultTimeFormat?: string | null; + // custom ui input + timeFormat?: string | null; + // custom ui input + timezone?: string | null; }; export type FieldDomain = | RangeFieldDomain @@ -57,6 +63,7 @@ export type FilterBase = { enlarged: boolean; isAnimating: boolean; speed: number; + showTimeDisplay?: boolean; // field specific name: string[]; // string @@ -164,6 +171,12 @@ export type AnimationConfig = { currentTime: number | null; speed: number; isAnimating?: boolean; + // auto generated based on time domain + defaultTimeFormat?: string | null; + // custom ui input + timeFormat?: string | null; + // custom ui input + timezone?: string | null; }; export type BaseInteraction = { @@ -488,6 +501,16 @@ export function toggleEditorVisibilityUpdater( export function resetMapConfigUpdater(state: VisState): VisState; +export function setLayerAnimationTimeConfigUpdater( + state: VisState, + action: VisStateActions.setLayerAnimationTimeConfig +): VisState; + +export function setFilterAnimationTimeConfigUpdater( + state: VisState, + action: VisStateActions.setFilterAnimationTimeConfig +): VisState; + export function receiveMapConfigUpdater( state: VisState, action: { diff --git a/src/reducers/vis-state-updaters.js b/src/reducers/vis-state-updaters.js index a6d343fcd2..670ea0118b 100644 --- a/src/reducers/vis-state-updaters.js +++ b/src/reducers/vis-state-updaters.js @@ -49,6 +49,7 @@ import { getDefaultFilterPlotType, getFilterIdInFeature, getFilterPlot, + getTimeWidgetTitleFormatter, isInRange, LIMITED_FILTER_EFFECT_PROPS, updateFilterDataId @@ -76,8 +77,8 @@ import { import {Layer, LayerClasses, LAYER_ID_LENGTH} from 'layers'; import {DEFAULT_TEXT_LABEL} from 'layers/layer-factory'; -import {EDITOR_MODES, SORT_ORDER} from 'constants/default-settings'; -import {pick_, merge_} from './composer-helpers'; +import {EDITOR_MODES, SORT_ORDER, FILTER_TYPES} from 'constants/default-settings'; +import {pick_, merge_, swap_} from './composer-helpers'; import {processFileContent} from 'actions/vis-state-actions'; import KeplerGLSchema from 'schemas'; @@ -141,7 +142,10 @@ export const DEFAULT_ANIMATION_CONFIG = { domain: null, currentTime: null, speed: 1, - isAnimating: false + isAnimating: false, + timeFormat: null, + timezone: null, + defaultTimeFormat: null }; /** @type {Editor} */ @@ -217,6 +221,7 @@ export const INITIAL_VIS_STATE = { // visStateMergers mergers: VIS_STATE_MERGERS, + // kepler schemas schema: KeplerGLSchema }; @@ -1769,7 +1774,11 @@ export function updateAnimationDomain(state) { if (!animatableLayers.length) { return { ...state, - animationConfig: DEFAULT_ANIMATION_CONFIG + animationConfig: { + ...state.animationConfig, + domain: null, + defaultTimeFormat: null + } }; } @@ -1780,6 +1789,7 @@ export function updateAnimationDomain(state) { ], [Number(Infinity), -Infinity] ); + const defaultTimeFormat = getTimeWidgetTitleFormatter(mergedDomain); return { ...state, @@ -1788,7 +1798,8 @@ export function updateAnimationDomain(state) { currentTime: isInRange(state.animationConfig.currentTime, mergedDomain) ? state.animationConfig.currentTime : mergedDomain[0], - domain: mergedDomain + domain: mergedDomain, + defaultTimeFormat } }; } @@ -2057,3 +2068,48 @@ export function toggleEditorVisibilityUpdater(state) { } }; } + +export function setFilterAnimationTimeConfigUpdater(state, {idx, config}) { + const oldFilter = state.filters[idx]; + if (!oldFilter) { + Console.error(`filters.${idx} is undefined`); + return state; + } + if (oldFilter.type !== FILTER_TYPES.timeRange) { + Console.error( + `setFilterAnimationTimeConfig can only be called to update a time filter. check filter.type === 'timeRange'` + ); + return state; + } + + const updates = checkTimeConfigArgs(config); + + return pick_('filters')(swap_(merge_(updates)(oldFilter)))(state); +} + +function checkTimeConfigArgs(config) { + const allowed = ['timeFormat', 'timezone']; + return Object.keys(config).reduce((accu, prop) => { + if (!allowed.includes(prop)) { + Console.error( + `setLayerAnimationTimeConfig takes timeFormat and/or timezone as options, found ${prop}` + ); + return accu; + } + + // here we are NOT checking if timezone or timeFormat input is valid + accu[prop] = config[prop]; + return accu; + }, {}); +} +/** + * Update editor + * @type {typeof import('./vis-state-updaters').setLayerAnimationTimeConfigUpdater} + */ +export function setLayerAnimationTimeConfigUpdater(state, {config}) { + if (!config) { + return state; + } + const updates = checkTimeConfigArgs(config); + return pick_('animationConfig')(merge_(updates))(state); +} diff --git a/src/reducers/vis-state.js b/src/reducers/vis-state.js index 343fb21387..c9c675c464 100644 --- a/src/reducers/vis-state.js +++ b/src/reducers/vis-state.js @@ -83,6 +83,9 @@ const actionHandler = { [ActionTypes.SET_FILTER_ANIMATION_TIME]: visStateUpdaters.setFilterAnimationTimeUpdater, + [ActionTypes.SET_FILTER_ANIMATION_TIME_CONFIG]: + visStateUpdaters.setFilterAnimationTimeConfigUpdater, + [ActionTypes.SET_FILTER_ANIMATION_WINDOW]: visStateUpdaters.setFilterAnimationWindowUpdater, [ActionTypes.SET_FILTER_PLOT]: visStateUpdaters.setFilterPlotUpdater, @@ -133,7 +136,9 @@ const actionHandler = { [ActionTypes.NEXT_FILE_BATCH]: visStateUpdaters.nextFileBatchUpdater, - [ActionTypes.PROCESS_FILE_CONTENT]: visStateUpdaters.processFileContentUpdater + [ActionTypes.PROCESS_FILE_CONTENT]: visStateUpdaters.processFileContentUpdater, + + [ActionTypes.SET_LAYER_ANIMATION_TIME_CONFIG]: visStateUpdaters.setLayerAnimationTimeConfigUpdater }; // construct vis-state reducer diff --git a/src/utils/data-utils.d.ts b/src/utils/data-utils.d.ts index 98d6430f56..020d4fc47d 100644 --- a/src/utils/data-utils.d.ts +++ b/src/utils/data-utils.d.ts @@ -34,3 +34,5 @@ export type FieldFormatter = (value: any) => string; export declare const FIELD_DISPLAY_FORMAT: { [key: string]: FieldFormatter; }; + +export declare function datetimeFormatter(timezone?: string | null): (format: string) => (ts: number) => string; diff --git a/src/utils/data-utils.js b/src/utils/data-utils.js index c835575721..a551c4382f 100644 --- a/src/utils/data-utils.js +++ b/src/utils/data-utils.js @@ -18,12 +18,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import moment from 'moment'; import assert from 'assert'; import {ALL_FIELD_TYPES} from 'constants/default-settings'; import {TOOLTIP_FORMATS, TOOLTIP_FORMAT_TYPES, TOOLTIP_KEY} from 'constants/tooltip'; import {format as d3Format} from 'd3-format'; import {bisectLeft} from 'd3-array'; +import moment from 'moment-timezone'; const MAX_LATITUDE = 90; const MIN_LATITUDE = -90; @@ -365,7 +365,7 @@ export function applyDefaultFormat(tooltipFormat) { return d3Format(tooltipFormat.format); case TOOLTIP_FORMAT_TYPES.DATE: case TOOLTIP_FORMAT_TYPES.DATE_TIME: - return v => moment.utc(v).format(tooltipFormat.format); + return datetimeFormatter(null)(tooltipFormat.format); case TOOLTIP_FORMAT_TYPES.PERCENTAGE: return v => `${d3Format(TOOLTIP_FORMATS.DECIMAL_DECIMAL_FIXED_2.format)(v)}%`; case TOOLTIP_FORMAT_TYPES.BOOLEAN: @@ -393,8 +393,22 @@ export function applyCustomFormat(format, field) { return d3Format(format); case ALL_FIELD_TYPES.date: case ALL_FIELD_TYPES.timestamp: - return v => moment.utc(v).format(format); + return datetimeFormatter(null)(format); default: return v => v; } } + +/** + * Format epoch milliseconds with a format string + * @type {typeof import('./data-utils').datetimeFormatter} timezone + */ +export function datetimeFormatter(timezone) { + return timezone + ? format => ts => + moment + .utc(ts) + .tz(timezone) + .format(format) + : format => ts => moment.utc(ts).format(format); +} diff --git a/src/utils/filter-utils.d.ts b/src/utils/filter-utils.d.ts index dbda5397df..fc570c7088 100644 --- a/src/utils/filter-utils.d.ts +++ b/src/utils/filter-utils.d.ts @@ -165,7 +165,7 @@ export function validateFiltersUpdateDatasets(state: VisState, filtersToValidate export function isInPolygon(point: number[], polygon: object): boolean; export function getIntervalBins(filter: TimeRangeFilter); export function getTimeWidgetHintFormatter(domain: [number, number]): string; - +export function getTimeWidgetTitleFormatter(domain: [number, number]): string; export const FILTER_UPDATER_PROPS: { dataId: string; diff --git a/src/utils/filter-utils.js b/src/utils/filter-utils.js index 493bfdfe60..2a97148154 100644 --- a/src/utils/filter-utils.js +++ b/src/utils/filter-utils.js @@ -656,6 +656,8 @@ export function getTimestampFieldDomain(data, valueAccessor) { const mappedValue = Array.isArray(data) ? data.map(valueAccessor) : []; const domain = ScaleUtils.getLinearDomain(mappedValue); + const defaultTimeFormat = getTimeWidgetTitleFormatter(domain); + let step = 0.01; const diff = domain[1] - domain[0]; @@ -666,7 +668,14 @@ export function getTimestampFieldDomain(data, valueAccessor) { const {histogram, enlargedHistogram} = getHistogram(domain, mappedValue); - return {domain, step, mappedValue, histogram, enlargedHistogram}; + return { + domain, + step, + mappedValue, + histogram, + enlargedHistogram, + defaultTimeFormat + }; } /** @@ -733,35 +742,34 @@ export function isInRange(val, domain) { export function isInPolygon(point, polygon) { return booleanWithin(turfPoint(point), polygon); } - +export function isValidTimeDomain(domain) { + return Array.isArray(domain) && domain.every(Number.isFinite); +} export function getTimeWidgetTitleFormatter(domain) { - if (!Array.isArray(domain)) { + if (!isValidTimeDomain(domain)) { return null; } const diff = domain[1] - domain[0]; - return diff > durationYear - ? 'MM/DD/YY' - : diff > durationDay - ? 'MM/DD/YY hh:mma' - : 'MM/DD/YY hh:mm:ssa'; + + // Local aware formats + // https://momentjs.com/docs/#/parsing/string-format + return diff > durationYear ? 'L' : diff > durationDay ? 'L LT' : 'L LTS'; } export function getTimeWidgetHintFormatter(domain) { - if (!Array.isArray(domain)) { + if (!isValidTimeDomain(domain)) { return null; } const diff = domain[1] - domain[0]; - return diff > durationYear - ? 'MM/DD/YY' - : diff > durationWeek - ? 'MM/DD' + return diff > durationWeek + ? 'L' : diff > durationDay - ? 'MM/DD hha' + ? 'L LT' : diff > durationHour - ? 'hh:mma' - : 'hh:mm:ssa'; + ? 'LT' + : 'LTS'; } /** @@ -1090,7 +1098,7 @@ export function validateFiltersUpdateDatasets(state, filtersToValidate = []) { */ export function getIntervalBins(filter) { const {bins} = filter; - const interval = filter.plotType && filter.plotType.interval; + const interval = filter.plotType?.interval; if (!interval || !bins || Object.keys(bins).length === 0) { return null; } diff --git a/src/utils/utils.js b/src/utils/utils.js index 8969963d6c..0e5efdf8ff 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -197,3 +197,7 @@ export function arrayInsert(arr, index, val) { return [...arr.slice(0, index), val, ...arr.slice(index)]; } + +export function isTest() { + return process?.env?.NODE_ENV === 'test'; +} diff --git a/test/browser/components/common/animation-control-test.js b/test/browser/components/common/animation-control-test.js index d498927c84..4d63b6bb4a 100644 --- a/test/browser/components/common/animation-control-test.js +++ b/test/browser/components/common/animation-control-test.js @@ -21,17 +21,26 @@ import React from 'react'; import test from 'tape'; import sinon from 'sinon'; +import moment from 'moment'; +import {setLayerAnimationTimeConfig} from 'actions/vis-state-actions'; + import {mountWithTheme} from 'test/helpers/component-utils'; -import {AnimationControlFactory, PlaybackControlsFactory} from 'components'; +import { + AnimationControlFactory, + PlaybackControlsFactory, + FloatingTimeDisplayFactory +} from 'components'; import {appInjector} from 'components/container'; import {StateWTripGeojson} from 'test/helpers/mock-state'; import { AnimationWindowControl, IconButton } from 'components/common/animation-control/playback-controls'; +import reducer from 'reducers/vis-state'; const AnimationControl = appInjector.get(AnimationControlFactory); const PlaybackControls = appInjector.get(PlaybackControlsFactory); +const FloatingTimeDisplay = appInjector.get(FloatingTimeDisplayFactory); test('Components -> AnimationControl.render', t => { t.doesNotThrow(() => { @@ -41,10 +50,11 @@ test('Components -> AnimationControl.render', t => { t.end(); }); -test('Components -> AnimationControl.render with props', t => { +test('Components -> AnimationControl -> render with props', t => { let wrapper; const toggleAnimation = sinon.spy(); const setLayerAnimationTime = sinon.spy(); + t.doesNotThrow(() => { wrapper = mountWithTheme( AnimationControl.render with props', t => { animationConfig={StateWTripGeojson.visState.animationConfig} /> ); - }, 'Show not fail without props'); + }, 'Show not fail with trip layer props'); t.equal( wrapper.find(AnimationWindowControl).length, @@ -62,6 +72,7 @@ test('Components -> AnimationControl.render with props', t => { 'should not render AnimationWindowControl' ); t.ok(wrapper.find(PlaybackControls), 'should render PlaybackControls'); + t.ok(wrapper.find(FloatingTimeDisplay), 'should render FloatingTimeDisplay'); wrapper .find(IconButton) @@ -70,3 +81,150 @@ test('Components -> AnimationControl.render with props', t => { t.ok(toggleAnimation.calledOnce, 'should call toggleAnimation'); t.end(); }); + +test('Components -> AnimationControl -> time display', t => { + let wrapper; + + // because we are using locale based formats, we set a locale here to make sure + // result are always the same + moment.locale('en'); + const toggleAnimation = () => {}; + const setLayerAnimationTime = () => {}; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + ); + }, 'Show not fail with props'); + + const timeDisplay = wrapper.find(FloatingTimeDisplay); + const timeDomainStart = wrapper.find('.animation-control__time-domain.domain-start'); + const timeDomainEnd = wrapper.find('.animation-control__time-domain.domain-end'); + t.equal(timeDisplay.length, 1, 'should render FloatingTimeDisplay'); + t.equal(timeDomainStart.length, 1, 'should render timeDomainStart'); + t.equal(timeDomainEnd.length, 1, 'should render timeDomainEnd'); + + t.equal( + timeDomainStart + .find('span') + .at(0) + .text(), + '08/12/2019 2:34:21 AM', + 'should render current domain start' + ); + t.equal( + timeDomainEnd + .find('span') + .at(0) + .text(), + '08/12/2019 3:00:36 AM', + 'should render current domain end' + ); + + t.equal( + timeDisplay.find('.animation-control__time-display__top').length, + 1, + 'should render 1 top row time' + ); + t.equal( + timeDisplay + .find('.animation-control__time-display__top') + .at(0) + .find('.time-value') + .text(), + '08/12/2019', + 'should render correct date' + ); + + t.equal( + timeDisplay.find('.animation-control__time-display__bottom').length, + 1, + 'should render 1 top row time' + ); + t.equal( + timeDisplay + .find('.animation-control__time-display__bottom') + .at(0) + .find('.time-value') + .text(), + '2:34:21 AM', + 'should render correct time' + ); + + t.end(); +}); + +test('Components -> AnimationControl -> time display -> custom timezone and timeFormat', t => { + let wrapper; + + const nextState = reducer( + StateWTripGeojson.visState, + setLayerAnimationTimeConfig({ + timezone: 'America/New_York', + timeFormat: 'YYYY MMM DD hh:mm' + }) + ); + + const toggleAnimation = () => {}; + const setLayerAnimationTime = () => {}; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + ); + }, 'Show not fail with props'); + const timeDisplay = wrapper.find(FloatingTimeDisplay); + const timeDomainStart = wrapper.find('.animation-control__time-domain.domain-start'); + const timeDomainEnd = wrapper.find('.animation-control__time-domain.domain-end'); + t.equal(timeDisplay.length, 1, 'should render FloatingTimeDisplay'); + t.equal(timeDomainStart.length, 1, 'should render timeDomainStart'); + t.equal(timeDomainEnd.length, 1, 'should render timeDomainEnd'); + + t.equal( + timeDomainStart + .find('span') + .at(0) + .text(), + '2019 Aug 11 10:34', + 'should render current domain start' + ); + t.equal( + timeDomainEnd + .find('span') + .at(0) + .text(), + '2019 Aug 11 11:00', + 'should render current domain end' + ); + + t.equal( + timeDisplay.find('.animation-control__time-display__bottom').length, + 1, + 'should render 1 bottom row time' + ); + t.equal( + timeDisplay + .find('.animation-control__time-display__bottom') + .at(0) + .find('.time-value') + .text(), + '2019 Aug 11 10:34', + 'should render correct date' + ); + + t.equal( + timeDisplay.find('.animation-control__time-display__top').length, + 0, + 'should render 0 bottom row' + ); + + t.end(); +}); diff --git a/test/browser/components/filters/index.js b/test/browser/components/filters/index.js new file mode 100644 index 0000000000..d542685c80 --- /dev/null +++ b/test/browser/components/filters/index.js @@ -0,0 +1,21 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import './time-widget-test'; diff --git a/test/browser/components/filters/time-widget-test.js b/test/browser/components/filters/time-widget-test.js new file mode 100644 index 0000000000..30c924b174 --- /dev/null +++ b/test/browser/components/filters/time-widget-test.js @@ -0,0 +1,529 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +/* eslint-disable max-statements */ +import React from 'react'; +import test from 'tape'; +import sinon from 'sinon'; +import moment from 'moment'; + +import {IntlWrapper, mountWithTheme, mockHTMLElementClientSize} from 'test/helpers/component-utils'; +import {setFilterAnimationTimeConfig} from 'actions/vis-state-actions'; +import reducer from 'reducers/vis-state'; + +import { + TimeWidgetFactory, + FloatingTimeDisplayFactory, + TimeRangeSliderFactory, + RangeSliderFactory, + FieldSelectorFactory, + PlaybackControlsFactory, + AnimationSpeedSliderFactory, + Icons, + TimeSliderMarkerFactory, + TimeRangeSliderTimeTitleFactory +} from 'components'; +import { + AnimationWindowControl, + IconButton +} from 'components/common/animation-control/playback-controls'; +import SliderHandle from 'components/common/slider/slider-handle'; +import Typeahead from 'components/common/item-selector/typeahead'; + +import {appInjector} from 'components/container'; + +const TimeWidget = appInjector.get(TimeWidgetFactory); +const TimeRangeSlider = appInjector.get(TimeRangeSliderFactory); +const RangeSlider = appInjector.get(RangeSliderFactory); +const FloatingTimeDisplay = appInjector.get(FloatingTimeDisplayFactory); +const FieldSelector = appInjector.get(FieldSelectorFactory); +const PlaybackControls = appInjector.get(PlaybackControlsFactory); +const AnimationSpeedSlider = appInjector.get(AnimationSpeedSliderFactory); +const TimeSliderMarker = appInjector.get(TimeSliderMarkerFactory); +const TimeRangeSliderTimeTitle = appInjector.get(TimeRangeSliderTimeTitleFactory); + +// mock state +import {StateWFilters} from 'test/helpers/mock-state'; + +const nop = () => {}; +// default props from initial state +const defaultProps = { + datasets: StateWFilters.visState.datasets, + filter: StateWFilters.visState.filters[0], + index: 0, + readOnly: false, + showTimeDisplay: true, + isAnimatable: true, + setFilterAnimationTime: nop, + resetAnimation: nop, + updateAnimationSpeed: nop, + toggleAnimation: nop, + enlargeFilter: nop, + setFilterPlot: nop, + setFilterAnimationWindow: nop +}; + +// call to set filter timezone and timeformat +const nextState = reducer( + StateWFilters.visState, + setFilterAnimationTimeConfig(0, { + timezone: 'America/New_York', + timeFormat: 'YYYY MMM DD hh:mm a' + }) +); + +test('Components -> TimeWidget.mount -> with time filter', t => { + let wrapper; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + + ); + }, 'TimeWidget should not fail without props'); + + t.equal(wrapper.find(TimeWidget).length, 1, 'should render TimeWidget'); + t.equal(wrapper.find(FloatingTimeDisplay).length, 1, 'should render FloatingTimeDisplay'); + t.equal(wrapper.find(TimeRangeSlider).length, 1, 'should render TimeRangeSlider'); + t.equal(wrapper.find(FieldSelector).length, 1, 'should render FieldSelector'); + t.equal(wrapper.find(PlaybackControls).length, 1, 'should render PlaybackControls'); + + // check yAxisFields + const yAxisFields = wrapper + .find(FieldSelector) + .at(0) + .props().fields; + t.deepEqual( + yAxisFields.map(f => f.name), + ['gps_data.lat', 'gps_data.lng', 'id'], + 'should only pass real / integer fields to yAxis' + ); + + t.end(); +}); + +test('Components -> TimeWidget.mount -> test actions', t => { + const enlargeFilter = sinon.spy(); + const toggleAnimation = sinon.spy(); + const updateAnimationSpeed = sinon.spy(); + const setFilterAnimationWindow = sinon.spy(); + const setFilterPlot = sinon.spy(); + const setFilterAnimationTime = sinon.spy(); + + // mock slider client size width so that value calculation works + const clientSizeStub = mockHTMLElementClientSize('offsetWidth', 500); + let wrapper; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + , + { + attachTo: document.body + } + ); + }, 'mount TimeWidget should not fail'); + + t.equal(wrapper.find(Icons.Close).length, 1, 'should render Close icon'); + t.equal(wrapper.find(Icons.Reset).length, 1, 'should render Reset icon'); + t.equal(wrapper.find(Icons.Play).length, 1, 'should render Play icon'); + t.equal(wrapper.find(Icons.FreeWindow).length, 1, 'should render Window icon'); + t.equal( + wrapper.find(AnimationSpeedSlider).length, + 0, + 'should not render AnimationSpeedSlider iniitally' + ); + t.equal( + wrapper.find(AnimationWindowControl).length, + 0, + 'should not render AnimationWindowControl iniitally' + ); + + // hit play + wrapper + .find(Icons.Play) + .at(0) + .simulate('click'); + t.deepEqual(toggleAnimation.args[0], [0], 'should call toggle animation'); + + // hit speed icon + wrapper + .find(Icons.Rocket) + .at(0) + .simulate('click'); + + t.equal(wrapper.find(AnimationSpeedSlider).length, 1, 'should render AnimationSpeedSlider'); + t.equal( + wrapper + .find(AnimationSpeedSlider) + .at(0) + .find('.kg-range-slider__handle').length, + 2, + 'should render 2 speed slider handle' + ); + const sliderHandle = wrapper + .find(AnimationSpeedSlider) + .at(0) + .find('.kg-range-slider__handle') + .at(1); + + sliderHandle.simulate('mousedown', {clientX: 0}); + + // simulate slider move + const mouseMove = new window.MouseEvent('mousemove', {clientX: 100}); + document.dispatchEvent(mouseMove); + + // test updateAnimationSpeed + t.deepEqual(updateAnimationSpeed.args[0], [0, 2], 'should call updateAnimationSpeed with speed'); + + // hit animation window + wrapper + .find(Icons.FreeWindow) + .at(0) + .simulate('click'); + t.equal( + wrapper.find(AnimationWindowControl).length, + 1, + 'should render AnimationWindowControl iniitally' + ); + t.equal( + wrapper + .find(AnimationWindowControl) + .at(0) + .find(IconButton).length, + 1, + 'should render 1 animate window options' + ); + + // select an animtion option + wrapper + .find(AnimationWindowControl) + .at(0) + .find(IconButton) + .at(0) + .simulate('click'); + t.deepEqual( + setFilterAnimationWindow.args[0], + [{id: StateWFilters.visState.filters[0].id, animationWindow: 'incremental'}], + 'should call setFilterAnimationWindow' + ); + + // click yaxis select + wrapper + .find('.item-selector__dropdown') + .at(0) + .simulate('click'); + t.equal(wrapper.find(Typeahead).length, 1, 'should render dropdown select'); + + wrapper + .find(Typeahead) + .find('.field-selector_list-item') + .at(0) + .simulate('click'); + t.equal(setFilterPlot.args[0][0], 0, 'should pass filteridx to setFilterPlot'); + t.equal( + setFilterPlot.args[0][1].yAxis.name, + 'gps_data.lat', + 'should pass correct yAxis to setFilterPlot' + ); + + // hit close + wrapper + .find(Icons.Close) + .at(0) + .simulate('click'); + + t.deepEqual(enlargeFilter.args[0], [0], 'should call enlarged fitler to close'); + + wrapper.detach(); + clientSizeStub.restore(); + t.end(); +}); + +test('Components -> TimeWidget.mount -> test setFilterAnimationTime', t => { + const setFilterAnimationTime = sinon.spy(); + let wrapper; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + , + { + attachTo: document.body + } + ); + }, 'mount TimeWidget should not fail'); + + // mock slider client size width so that value calculation works + const clientSizeStub = mockHTMLElementClientSize('offsetWidth', 500); + t.equal(wrapper.find(RangeSlider).length, 1, 'should render RangeSlider'); + const rangeSlider = wrapper.find(RangeSlider).at(0); + + t.equal(rangeSlider.find(SliderHandle).length, 2, 'should render 2 slider handle'); + + rangeSlider + .find(SliderHandle) + .at(0) + .find('.kg-range-slider__handle') + .at(0) + .simulate('mousedown', {clientX: 0}); + // simulate slider move + const mouseMove = new window.MouseEvent('mousemove', {clientX: 100}); + document.dispatchEvent(mouseMove); + + // test updateAnimationSpeed + t.deepEqual( + setFilterAnimationTime.args[0], + [0, 'value', [1474594560000, 1474617600000]], + 'should call setFilterAnimationTime with new value' + ); + + // cleanup + wrapper.detach(); + clientSizeStub.restore(); + t.end(); +}); + +test('Components -> TimeWidget.mount -> test floating time display', t => { + const topSelector = '.animation-control__time-display__top'; + const bottomSelector = '.animation-control__time-display__bottom'; + let wrapper; + // because we are using locale based formats, we set a locale here to make sure + // result are always the same + moment.locale('en'); + + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + + ); + }, 'mount TimeWidget should not fail'); + + const timeDisplay = wrapper.find(FloatingTimeDisplay); + t.equal(timeDisplay.find(topSelector).length, 1, 'should render 1 top row'); + t.equal( + timeDisplay + .find(topSelector) + .at(0) + .find('.time-value') + .text(), + '09/23/2016', + 'should render correct date' + ); + + t.equal(timeDisplay.find(bottomSelector).length, 1, 'should render 1 bottom row'); + t.equal( + timeDisplay + .find(bottomSelector) + .at(0) + .find('.time-value').length, + 2, + 'should render 2 time value' + ); + t.equal( + timeDisplay + .find(bottomSelector) + .at(0) + .find('.time-value') + .at(0) + .text(), + '5:00:00 AM', + 'should render correct time' + ); + t.equal( + timeDisplay + .find(bottomSelector) + .at(0) + .find('.time-value') + .at(1) + .text(), + '8:00:00 AM', + 'should render correct time' + ); + + // set TimeWidget prop + // filter with timezone and custom Format + wrapper.setProps({ + children: + }); + + // check time display again + const timeDisplay2 = wrapper.find(FloatingTimeDisplay); + t.equal( + timeDisplay2 + .find(bottomSelector) + .at(0) + .find('.time-value') + .at(0) + .text(), + '2016 Sep 23 01:00 am', + 'should render correct time format and timezone' + ); + + t.equal( + timeDisplay2 + .find(bottomSelector) + .at(0) + .find('.time-value') + .at(1) + .text(), + '2016 Sep 23 04:00 am', + 'should render correct time format and timezone' + ); + + t.end(); +}); + +test('Components -> TimeWidget.mount -> TimeSliderMarker', t => { + const clientSizeStub = mockHTMLElementClientSize('offsetWidth', 500); + + let wrapper; + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + + ); + }, 'mount TimeWidget should not fail'); + + t.equal(wrapper.find(TimeSliderMarker).length, 1, 'should render TimeSliderMarker'); + let d3Html = wrapper + .find(TimeSliderMarker) + .at(0) + .find('.x.axis') + .html(); + + // moment.utc(1474588800000) -> "2016-09-23 00:00" + // moment.utc(1474617600000) -> "2016-09-23 08:00" + // Enyme cant detect element appended by d3 + const expectedMarks = [ + 'Fri 23', + '01 AM', + '02 AM', + '03 AM', + '04 AM', + '05 AM', + '06 AM', + '07 AM', + '08 AM' + ]; + expectedMarks.forEach(mark => { + t.ok( + d3Html.includes(`${mark}`), + `should render correct time marker ${mark}` + ); + }); + + // set TimeWidget prop + wrapper.setProps({ + children: + }); + + d3Html = wrapper + .find(TimeSliderMarker) + .at(0) + .find('.x.axis') + .html(); + + // moment.utc(1474588800000).tz('America/New_York') -> "2016-09-22 20:00" + // moment.utc(1474617600000).tz('America/New_York') -> "2016-09-23 04:00" + // Enyme cant detect element appended by d3 + const expectedMarks2 = [ + '20 PM', + '21 PM', + '22 PM', + '23 PM', + 'Fri 23', + '01 AM', + '02 AM', + '03 AM', + '04 AM' + ]; + expectedMarks2.forEach(mark => { + t.ok( + d3Html.includes(`${mark}`), + `should render correct time marker ${mark}` + ); + }); + + const inalidFilter = { + ...StateWFilters.visState.filters[0], + domain: null + }; + + // set TimeWidget prop + t.doesNotThrow(() => { + wrapper.setProps({ + children: + }); + }, 'mount TimeWidget with invalid filter should not fail'); + + clientSizeStub.restore(); + t.end(); +}); + +test('Components -> TimeWidget.mount -> TimeTitle', t => { + const selector = '.time-range-slider__time-title .time-value span'; + let wrapper; + // because we are using locale based formats, we set a locale here to make sure + // result are always the same + moment.locale('en'); + + t.doesNotThrow(() => { + wrapper = mountWithTheme( + + + + ); + }, 'mount TimeWidget with showTimeDisplay false'); + + t.equal( + wrapper.find(TimeRangeSliderTimeTitle).length, + 1, + 'should render TimeRangeSliderTimeTitle' + ); + t.equal(wrapper.find(selector).length, 2, 'Should render 2 time title value'); + + let expected = ['09/23/2016 5:00:00 AM', '09/23/2016 8:00:00 AM']; + wrapper.find(selector).forEach((span, i) => { + t.equal(span.text(), expected[i], `should render correct time value ${expected[i]}`); + }); + + // set TimeWidget prop with timezone and custom Format time filter + wrapper.setProps({ + children: + }); + + expected = ['2016 Sep 23 01:00 am', '2016 Sep 23 04:00 am']; + wrapper.find(selector).forEach((span, i) => { + t.equal(span.text(), expected[i], `should render correct time value ${expected[i]}`); + }); + + t.end(); +}); diff --git a/test/browser/components/helpers.js b/test/browser/components/helpers.js new file mode 100644 index 0000000000..62c9ea8a4d --- /dev/null +++ b/test/browser/components/helpers.js @@ -0,0 +1,39 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import {useEffect, useRef} from 'react'; + +// Hook to check which prop change causing component rerender +export function useTraceUpdate(props) { + const prev = useRef(props); + useEffect(() => { + const changedProps = Object.entries(props).reduce((ps, [k, v]) => { + if (prev.current[k] !== v) { + ps[k] = [prev.current[k], v]; + } + return ps; + }, {}); + if (Object.keys(changedProps).length > 0) { + // eslint-disable-next-line no-console + console.log('Changed props:', changedProps); + } + prev.current = props; + }); +} diff --git a/test/browser/components/index.js b/test/browser/components/index.js index 5f2e192e1f..0f30bfe0e0 100644 --- a/test/browser/components/index.js +++ b/test/browser/components/index.js @@ -29,6 +29,7 @@ import './side-panel'; import './common'; import './editor'; +import './filters'; import './map-container-test'; import './geocoder-panel-test'; import './tooltip-config-test'; diff --git a/test/fixtures/state-saved-v0.js b/test/fixtures/state-saved-v0.js index 6b58ee3567..393bce8928 100644 --- a/test/fixtures/state-saved-v0.js +++ b/test/fixtures/state-saved-v0.js @@ -935,7 +935,8 @@ export const mergedFilters = [ fieldType: 'timestamp', fixedDomain: true, gpu: true, - gpuChannel: [0] + gpuChannel: [0], + defaultTimeFormat: 'L LTS' }, { dataId: ['9h10t7fyb'], diff --git a/test/fixtures/test-csv-data.js b/test/fixtures/test-csv-data.js index f093ebfec9..1a51fe3e13 100644 --- a/test/fixtures/test-csv-data.js +++ b/test/fixtures/test-csv-data.js @@ -789,7 +789,8 @@ export const timeFilterProps = { enlarged: true, fixedDomain: true, gpu: true, - value: [1474588800000, 1474617600000] + value: [1474588800000, 1474617600000], + defaultTimeFormat: 'L LTS' }; export const mergedTimeFilter = { @@ -823,7 +824,8 @@ export const epochFilterProps = { enlarged: true, fixedDomain: true, gpu: true, - value: [1472688000000, 1472774400000] + value: [1472688000000, 1472774400000], + defaultTimeFormat: 'L LTS' }; // value set mockStateWithFilters 1472700000000, 1472760000000 diff --git a/test/helpers/component-utils.js b/test/helpers/component-utils.js index f619f91456..bea3595127 100644 --- a/test/helpers/component-utils.js +++ b/test/helpers/component-utils.js @@ -19,16 +19,18 @@ // THE SOFTWARE. import React from 'react'; +import sinon from 'sinon'; import {mount} from 'enzyme'; import {theme} from 'styles/base'; import {ThemeProvider} from 'styled-components'; import {IntlProvider} from 'react-intl'; import {messages} from 'localization'; -export function mountWithTheme(node) { +export function mountWithTheme(node, options) { return mount(node, { wrappingComponent: ThemeProvider, - wrappingComponentProps: {theme} + wrappingComponentProps: {theme}, + ...options }); } @@ -37,3 +39,7 @@ export const IntlWrapper = ({children, locale = 'en'}) => ( {children} ); + +export function mockHTMLElementClientSize(prop, value) { + return sinon.stub(HTMLElement.prototype, prop).get(() => value); +} diff --git a/test/node/reducers/vis-state-test.js b/test/node/reducers/vis-state-test.js index 6f5b2f505e..ef964eb25f 100644 --- a/test/node/reducers/vis-state-test.js +++ b/test/node/reducers/vis-state-test.js @@ -485,7 +485,8 @@ test('#visStateReducer -> LAYER_TYPE_CHANGE.3 -> animationConfig', t => { { ...DEFAULT_ANIMATION_CONFIG, domain: timeStampDomain, - currentTime: timeStampDomain[0] + currentTime: timeStampDomain[0], + defaultTimeFormat: 'L LTS' }, 'should update visState.animationConfig' ); @@ -523,7 +524,15 @@ test('#visStateReducer -> LAYER_CONFIG_CHANGE -> isVisible -> animationConfig', t.deepEqual( nextState.animationConfig, - DEFAULT_ANIMATION_CONFIG, + { + domain: null, + currentTime: 1565577261000, + speed: 1, + isAnimating: false, + defaultTimeFormat: null, + timeFormat: null, + timezone: null + }, 'should set animationConfig to default' ); @@ -537,7 +546,8 @@ test('#visStateReducer -> LAYER_CONFIG_CHANGE -> isVisible -> animationConfig', { ...nextState2.animationConfig, domain: timeStampDomain, - currentTime: timeStampDomain[0] + currentTime: timeStampDomain[0], + defaultTimeFormat: 'L LTS' }, 'should set animationConfig domain and currentTime' ); @@ -2426,7 +2436,8 @@ test('#visStateReducer -> setFilter.fixedDomain & DynamicDomain & gpu & cpu', t animationWindow: 'free', fieldType: 'timestamp', gpu: true, - gpuChannel: [0] + gpuChannel: [0], + defaultTimeFormat: 'L LTS' }; cmpFilters(t, expectedFilterTs, stateWidthTsFilter.filters[0]); @@ -2449,7 +2460,8 @@ test('#visStateReducer -> setFilter.fixedDomain & DynamicDomain & gpu & cpu', t enlarged: true, fixedDomain: true, value: [1474070995000, 1474072208000], - gpu: true + gpu: true, + defaultTimeFormat: 'L LTS' } } : f @@ -2674,7 +2686,8 @@ test('#visStateReducer -> SET_FILTER_PLOT', t => { animationWindow: 'free', fieldType: 'timestamp', gpu: true, - gpuChannel: [0] + gpuChannel: [0], + defaultTimeFormat: 'L LTS' }; // test filter @@ -2899,7 +2912,7 @@ test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER', t => { t.end(); }); -test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER', t => { +test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER. set animation domain', t => { const layer1 = new PointLayer({id: 'a'}); const layer2 = new PointLayer({id: 'b'}); const layer3 = new TripLayer({id: 't1', isVisible: true}); @@ -2924,7 +2937,8 @@ test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER', t => { const newReducer = reducer(oldState, VisStateActions.removeLayer(2)); const expectedAnimationConfig = { domain: [1568502810000, 1568503060000], - currentTime: 1568502970000 + currentTime: 1568502970000, + defaultTimeFormat: 'L LTS' }; t.deepEqual( @@ -2936,7 +2950,8 @@ test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER', t => { const newReducer2 = reducer(oldState, VisStateActions.removeLayer(3)); const expectedAnimationConfig2 = { domain: [1568502710000, 1568502960000], - currentTime: 1568502710000 + currentTime: 1568502710000, + defaultTimeFormat: 'L LTS' }; t.deepEqual( newReducer2.animationConfig, @@ -2947,7 +2962,11 @@ test('#visStateReducer -> SPLIT_MAP: REMOVE_LAYER', t => { const newReducer3 = reducer(newReducer2, VisStateActions.removeLayer(2)); t.deepEqual( newReducer3.animationConfig, - DEFAULT_ANIMATION_CONFIG, + { + domain: null, + currentTime: 1568502710000, + defaultTimeFormat: null + }, 'remove last animation layer and set animation config to default' ); @@ -5004,3 +5023,45 @@ test('#visStateReducer -> LOAD_FILES', async t => { loadFileErrSpy.restore(); t.end(); }); + +test('#visStateReducer -> setLayerAnimationTimeConfig', t => { + // change Trip layer isVisible + const nextState = reducer( + StateWTripGeojson.visState, + VisStateActions.setLayerAnimationTimeConfig({ + timezone: 'America/New_York', + timeFormat: 'YYYY-MM-DD', + random: 1 + }) + ); + + t.equal( + nextState.animationConfig.timezone, + 'America/New_York', + 'should set animationConfig timezone' + ); + t.equal( + nextState.animationConfig.timeFormat, + 'YYYY-MM-DD', + 'should set animationConfig timeFormat' + ); + t.equal(nextState.animationConfig.random, undefined, 'should not set unknown key'); + t.end(); +}); + +test('#visStateReducer -> setFilterAnimationTimeConfig', t => { + // change Trip layer isVisible + const nextState = reducer( + StateWFilters.visState, + VisStateActions.setFilterAnimationTimeConfig(1, {timezone: 'America/New_York'}) + ); + + t.equal(nextState, StateWFilters.visState, 'should not change if is not time filter'); + + const nextState1 = reducer( + StateWFilters.visState, + VisStateActions.setFilterAnimationTimeConfig(0, {timezone: 'America/New_York'}) + ); + t.equal(nextState1.filters[0].timezone, 'America/New_York', 'should set filter timeFormat'); + t.end(); +}); diff --git a/test/node/utils/filter-utils-test.js b/test/node/utils/filter-utils-test.js index 0759c78784..dbff7a79f1 100644 --- a/test/node/utils/filter-utils-test.js +++ b/test/node/utils/filter-utils-test.js @@ -483,7 +483,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { domain: [0, 1], step: 0.05, ...getHistogram([0, 1], []), - mappedValue: [] + mappedValue: [], + defaultTimeFormat: 'L LTS' } }, zero: { @@ -493,7 +494,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { mappedValue: [1475315139000, 1475315139000], histogram: [{count: 2, x0: 1475315139000, x1: 1475315139000}], enlargedHistogram: [{count: 2, x0: 1475315139000, x1: 1475315139000}], - step: 0.05 + step: 0.05, + defaultTimeFormat: 'L LTS' } }, tiny: { @@ -505,7 +507,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { [1475315139001, 1475315139003], [1475315139001, 1475315139002, 1475315139003] ), - step: 0.1 + step: 0.1, + defaultTimeFormat: 'L LTS' } }, small: { @@ -515,7 +518,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { mappedValue: [1475315139010, 1475315139020, 1475315139030], histogram: [], enlargedHistogram: [], - step: 1 + step: 1, + defaultTimeFormat: 'L LTS' } }, medium: { @@ -525,7 +529,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { mappedValue: [1475315139100, 1475315139200, 1475315139300], histogram: [], enlargedHistogram: [], - step: 5 + step: 5, + defaultTimeFormat: 'L LTS' } }, large: { @@ -535,7 +540,8 @@ test('filterUtils -> getTimestampFieldDomain', t => { mappedValue: [1475315139000, 1475315145000], histogram: [], enlargedHistogram: [], - step: 1000 + step: 1000, + defaultTimeFormat: 'L LTS' } } }; diff --git a/yarn.lock b/yarn.lock index d94c27b127..9f930292a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.12.1": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.10.tgz#67a1015b1cd505bde1696196febf910c4c339a48" - integrity sha512-+y4ZnePpvWs1fc/LhZRTHkTesbXkyBYuOB+5CyodZqrEuETXi3zOVfpAQIdgC3lXbHLTDG9dQosxR9BhvLKDLQ== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.13.10.tgz#3a9254cbe806639c8ca4ebd49ebe54b4267b88c9" + integrity sha512-lYSBC7B4B9hJ7sv0Ojx1BrGhuzCoOIYfLjd+Xpd4rOzdS+a47yi8voV8vFkfjlZR1N5qZO7ixOCbobUdT304PQ== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -33,7 +33,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== @@ -45,19 +45,24 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== -"@babel/core@>=7.9.0": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.5.tgz#6ad96e2f71899ea3f9b651f0a911e85205d1ff6d" - integrity sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q== +"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.11.tgz#9c8fe523c206979c9a81b1e12fe50c1254f1aa35" + integrity sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== + +"@babel/core@>=7.9.0", "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.1.2", "@babel/core@^7.7.5": + version "7.12.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.8.tgz#8ad76c1a7d2a6a3beecc4395fa4f7b4cb88390e6" + integrity sha512-ra28JXL+5z73r1IC/t+FT1ApXU5LsulFDnTDntNfLQaScJUJmcHL5Qxm/IWanCToQk3bPWQo5bflbplU5r15pg== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.5" - "@babel/types" "^7.11.5" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.8" + "@babel/types" "^7.12.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -65,91 +70,40 @@ lodash "^4.17.19" resolve "^1.3.2" semver "^5.4.1" - source-map "^0.6.1" - -"@babel/core@^7.0.0", "@babel/core@^7.1.2": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" - integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helpers" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" source-map "^0.5.0" "@babel/core@^7.12.1": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" - integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.10" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.10" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.10" - "@babel/types" "^7.12.10" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" lodash "^4.17.19" - semver "^5.4.1" + semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.1.3", "@babel/generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" - integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== +"@babel/generator@^7.1.3", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.12.5" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.5.tgz#a5582773425a468e4ba269d9a1f701fbca6a7a82" - integrity sha512-9UqHWJ4IwRTy4l0o8gq2ef8ws8UPzvtMkVKjTLAiRmza9p9V6Z+OfuNd9fB1j5Q67F+dVJtPC2sZXI8NM9br4g== - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.6.1" - -"@babel/generator@^7.12.10", "@babel/generator@^7.12.11": +"@babel/generator@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== @@ -158,47 +112,28 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" - integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== - dependencies: - "@babel/types" "^7.12.13" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" - integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== - dependencies: - "@babel/types" "^7.12.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.13.0" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== dependencies: "@babel/types" "^7.10.4" -"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" - integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== +"@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== dependencies: - "@babel/types" "^7.12.10" + "@babel/types" "^7.12.13" "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" @@ -208,6 +143,14 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/helper-builder-react-jsx-experimental@^7.12.4": version "7.12.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" @@ -235,6 +178,16 @@ browserslist "^4.14.5" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" @@ -246,17 +199,16 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.3.tgz#5b94be88c255f140fd2c10dd151e7f98f4bff397" - integrity sha512-qmp4pD7zeTxsv0JNecSBsEmG1ei2MqwJq4YQcK3ZWm/0t07QstWfvuV/vm3Qt5xNMFETn2SZqpMx2MQzbtq+KA== +"@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.1": version "7.12.7" @@ -266,6 +218,14 @@ "@babel/helper-annotate-as-pure" "^7.10.4" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" + "@babel/helper-define-map@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" @@ -275,6 +235,20 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" +"@babel/helper-define-polyfill-provider@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" + integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-explode-assignable-expression@^7.10.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" @@ -282,6 +256,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== + dependencies: + "@babel/types" "^7.13.0" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -291,7 +272,16 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.12.11", "@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.8.3": +"@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + +"@babel/helper-function-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== @@ -307,6 +297,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -321,6 +318,14 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" + integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== + dependencies: + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helper-member-expression-to-functions@^7.12.1": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" @@ -328,46 +333,26 @@ dependencies: "@babel/types" "^7.12.7" -"@babel/helper-member-expression-to-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz#c5715695b4f8bab32660dbdcdc2341dec7e3df40" - integrity sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.13.0" -"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" + "@babel/types" "^7.12.13" "@babel/helper-module-transforms@^7.12.1": version "7.12.1" @@ -384,6 +369,21 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + lodash "^4.17.19" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" @@ -391,7 +391,7 @@ dependencies: "@babel/types" "^7.12.7" -"@babel/helper-optimise-call-expression@^7.12.13", "@babel/helper-optimise-call-expression@^7.8.3": +"@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== @@ -403,6 +403,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + "@babel/helper-remap-async-to-generator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" @@ -412,6 +417,15 @@ "@babel/helper-wrap-function" "^7.10.4" "@babel/types" "^7.12.1" +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helper-replace-supers@^7.12.1": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" @@ -422,15 +436,15 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helper-replace-supers@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" - integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" "@babel/helper-simple-access@^7.12.1": version "7.12.1" @@ -439,6 +453,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -453,7 +474,14 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.12.11", "@babel/helper-split-export-declaration@^7.12.13", "@babel/helper-split-export-declaration@^7.8.3": +"@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + +"@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== @@ -470,10 +498,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" - integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== "@babel/helper-wrap-function@^7.10.4": version "7.12.3" @@ -485,14 +518,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.10.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== dependencies: + "@babel/helper-function-name" "^7.12.13" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" "@babel/helpers@^7.12.5": version "7.12.5" @@ -503,23 +537,14 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helpers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" - integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ== +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" "@babel/highlight@^7.10.4": version "7.10.4" @@ -531,20 +556,20 @@ js-tokens "^4.0.0" "@babel/highlight@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/node@^7.12.1": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.12.10.tgz#2a78e1a3a98f08e0d5e8adbaba783bed5efb09ae" - integrity sha512-lJT1sXp1bEfAZ7B2ChEOOiUxaGbIWkcAixqZDpbHnJWUqIjoofOGo5ON1bJ9HOmtMdF7rqKiOoM7zZSI87El3g== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.13.10.tgz#8babfc08940722c704136f61283a4cb9af88a2c5" + integrity sha512-cxJcxGsyGMXifzP+Plz/wcYFvGgi5Xz/RVOLQ50Hiz62BkhTaTeKVXQrHi6nmrf+hnP3Xtl/P6S4OCYGrk1zmw== dependencies: - "@babel/register" "^7.12.10" + "@babel/register" "^7.13.8" commander "^4.0.1" core-js "^3.2.1" lodash "^4.17.19" @@ -557,54 +582,40 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== -"@babel/parser@^7.1.0", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.7", "@babel/parser@^7.8.3": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== +"@babel/parser@^7.12.1", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88" + integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== -"@babel/parser@^7.12.1": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd" - integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw== - -"@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": +"@babel/parser@^7.12.11", "@babel/parser@^7.7.0": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== -"@babel/parser@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.15.tgz#2b20de7f0b4b332d9b119dd9c33409c538b8aacf" - integrity sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA== - -"@babel/parser@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" - integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== - "@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" - integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.1.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== +"@babel/plugin-proposal-async-generator-functions@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" + integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.12.1": +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== @@ -612,6 +623,14 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-proposal-decorators@^7.1.2": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" @@ -637,6 +656,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" +"@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.1.tgz#c6e62d668a8abcfe0d28b82f560395fecb611c5a" @@ -653,6 +680,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" + integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-function-bind@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.12.1.tgz#8b891b412ffbc8e8ff3fd4df67b8d4bbe5947004" @@ -678,15 +713,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-logical-assignment-operators@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.8.3.tgz#e94810d96cb76f20524e66ba617171c21f3c0124" - integrity sha512-TLPLojGZYBeeoesO2NQIMLUJKD9N5oJlxG6iHLx7l7EvNQP5DfzeyxdI2lMPo5I7ih4Jv/vxrlwIPf6aJw422Q== +"@babel/plugin-proposal-json-strings@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": +"@babel/plugin-proposal-logical-assignment-operators@^7.0.0", "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== @@ -694,15 +729,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== @@ -710,15 +745,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.12.7": +"@babel/plugin-proposal-numeric-separator@^7.0.0", "@babel/plugin-proposal-numeric-separator@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== @@ -726,6 +761,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" + integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -735,6 +778,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" +"@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-proposal-optional-catch-binding@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" @@ -743,15 +797,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.12.7": +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== @@ -760,6 +814,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz#e39df93efe7e7e621841babc197982e140e90756" + integrity sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-pipeline-operator@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.12.1.tgz#4bd377bc7e5be92f22f1c08b3f3963636bd8f4a1" @@ -776,6 +839,14 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-proposal-throw-expressions@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.12.1.tgz#5adf4abc7f349a2da532e663b36251f6017c4279" @@ -792,6 +863,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-unicode-property-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -813,6 +892,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-decorators@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz#81a8b535b284476c41be6de06853a8802b98c5dd" @@ -827,7 +913,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -890,20 +976,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-jsx@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" + integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" - integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" @@ -911,20 +997,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" @@ -960,19 +1039,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-top-level-await@^7.12.1": +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-arrow-functions@^7.12.1": version "7.12.1" @@ -981,6 +1060,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-async-to-generator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" @@ -990,6 +1076,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" @@ -997,6 +1092,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-block-scoping@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" @@ -1004,12 +1106,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.12.11": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" - integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== +"@babel/plugin-transform-block-scoping@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" + integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-classes@^7.12.1": version "7.12.1" @@ -1025,6 +1127,19 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" @@ -1032,6 +1147,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-destructuring@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" @@ -1039,6 +1161,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-destructuring@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" + integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" @@ -1047,6 +1176,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-dotall-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-duplicate-keys@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" @@ -1054,6 +1191,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" @@ -1062,6 +1206,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-flow-strip-types@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz#8430decfa7eb2aea5414ed4a3fa6e1652b7d77c4" @@ -1077,6 +1229,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-function-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" @@ -1085,6 +1244,14 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" @@ -1092,6 +1259,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-member-expression-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" @@ -1099,6 +1273,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-modules-amd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" @@ -1108,6 +1289,15 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" @@ -1118,6 +1308,16 @@ "@babel/helper-simple-access" "^7.12.1" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" @@ -1129,6 +1329,17 @@ "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + dependencies: + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" @@ -1137,6 +1348,14 @@ "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" @@ -1144,12 +1363,26 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/plugin-transform-new-target@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-new-target@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-object-super@^7.12.1": version "7.12.1" @@ -1159,6 +1392,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.12.1" +"@babel/plugin-transform-object-super@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + "@babel/plugin-transform-parameters@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" @@ -1166,6 +1407,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-property-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" @@ -1173,6 +1421,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-property-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-react-display-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" @@ -1180,12 +1435,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-display-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" + integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-react-jsx-development@^7.12.12": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.12.17" + "@babel/plugin-transform-react-jsx-development@^7.12.7": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz#bccca33108fe99d95d7f9e82046bfe762e71f4e7" - integrity sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz#4c2a647de79c7e2b16bfe4540677ba3121e82a08" + integrity sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" "@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.12.1" @@ -1201,16 +1472,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.12.10", "@babel/plugin-transform-react-jsx@^7.12.12": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz#b0da51ffe5f34b9a900e9f1f5fb814f9e512d25e" - integrity sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw== +"@babel/plugin-transform-react-jsx@^7.12.13", "@babel/plugin-transform-react-jsx@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24" + integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.10" - "@babel/helper-module-imports" "^7.12.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-jsx" "^7.12.1" - "@babel/types" "^7.12.12" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/types" "^7.12.17" "@babel/plugin-transform-react-jsx@^7.12.7": version "7.12.7" @@ -1237,6 +1508,13 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" + integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-reserved-words@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" @@ -1244,14 +1522,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-runtime@^7.12.1": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" - integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== +"@babel/plugin-transform-reserved-words@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== dependencies: - "@babel/helper-module-imports" "^7.12.5" - "@babel/helper-plugin-utils" "^7.10.4" - semver "^5.5.1" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-runtime@^7.12.1": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz#a1e40d22e2bf570c591c9c7e5ab42d6bf1e419e1" + integrity sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.1.4" + babel-plugin-polyfill-corejs3 "^0.1.3" + babel-plugin-polyfill-regenerator "^0.1.2" + semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.12.1": version "7.12.1" @@ -1260,6 +1548,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" @@ -1268,6 +1563,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" +"@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-sticky-regex@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" @@ -1282,6 +1592,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-transform-typeof-symbol@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" @@ -1289,12 +1606,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" - integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== +"@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-unicode-escapes@^7.12.1": version "7.12.1" @@ -1303,6 +1620,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-unicode-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" @@ -1311,6 +1635,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/polyfill@^7.0.0", "@babel/polyfill@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" @@ -1320,78 +1652,15 @@ regenerator-runtime "^0.13.4" "@babel/preset-env@^7.1.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.3.tgz#dc0fb2938f52bbddd79b3c861a4b3427dd3a6c54" - integrity sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg== - dependencies: - "@babel/compat-data" "^7.8.0" - "@babel/helper-compilation-targets" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.3" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.3" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.3" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" - browserslist "^4.8.2" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.0" - semver "^5.5.0" - -"@babel/preset-env@^7.12.1": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" - integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" + integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== dependencies: "@babel/compat-data" "^7.12.7" "@babel/helper-compilation-targets" "^7.12.5" "@babel/helper-module-imports" "^7.12.5" "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.11" + "@babel/helper-validator-option" "^7.12.1" "@babel/plugin-proposal-async-generator-functions" "^7.12.1" "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-dynamic-import" "^7.12.1" @@ -1420,7 +1689,7 @@ "@babel/plugin-transform-arrow-functions" "^7.12.1" "@babel/plugin-transform-async-to-generator" "^7.12.1" "@babel/plugin-transform-block-scoped-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-block-scoping" "^7.12.1" "@babel/plugin-transform-classes" "^7.12.1" "@babel/plugin-transform-computed-properties" "^7.12.1" "@babel/plugin-transform-destructuring" "^7.12.1" @@ -1446,14 +1715,88 @@ "@babel/plugin-transform-spread" "^7.12.1" "@babel/plugin-transform-sticky-regex" "^7.12.7" "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" "@babel/plugin-transform-unicode-escapes" "^7.12.1" "@babel/plugin-transform-unicode-regex" "^7.12.1" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.11" - core-js-compat "^3.8.0" + "@babel/types" "^7.12.7" + core-js-compat "^3.7.0" semver "^5.5.0" +"@babel/preset-env@^7.12.1": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.10.tgz#b5cde31d5fe77ab2a6ab3d453b59041a1b3a5252" + integrity sha512-nOsTScuoRghRtUsRr/c69d042ysfPHcu+KOB4A9aAO9eJYqrkat+LF8G1yp1HD18QiwixT2CisZTr/0b3YZPXQ== + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-proposal-async-generator-functions" "^7.13.8" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" + "@babel/plugin-proposal-export-namespace-from" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-numeric-separator" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.8" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.1.4" + babel-plugin-polyfill-corejs3 "^0.1.3" + babel-plugin-polyfill-regenerator "^0.1.2" + core-js-compat "^3.9.0" + semver "^6.3.0" + "@babel/preset-flow@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.12.1.tgz#1a81d376c5a9549e75352a3888f8c273455ae940" @@ -1462,7 +1805,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-flow-strip-types" "^7.12.1" -"@babel/preset-modules@^0.1.3": +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== @@ -1487,14 +1830,14 @@ "@babel/plugin-transform-react-pure-annotations" "^7.12.1" "@babel/preset-react@^7.12.1": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.10.tgz#4fed65f296cbb0f5fb09de6be8cddc85cc909be9" - integrity sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a" + integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-react-display-name" "^7.12.1" - "@babel/plugin-transform-react-jsx" "^7.12.10" - "@babel/plugin-transform-react-jsx-development" "^7.12.7" + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-react-display-name" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.12.13" + "@babel/plugin-transform-react-jsx-development" "^7.12.12" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" "@babel/preset-stage-0@^7.0.0": @@ -1502,7 +1845,7 @@ resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.8.3.tgz#b6a0eca1a3b72e07f9caf58f998e97568028f6f5" integrity sha512-+l6FlG1j73t4wh78W41StbcCz0/9a1/y+vxfnjtHl060kSmcgMfGzK9MEkLvrCOXfhp9RCX+d88sm6rOqxEIEQ== -"@babel/register@^7.0.0", "@babel/register@^7.12.1": +"@babel/register@^7.0.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.1.tgz#cdb087bdfc4f7241c03231f22e15d211acf21438" integrity sha512-XWcmseMIncOjoydKZnWvWi0/5CUCD+ZYKhRwgYlWOrA8fGZ/FjuLRpqtIhLOVD/fvR1b9DQHtZPn68VvhpYf+Q== @@ -1513,10 +1856,10 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/register@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.10.tgz#19b87143f17128af4dbe7af54c735663b3999f60" - integrity sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ== +"@babel/register@^7.12.1", "@babel/register@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.8.tgz#d9051dc6820cb4e86375cc0e2d55a4862b31184f" + integrity sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.19" @@ -1524,14 +1867,7 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" - integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== - dependencies: - regenerator-runtime "^0.13.2" - -"@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -1556,76 +1892,37 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.4", "@babel/traverse@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" - integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.4", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.8", "@babel/traverse@^7.8.3": + version "7.12.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.8.tgz#c1c2983bf9ba0f4f0eaa11dff7e77fa63307b2a4" + integrity sha512-EIRQXPTwFEGRZyu6gXbjfpNORN1oZvwuzJbxcXjAgWV0iqXYDszN1Hx3FVm6YgZfu1ZQbCVAk3l+nIw95Xll9Q== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" + "@babel/generator" "^7.12.5" "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" - integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw== +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.1" - "@babel/types" "^7.12.1" + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.7.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== @@ -1640,40 +1937,16 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.0.0", "@babel/types@^7.1.3", "@babel/types@^7.3.0", "@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== +"@babel/types@^7.0.0", "@babel/types@^7.1.3", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== dependencies: "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.10.5", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.7.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== @@ -1682,19 +1955,10 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae" - integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== +"@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== dependencies: "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" @@ -1714,18 +1978,18 @@ minimist "^1.2.0" "@deck.gl/aggregation-layers@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/aggregation-layers/-/aggregation-layers-8.3.8.tgz#a922d73bc7cd0429252d6032e456d1d38b22141f" - integrity sha512-zi6YtELxSASVt5EzPUWOgv29tNSMVGfx5Mc19ZGU4f++d9tkYbhd8DAfs0uxNrcf31Fi3GpTU1o0zX59+7MXfw== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/aggregation-layers/-/aggregation-layers-8.3.9.tgz#90726529b759ba22cc4dd2aa6dd5004e6de13796" + integrity sha512-5ASr4qEu5jqBEFUJ24mAl1h/Y4dPHKNioeZ3lRzxL0U2eCCGr6sIt3iHa2CWX4Y5tJFY+HQ1/2YOp6Fh2CJcAg== dependencies: "@luma.gl/shadertools" "^8.3.1" "@math.gl/web-mercator" "^3.3.0" d3-hexbin "^0.2.1" "@deck.gl/core@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.3.8.tgz#8c1d20362646ab2b5c691bcd0217ad1a760d7057" - integrity sha512-gcDmHwErcHO6FkTRf/BfahjUDIjM0Kgf75P82YMPHxktD4mCcuxc6jFFLXYbqWpHqe1DWPaXha28IdBs+fBsjw== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.3.9.tgz#7bc63d02bc5ee73c87428be3c8ca683d3b61cf8b" + integrity sha512-qWSKFnxokfRebZMN9s3HpQoBWZ9IdG85k/aP5muIkOOx3by2qeHBOXgZcbBxWMf10xJClM1M0HwcZhqhpDQ7hA== dependencies: "@loaders.gl/core" "^2.3.0" "@loaders.gl/images" "^2.3.0" @@ -1737,16 +2001,16 @@ probe.gl "^3.2.1" "@deck.gl/extensions@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/extensions/-/extensions-8.3.8.tgz#0743f87e8a7e943028a2fb0641b7e1f040f46bd4" - integrity sha512-jqa0l9v22wvRSLhQDupzMy0PbvNddG82dkYcM5pMiM+HI4qVkS9qnzbfWC5yzjm6Y+ucg2cpVN5RuCTLmcI4Ng== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/extensions/-/extensions-8.3.9.tgz#2a9510cd0fa8ff63c0c593b0092d5f4b04aebc78" + integrity sha512-UfuBLH+i5ZHMJ17oKy1o9Lo64umtUmWVnnvWAk+UA4ST2Q3vqgjssTwJCHvFvZCL0E8oJ9fBDqhPqFMDLAsi3A== dependencies: "@luma.gl/shadertools" "^8.3.1" "@deck.gl/geo-layers@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/geo-layers/-/geo-layers-8.3.8.tgz#f142a1f75a5b26fbffa5503753a4f3e0194a00c3" - integrity sha512-wRK3K+im1IBllnql4FNGRi06v54GpypNAukOC1QYX5HBr/8wUxgRPGGmnkQiJzAWKDyWZnm/2bU4XeHAa8locA== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/geo-layers/-/geo-layers-8.3.9.tgz#71d989622c5feafa713c56989c13c27960398737" + integrity sha512-ACOiLJZxkzSiHeDbP+sXgNVz6Rl//xSK4ISjLOm1djbP/8+6q49PoZU+Sk1d6EpZEoR3B+xGlNuA4AKEei/EDA== dependencies: "@loaders.gl/3d-tiles" "^2.3.0" "@loaders.gl/loader-utils" "^2.3.0" @@ -1760,9 +2024,9 @@ math.gl "^3.3.0" "@deck.gl/layers@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.3.8.tgz#dad5837d4d0253d9bc91b4387800b678330f7ae3" - integrity sha512-FZBJWuvicQjkKE1GaSaOdejFdumqspC/dlWIl0260oU3K7B/46V+QbW6h+Xg96bAVrHiAH3hNvYspbO1+fpCtw== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.3.9.tgz#e64f2c8dada769c18e63399aaeb6cc9168a0d625" + integrity sha512-eJ9Lj1D8mU1eV0kjo/rQa+//RonZFdcWjlN/0pacTmXGopdXtf9CGgGI5jrKKz8uCcpxYqfCzHffv96OGCWZDw== dependencies: "@loaders.gl/images" "^2.3.0" "@mapbox/tiny-sdf" "^1.1.0" @@ -1770,24 +2034,24 @@ earcut "^2.0.6" "@deck.gl/mesh-layers@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.3.8.tgz#2a92f2c892b0571510cb298ea9625ed0d1cf9b85" - integrity sha512-myxcGFm1GXlgDfrh3eiq8QmYittprp9h+4qHOF143C67W+Cy38klbSEWejZJs06eI7AwjFpM6qQwC3qZG0vY2g== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.3.9.tgz#66ad50c647f6612ef0bf5c8ba048e651bbf0e7ca" + integrity sha512-M1ZVmRvXvqQJAh8Sa/8mnvxD0R/jdHHJPdFbVwTO5NvM9KGjb82zMpECMZQnhchUkJX+I1B5q8adPuLHKLn+yg== dependencies: "@luma.gl/experimental" "^8.3.1" "@luma.gl/shadertools" "^8.3.1" "@deck.gl/react@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.3.8.tgz#c6275015be45873fdef1e499d38c6adbd539a125" - integrity sha512-0Z2NqIAX8/fcKezxIE2I48DXFiqKR+Ok5W6ddOj7KbQpmfoWRQ7MKZfh/zHcngStjBTUN+Nma1KyWZmS8jWftQ== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.3.9.tgz#a5443c248e011eb6e5ce5616ab165a9871b5e3be" + integrity sha512-ZDu4HqK7fWlv9QPd5sF0WvbHiMMAzHn34iTgkfFVoHhX/8zHWjQKG7IprgeI90S6zV70H6HPIL9FKu/RlLYN0w== dependencies: prop-types "^15.6.0" "@deck.gl/test-utils@^8.2.0": - version "8.3.8" - resolved "https://registry.yarnpkg.com/@deck.gl/test-utils/-/test-utils-8.3.8.tgz#2463f1b9540724a65499c7482053cbec15fac2c9" - integrity sha512-uvHnM/7Fgk1VVVnhm8ErbgTrK9WXOUjFAaqdr96BFyv2ne8/S4rj6y756ExpFuHf+kPohICDCQwWU/lalJRWNQ== + version "8.3.9" + resolved "https://registry.yarnpkg.com/@deck.gl/test-utils/-/test-utils-8.3.9.tgz#7e62f0e802b8c38b5a2695d6f4d2a6f17c543a01" + integrity sha512-RF9rGIdyf0JXUW1s7IECflsgKiEmGvN9Rri0uOZKkdJjO2xZjMGV7GHCPYOjNKg3RMURbJckBNhbzoeAvdO7jQ== "@emotion/is-prop-valid@^0.8.1": version "0.8.8" @@ -2078,21 +2342,21 @@ "@math.gl/geospatial" "^3.3.0" "@probe.gl/stats" "^3.3.0" -"@loaders.gl/core@2.3.5", "@loaders.gl/core@2.3.6", "@loaders.gl/core@^2.3.0", "@loaders.gl/core@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.3.6.tgz#dbed0cc6ef5995301446f9dcf2afda28d60e411c" - integrity sha512-kdXIGbzUZCeFRJUg5UDj9VStjJH4SUht9OhEq4ja6gUXAXQ8flibuLpDS5ac2Zc0uucqmgUoP+7Pmd9F4h8PFg== +"@loaders.gl/core@2.3.5", "@loaders.gl/core@^2.3.0", "@loaders.gl/core@^2.3.3": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.3.5.tgz#2bd75b20352a649d6479498db1fd1ff217d2d104" + integrity sha512-zi+bQAxt1ISxWFzOW48FPFhWcttHBjea4Sf6EvEIbn8g014T6yglmTGH0ICVorU3ARtBEmOXPhEm10gZBa9cBA== dependencies: "@babel/runtime" "^7.3.1" - "@loaders.gl/loader-utils" "2.3.6" + "@loaders.gl/loader-utils" "2.3.5" "@loaders.gl/csv@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/csv/-/csv-2.3.6.tgz#5a508fde3808983079c138875740e77f1e34d895" - integrity sha512-AIqysrj8PcOl44dFyUPHqCbvCgcFpuB9fZKdzj4x588WkpDHPP3t91yrr+Ru8SmAmV11ZmZJBoWTNCgu5RAbuQ== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/csv/-/csv-2.3.5.tgz#432740ce636ea20ad670fd06dc0a65e5f0b19c6e" + integrity sha512-WowCOWFEjgNI5zS9fCxAOgLxmpf7k+9ZpvL7pFg33oG4GI8iTT7pBehWHrLEsgQyCimSqVWS+pXr9dvEdOdjvA== dependencies: - "@loaders.gl/loader-utils" "2.3.6" - "@loaders.gl/tables" "2.3.6" + "@loaders.gl/loader-utils" "2.3.5" + "@loaders.gl/tables" "2.3.5" "@loaders.gl/draco@2.3.5": version "2.3.5" @@ -2103,15 +2367,6 @@ "@loaders.gl/loader-utils" "2.3.5" draco3d "^1.3.6" -"@loaders.gl/draco@2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/draco/-/draco-2.3.6.tgz#f859b0701b1b5c3f1be7f387c24eb1fdf1409c24" - integrity sha512-s/2IL240v2DhQa1mwzmro1MdOHWjiPRnRPaX0turJ+83V8UAoThDnjAFIi6YYLkv4mOtza+GVfn/evTectdlWw== - dependencies: - "@babel/runtime" "^7.3.1" - "@loaders.gl/loader-utils" "2.3.6" - draco3d "^1.3.6" - "@loaders.gl/gis@2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@loaders.gl/gis/-/gis-2.3.5.tgz#b48e927c9784896c3ac70cbbeba5966e7ef8f634" @@ -2121,24 +2376,15 @@ "@mapbox/vector-tile" "^1.3.1" pbf "^3.2.1" -"@loaders.gl/gis@2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/gis/-/gis-2.3.6.tgz#89dd5c89813c058b7479e0afd051deee04e7eb42" - integrity sha512-HciMNIalR5GcoU8lc9LeDhYL+q4Qm/3i0q/o8sw6z7RMmFZwMqFig5bPHtjSU8tDOePA4NjQvdRgiIfkJ4CWQA== - dependencies: - "@loaders.gl/loader-utils" "2.3.6" - "@mapbox/vector-tile" "^1.3.1" - pbf "^3.2.1" - "@loaders.gl/gltf@2.3.5", "@loaders.gl/gltf@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-2.3.6.tgz#a6c75c820e1a21028bceee796c68be41205ac6c7" - integrity sha512-v7g8K+dVyS9nh+Ykdu1z9f0m/zGCYPv1jC2YeKxUY6K8th3MB0M60uY8rWQSz2WXpmompQijgUvAxSblO6MO3w== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/gltf/-/gltf-2.3.5.tgz#aa0fa03fbff5e8d3f8d320f67072d4dd12582bc5" + integrity sha512-+LRiVtkbNtzfOTXump3AGVryT6PMsLlTkmSoGbeKtnR4NQC1BK2JdJQl+0hpvj8+nEOuff5moPldRXok5l4lJQ== dependencies: - "@loaders.gl/core" "2.3.6" - "@loaders.gl/draco" "2.3.6" - "@loaders.gl/images" "2.3.6" - "@loaders.gl/loader-utils" "2.3.6" + "@loaders.gl/core" "2.3.5" + "@loaders.gl/draco" "2.3.5" + "@loaders.gl/images" "2.3.5" + "@loaders.gl/loader-utils" "2.3.5" "@loaders.gl/images@2.3.5", "@loaders.gl/images@^2.3.0": version "2.3.5" @@ -2147,26 +2393,19 @@ dependencies: "@loaders.gl/loader-utils" "2.3.5" -"@loaders.gl/images@2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-2.3.6.tgz#315b06ed3c2970497475f93f4649bb2b2604b645" - integrity sha512-BAe8RouT1Uq52FR5Lh/CJUyeHQjbL+ILvRrmgxM2DD+UVjWuWaijDWzP20YKkWgB++ge/bEqe/sOpSbDByAJzQ== - dependencies: - "@loaders.gl/loader-utils" "2.3.6" - "@loaders.gl/json@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/json/-/json-2.3.6.tgz#2f5b6d7f301a927451c6bdc351871215698b30f9" - integrity sha512-EtrieKwviUi2h5Ayg9M9UpD8HgcGwF8EyfcJ5e6VAtR6mW6Dik/m8pnZFhm8flGOI2vUc/Jf1yri4L8EzfxL6A== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/json/-/json-2.3.5.tgz#3e990911b88cfe18b3e8fd983e62af3a43a650b9" + integrity sha512-No3eCowHAV/Y9LrMz8EH5khz8V0g2/z600VtKvrKI002XZZc1gTf++kiYJEt1pBMGCzbpGMYvUZAVtFwiBsuWg== dependencies: - "@loaders.gl/gis" "2.3.6" - "@loaders.gl/loader-utils" "2.3.6" - "@loaders.gl/tables" "2.3.6" + "@loaders.gl/gis" "2.3.5" + "@loaders.gl/loader-utils" "2.3.5" + "@loaders.gl/tables" "2.3.5" -"@loaders.gl/loader-utils@2.3.5", "@loaders.gl/loader-utils@2.3.6", "@loaders.gl/loader-utils@^2.3.0", "@loaders.gl/loader-utils@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.3.6.tgz#46fb23898fac3097800ad73afe4587c823b86f45" - integrity sha512-3hvL9Un154PHpPMJBI8r2q5U75lwMwn6pE13uCI0tioSTdQ4Q+B1i9EjoPrGyBATGU8jpeneJJyPQ/M0uoMxGQ== +"@loaders.gl/loader-utils@2.3.5", "@loaders.gl/loader-utils@^2.3.0", "@loaders.gl/loader-utils@^2.3.3": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.3.5.tgz#d742ecd914a614233427240ca69a54bae0c29a66" + integrity sha512-zQv4dM+wHQy5l4zzfeYNrR67MTuhfTDR2a12ybe1GIX+DH5i3iYW1mubjx0dVuV4WaqJiXscL3FCVuWHYMbNSA== dependencies: "@babel/runtime" "^7.3.1" "@probe.gl/stats" "^3.3.0" @@ -2192,9 +2431,9 @@ pbf "^3.2.1" "@loaders.gl/polyfills@^2.3.3": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/polyfills/-/polyfills-2.3.6.tgz#b4cf5b6cd24ffbf1b9b85b2eadf8444df63023cb" - integrity sha512-2lLH2QG8Pr4GSaIvjVV+7hGHja1rCOUa8FFpK3uvTT/1rxm+LxDvGyQfJ5ZzJz3P7Q1yCjcZoJrB0FjT3zir1g== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/polyfills/-/polyfills-2.3.5.tgz#5f32b732c8f2a7e80c221f19ee2d01725f09b5c3" + integrity sha512-sSoeqtH2UJ1eqyM18AnYppLb5dapvWxt4hEv7xXmhXfVXxjBzUonLEg8d3UxfGEsxtxVmbS5DXHyL+uhYcLarw== dependencies: "@babel/runtime" "^7.3.1" get-pixels "^3.3.2" @@ -2204,12 +2443,12 @@ through "^2.3.8" web-streams-polyfill "^3.0.0" -"@loaders.gl/tables@2.3.6": - version "2.3.6" - resolved "https://registry.yarnpkg.com/@loaders.gl/tables/-/tables-2.3.6.tgz#730e835cbc6f146d4e2d88703b188d845036836a" - integrity sha512-TuH8V4vp4AWRPMCAxPkvi1kO35Qp8/ABFc2XpkGL/Hg/OCvM8i3ZpKnHKL3BRrYX2hv/NjWeoGfUo9pglUa56A== +"@loaders.gl/tables@2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@loaders.gl/tables/-/tables-2.3.5.tgz#0e055171251b8ac089430955edaca2652a396aba" + integrity sha512-YWf2DKAcvP6kZpXgEsafU1juzn+qEo9I5tnLqf7LzcfZOed+MKNX/kNuKRwAJu5WeIy5bQxS8ackNfb3D4L+Qw== dependencies: - "@loaders.gl/core" "2.3.6" + "@loaders.gl/core" "2.3.5" d3-dsv "^1.2.0" "@loaders.gl/terrain@^2.3.0": @@ -2602,13 +2841,20 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== dependencies: "@babel/types" "^7.3.0" +"@types/babel__traverse@^7.0.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + dependencies: + "@babel/types" "^7.3.0" + "@types/d3-array@^2.0.0": version "2.8.0" resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-2.8.0.tgz#4b70ccb0c6d2ef28dac1e7e653b3ecd1f4b1d1ee" @@ -2714,9 +2960,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.0.0": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" - integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== + version "2.1.6" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.6.tgz#f4b1efa784e8db479cdb8b14403e2144b1e9ff03" + integrity sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA== "@types/prop-types@*": version "15.7.3" @@ -3504,9 +3750,9 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__traverse" "^7.0.6" babel-plugin-module-resolver@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.0.0.tgz#8f3a3d9d48287dc1d3b0d5595113adabd36a847f" - integrity sha512-3pdEq3PXALilSJ6dnC4wMWr0AZixHRM4utpdpBR9g5QG7B7JwWyukQv7a9hVxkbGFl+nQbrHDqqQOIBtTXTP/Q== + version "4.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2" + integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA== dependencies: find-babel-config "^1.2.0" glob "^7.1.6" @@ -3514,6 +3760,30 @@ babel-plugin-module-resolver@^4.0.0: reselect "^4.0.0" resolve "^1.13.1" +babel-plugin-polyfill-corejs2@^0.1.4: + version "0.1.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" + integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== + dependencies: + "@babel/compat-data" "^7.13.0" + "@babel/helper-define-polyfill-provider" "^0.1.5" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.1.3: + version "0.1.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" + integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" + core-js-compat "^3.8.1" + +babel-plugin-polyfill-regenerator@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" + integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.1.5" + babel-plugin-search-and-replace@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-search-and-replace/-/babel-plugin-search-and-replace-1.1.0.tgz#ad26f2037a80034613dae61b913902d9aa58ed2c" @@ -3543,9 +3813,9 @@ babel-plugin-transform-builtin-extend@^1.1.0: babel-template "^6.3.0" babel-preset-current-node-syntax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" - integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -3723,10 +3993,10 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== bn.js@^5.0.0, bn.js@^5.1.1: version "5.1.3" @@ -3831,7 +4101,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: +brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -3982,28 +4252,7 @@ browserify@^16.1.0: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@^4.12.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== - dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" - -browserslist@^4.14.5, browserslist@^4.16.0: - version "4.16.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" - integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== - dependencies: - caniuse-lite "^1.0.30001173" - colorette "^1.2.1" - electron-to-chromium "^1.3.634" - escalade "^3.1.1" - node-releases "^1.1.69" - -browserslist@^4.14.6: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.6: version "4.14.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== @@ -4014,6 +4263,17 @@ browserslist@^4.14.6: escalade "^3.1.1" node-releases "^1.1.66" +browserslist@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== + dependencies: + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -4202,19 +4462,14 @@ camelize@^1.0.0: integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157: - version "1.0.30001159" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" - integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== - -caniuse-lite@^1.0.30001111: - version "1.0.30001185" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" - integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== + version "1.0.30001161" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz#64f7ffe79ee780b8c92843ff34feb36cea4651e0" + integrity sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g== -caniuse-lite@^1.0.30001173: - version "1.0.30001173" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz#3c47bbe3cd6d7a9eda7f50ac016d158005569f56" - integrity sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw== +caniuse-lite@^1.0.30001181: + version "1.0.30001203" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001203.tgz#a7a34df21a387d9deffcd56c000b8cf5ab540580" + integrity sha512-/I9tvnzU/PHMH7wBPrfDMSuecDeUKerjCPX7D0xBbaJZPxoT9m+yYxt0zCTkcijCkjTdim3H56Zm0i5Adxch4w== capture-exit@^2.0.0: version "2.0.0" @@ -4784,12 +5039,12 @@ core-js-compat@^3.7.0: browserslist "^4.14.6" semver "7.0.0" -core-js-compat@^3.8.0: - version "3.8.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.2.tgz#3717f51f6c3d2ebba8cbf27619b57160029d1d4c" - integrity sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ== +core-js-compat@^3.8.1, core-js-compat@^3.9.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" + integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== dependencies: - browserslist "^4.16.0" + browserslist "^4.16.3" semver "7.0.0" core-js@^1.0.0: @@ -5012,11 +5267,16 @@ d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== -d3-array@^2.3.0, d3-array@^2.8.0: +d3-array@^2.3.0: version "2.8.0" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.8.0.tgz#f76e10ad47f1f4f75f33db5fc322eb9ffde5ef23" integrity sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw== +d3-array@^2.8.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.9.1.tgz#f355cc72b46c8649b3f9212029e2d681cb5b9643" + integrity sha512-Ob7RdOtkqsjx1NWyQHMFLtCSk6/aKTxDdC4ZIolX+O+mDD2RzrsYgAyc0WGAlfYFVELLSilS7w8BtE3PKM8bHg== + d3-axis@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-2.0.0.tgz#40aebb65626ffe6d95e9441fbf9194274b328a8b" @@ -5824,33 +6084,28 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.523: - version "1.3.659" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.659.tgz#479eb1a80044ad3664ebd548e7b225fefe06a914" - integrity sha512-VPc1LcvuQYGjam6k7JcB6uJFTMo2YNlJ6rSbwbxApZQdow7X81kh/vDB6LB5B8DNmvkbKnpZkLmpKmnvoKA+Gw== - electron-to-chromium@^1.3.591: - version "1.3.603" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz#1b71bec27fb940eccd79245f6824c63d5f7e8abf" - integrity sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ== + version "1.3.606" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.606.tgz#6ef2655d9a7c1b447dfdd6344657d00461a65e26" + integrity sha512-+/2yPHwtNf6NWKpaYt0KoqdSZ6Qddt6nDfH/pnhcrHq9hSb23e5LFy06Mlf0vF2ykXvj7avJ597psqcbKnG5YQ== -electron-to-chromium@^1.3.634: - version "1.3.635" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.635.tgz#8d1591eeca6b257d380061a2c04f0b3cc6c9e33b" - integrity sha512-RRriZOLs9CpW6KTLmgBqyUdnY0QNqqWs0HOtuQGGEMizOTNNn1P7sGRBxARnUeLejOsgwjDyRqT3E/CSst02ZQ== +electron-to-chromium@^1.3.649: + version "1.3.693" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.693.tgz#5089c506a925c31f93fcb173a003a22e341115dd" + integrity sha512-vUdsE8yyeu30RecppQtI+XTz2++LWLVEIYmzeCaCRLSdtKZ2eXqdJcrs85KwLiPOPVc6PELgWyXBsfqIvzGZag== elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" + bn.js "^4.4.0" + brorand "^1.0.1" hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" emittery@^0.7.1: version "0.7.2" @@ -6053,7 +6308,7 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -escalade@^3.0.2, escalade@^3.1.1: +escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== @@ -7045,7 +7300,7 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -7627,16 +7882,16 @@ he@^1.1.0, he@^1.2.0: integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== highlight.js@^10.2.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.0.tgz#ef3ce475e5dfa7a48484260b49ea242ddab823a0" - integrity sha512-EfrUGcQ63oLJbj0J0RI9ebX6TAITbsDBLbsjr881L/X5fMO9+oadKzEF21C7R3ULKG6Gv3uoab2HiqVJa/4+oA== + version "10.5.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.5.0.tgz#3f09fede6a865757378f2d9ebdcbc15ba268f98f" + integrity sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw== highlight.js@^9.15.5: version "9.18.5" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== -hmac-drbg@^1.0.1: +hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -8221,6 +8476,13 @@ is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -8873,9 +9135,9 @@ jest-haste-map@^26.6.2: fsevents "^2.1.2" jest-image-snapshot@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.2.0.tgz#559d7ade69e9918517269cef184261c80029a69e" - integrity sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.3.0.tgz#27ecd571aec2922a6812981039002030f90f9140" + integrity sha512-GFwhOQiWyECcndHvOTLYXpghHP+S9R58B7Ru1Y/74IJYpY0IIc2D0GOwEzKMWqhXHS1KedpymZGZfMqZDlyYiQ== dependencies: chalk "^1.1.3" get-stdin "^5.0.1" @@ -9271,13 +9533,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" @@ -9605,7 +9860,7 @@ lodash.xor@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.xor/-/lodash.xor-4.5.0.tgz#4d48ed7e98095b0632582ba714d3ff8ae8fb1db6" integrity sha1-TUjtfpgJWwYyWCunFNP/iuj7HbY= -lodash@4.17.19, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: +lodash@4.17.19, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== @@ -9792,9 +10047,9 @@ markdown-table@^1.1.0: integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== marked@^1.1.1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.5.tgz#a44b31f2a0b8b5bfd610f00d55d1952d1ac1dfdb" - integrity sha512-2AlqgYnVPOc9WDyWu7S5DJaEZsfk6dNh/neatQ3IHUW4QLutM/VPSH9lG7bif+XjFWc9K9XR3QvR+fXuECmfdA== + version "1.2.7" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.7.tgz#6e14b595581d2319cdcf033a24caaf41455a01fb" + integrity sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA== material-colors@^1.2.1: version "1.2.6" @@ -9895,13 +10150,13 @@ mdast-util-to-hast@^3.0.0: xtend "^4.0.1" mdast-util-to-markdown@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.3.tgz#e05c54a3ccd239bab63c48a1e5b5747f0dcd5aca" - integrity sha512-sr8q7fQJ1xoCqZSXW6dO/MYu2Md+a4Hfk9uO+XHCfiBhVM0EgWtfAV7BuN+ff6otUeu2xDyt1o7vhZGwOG3+BA== + version "0.5.4" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.5.4.tgz#be680ed0c0e11a07d07c7adff9551eec09c1b0f9" + integrity sha512-0jQTkbWYx0HdEA/h++7faebJWr5JyBoBeiRf0u3F4F3QtnyyGaWIsOwo749kRb1ttKrLLr+wRtOkfou9yB0p6A== dependencies: "@types/unist" "^2.0.0" longest-streak "^2.0.0" - mdast-util-to-string "^1.0.0" + mdast-util-to-string "^2.0.0" parse-entities "^2.0.0" repeat-string "^1.0.0" zwitch "^1.0.0" @@ -9911,6 +10166,11 @@ mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.5: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + mdast-util-toc@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-3.1.0.tgz#395eeb877f067f9d2165d990d77c7eea6f740934" @@ -10154,7 +10414,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -10293,7 +10553,14 @@ module-deps@^6.2.3: through2 "^2.0.0" xtend "^4.0.0" -moment@^2.10.6: +moment-timezone@^0.5.32: + version "0.5.32" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.32.tgz#db7677cc3cc680fd30303ebd90b0da1ca0dfecc2" + integrity sha512-Z8QNyuQHQAmWucp8Knmgei8YNo28aLjJq6Ma+jy1ZSpSk5nyfRT8xgUbSQvD2+2UajISfenndwvFuH3NGS+nvA== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0", moment@^2.10.6: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== @@ -10414,9 +10681,9 @@ ndarray@^1.0.13, ndarray@^1.0.18: is-buffer "^1.0.2" nearley@^2.7.10: - version "2.19.7" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.7.tgz#eafbe3e2d8ccfe70adaa5c026ab1f9709c116218" - integrity sha512-Y+KNwhBPcSJKeyQCFjn8B/MIe+DDlhaaDgjVldhy5xtFewIbiQgcbZV8k2gCVwkI1ZsKCnjIYZbR+0Fim5QYgg== + version "2.19.8" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.8.tgz#2c6e2f9e8c0daa145e78c9734b4ad7713e96fcca" + integrity sha512-te4JCrxbzLvVqUWfVOASgsbkWaFvJ6JlHTRQzfnU862bnyHGHEGX2s5OYvLAS4NDPmQvRtC2tBdV6THy6xHFyQ== dependencies: commander "^2.19.0" moo "^0.5.0" @@ -10533,9 +10800,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" - integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + version "8.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" + integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -10544,20 +10811,15 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.60: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== - node-releases@^1.1.66: version "1.1.67" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== -node-releases@^1.1.69: - version "1.1.69" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.69.tgz#3149dbde53b781610cd8b486d62d86e26c3725f6" - integrity sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA== +node-releases@^1.1.70: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== node-status-codes@^1.0.0: version "1.0.0" @@ -12111,9 +12373,9 @@ react-markdown@^5.0.2: xtend "^4.0.1" react-modal@^3.8.1: - version "3.11.2" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.11.2.tgz#bad911976d4add31aa30dba8a41d11e21c4ac8a4" - integrity sha512-o8gvvCOFaG1T7W6JUvsYjRjMVToLZgLIsi5kdhFIQCtHxDkA47LznX62j+l6YQkpXDbvQegsDyxe/+JJsFQN7w== + version "3.12.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.12.1.tgz#38c33f70d81c33d02ff1ed115530443a3dc2afd3" + integrity sha512-WGuXn7Fq31PbFJwtWmOk+jFtGC7E9tJVbFX0lts8ZoS5EPi9+WWylUJWLKKVm3H4GlQ7ZxY7R6tLlbSIBQ5oZA== dependencies: exenv "^1.2.0" prop-types "^15.5.10" @@ -12185,9 +12447,9 @@ react-test-renderer@^16.0.0-0, react-test-renderer@^16.4.2: scheduler "^0.19.1" react-tooltip@^4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.10.tgz#ed1a1acd388940c96f4b6309f4fd4dcce5e01bdc" - integrity sha512-D7ZLx6/QwpUl0SZRek3IZy/HWpsEEp0v3562tcT8IwZgu8IgV7hY5ZzniTkHyRcuL+IQnljpjj7A7zCgl2+T3w== + version "4.2.11" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.11.tgz#244d4d1833c583160c4e6c95a8a89e0fb320e18a" + integrity sha512-exREte3mK/qbeuQpFbEL3ImdF5/TSAb+x/T7pkVfKmgVcfQLZKHSgLN+Msv7ZOHxaWNJwuCrSsCAy/iTGoPigg== dependencies: prop-types "^15.7.2" uuid "^7.0.3" @@ -12481,7 +12743,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -12554,9 +12816,9 @@ regjsgen@^0.5.1: integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: - version "0.6.6" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a" - integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ== + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" @@ -12888,6 +13150,14 @@ resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0 is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.14.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@~1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -13144,7 +13414,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -13467,9 +13737,9 @@ source-list-map@^2.0.0: integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-loader@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.2.tgz#5b782bf08496d3a7f355e1780df0e25190a80991" - integrity sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820" + integrity sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA== dependencies: abab "^2.0.5" iconv-lite "^0.6.2" @@ -13811,28 +14081,29 @@ string.prototype.matchall@^4.0.2: side-channel "^1.0.3" string.prototype.trim@^1.2.1, string.prototype.trim@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz#f538d0bacd98fc4297f0bef645226d5aaebf59f3" - integrity sha512-b5yrbl3BXIjHau9Prk7U0RRYcUYdN4wGSVaqoBQS50CCE3KBuYU0TYRNPFCP7aVoNMX87HKThdMRVIP3giclKg== + version "1.2.3" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" + integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" + es-abstract "^1.18.0-next.1" string.prototype.trimend@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46" - integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" string.prototype.trimstart@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7" - integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" @@ -14630,9 +14901,9 @@ typedoc-default-themes@^0.11.4: integrity sha512-Y4Lf+qIb9NTydrexlazAM46SSLrmrQRqWiD52593g53SsmUFioAsMWt8m834J6qsp+7wHRjxCXSZeiiW5cMUdw== typedoc-plugin-markdown@^3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.0.11.tgz#358c32f4a0086c1dd2da7f56c4b46ade8a63204b" - integrity sha512-/BE/PqnIVbQJ525czM+T3CVaA1gVN9X1Le100z8TV/Lze8LZVkuAUiHRIgw9BKYFm9IQaB88W55k4EV6uUVwYQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.2.1.tgz#c11d1107893811b4d4d8f9443885a34d2a53e502" + integrity sha512-gepVk2zFFrTGaKywLEgwz6EARYjOGcx9rHF8M8a+fqz/iTp6Zobvw+7x01BJ9V4tbuXI3M9Y2/wMYwC378/msg== dependencies: handlebars "^4.7.6" @@ -14674,9 +14945,9 @@ uber-licence@^3.1.1: update-notifier "^1.0.3" uglify-js@^3.1.4: - version "3.11.6" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c" - integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g== + version "3.12.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.0.tgz#b943f129275c41d435eb54b643bbffee71dccf57" + integrity sha512-8lBMSkFZuAK7gGF8LswsXmir8eX8d2AAMOnxSDWjKBx/fBR6MypQjs78m6ML9zQVp1/hD4TBdfeMZMC7nW1TAA== umd@^3.0.0: version "3.0.3" @@ -15046,9 +15317,9 @@ uuid@^7.0.3: integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== uuid@^8.3.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.1.1, v8-compile-cache@^2.2.0: version "2.2.0" @@ -15056,9 +15327,9 @@ v8-compile-cache@^2.1.1, v8-compile-cache@^2.2.0: integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== v8-to-istanbul@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" - integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== + version "7.1.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" + integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0"