Add Page Navigator

This commit is contained in:
jjavierdguezas 2021-05-18 15:49:38 +02:00 committed by Manoj Vivek
parent 2e80b227c7
commit dd7103b40f
11 changed files with 601 additions and 9 deletions

View file

@ -17,6 +17,7 @@ import {
ADDRESS_CHANGE, ADDRESS_CHANGE,
STOP_LOADING, STOP_LOADING,
TOGGLE_DEVICE_DESIGN_MODE_STATE, TOGGLE_DEVICE_DESIGN_MODE_STATE,
PAGE_NAVIGATOR_CHANGED,
} from '../constants/pubsubEvents'; } from '../constants/pubsubEvents';
import {getBounds, getDefaultDevToolsWindowSize} from '../reducers/browser'; import {getBounds, getDefaultDevToolsWindowSize} from '../reducers/browser';
import {DEVTOOLS_MODES} from '../constants/previewerLayouts'; import {DEVTOOLS_MODES} from '../constants/previewerLayouts';
@ -53,6 +54,8 @@ export const SET_HEADER_VISIBILITY = 'SET_HEADER_VISIBILITY';
export const SET_LEFT_PANE_VISIBILITY = 'SET_LEFT_PANE_VISIBILITY'; export const SET_LEFT_PANE_VISIBILITY = 'SET_LEFT_PANE_VISIBILITY';
export const SET_HOVERED_LINK = 'SET_HOVERED_LINK'; export const SET_HOVERED_LINK = 'SET_HOVERED_LINK';
export const SET_STARTUP_PAGE = 'SET_STARTUP_PAGE'; export const SET_STARTUP_PAGE = 'SET_STARTUP_PAGE';
export const UPDATE_PAGE_NAVIGATOR = 'UPDATE_PAGE_NAVIGATOR';
export const TOGGLE_PAGE_NAVIGATOR = 'TOGGLE_PAGE_NAVIGATOR';
export function newAddress(address) { export function newAddress(address) {
return { return {
@ -942,3 +945,75 @@ export function changeStartupPage(value: 'BLANK' | 'HOME') {
dispatch(setStartupPage(value)); dispatch(setStartupPage(value));
}; };
} }
export function updatePageNavigator(selector, index) {
return {
type: UPDATE_PAGE_NAVIGATOR,
selector,
index,
};
}
export function resetPageNavigator() {
return (dispatch: Dispatch, getState: RootStateType) => {
const {
browser: {
pageNavigator: {selector, index},
},
} = getState();
if (selector == null && index == null) return;
dispatch(updatePageNavigator(null, null));
};
}
export function navigateToNextSelector(selector) {
return (dispatch: Dispatch, getState: RootStateType) => {
if ((selector || '').length === 0) return;
const {
browser: {pageNavigator},
} = getState();
let index = pageNavigator.index;
if (pageNavigator.selector !== selector || index == null) index = -1;
pubsub.publish(PAGE_NAVIGATOR_CHANGED, [
{selector, index: (index || 0) + 1},
]);
dispatch(updatePageNavigator(selector, (index || 0) + 1));
};
}
export function navigateToPrevSelector(selector) {
return (dispatch: Dispatch, getState: RootStateType) => {
if ((selector || '').length === 0) return;
const {
browser: {pageNavigator},
} = getState();
let index = pageNavigator.index;
if (pageNavigator.selector !== selector || index == null) index = 0;
pubsub.publish(PAGE_NAVIGATOR_CHANGED, [
{selector, index: (index || 0) - 1},
]);
dispatch(updatePageNavigator(selector, (index || 0) - 1));
};
}
export function setPageNavigatorActive(active) {
return {
type: TOGGLE_PAGE_NAVIGATOR,
active,
};
}
export function onChangePageNavigatorActive(active) {
return (dispatch: Dispatch, getState: RootStateType) => {
pubsub.publish(TOGGLE_EVENT_MIRRORING_ALL_DEVICES, [{status: !active}]);
dispatch(setPageNavigatorActive(active));
};
}

View file

@ -17,6 +17,7 @@ import {getDeviceIcon} from '../../utils/iconUtils';
import useStyes from './useStyles'; import useStyes from './useStyles';
import LiveCssEditor from '../LiveCssEditor'; import LiveCssEditor from '../LiveCssEditor';
import LinkHoverDisplayContainer from '../../containers/LinkHoverDisplayContainer'; import LinkHoverDisplayContainer from '../../containers/LinkHoverDisplayContainer';
import PageNavigatorContainer from '../../containers/PageNavigatorContainer';
export default function DevicesPreviewer(props) { export default function DevicesPreviewer(props) {
const { const {
@ -144,6 +145,7 @@ export default function DevicesPreviewer(props) {
CSSEditor.position === CSS_EDITOR_MODES.BOTTOM) && CSSEditor.position === CSS_EDITOR_MODES.BOTTOM) &&
editor} editor}
<LinkHoverDisplayContainer /> <LinkHoverDisplayContainer />
<PageNavigatorContainer />
</div> </div>
); );
} }

View file

@ -0,0 +1,229 @@
import React, {useEffect, useState, useRef} from 'react';
import cx from 'classnames';
import {motion} from 'framer-motion';
import DownIcon from '@material-ui/icons/KeyboardArrowDown';
import UpIcon from '@material-ui/icons/KeyboardArrowUp';
import CloseIcon from '@material-ui/icons/Close';
import ReplayIcon from '@material-ui/icons/Replay';
import {Tooltip} from '@material-ui/core';
import {ipcRenderer} from 'electron';
import {debounce} from 'lodash';
import {JSDOM} from 'jsdom';
import {makeStyles, useTheme} from '@material-ui/core/styles';
const {document} = new JSDOM('').window;
const queryCheck = s => document.createDocumentFragment().querySelector(s);
const isSelectorValid = selector => {
try {
queryCheck(selector);
} catch {
return false;
}
return true;
};
const useStyles = makeStyles(theme => ({
container: {
height: 45,
position: 'absolute',
top: 50,
right: 25,
display: 'flex',
backgroundColor: theme.palette.background.l2,
borderRadius: 3,
wordWrap: 'break-word',
color: theme.palette.mode({light: '#000', dark: '#fff'}),
boxShadow: `0 ${theme.palette.mode({
light: '0px',
dark: '3px',
})} 5px rgba(0, 0, 0, 0.35)`,
padding: 5,
zIndex: theme.zIndex.tooltip,
},
textbox: {
border: 'none',
outline: 'none',
borderColor: 'transparent',
width: 250,
height: '100%',
background: 'none',
color: theme.palette.mode({light: '#000', dark: '#fff'}),
fontFamily: "'Consolas', 'Courier New', monospace",
whiteSpace: 'pre',
},
iconsContainer: {
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
},
separator: {
borderLeft: '1px solid #636363',
margin: 3,
},
icon: {
cursor: 'pointer',
width: 30,
padding: 5,
color: theme.palette.mode({light: '#636363', dark: '#fffc'}),
'&:hover': {
'& svg': {
backgroundColor: theme.palette.primary.light,
color: '#fff',
},
},
},
btn: {
cursor: 'pointer',
color: theme.palette.mode({light: '#636363', dark: '#fffc'}),
'&:hover': {
'& div': {
backgroundColor: theme.palette.primary.light,
color: '#fff',
},
},
'& div': {
padding: 5,
fontFamily: "'Consolas', 'Courier New', monospace",
fontSize: 12,
},
},
btnActive: {
'& div': {
backgroundColor: theme.palette.primary.light,
color: '#fff',
},
},
}));
const PageNavigator = props => {
const [selector, setSelector] = useState(props.selector || '');
const inputRef = React.createRef();
const styles = useStyles();
useEffect(() => {
if (props.active === true) {
document.addEventListener('keydown', _handleKeyDown);
inputRef.current.focus();
} else if (props.active === false) {
document.removeEventListener('keydown', _handleKeyDown);
}
return () => document.removeEventListener('keydown', _handleKeyDown);
}, [props.active, inputRef.current]);
const _handleChange = e => {
setSelector(e.target.value);
};
const _navigateNext = debounce(() => {
if (!isSelectorValid(selector)) props.resetPageNavigator();
else props.navigateToNextSelector(selector);
}, 25);
const _navigatePrev = debounce(() => {
if (!isSelectorValid(selector)) props.resetPageNavigator();
else props.navigateToPrevSelector(selector);
}, 25);
const resetPageNavigator = () => {
setSelector('');
props.resetPageNavigator();
};
const _closePageNavigator = () => {
props.onChangePageNavigatorActive(false);
};
const _handleInputKeyDown = e => {
if (e.shiftKey && e.key === 'Enter') {
_navigatePrev();
} else if (e.key === 'Enter') {
_navigateNext();
} else if (e.key === 'Escape') {
_closePageNavigator();
}
};
const _handleKeyDown = e => {
if (e.key === 'Escape') {
_closePageNavigator();
}
};
if (!props.active) {
return null;
}
return (
<motion.div
className={styles.container}
initial={{y: props.active ? -70 : 0, scale: 1}}
animate={{y: props.active ? 0 : -70, scale: 1}}
transition={{
type: 'spring',
stiffness: 260,
damping: 20,
delay: 0,
}}
>
<div className={styles.iconsContainer}>
<span
className={cx(styles.btn, {
[styles.btnActive]: selector === 'section',
})}
onClick={() => setSelector('section')}
>
<div>section</div>
</span>
<span
className={cx(styles.btn, {[styles.btnActive]: selector === 'h1'})}
onClick={() => setSelector('h1')}
>
<div>h1</div>
</span>
<span
className={cx(styles.btn, {[styles.btnActive]: selector === 'h2'})}
onClick={() => setSelector('h2')}
>
<div>h2</div>
</span>
<span
className={cx(styles.btn, {[styles.btnActive]: selector === 'h3'})}
onClick={() => setSelector('h3')}
>
<div>h3</div>
</span>
</div>
<div className={styles.separator} />
<div className={styles.textboxContainer}>
<input
ref={inputRef}
className={styles.textbox}
type="text"
value={selector || ''}
onChange={_handleChange}
onKeyDown={_handleInputKeyDown}
placeholder="css selector"
/>
</div>
<div className={styles.separator} />
<div className={styles.iconsContainer}>
<span className={styles.icon} onClick={_navigatePrev}>
<UpIcon />
</span>
<span className={styles.icon} onClick={_navigateNext}>
<DownIcon />
</span>
<span className={styles.icon} onClick={resetPageNavigator}>
<ReplayIcon style={{height: 25, width: 25, padding: 3}} />
</span>
<span className={styles.icon} onClick={_closePageNavigator}>
<CloseIcon style={{height: 25, width: 25, padding: 3}} />
</span>
</div>
</motion.div>
);
};
export default PageNavigator;

View file

@ -20,6 +20,7 @@ import ToggleTouch from '../ToggleTouch';
import Muted from '../icons/Muted'; import Muted from '../icons/Muted';
import CSSEditor from '../icons/CSSEditor'; import CSSEditor from '../icons/CSSEditor';
import styles from '../WebView/style.module.css'; import styles from '../WebView/style.module.css';
import PageNavigatorIcon from '../icons/PageNavigator';
const useStyles = makeStyles({ const useStyles = makeStyles({
container: { container: {
@ -48,6 +49,7 @@ const ScrollControls = ({
toggleCSSEditor, toggleCSSEditor,
onAllDevicesMutedChange, onAllDevicesMutedChange,
onToggleAllDeviceDesignMode, onToggleAllDeviceDesignMode,
onChangePageNavigatorActive,
}) => { }) => {
const [eventMirroring, setEventMirroring] = useState(true); const [eventMirroring, setEventMirroring] = useState(true);
const initialRender = useRef(true); const initialRender = useRef(true);
@ -120,6 +122,22 @@ const ScrollControls = ({
</div> </div>
</Tooltip> </Tooltip>
</Grid> </Grid>
<Grid
item
className={cx(commonClasses.icon, {
[commonClasses.iconSelected]: browser.pageNavigator.active,
})}
>
<Tooltip title="Page Navigator">
<div
onClick={() => {
onChangePageNavigatorActive(!browser.pageNavigator.active);
}}
>
<PageNavigatorIcon {...iconProps} height={22} width={22} />
</div>
</Tooltip>
</Grid>
<Grid item> <Grid item>
<VerticalRuler /> <VerticalRuler />
</Grid> </Grid>

View file

@ -30,6 +30,7 @@ import {
APPLY_CSS, APPLY_CSS,
TOGGLE_DEVICE_DESIGN_MODE_STATE, TOGGLE_DEVICE_DESIGN_MODE_STATE,
TOGGLE_EVENT_MIRRORING_ALL_DEVICES, TOGGLE_EVENT_MIRRORING_ALL_DEVICES,
PAGE_NAVIGATOR_CHANGED,
} from '../../constants/pubsubEvents'; } from '../../constants/pubsubEvents';
import {CAPABILITIES} from '../../constants/devices'; import {CAPABILITIES} from '../../constants/devices';
import {DESIGN_MODE_JS_VALUES} from '../../constants/values'; import {DESIGN_MODE_JS_VALUES} from '../../constants/values';
@ -179,6 +180,10 @@ class WebView extends Component {
) )
); );
this.subscriptions.push(
pubsub.subscribe(PAGE_NAVIGATOR_CHANGED, this.selectorNavigationChanged)
);
this.webviewRef.current.addEventListener('dom-ready', () => { this.webviewRef.current.addEventListener('dom-ready', () => {
this.initEventTriggers(this.webviewRef.current); this.initEventTriggers(this.webviewRef.current);
this.dbg = this.getWebContents().debugger; this.dbg = this.getWebContents().debugger;
@ -347,6 +352,23 @@ class WebView extends Component {
} }
}; };
selectorNavigationChanged = ({selector, index}) => {
if (selector == null || index == null) return;
this.webviewRef.current
.executeJavaScript(
`{
var elements = document.querySelectorAll('${selector}');
var len = elements.length;
if (len !== 0) {
var idx = ((${index} % len) + len) % len;
var el = elements[idx];
el.scrollIntoView(true);
}
}`
)
.catch(captureOnSentry);
};
processNavigationBackEvent = () => { processNavigationBackEvent = () => {
this.webviewRef.current.goBack(); this.webviewRef.current.goBack();
}; };

View file

@ -0,0 +1,21 @@
import React, {Fragment} from 'react';
export default ({width, height, color, padding, margin, style}) => (
<Fragment>
<svg
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
width={width}
height={height}
fill={color}
style={{padding, margin, ...style}}
className="navigatorIcon"
>
<path
d="M19.31 18.9c.44-.69.69-1.52.69-2.4c0-2.5-2-4.5-4.5-4.5S11 14 11 16.5s2 4.5 4.5 4.5c.87 0 1.69-.25 2.38-.68L21 23.39L22.39 22l-3.08-3.1m-3.81.1a2.5 2.5 0 0 1 0-5a2.5 2.5 0 0 1 0 5M21 9h-2V7h2v2m0-4h-2V3h1c.55 0 1 .45 1 1v1m-2 6.03V11h2v2h-.03A6.608 6.608 0 0 0 19 11.03M17 5h-2V3h2v2m-4 0h-2V3h2v2M3 7h2v2H3V7m4 12h2v2H7v-2m-4-8h2v2H3v-2m1-8h1v2H3V4c0-.55.45-1 1-1m5 2H7V3h2v2M3 19h2v2H4c-.55 0-1-.45-1-1v-1m0-4h2v2H3v-2z"
fill="currentColor"
/>
</svg>
</Fragment>
);

View file

@ -29,3 +29,5 @@ export const PERMISSION_MANAGEMENT_PREFERENCE_CHANGED =
export const TOGGLE_DEVICE_DESIGN_MODE_STATE = export const TOGGLE_DEVICE_DESIGN_MODE_STATE =
'TOGGLE_DEVICE_DESIGN_MODE_STATE'; 'TOGGLE_DEVICE_DESIGN_MODE_STATE';
export const PAGE_NAVIGATOR_CHANGED = 'PAGE_NAVIGATOR_CHANGED';

View file

@ -0,0 +1,20 @@
// @flow
import React from 'react';
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import * as BrowserActions from '../../actions/browser';
import PageNavigator from '../../components/PageNavigator';
function mapStateToProps(state) {
return {
active: !!state.browser.pageNavigator.active,
selector: state.browser.pageNavigator.selector,
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(BrowserActions, dispatch);
}
export default connect(mapStateToProps, mapDispatchToProps)(PageNavigator);

View file

@ -32,6 +32,8 @@ import {
SET_LEFT_PANE_VISIBILITY, SET_LEFT_PANE_VISIBILITY,
SET_HOVERED_LINK, SET_HOVERED_LINK,
SET_STARTUP_PAGE, SET_STARTUP_PAGE,
UPDATE_PAGE_NAVIGATOR,
TOGGLE_PAGE_NAVIGATOR,
} from '../actions/browser'; } from '../actions/browser';
import { import {
CHANGE_ACTIVE_THROTTLING_PROFILE, CHANGE_ACTIVE_THROTTLING_PROFILE,
@ -179,6 +181,12 @@ type CSSEditorStateType = {
content: String, content: String,
}; };
type PageNavigator = {
active: boolean,
selector: string,
index: number | null,
};
export type BrowserStateType = { export type BrowserStateType = {
devices: Array<Device>, devices: Array<Device>,
homepage: string, homepage: string,
@ -201,6 +209,7 @@ export type BrowserStateType = {
allDevicesInDesignMode: boolean, allDevicesInDesignMode: boolean,
isHeaderVisible: boolean, isHeaderVisible: boolean,
isLeftPaneVisible: boolean, isLeftPaneVisible: boolean,
pageNavigator: PageNavigator,
}; };
let _activeDevices = null; let _activeDevices = null;
@ -365,6 +374,7 @@ export default function browser(
isHeaderVisible: true, isHeaderVisible: true,
isLeftPaneVisible: true, isLeftPaneVisible: true,
hoveredLink: '', hoveredLink: '',
pageNavigator: {selector: null, index: null, active: false},
}, },
action: Action action: Action
) { ) {
@ -606,6 +616,17 @@ export default function browser(
case SET_STARTUP_PAGE: case SET_STARTUP_PAGE:
saveStartupPage(action.value); saveStartupPage(action.value);
return {...state}; return {...state};
case UPDATE_PAGE_NAVIGATOR:
state.pageNavigator.selector = action.selector;
state.pageNavigator.index = action.index;
return {
...state,
};
case TOGGLE_PAGE_NAVIGATOR:
state.pageNavigator.active = action.active;
return {
...state,
};
default: default:
return state; return state;
} }

View file

@ -306,6 +306,7 @@
"electron-util": "^0.14.2", "electron-util": "^0.14.2",
"framer-motion": "^2.2.0", "framer-motion": "^2.2.0",
"jimp": "^0.12.1", "jimp": "^0.12.1",
"jsdom": "^16.5.3",
"lodash": "^4.17.19", "lodash": "^4.17.19",
"merge-img": "^2.1.3", "merge-img": "^2.1.3",
"mousetrap": "^1.6.5", "mousetrap": "^1.6.5",

View file

@ -2359,6 +2359,11 @@ abab@^2.0.0:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
abab@^2.0.3, abab@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
abbrev@1: abbrev@1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@ -2385,6 +2390,14 @@ acorn-globals@^4.1.0:
acorn "^6.0.1" acorn "^6.0.1"
acorn-walk "^6.0.1" acorn-walk "^6.0.1"
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
dependencies:
acorn "^7.1.1"
acorn-walk "^7.1.1"
acorn-hammerhead@^0.3.0: acorn-hammerhead@^0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/acorn-hammerhead/-/acorn-hammerhead-0.3.0.tgz#2f83730f15e8450169c3dfd88af3ea9405ea973d" resolved "https://registry.yarnpkg.com/acorn-hammerhead/-/acorn-hammerhead-0.3.0.tgz#2f83730f15e8450169c3dfd88af3ea9405ea973d"
@ -2422,6 +2435,11 @@ acorn@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
acorn@^8.1.0:
version "8.2.4"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0"
integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==
address@^1.0.1: address@^1.0.1:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
@ -5627,11 +5645,16 @@ csso@^4.0.2:
dependencies: dependencies:
css-tree "1.0.0-alpha.39" css-tree "1.0.0-alpha.39"
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@~0.3.6:
version "0.3.8" version "0.3.8"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
cssom@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
cssstyle@^1.0.0: cssstyle@^1.0.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
@ -5639,6 +5662,13 @@ cssstyle@^1.0.0:
dependencies: dependencies:
cssom "0.3.x" cssom "0.3.x"
cssstyle@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
dependencies:
cssom "~0.3.6"
csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.5, csstype@^2.6.7: csstype@^2.2.0, csstype@^2.5.2, csstype@^2.5.7, csstype@^2.6.5, csstype@^2.6.7:
version "2.6.11" version "2.6.11"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5"
@ -5680,6 +5710,15 @@ data-urls@^1.0.0:
whatwg-mimetype "^2.2.0" whatwg-mimetype "^2.2.0"
whatwg-url "^7.0.0" whatwg-url "^7.0.0"
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
dependencies:
abab "^2.0.3"
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
date-fns@^2.0.1: date-fns@^2.0.1:
version "2.15.0" version "2.15.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.15.0.tgz#424de6b3778e4e69d3ff27046ec136af58ae5d5f"
@ -5726,6 +5765,11 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decimal.js@^10.2.1:
version "10.2.1"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3"
integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==
decode-uri-component@^0.2.0: decode-uri-component@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@ -6108,6 +6152,13 @@ domexception@^1.0.1:
dependencies: dependencies:
webidl-conversions "^4.0.2" webidl-conversions "^4.0.2"
domexception@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
dependencies:
webidl-conversions "^5.0.0"
domhandler@^2.3.0: domhandler@^2.3.0:
version "2.4.2" version "2.4.2"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
@ -6710,6 +6761,18 @@ escodegen@^1.9.1:
optionalDependencies: optionalDependencies:
source-map "~0.6.1" source-map "~0.6.1"
escodegen@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
dependencies:
esprima "^4.0.1"
estraverse "^5.2.0"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
source-map "~0.6.1"
eslint-config-airbnb-base@^13.2.0: eslint-config-airbnb-base@^13.2.0:
version "13.2.0" version "13.2.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943"
@ -6991,6 +7054,11 @@ estraverse@^5.1.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
estraverse@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
esutils@^2.0.2: esutils@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@ -8452,6 +8520,13 @@ html-encoding-sniffer@^1.0.2:
dependencies: dependencies:
whatwg-encoding "^1.0.1" whatwg-encoding "^1.0.1"
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
dependencies:
whatwg-encoding "^1.0.5"
html-entities@^1.3.1: html-entities@^1.3.1:
version "1.3.1" version "1.3.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
@ -9270,6 +9345,11 @@ is-posix-bracket@^0.1.0:
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
is-potential-custom-element-name@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
is-primitive@^2.0.0: is-primitive@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
@ -9985,6 +10065,38 @@ jsdom@^11.5.1:
ws "^5.2.0" ws "^5.2.0"
xml-name-validator "^3.0.0" xml-name-validator "^3.0.0"
jsdom@^16.5.3:
version "16.5.3"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136"
integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==
dependencies:
abab "^2.0.5"
acorn "^8.1.0"
acorn-globals "^6.0.0"
cssom "^0.4.4"
cssstyle "^2.3.0"
data-urls "^2.0.0"
decimal.js "^10.2.1"
domexception "^2.0.1"
escodegen "^2.0.0"
html-encoding-sniffer "^2.0.1"
is-potential-custom-element-name "^1.0.0"
nwsapi "^2.2.0"
parse5 "6.0.1"
request "^2.88.2"
request-promise-native "^1.0.9"
saxes "^5.0.1"
symbol-tree "^3.2.4"
tough-cookie "^4.0.0"
w3c-hr-time "^1.0.2"
w3c-xmlserializer "^2.0.0"
webidl-conversions "^6.1.0"
whatwg-encoding "^1.0.5"
whatwg-mimetype "^2.3.0"
whatwg-url "^8.5.0"
ws "^7.4.4"
xml-name-validator "^3.0.0"
jsesc@^1.3.0: jsesc@^1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@ -10525,6 +10637,11 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@^2.0.0, log-symbols@^2.2.0: log-symbols@^2.0.0, log-symbols@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@ -11501,7 +11618,7 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
nwsapi@^2.0.7: nwsapi@^2.0.7, nwsapi@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
@ -12024,6 +12141,11 @@ parse5@4.0.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
parse5@^1.5.0: parse5@^1.5.0:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
@ -12854,7 +12976,7 @@ pseudomap@^1.0.2:
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
psl@^1.1.28: psl@^1.1.28, psl@^1.1.33:
version "1.8.0" version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
@ -13669,7 +13791,7 @@ request-promise-core@1.1.4:
dependencies: dependencies:
lodash "^4.17.19" lodash "^4.17.19"
request-promise-native@^1.0.5: request-promise-native@^1.0.5, request-promise-native@^1.0.9:
version "1.0.9" version "1.0.9"
resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
@ -14036,6 +14158,13 @@ sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
dependencies:
xmlchars "^2.2.0"
scheduler@^0.19.1: scheduler@^0.19.1:
version "0.19.1" version "0.19.1"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
@ -15184,7 +15313,7 @@ symbol-observable@^1.2.0:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
symbol-tree@^3.2.2: symbol-tree@^3.2.2, symbol-tree@^3.2.4:
version "3.2.4" version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
@ -15700,6 +15829,15 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0:
psl "^1.1.28" psl "^1.1.28"
punycode "^2.1.1" punycode "^2.1.1"
tough-cookie@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
dependencies:
psl "^1.1.33"
punycode "^2.1.1"
universalify "^0.1.2"
tr46@^1.0.1: tr46@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@ -15707,6 +15845,13 @@ tr46@^1.0.1:
dependencies: dependencies:
punycode "^2.1.0" punycode "^2.1.0"
tr46@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
dependencies:
punycode "^2.1.1"
"traverse@>=0.3.0 <0.4": "traverse@>=0.3.0 <0.4":
version "0.3.9" version "0.3.9"
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
@ -16043,7 +16188,7 @@ universal-user-agent@^6.0.0:
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
universalify@^0.1.0: universalify@^0.1.0, universalify@^0.1.2:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
@ -16303,13 +16448,20 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
w3c-hr-time@^1.0.1: w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
dependencies: dependencies:
browser-process-hrtime "^1.0.0" browser-process-hrtime "^1.0.0"
w3c-xmlserializer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
dependencies:
xml-name-validator "^3.0.0"
walker@^1.0.7, walker@~1.0.5: walker@^1.0.7, walker@~1.0.5:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
@ -16360,6 +16512,16 @@ webidl-conversions@^4.0.2:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
webidl-conversions@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
webpack-bundle-analyzer@^3.4.1: webpack-bundle-analyzer@^3.4.1:
version "3.8.0" version "3.8.0"
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16"
@ -16519,14 +16681,14 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
dependencies: dependencies:
iconv-lite "0.4.24" iconv-lite "0.4.24"
whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
@ -16549,6 +16711,15 @@ whatwg-url@^7.0.0:
tr46 "^1.0.1" tr46 "^1.0.1"
webidl-conversions "^4.0.2" webidl-conversions "^4.0.2"
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
version "8.5.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3"
integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==
dependencies:
lodash "^4.7.0"
tr46 "^2.0.2"
webidl-conversions "^6.1.0"
which-module@^2.0.0: which-module@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
@ -16708,6 +16879,11 @@ ws@^6.0.0, ws@^6.1.0, ws@^6.2.1:
dependencies: dependencies:
async-limiter "~1.0.0" async-limiter "~1.0.0"
ws@^7.4.4:
version "7.4.5"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1"
integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==
ws@~6.1.0: ws@~6.1.0:
version "6.1.4" version "6.1.4"
resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9"
@ -16753,6 +16929,11 @@ xmlbuilder@~11.0.0:
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xmlhttprequest-ssl@~1.5.4: xmlhttprequest-ssl@~1.5.4:
version "1.5.5" version "1.5.5"
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"