diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..f90445e14 --- /dev/null +++ b/.env.example @@ -0,0 +1,10 @@ +FIREBASE_API_KEY=example +FIREBASE_AUTH_DOMAIN=example +FIREBASE_DATABASE_URL=example +FIREBASE_PROJECT_ID=example +FIREBASE_STORAGE_BUCKET=example +FIREBASE_MESSAGING_SENDER_ID=example +FIREBASE_APP_ID=example +FIREBASE_MEASUREMENT_ID=example + +SLIPPI_WS_SERVER=ws://localhost:9898/ \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..f34bf282d --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,100 @@ +name: Release Builds + +on: + push: + paths-ignore: + - '**.md' + +jobs: + package: + name: Build and package on node ${{ matrix.node-version }} and ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + node-version: [10.x] + os: [ubuntu-latest, windows-latest, macOS-latest] + include: + - os: windows-latest + playback_image: windows64-playback + playback_dolphin_path: app/dolphin-dev/windows/ + - os: ubuntu-latest + playback_image: linux-playback + playback_dolphin_path: app/dolphin-dev/linux/ + - os: macOS-latest + playback_image: macOS-playback + playback_dolphin_path: app/dolphin-dev/osx/ + steps: + - name: Use Node.js ${{ matrix.node-version }} on ${{ matrix.os }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Checkout + uses: actions/checkout@v2.3.1 + - name: Fetch Git Tags + if: success() + shell: bash + run: | + git fetch --prune --unshallow + echo "GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV + echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV + - name: Cache node modules + uses: actions/cache@v1 + id: cache + with: + path: node_modules + key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.OS }}-build-${{ env.cache-name }}- + ${{ runner.OS }}-build- + ${{ runner.OS }}- + - name: Load macOS signing certificates and secrets + if: matrix.os == 'macOS-latest' && env.CERTIFICATE_MACOS_PASSWORD != null + run: | + chmod +x build/load-macos-certs-ci.sh && ./build/load-macos-certs-ci.sh + mkdir -p ~/private_keys/ + echo '${{ secrets.APPLE_CONNECT_API_KEY }}' > ~/private_keys/AuthKey_${{ secrets.APPLE_API_KEY_ID }}.p8 + echo "CSC_LINK=${{ secrets.CERTIFICATE_MACOS_APPLICATION }}" >> $GITHUB_ENV + echo "CSC_KEY_PASSWORD=${{ secrets.CERTIFICATE_MACOS_PASSWORD }}" >> $GITHUB_ENV + echo "APPLE_API_KEY=${{ secrets.APPLE_API_KEY_ID }}" >> $GITHUB_ENV + echo "APPLE_ISSUER_ID=${{ secrets.APPLE_ISSUER_ID }}" >> $GITHUB_ENV + echo "APPLE_TEAM_PROVIDER_ID=${{ secrets.APPLE_TEAM_PROVIDER_ID }}" >> $GITHUB_ENV + env: + CERTIFICATE_MACOS_APPLICATION: ${{ secrets.CERTIFICATE_MACOS_APPLICATION }} + CERTIFICATE_MACOS_PASSWORD: ${{ secrets.CERTIFICATE_MACOS_PASSWORD }} + - name: Install dependencies + run: | + yarn install + - name: Download playback artifact + uses: dawidd6/action-download-artifact@v2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: pr-build.yml + branch: slippi + name: ${{ matrix.playback_image }} + path: ${{ matrix.playback_dolphin_path }} + repo: project-slippi/Ishiiruka + - name: Unzip + shell: bash + working-directory: ${{ matrix.playback_dolphin_path }} + run: | + unzip * + rm *.zip + - name: Package + shell: bash + working-directory: ${{ github.workspace }} + run: | + echo ${{ secrets.ENVFILE }} > .env + yarn package + mkdir artifact + cp ./release/Slippi* ./artifact + cp ./release/*.yml ./artifact + env: + USE_HARD_LINKS: false + - name: Publish + if: success() + uses: actions/upload-artifact@v2-preview + with: + name: ${{ matrix.os }} + path: './artifact/' diff --git a/.gitignore b/.gitignore index d69ae7222..d09a9aab1 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,5 @@ main.js.map npm-debug.log.* dolphin/ + +.env \ No newline at end of file diff --git a/app/actions/auth.js b/app/actions/auth.js new file mode 100644 index 000000000..9f9c3c24f --- /dev/null +++ b/app/actions/auth.js @@ -0,0 +1,55 @@ +import { auth } from 'firebase'; + +export const SET_AUTH_USER = 'SET_AUTH_USER'; +export const SET_AUTH_LOADING = 'SET_AUTH_LOADING'; +export const SET_AUTH_ERROR = 'SET_AUTH_ERROR'; + +export function setAuthUser(user) { + return async dispatch => { + dispatch({ + type: SET_AUTH_USER, + user: user, + }); + }; +} + +export function login(email, password, callback) { + return async (dispatch) => { + // Set loading state + dispatch({ + type: SET_AUTH_LOADING, + loading: true, + }); + + // Clear any existing errors + dispatch({ + type: SET_AUTH_ERROR, + error: null, + }); + + try { + const user = await auth().signInWithEmailAndPassword(email, password); + if (user && callback) { + callback(); + } + } catch (err) { + console.error(err); + dispatch({ + type: SET_AUTH_ERROR, + error: err.message, + }); + } + + // Clear loading state + dispatch({ + type: SET_AUTH_LOADING, + loading: false, + }); + }; +} + +export function logout() { + return async () => { + await auth().signOut(); + }; +} diff --git a/app/actions/broadcast.js b/app/actions/broadcast.js new file mode 100644 index 000000000..ea4fb316d --- /dev/null +++ b/app/actions/broadcast.js @@ -0,0 +1,75 @@ +import { BroadcastManager } from '../domain/BroadcastManager'; +import { SpectateManager } from '../domain/SpectateManager'; + +export const SET_DOLPHIN_STATUS = 'SET_DOLPHIN_STATUS'; +export const SET_SLIPPI_STATUS = 'SET_SLIPPI_STATUS'; +export const UPDATE_VIEWABLE_BROADCASTS = 'UPDATE_VIEWABLE_BROADCASTS'; + +const broadcastManager = new BroadcastManager(); +const spectateManager = new SpectateManager(); + +export function setDolphinStatus(status) { + return async (dispatch) => { + dispatch({ + type: SET_DOLPHIN_STATUS, + status: status, + }); + }; +} + +export function setSlippiStatus(status) { + return async (dispatch) => { + dispatch({ + type: SET_SLIPPI_STATUS, + status: status, + }); + }; +} + +export function updateViewableBroadcasts(broadcasts) { + return async (dispatch) => { + dispatch({ + type: UPDATE_VIEWABLE_BROADCASTS, + broadcasts: broadcasts, + }); + }; +} + +export function startBroadcast(target) { + return async () => { + await broadcastManager.start(target); + }; +} + +export function stopBroadcast() { + return async () => { + broadcastManager.stop(); + }; +} + +export function refreshBroadcasts() { + return async () => { + try { + await spectateManager.connect(); + spectateManager.refreshBroadcasts(); + } catch { + // Do nothing + } + }; +} + +export function watchBroadcast(broadcastId) { + return async () => { + spectateManager.watchBroadcast(broadcastId); + }; +} + +export function initSpectate() { + return async () => { + try { + await spectateManager.connect(); + } catch { + // Do nothing + } + }; +} \ No newline at end of file diff --git a/app/actions/game.js b/app/actions/game.js index e588d62cf..2d29fa006 100644 --- a/app/actions/game.js +++ b/app/actions/game.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import SlippiGame from '@slippi/slippi-js'; +import log from 'electron-log'; export const GAME_LOAD_START = 'GAME_LOAD_START' export const GAME_LOAD_COMPLETE = 'GAME_LOAD_COMPLETE'; @@ -41,7 +42,8 @@ async function loadGame(gameOrPath) { settings = gameToLoad.getSettings(); stats = gameToLoad.getStats(); gameToLoad.getMetadata(); - } catch { + } catch (err) { + log.error(`Error loading replay file\n`, err); return null; } diff --git a/app/components/Broadcast.js b/app/components/Broadcast.js new file mode 100644 index 000000000..56b46a00b --- /dev/null +++ b/app/components/Broadcast.js @@ -0,0 +1,348 @@ +/* eslint-disable no-nested-ternary */ + +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; +import * as firebase from 'firebase'; +import classNames from 'classnames'; + +import { + Button, Header, Segment, Icon, Tab, Input, List, Card, +} from 'semantic-ui-react'; +import { Link } from 'react-router-dom'; + +import { ConnectionStatus } from '@slippi/slippi-js'; + +import CopyToClipboard from './common/CopyToClipboard'; +import PageHeader from './common/PageHeader'; +import PageWrapper from './PageWrapper'; +import DismissibleMessage from './common/DismissibleMessage'; + +import styles from './Broadcast.scss'; +import Scroller from './common/Scroller'; +import SpacedGroup from './common/SpacedGroup'; + +export default class Broadcast extends Component { + static propTypes = { + // error actions + dismissError: PropTypes.func.isRequired, + // broadcast actions + startBroadcast: PropTypes.func.isRequired, + stopBroadcast: PropTypes.func.isRequired, + refreshBroadcasts: PropTypes.func.isRequired, + watchBroadcast: PropTypes.func.isRequired, + + // store data + history: PropTypes.object.isRequired, + broadcast: PropTypes.object.isRequired, + auth: PropTypes.object.isRequired, + errors: PropTypes.object.isRequired, + topNotifOffset: PropTypes.number.isRequired, + }; + + state = { + viewerId: "", + } + + renderGlobalError() { + const errors = this.props.errors || {}; + const errorKey = 'broadcast-global'; + + const showGlobalError = errors.displayFlags[errorKey] || false; + const globalErrorMessage = errors.messages[errorKey] || ''; + return ( + + ); + } + + renderButton() { + const { isConnecting, isBroadcasting } = this.props.broadcast; + const active = isConnecting || isBroadcasting; + const buttonText = active ? "Stop Broadcast" : "Start Broadcast"; + const onClick = () => { + if (active) { + this.props.stopBroadcast(); + } else { + this.props.startBroadcast(this.state.viewerId); + } + }; + return ( + + ); + } + + renderRefreshButton() { + return ( + + ); + } + + renderBroadcasts() { + const broadcasts = _.get(this.props.broadcast, 'broadcasts') || []; + if (_.isEmpty(broadcasts)) { + return ( +
+ + + No broadcasts found + + Click refresh to reload + + +
+ ) + } + const broadcastEntries = _.map(broadcasts, broadcast => { + const name = _.get(broadcast, 'name'); + const broadcasterName = _.get(broadcast, ['broadcaster', 'name']); + return ( + + +
+ {this.renderLabelValue("Broadcaster", broadcasterName)} + {this.renderLabelValue("Name", name)} + {/* {this.renderLabelValue("ID", broadcast.id)} */} +
+
+ +
+ +
+
+
+ ); + }); + + return ( + + {broadcastEntries} + + ); + } + + renderLabelValue(label, value) { + return ( + +
{label}
+
{value}
+
+ ); + } + + renderNotLoggedIn() { + return ( +
+
+ + + Not logged in + + You must be logged in to broadcast your gameplay. Go to the settings page to log in. + + +
+ + + + + +
+ ); + } + + renderStatusDisplay(status, prefix) { + let statusMsg = `${prefix}Disconnected`; + let statusColor = "gray"; + if (status === ConnectionStatus.CONNECTED) { + statusMsg = `${prefix}Connected`; + statusColor = "green"; + } else if (status === ConnectionStatus.CONNECTING) { + statusMsg = `${prefix}Connecting...`; + statusColor = "yellow"; + } else if (status === ConnectionStatus.RECONNECT_WAIT) { + statusMsg = `${prefix}Reconnecting...`; + statusColor = "yellow"; + } + + const valueClasses = classNames({ + [styles['conn-status-value']]: true, + [styles['green']]: statusColor === "green", + [styles['gray']]: statusColor === "gray", + [styles['yellow']]: statusColor === "yellow", + [styles['white']]: statusColor === "white", + }); + + return ( + + + {statusMsg} + + ); + } + + renderBroadcastContent() { + const { slippiConnectionStatus, dolphinConnectionStatus, startTime, endTime, isBroadcasting } = this.props.broadcast; + + return ( +
+ + + + + Open Slippi Dolphin and start game + + + + Enter the ID from whoever will be viewing your broadcast + + + + Click Start Broadcast + + + { + this.setState({ + viewerId: p.value, + }); + }} + /> + {this.renderButton()} +
+
Status: {isBroadcasting ? `Broadcasting since ${JSON.stringify(startTime)}` : endTime ? `Broadcast lasted ${(endTime - startTime) / 1000} seconds` : "Not broadcasting"}
+ {this.renderStatusDisplay(dolphinConnectionStatus, "Dolphin ")} + {this.renderStatusDisplay(slippiConnectionStatus, "Broadcast ")} +
+
+
+ ); + } + + renderSpectateContent() { + const user = firebase.auth().currentUser; + + return ( +
+ + + + + Give the person broadcasting your ID: {user.uid} + + + + + After they have started their broadcast, refresh + + + + Once the broadcast appears, click to watch + + + {this.renderRefreshButton()} + {this.renderBroadcasts()} +
+ ); + } + + renderTabs() { + const panes = [ + { + menuItem: "Broadcast", + render: _.bind(this.renderBroadcastContent, this), + }, + { + menuItem: "Spectate", + render: _.bind(this.renderSpectateContent, this), + }, + ]; + + return ( + + ); + } + + renderContent() { + const { user } = this.props.auth; + if (!user) { + return this.renderNotLoggedIn(); + } + + return ( +
+ {this.renderGlobalError()} + {this.renderTabs()} +
+ ); + } + + render() { + return ( + +
+ + + {this.renderContent()} + +
+
+ ); + } +} + +/* eslint-enable no-nested-ternary */ \ No newline at end of file diff --git a/app/components/Broadcast.scss b/app/components/Broadcast.scss new file mode 100644 index 000000000..9c533513a --- /dev/null +++ b/app/components/Broadcast.scss @@ -0,0 +1,150 @@ +@import "../colors.global.scss"; + +.container { + max-width: 700px !important; + margin-left: auto; + margin-right: auto; +} + +.highlight { + color: $foreground; + + cursor: pointer; + &:hover { + text-decoration: underline; + } +} + +.tabs { + margin-top: 24px; + + :global(.menu) { + // border-color: rgba(255, 255, 255, 0.2) !important; + border-bottom-width: 0 !important; + + a { + color: rgba(255, 255, 255, 0.7) !important; + font-size: 20px; + font-weight: lighter !important; + border-bottom-color: $primary-gray !important; + border-bottom-width: 4px !important; + + } + + :global(.active) { + color: $foreground !important; + font-weight: bolder !important; + border-bottom-color: $primary-green !important; + } + } + + h2 { + color: rgba(255, 255, 255, 0.9); + } + + div { + color: rgba(255, 255, 255, 0.7); + } +} + +.section { + margin-bottom: 48px; +} + +.global-action-section { + margin-bottom: 15px; +} + +.card { + box-shadow: 3px 3px 2px rgba(0, 0, 0, 0.1) !important; + background: none !important; + border-style: solid !important; + border-width: 1px !important; + border-color: $background-darkest !important; + color: $foreground; + margin: 0 !important; + + .content { + border-color: $background-darkest !important; + background-color: $background-light !important; + } + + .warning-bar { + border-color: $background-darkest !important; + background-color: $primary-yellow !important; + padding-top: 4px !important; + padding-bottom: 5px !important; + color: black; + font-weight: 700; + } +} + +.conn-content-grid { + display: grid; + grid-template-columns: auto 1fr; + grid-column-gap: 6px; +} + +.conn-button-grid { + display: grid; + grid-template-columns: auto auto 1fr auto auto; + grid-column-gap: 3px; +} + +.conn-status-value { + font-weight: bold; + + &.gray { + color: gray; + } + + &.green { + color: $primary-green; + } + + &.yellow { + color: $primary-yellow; + } + + &.white { + color: white; + } +} + +.label { + font-weight: bold; + color: rgba(255, 255, 255, 0.5); + margin-right: 4px; +} + +.description { + color: gray; + // Move label margin to be under the description + margin-top: -4px; + margin-bottom: 4px; +} + +.empty-state-header { + color: rgba(255, 255, 255, 0.6) !important; + display: inline-block; + + :global(.sub) { + color: rgba(255, 255, 255, 0.5) !important; + } +} + +.connect-btn { + width: 133px; +} + +.spacer { + padding: 10px; +} + +.connection-details { + margin-top: 6px; +} + +.broadcast-list { + margin-top: 12px; +} \ No newline at end of file diff --git a/app/components/Console.js b/app/components/Console.js index 84bd88cb5..eaad37ec8 100644 --- a/app/components/Console.js +++ b/app/components/Console.js @@ -701,11 +701,11 @@ export default class Console extends Component {
- The connection port should only be changed if you are connecting to a relay, {Ports.WII_DEFAULT} is the port all Wiis use to send data. + The connection port should only be changed if you are connecting to a relay, {Ports.DEFAULT} is the port all Wiis use to send data.
diff --git a/app/components/Home.js b/app/components/Home.js index 3b4820b2d..51c73bcd8 100644 --- a/app/components/Home.js +++ b/app/components/Home.js @@ -130,6 +130,16 @@ export default class Home extends Component { ) ); + navigationElements.push( + this.generateNav( + 'podcast', + 'Gameplay Broadcasts', + 'Share your gameplay or watch others', + '/broadcast', + false + ) + ); + navigationElements.push( this.generateNav( 'setting', diff --git a/app/components/Settings.js b/app/components/Settings.js index 66735b39d..e1fb3c304 100644 --- a/app/components/Settings.js +++ b/app/components/Settings.js @@ -2,9 +2,11 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import _ from 'lodash'; import { + Modal, Button, Message, Header, + Form, Icon, Confirm, } from 'semantic-ui-react'; @@ -30,6 +32,8 @@ export default class Settings extends Component { openDolphin: PropTypes.func.isRequired, resetDolphin: PropTypes.func.isRequired, setResetConfirm: PropTypes.func.isRequired, + login: PropTypes.func.isRequired, + logout: PropTypes.func.isRequired, // error actions dismissError: PropTypes.func.isRequired, @@ -37,10 +41,21 @@ export default class Settings extends Component { // store data history: PropTypes.object.isRequired, store: PropTypes.object.isRequired, + auth: PropTypes.object.isRequired, errors: PropTypes.object.isRequired, topNotifOffset: PropTypes.number.isRequired, }; + constructor() { + super(); + this.state = { + email: '', + password: '', + showLoginModal: false, + showPassword: false, + }; + } + componentDidMount() { this.props.validateISO(); } @@ -78,8 +93,9 @@ export default class Settings extends Component { const contentMsg = (
Hello Linux friend! We now include a Dolphin build that will probably - work on your distro. If it doesn't work, you will have to build your own. - Please find the Playback Dolphin Path  option to configure. + work on your distro. If it doesn't work, you will have to build + your own. Please find the Playback Dolphin Path  option to + configure. Join the discord  @@ -97,6 +113,101 @@ export default class Settings extends Component { ); } + renderLoginModal() { + const { showPassword, showLoginModal, email, password } = this.state; + const auth = this.props.auth || {}; + + const togglePass = () => this.setState({ + showPassword: !showPassword, + }); + + return ( + this.setState({ showLoginModal: false })} + > + Login with Slippi.gg + +
this.handleLogin()}> + this.setState({ email: e.target.value })} + /> + + } + type={showPassword ? 'text' : 'password'} + value={password} + onChange={e => this.setState({ password: e.target.value })} + /> + {auth.error &&
{auth.error}
} + + +
+
+ ); + } + + handleLogin() { + const { email, password } = this.state; + this.props.login(email, password, () => { + // Clear the state on successful login + this.setState({ + email: '', + password: '', + showLoginModal: false, + }); + }); + } + + renderUserBlock() { + const auth = this.props.auth || {}; + + if (!auth.user) { + return ( +
+ {this.renderLoginModal()} + +
+ ); + } + return ( +
+

Welcome {auth.user.displayName}

+
+ ); + } + renderConfigDolphin() { const store = this.props.store || {}; @@ -163,56 +274,59 @@ export default class Settings extends Component { onCancel={this.hideConfirmReset} />
- ) + ); } showConfirmReset = () => { this.props.setResetConfirm(true); - } + }; confirmResetDolphin = () => { this.hideConfirmReset(); this.props.resetDolphin(); - } + }; hideConfirmReset = () => { this.props.setResetConfirm(false); - } + }; renderISOVersionCheck() { - const validationState = _.get(this.props.store, 'isoValidationState') || 'unknown'; + const validationState = + _.get(this.props.store, 'isoValidationState') || 'unknown'; let icon, text, loading; switch (validationState) { - case "success": - icon = "check circle outline"; - text = "Valid"; + case 'success': + icon = 'check circle outline'; + text = 'Valid'; loading = false; break; - case "fail": - icon = "times circle outline"; - text = "Bad ISO"; + case 'fail': + icon = 'times circle outline'; + text = 'Bad ISO'; loading = false; break; - case "unknown": - icon = "warning sign" - text = "Unknown ISO"; + case 'unknown': + icon = 'warning sign'; + text = 'Unknown ISO'; loading = false; break; - case "validating": - icon = "spinner"; - text = "Verifying"; + case 'validating': + icon = 'spinner'; + text = 'Verifying'; loading = true; break; default: - icon = "question circle outline"; - text = ""; + icon = 'question circle outline'; + text = ''; loading = false; break; } return ( -
+
{text}
@@ -230,7 +344,7 @@ export default class Settings extends Component { label="Melee ISO File" description="The path to a NTSC Melee 1.02 ISO. Used for playing replay files" value={store.settings.isoPath} - error={isoValidationState === "fail"} + error={isoValidationState === 'fail'} onClick={this.props.browseFile} handlerParams={['isoPath']} disabled={store.isResetting} @@ -262,10 +376,8 @@ export default class Settings extends Component { renderAdvancedSettings() { const inputs = []; - - inputs.push([ - this.renderPlaybackInstanceInput(), - ]); + + inputs.push([this.renderPlaybackInstanceInput()]); if (_.isEmpty(inputs)) { // Don't show advanced toggle if there are no @@ -291,8 +403,8 @@ export default class Settings extends Component { const playbackDolphinDescription = (
- An instance of Dolphin for playing replays comes bundled - with this app. This setting allows you to configure a different instance. + An instance of Dolphin for playing replays comes bundled with this app. + This setting allows you to configure a different instance.
); @@ -311,9 +423,16 @@ export default class Settings extends Component { label="Playback Dolphin Path" description={playbackDolphinDescription} /> - + - The default should be used by almost everyone. Only modify if you know what you are doing + + The default should be used by almost everyone. Only modify if you + know what you are doing +
- ) + ); + } + + renderUserAuth() { + return ( +
+
Connection Settings
+ + {this.renderUserBlock()} + +
+ ); } renderContent() { @@ -350,6 +480,7 @@ export default class Settings extends Component { {this.renderBasicSettings()} {this.renderAdvancedSettings()} {this.renderActions()} + {this.renderUserAuth()} ); } @@ -373,4 +504,4 @@ export default class Settings extends Component { ); } -} \ No newline at end of file +} diff --git a/app/components/Settings.scss b/app/components/Settings.scss index 4ceb8d905..78093edf7 100644 --- a/app/components/Settings.scss +++ b/app/components/Settings.scss @@ -65,3 +65,8 @@ color: #EED202 !important; } } + +.login-error { + color: #DB2828; + padding-bottom: 10px; +} \ No newline at end of file diff --git a/app/components/common/CopyToClipboard.js b/app/components/common/CopyToClipboard.js new file mode 100644 index 000000000..1b4b45be6 --- /dev/null +++ b/app/components/common/CopyToClipboard.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { Popup } from 'semantic-ui-react'; +import Copy from 'react-copy-to-clipboard'; + +export default class CopyToClipboard extends Component { + static propTypes = { + children: PropTypes.any.isRequired, + text: PropTypes.string.isRequired, + timeoutMs: PropTypes.number, + }; + + static defaultProps = { + timeoutMs: 2000, + }; + + state = { + copied: false, + }; + + timeout = null; + + onCopy = () => { + this.reset(); + this.setState({ copied: true }); + this.timeout = setTimeout(() => this.setState({ copied: false }), this.props.timeoutMs); + }; + + reset = () => { + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.setState({ copied: false }); + } + + render() { + return ( + + {this.props.children} + + } + /> + ); + } +} diff --git a/app/components/stats/OverallTable.js b/app/components/stats/OverallTable.js index 1003615b5..ce4d4522f 100644 --- a/app/components/stats/OverallTable.js +++ b/app/components/stats/OverallTable.js @@ -296,9 +296,9 @@ export default class OverallTable extends Component { this.renderOpeningField('Counter Hits', 'counterHitRatio'), this.renderOpeningField('Beneficial Trades', 'beneficialTradeRatio'), this.renderMultiStatField( - 'Actions (Wavedash / Waveland / Dash Dance)', + 'Actions (Wavedash / Waveland / Dash Dance / Ledgegrab)', ['actionCounts'], - ['wavedashCount', 'wavelandCount', 'dashDanceCount'] + ['wavedashCount', 'wavelandCount', 'dashDanceCount', 'ledgegrabCount'] ), ]; } @@ -311,6 +311,7 @@ export default class OverallTable extends Component { , this.renderHigherSimpleRatioField('Inputs / Minute', 'inputsPerMinute'), + this.renderHigherSimpleRatioField('Digital Inputs / Minute', 'digitalInputsPerMinute'), ]; } diff --git a/app/containers/BroadcastPage.js b/app/containers/BroadcastPage.js new file mode 100644 index 000000000..194538e0b --- /dev/null +++ b/app/containers/BroadcastPage.js @@ -0,0 +1,22 @@ +import _ from 'lodash'; +import { bindActionCreators } from 'redux'; +import { connect } from 'react-redux'; +import Broadcast from '../components/Broadcast'; +import * as ErrorActions from '../actions/error'; +import * as BroadcastActions from '../actions/broadcast'; + +function mapStateToProps(state) { + return { + errors: state.errors, + broadcast: state.broadcast, + auth: state.auth, + topNotifOffset: _.get(state.notifs, ['activeNotif', 'heightPx']) || 0, + }; +} + +function mapDispatchToProps(dispatch) { + const allActions = _.extend({}, ErrorActions, BroadcastActions); + return bindActionCreators(allActions, dispatch); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Broadcast); diff --git a/app/containers/SettingsPage.js b/app/containers/SettingsPage.js index fb8bec8a5..291324605 100644 --- a/app/containers/SettingsPage.js +++ b/app/containers/SettingsPage.js @@ -3,18 +3,20 @@ import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import Settings from '../components/Settings'; import * as SettingsActions from '../actions/settings'; +import * as AuthActions from '../actions/auth'; import * as ErrorActions from '../actions/error'; function mapStateToProps(state) { return { store: state.settings, + auth: state.auth, errors: state.errors, topNotifOffset: _.get(state.notifs, ['activeNotif', 'heightPx']) || 0, }; } function mapDispatchToProps(dispatch) { - const allActions = _.extend({}, SettingsActions, ErrorActions); + const allActions = _.extend({}, AuthActions, SettingsActions, ErrorActions); return bindActionCreators(allActions, dispatch); } diff --git a/app/dolphin-dev/overwrite/Sys/GameSettings/GALE01r2.ini b/app/dolphin-dev/overwrite/Sys/GameSettings/GALE01r2.ini index d98c81d81..b2716f17e 100644 --- a/app/dolphin-dev/overwrite/Sys/GameSettings/GALE01r2.ini +++ b/app/dolphin-dev/overwrite/Sys/GameSettings/GALE01r2.ini @@ -81,14 +81,14 @@ BE810008 806DB64C BA810008 800100B4 382100B0 7C0803A6 881F0008 00000000 -C206B0DC 00000043 #Playback/Core/RestoreGameFrame.asm +C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm 7C0802A6 90010004 9421FF50 BE810008 8BBF000C 7FA3EB78 3D808003 618C1724 7D8903A6 4E800421 -7C7C1B78 806DB64C -83630000 7FE3FB78 +7C7C1B78 832DB64C +83790000 7FE3FB78 3D808000 618C55F8 7D8903A6 4E800421 7C741B78 389B0007 @@ -102,18 +102,21 @@ C206B0DC 00000043 #Playback/Core/RestoreGameFrame.asm 807A0010 907F063C 807A0014 907F0650 807A0018 907F065C -807A001C 907F00B0 -807A0020 907F00B4 -807A0024 907F002C -807A0028 907F0010 -3C608046 6063B108 -3C80804C 60841F78 -88840001 3884FFFF -2C040000 40A00008 -38840005 1C840030 -7C632214 889F0618 -1C84000C 7E832214 -887A002C 98740002 +8879056F 2C030000 +41820024 807A001C +907F00B0 807A0020 +907F00B4 807A0024 +907F002C 807A0028 +907F0010 3C608046 +6063B108 3C80804C +60841F78 88840001 +3884FFFF 2C040000 +40A00008 38840005 +1C840030 7C632214 +889F0618 1C84000C +7E832214 887A002C +98740002 8879056F +2C030000 4182004C 807A002D 2C03FFFF 41820040 90610040 C0210040 C05F1830 @@ -149,16 +152,16 @@ D0230030 3D808002 800100B4 382100B0 7C0803A6 881F2219 60000000 00000000 -C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm +C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 7C0802A6 90010004 9421FF50 BE810008 -3860056F 3D808037 +38600570 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 3880056F +938DB64C 38800570 3D808000 618CC160 7D8903A6 4E800421 -386001A4 3D808037 +386001A5 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DC0000 38600040 @@ -172,7 +175,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 3880000D 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 388001A4 +7FC3F378 388001A5 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887E0000 @@ -216,7 +219,8 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 4180FF70 887E019D 9862F234 887E019E 9862F238 887E019F -9862F23C 807E01A0 +9862F23C 887E01A0 +987C056F 807E01A1 3D808037 618CF1E4 7D8903A6 4E800421 7C7D1B78 93BC0008 @@ -225,7 +229,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 7FA3EB78 -809E01A0 38A00000 +809E01A1 38A00000 3D808000 618C55F0 7D8903A6 4E800421 38800004 909C000C @@ -281,7 +285,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 7C0803A6 4E800020 38600000 809C0014 90640000 7FA3EB78 -809E01A0 3D808032 +809E01A1 3D808032 618C8F50 7D8903A6 4E800421 38600004 38800007 38A00000 @@ -832,3 +836,19 @@ $Optional: Enable Develop Mode [UnclePunch] *Turns develop (debug) mode on. Allows access to frame advance, hit/hurtbox display, and alternate camera angles 0415FDBC 480000AC #External/Enable Develop Mode/Enable Develop Mode.asm 04089250 48000008 #External/Enable Develop Mode/Enable Stale Moves.asm + +$Optional: Lagless FoD [Achilles, Myougi, Dan Salvato] +*Disables particles and reflection on FoD to improve performance +C21CBB90 00000005 #Lagless FoD +9421FFF8 3CC0804A +80C6ED78 3CA00002 +60A5AE44 7CA53050 +88C50000 60C60004 +98C50000 00000000 +041CC8AC FC000028 +041CBE9C 60000000 +041CBEF0 60000000 +041CBF54 60000000 +04390838 60000000 +041CD250 60000000 +041CCDCC 480000B4 diff --git a/app/dolphin-dev/overwrite/Sys/GameSettings/GALJ01r2.ini b/app/dolphin-dev/overwrite/Sys/GameSettings/GALJ01r2.ini index 9b3992327..86498e9d6 100644 --- a/app/dolphin-dev/overwrite/Sys/GameSettings/GALJ01r2.ini +++ b/app/dolphin-dev/overwrite/Sys/GameSettings/GALJ01r2.ini @@ -81,14 +81,14 @@ BE810008 806DB64C BA810008 800100B4 382100B0 7C0803A6 881F0008 00000000 -C206B0DC 00000043 #Playback/Core/RestoreGameFrame.asm +C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm 7C0802A6 90010004 9421FF50 BE810008 8BBF000C 7FA3EB78 3D808003 618C1724 7D8903A6 4E800421 -7C7C1B78 806DB64C -83630000 7FE3FB78 +7C7C1B78 832DB64C +83790000 7FE3FB78 3D808000 618C55F8 7D8903A6 4E800421 7C741B78 389B0007 @@ -102,18 +102,21 @@ C206B0DC 00000043 #Playback/Core/RestoreGameFrame.asm 807A0010 907F063C 807A0014 907F0650 807A0018 907F065C -807A001C 907F00B0 -807A0020 907F00B4 -807A0024 907F002C -807A0028 907F0010 -3C608046 6063B108 -3C80804C 60841F78 -88840001 3884FFFF -2C040000 40A00008 -38840005 1C840030 -7C632214 889F0618 -1C84000C 7E832214 -887A002C 98740002 +8879056F 2C030000 +41820024 807A001C +907F00B0 807A0020 +907F00B4 807A0024 +907F002C 807A0028 +907F0010 3C608046 +6063B108 3C80804C +60841F78 88840001 +3884FFFF 2C040000 +40A00008 38840005 +1C840030 7C632214 +889F0618 1C84000C +7E832214 887A002C +98740002 8879056F +2C030000 4182004C 807A002D 2C03FFFF 41820040 90610040 C0210040 C05F1830 @@ -149,16 +152,16 @@ D0230030 3D808002 800100B4 382100B0 7C0803A6 881F2219 60000000 00000000 -C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm +C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm 7C0802A6 90010004 9421FF50 BE810008 -3860056F 3D808037 +38600570 3D808037 618CF1E4 7D8903A6 4E800421 7C7C1B78 -938DB64C 3880056F +938DB64C 38800570 3D808000 618CC160 7D8903A6 4E800421 -386001A4 3D808037 +386001A5 3D808037 618CF1E4 7D8903A6 4E800421 7C7E1B78 93DC0000 38600040 @@ -172,7 +175,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 3880000D 38A00001 3D808000 618C55F0 7D8903A6 4E800421 -7FC3F378 388001A4 +7FC3F378 388001A5 38A00000 3D808000 618C55F0 7D8903A6 4E800421 887E0000 @@ -216,7 +219,8 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 4180FF70 887E019D 9862F234 887E019E 9862F238 887E019F -9862F23C 807E01A0 +9862F23C 887E01A0 +987C056F 807E01A1 3D808037 618CF1E4 7D8903A6 4E800421 7C7D1B78 93BC0008 @@ -225,7 +229,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 38A00001 3D808000 618C55F0 7D8903A6 4E800421 7FA3EB78 -809E01A0 38A00000 +809E01A1 38A00000 3D808000 618C55F0 7D8903A6 4E800421 38800004 909C000C @@ -281,7 +285,7 @@ C216E74C 00000099 #Playback/Core/RestoreGameInfo.asm 7C0803A6 4E800020 38600000 809C0014 90640000 7FA3EB78 -809E01A0 3D808032 +809E01A1 3D808032 618C8F50 7D8903A6 4E800421 38600004 38800007 38A00000 @@ -832,3 +836,19 @@ $Optional: Enable Develop Mode [UnclePunch] *Turns develop (debug) mode on. Allows access to frame advance, hit/hurtbox display, and alternate camera angles 0415FDBC 480000AC #External/Enable Develop Mode/Enable Develop Mode.asm 04089250 48000008 #External/Enable Develop Mode/Enable Stale Moves.asm + +$Optional: Lagless FoD [Achilles, Myougi, Dan Salvato] +*Disables particles and reflection on FoD to improve performance +C21CBB90 00000005 #Lagless FoD +9421FFF8 3CC0804A +80C6ED78 3CA00002 +60A5AE44 7CA53050 +88C50000 60C60004 +98C50000 00000000 +041CC8AC FC000028 +041CBE9C 60000000 +041CBEF0 60000000 +041CBF54 60000000 +04390838 60000000 +041CD250 60000000 +041CCDCC 480000B4 diff --git a/app/dolphin-dev/overwrite/User/Config/Logger.ini b/app/dolphin-dev/overwrite/User/Config/Logger.ini deleted file mode 100644 index 2014a2934..000000000 --- a/app/dolphin-dev/overwrite/User/Config/Logger.ini +++ /dev/null @@ -1,7 +0,0 @@ -[LogWindow] -x = 400 -y = 600 -pos = 2 -[Options] -Font = 0 -WrapLines = False diff --git a/app/dolphin-dev/overwrite/User/Config/Profiles/GCPad/B0XX.ini b/app/dolphin-dev/overwrite/User/Config/Profiles/GCPad/B0XX.ini deleted file mode 100644 index 73a55ee1e..000000000 --- a/app/dolphin-dev/overwrite/User/Config/Profiles/GCPad/B0XX.ini +++ /dev/null @@ -1,25 +0,0 @@ -[Profile] -Device = DInput/0/Arduino Leonardo -Buttons/A = `Button 0` -Buttons/B = `Button 1` -Buttons/X = `Button 2` -Buttons/Y = `Button 3` -Buttons/Z = `Button 4` -Buttons/Start = `Button 7` -Main Stick/Up = `Axis Y+` -Main Stick/Down = `Axis Y-` -Main Stick/Left = `Axis X-` -Main Stick/Right = `Axis X+` -C-Stick/Up = `Axis Yr+` -C-Stick/Down = `Axis Yr-` -C-Stick/Left = `Axis Xr-` -C-Stick/Right = `Axis Xr+` -Triggers/Threshold = 0.00000000000000000 -Triggers/L = `Button 5` -Triggers/R = `Button 6` -Triggers/L-Analog = `Slider 0-+` -Triggers/R-Analog = `Button 6` -D-Pad/Up = `Button 9` -D-Pad/Down = `Button 11` -D-Pad/Left = `Button 8` -D-Pad/Right = `Button 10` diff --git a/app/dolphin-dev/overwrite/User/Config/WiimoteNew.ini b/app/dolphin-dev/overwrite/User/Config/WiimoteNew.ini deleted file mode 100644 index 8609bf8f7..000000000 --- a/app/dolphin-dev/overwrite/User/Config/WiimoteNew.ini +++ /dev/null @@ -1,10 +0,0 @@ -[Wiimote1] -Source = 0 -[Wiimote2] -Source = 0 -[Wiimote3] -Source = 0 -[Wiimote4] -Source = 0 -[BalanceBoard] -Source = 0 diff --git a/app/dolphin-dev/overwrite/User/GC/SRAM.raw b/app/dolphin-dev/overwrite/User/GC/SRAM.raw deleted file mode 100644 index 79e3642db..000000000 Binary files a/app/dolphin-dev/overwrite/User/GC/SRAM.raw and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/GameSettings/GALE01.ini b/app/dolphin-dev/overwrite/User/GameSettings/GALE01.ini deleted file mode 100644 index 5a134ad1a..000000000 --- a/app/dolphin-dev/overwrite/User/GameSettings/GALE01.ini +++ /dev/null @@ -1,10 +0,0 @@ -[Core] -CPUThread = False -GPUDeterminismMode = fake-completion -PollingMethod = OnSIRead -FastDiscSpeed = True -[Gecko_Enabled] -$Required: General Codes -$Required: Slippi Playback -$Recommended: Normal Lag Reduction -[Gecko] diff --git a/app/dolphin-dev/overwrite/User/GameSettings/GALJ01r2.ini b/app/dolphin-dev/overwrite/User/GameSettings/GALJ01r2.ini deleted file mode 100644 index 5a134ad1a..000000000 --- a/app/dolphin-dev/overwrite/User/GameSettings/GALJ01r2.ini +++ /dev/null @@ -1,10 +0,0 @@ -[Core] -CPUThread = False -GPUDeterminismMode = fake-completion -PollingMethod = OnSIRead -FastDiscSpeed = True -[Gecko_Enabled] -$Required: General Codes -$Required: Slippi Playback -$Recommended: Normal Lag Reduction -[Gecko] diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/sys/SYSCONF b/app/dolphin-dev/overwrite/User/Wii/shared2/sys/SYSCONF deleted file mode 100644 index 975709619..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/sys/SYSCONF and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/Readme.txt b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/Readme.txt deleted file mode 100644 index 6813fc73c..000000000 --- a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/Readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -The Mailbox here has been shrunk, the real file size: - -WC24RECV.MBX 0x00700000 -WC24SEND.MBX 0x00200000 diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.ctl b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.ctl deleted file mode 100644 index a4880f368..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.ctl and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.mbx b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.mbx deleted file mode 100644 index 81cd383a9..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24recv.mbx and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.ctl b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.ctl deleted file mode 100644 index 165daf72b..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.ctl and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.mbx b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.mbx deleted file mode 100644 index d4474476f..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/mbox/wc24send.mbx and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/misc.bin b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/misc.bin deleted file mode 100644 index b2183037a..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/misc.bin and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24dl.bin b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24dl.bin deleted file mode 100644 index b7f8fa3ed..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24dl.bin and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fl.bin b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fl.bin deleted file mode 100644 index faa12b07a..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fl.bin and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fls.bin b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fls.bin deleted file mode 100644 index 1ca2191a9..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24fls.bin and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cbk b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cbk deleted file mode 100644 index c87fb7730..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cbk and /dev/null differ diff --git a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cfg b/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cfg deleted file mode 100644 index c87fb7730..000000000 Binary files a/app/dolphin-dev/overwrite/User/Wii/shared2/wc24/nwc24msg.cfg and /dev/null differ diff --git a/app/domain/BroadcastManager.js b/app/domain/BroadcastManager.js new file mode 100644 index 000000000..5ca167206 --- /dev/null +++ b/app/domain/BroadcastManager.js @@ -0,0 +1,362 @@ +/* eslint-disable no-underscore-dangle */ + +import log from 'electron-log'; +import { client as WebSocketClient } from 'websocket'; +import _ from 'lodash'; +import * as firebase from 'firebase'; + +import { DolphinConnection, Ports, ConnectionEvent, ConnectionStatus } from '@slippi/slippi-js'; +import { store } from '../index'; +import { setDolphinStatus, setSlippiStatus } from '../actions/broadcast'; +import { displayError } from '../actions/error'; + +const SLIPPI_WS_SERVER = process.env.SLIPPI_WS_SERVER; + +// This variable defines the number of events saved in the case of a disconnect. 1800 should +// support disconnects of 30 seconds at most +const BACKUP_MAX_LENGTH = 1800; + +/** + * Responsible for retrieving Dolphin game data over enet and sending the data + * to the Slippi server over websockets. + */ +// eslint-disable-next-line import/prefer-default-export +export class BroadcastManager { + constructor() { + this.broadcastId = null; + this.prevBroadcastId = null; + this.isBroadcastReady = false; + this.wsConnection = null; + this.incomingEvents = []; + + // We need to store events as we process them in the event that we get a disconnect and + // we need to re-send some events to the server + this.backupEvents = []; + + this.nextGameCursor = null; + + this.dolphinConnection = new DolphinConnection(); + this.dolphinConnection.on(ConnectionEvent.STATUS_CHANGE, status => { + log.info(`[Broadcast] Dolphin status change: ${status}`); + store.dispatch(setDolphinStatus(status)); + // Disconnect from Slippi server when we disconnect from Dolphin + if (status === ConnectionStatus.DISCONNECTED) { + // Kind of jank but this will hopefully stop the game on the spectator side when someone + // kills Dolphin. May no longer be necessary after Dolphin itself sends these messages + this.incomingEvents.push({ + type: 'end_game', + cursor: this.nextGameCursor, + 'next_cursor': this.nextGameCursor, + }); + + this._handleGameData(); + this.stop(); + + this.incomingEvents = []; + this.backupEvents = []; + } + }); + this.dolphinConnection.on(ConnectionEvent.MESSAGE, (message) => { + this.incomingEvents.push(message) + this._handleGameData(); + }); + this.dolphinConnection.on(ConnectionEvent.ERROR, (err) => { + // Log the error messages we get from Dolphin + log.error("[Broadcast] Dolphin connection error\n", err); + }); + + this._debouncedGameDataLog = _.debounce((cursor, cmd) => { + // I can't figure out how to differentiate when an invocation is triggered by a leading vs + // falling edge, would be useful to log that + log.info(`[Broadcast] Game events edge. ${cursor} 0x${cmd ? cmd.toString(16) : "??"}`); + }, 1000, { + leading: true, + trailing: true, + }); + } + + /** + * Connects to the Slippi server and the local Dolphin instance + */ + async start(target) { + if (this.wsConnection) { + // We're already connected + return; + } + + // Indicate we're connecting to the Slippi server + store.dispatch(setSlippiStatus(ConnectionStatus.CONNECTING)); + + const headers = { + target: target, + "api-version": 2, + }; + const user = firebase.auth().currentUser; + if (user) { + const token = await user.getIdToken(); + headers.authorization = `Bearer ${token}`; + } + + // Disable nagle because we send a lot of small packets, latency not overly important + const socket = new WebSocketClient({ + disableNagleAlgorithm: false, + }); + + socket.on('connectFailed', (error) => { + log.error("[Broadcast] WS failed to connect\n", error); + + const label = "x-websocket-reject-reason: "; + let message = error.message; + const pos = error.message.indexOf(label); + if (pos >= 0) { + const endPos = error.message.indexOf("\n", pos + label.length); + message = message.substring(pos + label.length, endPos >= 0 ? endPos : undefined); + } + + store.dispatch(setSlippiStatus(ConnectionStatus.DISCONNECTED)); + const errorAction = displayError( + 'broadcast-global', + message, + ); + store.dispatch(errorAction); + }); + + socket.on('connect', (connection) => { + log.info("[Broadcast] WS connection successful"); + + this.wsConnection = connection; + + const getBroadcasts = async () => { + connection.sendUTF(JSON.stringify({ + type: "get-broadcasts", + })); + }; + + const startBroadcast = async (broadcastId) => { + connection.sendUTF(JSON.stringify({ + type: "start-broadcast", + name: "Netplay", + broadcastId: broadcastId, + })); + }; + + const connectionComplete = (broadcastId) => { + log.info(`[Broadcast] Starting broadcast to: ${broadcastId}`); + + // Clear backup events when a connection completes. The backup events should already have + // been added back to the events to process at this point if that is relevant + this.backupEvents = []; + this.isBroadcastReady = true; + + this.broadcastId = broadcastId; + store.dispatch(setSlippiStatus(ConnectionStatus.CONNECTED)); + + // Process any events that may have been missed when we disconnected + this._handleGameData(); + } + + if (this.dolphinConnection.getStatus() === ConnectionStatus.DISCONNECTED) + { + // Now try connect to our local Dolphin instance + this.dolphinConnection.connect( + '127.0.0.1', + Ports.DEFAULT + ); + } + + connection.on('error', (err) => { + log.error("[Broadcast] WS connection error encountered\n", err); + const errorAction = displayError( + 'broadcast-global', + err.message, + ); + store.dispatch(errorAction); + }); + + connection.on('close', (code, reason) => { + log.info(`[Broadcast] WS connection closed: ${code}, ${reason}`); + store.dispatch(setSlippiStatus(ConnectionStatus.DISCONNECTED)); + + // Clear the socket and disconnect from Dolphin too if we're still connected + this.wsConnection = null; + this.isBroadcastReady = false; + + if (code === 1006) { + // Here we have an abnormal disconnect... try to reconnect? + this.start(target); + } else { + // If normal close, disconnect from dolphin + this.dolphinConnection.disconnect(); + } + }); + + connection.on('message', message => { + if (message.type !== "utf8") { + return; + } + + let obj; + try { + obj = JSON.parse(message.utf8Data); + } catch (err) { + log.error(`[Broadcast] Failed to parse message from server\n`, err, message.utf8Data); + return; + } + + switch (obj.type) { + case 'start-broadcast-resp': + if (obj.recoveryGameCursor) { + const firstIncoming = _.first(this.incomingEvents) || {}; + const firstCursor = firstIncoming.cursor; + + log.info(`[Broadcast] Picking broadcast back up from ${obj.recoveryGameCursor}. Last not sent: ${firstCursor}`); + + // Add any events that didn't make it to the server to the front of the event queue + const backedEventsToUse = _.filter(this.backupEvents, event => { + const isNeededByServer = event.cursor > obj.recoveryGameCursor; + + // Make sure we aren't duplicating anything that is already in the incoming events array + const isNotIncoming = _.isNil(firstCursor) || event.cursor < firstCursor; + + return isNeededByServer && isNotIncoming; + }); + + this.incomingEvents = _.concat(backedEventsToUse, this.incomingEvents); + + const newFirstEvent = _.first(this.incomingEvents) || {}; + const newFirstCursor = newFirstEvent.cursor; + + const firstBackupCursor = (_.first(this.backupEvents) || {}).cursor; + const lastBackupCursor = (_.last(this.backupEvents) || {}).cursor; + + log.info(`[Broadcast] Backup events include range from: [${firstBackupCursor}, ${lastBackupCursor}]. Next cursor to be sent: ${newFirstCursor}`); + } + + connectionComplete(obj.broadcastId); + break; + case 'get-broadcasts-resp': + const broadcasts = obj.broadcasts || []; + + // Grab broadcastId we were currently using if the broadcast still exists, would happen + // in the case of a reconnect + const broadcastsById = _.keyBy(broadcasts, 'id'); + const prevBroadcast = broadcastsById[this.broadcastId]; + + console.log(broadcastsById); + console.log(this.broadcastId); + console.log(prevBroadcast); + + if (prevBroadcast) { + startBroadcast(prevBroadcast.id); + return; + } + + startBroadcast(); + break; + default: + log.error(`[Broadcast] Ws resp type ${obj.type} not supported`); + break; + } + }); + + getBroadcasts(); + }); + + log.info("[Broadcast] Connecting to WS service"); + socket.connect(SLIPPI_WS_SERVER, 'broadcast-protocol', undefined, headers); + } + + stop() { + // TODO: Handle cancelling the retry case + + log.info("[Broadcast] Service stop message received"); + + if (this.dolphinConnection.getStatus() === ConnectionStatus.CONNECTED) { + log.info("[Broadcast] Disconnecting dolphin connection..."); + + this.dolphinConnection.disconnect(); + + // If the dolphin connection is still active, disconnecting it will cause the stop function + // to be called again, so just return on this iteration and the callback will handle the rest + return; + } + + if (this.wsConnection && this.broadcastId) + { + log.info("[Broadcast] Disconnecting ws connection..."); + + this.wsConnection.sendUTF(JSON.stringify({ + type: 'stop-broadcast', + broadcastId: this.broadcastId, + })); + + this.wsConnection.close(); + this.wsConnection = null; + } + + // Clear incoming events + this.incomingEvents = []; + } + + _handleGameData() { + // On a disconnect, we need to wait until isBroadcastReady otherwise we will skip the messages + // that were missed because we will start sending new data immediately as soon as the ws + // is established. We need to wait until the service tells us where we need to pick back up + // at before starting to send messages again + if (!this.broadcastId || !this.wsConnection || !this.isBroadcastReady) { + return; + } + + while (!_.isEmpty(this.incomingEvents)) { + const event = this.incomingEvents.shift(); + + this.backupEvents.push(event); + if (this.backupEvents.length > BACKUP_MAX_LENGTH) { + // Remove element after adding one once size is too big + this.backupEvents.shift(); + } + + switch (event.type) { + // Only forward these message types to the server + case "start_game": + case "game_event": + case "end_game": + // const payload = event.payload || ""; + // const payloadStart = payload.substring(0, 4); + // const buf = Buffer.from(payloadStart, 'base64'); + // const command = buf[0]; + + if (event.type === "game_event" && !event.payload) { + // Don't send empty payload game_event + break; + } + + const message = { + type: 'send-event', + broadcastId: this.broadcastId, + event: event, + }; + + if (event['next_cursor']) { + this.nextGameCursor = event['next_cursor']; + } + + this.wsConnection.sendUTF(JSON.stringify(message), err => { + if (err) { + log.error("[Broadcast] WS send error encountered\n", err); + // return; + } + + // if (event.type === "game_event") { + // this._debouncedGameDataLog(event.cursor, command); + // } + }); + break; + default: + break; + } + } + } +} + +/* eslint-enable no-underscore-dangle */ \ No newline at end of file diff --git a/app/domain/DolphinManager.js b/app/domain/DolphinManager.js index 9e64539e7..a7ba11eb3 100644 --- a/app/domain/DolphinManager.js +++ b/app/domain/DolphinManager.js @@ -8,14 +8,16 @@ import retry from 'async-retry'; import log from 'electron-log'; import ini from 'ini'; import electronSettings from 'electron-settings'; +import { EventEmitter } from 'events'; import { getDolphinPath } from '../utils/settings'; import { sudoRemovePath } from '../utils/sudoExec'; const { app } = require('electron').remote; -export default class DolphinManager { +export default class DolphinManager extends EventEmitter { constructor(key, settings = {}) { + super(); // The key of this dolphin manager, doesn't really do anything // atm other than get added to the commFileName this.key = key; @@ -65,12 +67,12 @@ export default class DolphinManager { let isCopySuccess = false; try { - if (platform === "win32" || platform === "darwin" || process.env.APPIMAGE){ + if (platform === "win32" || platform === "darwin" || process.env.APPIMAGE) { fs.removeSync(targetPath); fs.copySync(originalDolphinPath, targetPath); } if (process.platform === "linux") { - const linuxUserDir = path.join(os.homedir(),".config", "SlippiPlayback"); + const linuxUserDir = path.join(os.homedir(), ".config", "SlippiPlayback"); fs.removeSync(linuxUserDir); // clear the User dir on linux } isCopySuccess = true; @@ -102,20 +104,20 @@ export default class DolphinManager { // Handle the dolphin INI file being in different paths per platform switch (platform) { case "darwin": // osx - dolphinPath = isDev ? "./app/dolphin-dev/osx/Dolphin.app/Contents/Resources/User" : path.join(dolphinPath, "Dolphin.app", "Contents", "Resources", "User"); + dolphinPath = isDev ? "./app/dolphin-dev/osx/Slippi Dolphin.app/Contents/Resources/User" : path.join(dolphinPath, "Slippi Dolphin.app", "Contents", "Resources", "User"); break; case "win32": // windows dolphinPath = isDev ? "./app/dolphin-dev/windows/User" : path.join(dolphinPath, "User"); break; case "linux": - dolphinPath = path.join(os.homedir(),".config", "SlippiPlayback"); + dolphinPath = path.join(os.homedir(), ".config", "SlippiPlayback"); break; default: throw new Error("The current platform is not supported"); } try { const iniPath = path.join(dolphinPath, "Config", "Dolphin.ini"); - if (fs.existsSync(iniPath)){ + if (fs.existsSync(iniPath)) { const dolphinINI = ini.parse(fs.readFileSync(iniPath, 'utf-8')); dolphinINI.General.ISOPath0 = fileDir; const numPaths = dolphinINI.General.ISOPaths; @@ -125,7 +127,7 @@ export default class DolphinManager { } else { log.info("There isn't a User dir to write to."); const configPath = path.join(dolphinPath, "Config"); - const newINI = ini.encode({"General": {"ISOPath0": fileDir, "ISOPaths": 1}}); + const newINI = ini.encode({ "General": { "ISOPath0": fileDir, "ISOPaths": 1 } }); log.info("attempting to mkdir -p"); fs.mkdirpSync(configPath); fs.writeFileSync(iniPath, newINI); @@ -217,7 +219,7 @@ export default class DolphinManager { switch (platform) { case "darwin": // osx dolphinPath = isDev ? "./app/dolphin-dev/osx" : dolphinPath; - executablePath = path.join(dolphinPath, "Dolphin.app/Contents/MacOS/Dolphin"); + executablePath = path.join(dolphinPath, "Slippi Dolphin.app/Contents/MacOS/Slippi Dolphin"); break; case "win32": // windows dolphinPath = isDev ? "./app/dolphin-dev/windows" : dolphinPath; @@ -227,7 +229,7 @@ export default class DolphinManager { dolphinPath = isDev ? "./app/dolphin-dev/linux" : dolphinPath; const appImagePath = path.join(dolphinPath, "Slippi_Playback-x86_64.AppImage"); const emuPath = path.join(dolphinPath, "dolphin-emu"); - if (fs.existsSync(appImagePath)){ + if (fs.existsSync(appImagePath)) { executablePath = appImagePath; } else { executablePath = emuPath; @@ -268,6 +270,7 @@ export default class DolphinManager { // TODO: Could cause the temp directory to get cluttered this.removeCommFiles(); this.isRunning = false; + this.emit('dolphin-closed'); } } } diff --git a/app/domain/FirebaseAuthentication.js b/app/domain/FirebaseAuthentication.js new file mode 100644 index 000000000..5bbf1175a --- /dev/null +++ b/app/domain/FirebaseAuthentication.js @@ -0,0 +1,28 @@ +import firebase from 'firebase'; + +import { setAuthUser } from '../actions/auth'; +import { store } from '../index'; + +const firebaseConfig = { + apiKey: process.env.FIREBASE_API_KEY, + authDomain: process.env.FIREBASE_AUTH_DOMAIN, + databaseURL: process.env.FIREBASE_DATABASE_URL, + projectId: process.env.FIREBASE_PROJECT_ID, + storageBucket: process.env.FIREBASE_STORAGE_BUCKET, + messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID, + appId: process.env.FIREBASE_APP_ID, + measurementId: process.env.FIREBASE_MEASUREMENT_ID, +}; + +// Initialize firebase and mirror user to store +// eslint-disable-next-line import/prefer-default-export +export function initializeFirebase() { + try { + firebase.initializeApp(firebaseConfig); + firebase.auth().onAuthStateChanged(user => { + store.dispatch(setAuthUser(user)); + }); + } catch (err) { + console.error("Error initializing firebase. Did you forget to create a .env file from the .env.example file?", err); + } +} diff --git a/app/domain/SlpFileWriter.js b/app/domain/SlpFileWriter.js index 59e639453..59f367ee7 100644 --- a/app/domain/SlpFileWriter.js +++ b/app/domain/SlpFileWriter.js @@ -162,6 +162,10 @@ export default class SlpFileWriter extends EventEmitter { }); } + endGame() { + this.slpStream.endCurrentFile(); + } + initializeNewGame(filePath) { const clearFileObj = this.getClearedCurrentFile(); this.currentFile = { diff --git a/app/domain/SlpNetworking.js b/app/domain/SlpNetworking.js index ef35f642f..de0e15ece 100644 --- a/app/domain/SlpNetworking.js +++ b/app/domain/SlpNetworking.js @@ -21,7 +21,7 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import _ from 'lodash'; -import { ConsoleConnection, ConnectionStatus } from '@slippi/slippi-js'; +import { Ports, DolphinConnection, ConsoleConnection, ConnectionStatus } from '@slippi/slippi-js'; import { store } from '../index'; import { connectionStateChanged } from '../actions/console'; @@ -45,11 +45,9 @@ export default class SlpNetworking { this.isRelaying = settings.isRelaying; this.isMirroring = false; - this.connectionsByPort = []; - this.clientsByPort = []; + this.connections = []; this.connectionStatus = ConnectionStatus.DISCONNECTED; this.connDetails = this.getDefaultConnDetails(); - this.consoleConn = null; // A connection can mirror its received gameplay this.dolphinManager = new DolphinManager(`mirror-${this.id}`, { mode: 'mirror' }); @@ -116,34 +114,61 @@ export default class SlpNetworking { } connect() { + this.setStatus(ConnectionStatus.CONNECTING); // Update dolphin manager settings const connectionSettings = this.getSettings(); this.slpFileWriter.updateSettings(connectionSettings); this.slpFileWriter.connectOBS(); this.dolphinManager.updateSettings(connectionSettings); - console.log("Connecting"); - if (!this.consoleConn) this.consoleConn = new ConsoleConnection(); - this.consoleConn.connect(this.ipAddress, this.port); - this.consoleConn.on("handshake", (details) => { - console.log(details); - this.connDetails = {...this.connDetails, ...details}; - console.log(this.connDetails); - }); - this.consoleConn.on("statusChange", (status) => { - this.connectionStatus = status; - this.forceConsoleUiUpdate(); + if (this.port && this.port !== Ports.LEGACY && this.port !== Ports.DEFAULT) { + // If port is manually set, use that port. Don't do this if the port is set to legacy as + // somebody might have accidentally set it to that and they would encounter issues with + // the new Nintendont + this.connectOnPort(this.port); + } else { + // Try both the default and legacy ports + this.connectOnPort(Ports.DEFAULT); + this.connectOnPort(Ports.LEGACY); + + // Also try to connect as a Dolphin instance + this.connectOnPort(Ports.DEFAULT, "dolphin"); + } + } + + connectOnPort(port, connectionType="console") { + let conn; + if (connectionType === "console") { + conn = new ConsoleConnection(); + } else { + conn = new DolphinConnection(); + } + // Only add the event listeners once we've connected + conn.once("connect", () => { + conn.on("handshake", (details) => { + console.log(details); + this.connDetails = {...this.connDetails, ...details}; + console.log(this.connDetails); + }); + conn.on("statusChange", (status) => this.setStatus(status)); + conn.on("data", (data) => this.handleReplayData(data)); }); - this.consoleConn.on("data", (data) => this.handleReplayData(data)); + this.connections.push(conn); + // Actually try to connect + console.log(`Connecting to: ${this.ipAddress}:${port}`); + conn.connect(this.ipAddress, port); } disconnect() { console.log("Disconnect request"); this.slpFileWriter.disconnectOBS(); - this.consoleConn.disconnect(); + this.connections.forEach((conn) => { + conn.disconnect(); + }); + this.connections = []; - this.forceConsoleUiUpdate(); + this.setStatus(ConnectionStatus.DISCONNECTED); } handleReplayData(data) { @@ -162,4 +187,11 @@ export default class SlpNetworking { this.forceConsoleUiUpdate(); } } + + setStatus(status) { + if (this.connectionStatus !== status) { + this.connectionStatus = status; + this.forceConsoleUiUpdate(); + } + } } diff --git a/app/domain/SpectateManager.js b/app/domain/SpectateManager.js new file mode 100644 index 000000000..66970fd3c --- /dev/null +++ b/app/domain/SpectateManager.js @@ -0,0 +1,285 @@ +/* eslint-disable no-underscore-dangle */ +/* eslint-disable promise/always-return */ + +import log from 'electron-log'; +import { client as WebSocketClient } from 'websocket'; +import * as firebase from 'firebase'; +import _ from 'lodash'; +import fs from 'fs-extra'; +import path from 'path'; + +import DolphinManager from './DolphinManager'; +import SlpFileWriter from './SlpFileWriter'; +import { store } from '../index'; +import { updateViewableBroadcasts } from '../actions/broadcast'; +import { displayError } from '../actions/error'; + +const { app } = require('electron').remote; + +const SLIPPI_WS_SERVER = process.env.SLIPPI_WS_SERVER; + +/** + * Responsible for retrieving Dolphin game data over enet and sending the data + * to the Slippi server over websockets. + */ +// eslint-disable-next-line import/prefer-default-export +export class SpectateManager { + constructor() { + this.prevBroadcastId = null; + this.wsConnection = null; + this.gameStarted = false; + this.cursorByBroadcast = {}; + + // A connection can mirror its received gameplay + this.dolphinManager = new DolphinManager(`spectate`, { mode: 'mirror' }); + this.dolphinManager.on('dolphin-closed', () => { + log.info("[Spectator] dolphin closed"); + + // Stop watching channel + if (this.prevBroadcastId) { + if (this.wsConnection) { + this.wsConnection.sendUTF(JSON.stringify({ + type: "close-broadcast", + broadcastId: this.prevBroadcastId, + })); + } else { + log.error(`[Spectate] Could not close broadcast because connection is gone`); + } + } + + // Reset the game started flag + this.gameStarted = false; + // Clear previous broadcast ID when Dolphin closes + this.prevBroadcastId = null; + }); + + // Get path for spectate replays in my documents + const documentsPath = app.getPath("documents"); + const targetPath = path.join(documentsPath, 'Slippi', 'Spectate'); + fs.ensureDirSync(targetPath); + + // Initialize SlpFileWriter for writting files + const slpSettings = { + folderPath: targetPath, + onFileStateChange: () => { }, + }; + this.slpFileWriter = new SlpFileWriter(slpSettings); + this.slpFileWriter.on("new-file", (curFilePath) => { + this.dolphinManager.playFile(curFilePath, false); + }); + + this.debouncedGameDataLog = _.debounce((cursor, cmd) => { + // I can't figure out how to differentiate when an invocation is triggered by a leading vs + // falling edge, would be useful to log that + log.info(`[Spectate] Game events edge. ${cursor} 0x${cmd ? cmd.toString(16) : "??"}`); + }, 1000, { + leading: true, + trailing: true, + }); + } + + handleEvents(obj) { + const events = obj.events || []; + + events.forEach(event => { + switch (event.type) { + case 'start_game': + this.gameStarted = true; + break; + case 'end_game': + // End the current game if it's not already ended + // log.info("[Spectate] Game end explicit"); + this.slpFileWriter.endGame(); + this.gameStarted = false; + break; + case 'game_event': + const payloadStart = event.payload.substring(0, 4); + const payloadStartBuf = Buffer.from(payloadStart, 'base64'); + const command = payloadStartBuf[0]; + + // this.debouncedGameDataLog(event.cursor, command); + + if (command === 0x35) { + this.gameStarted = true; + // log.info("[Spectate] Game start"); + } + + // Only forward data to the file writer when it's an active game + if (this.gameStarted) { + const buf = Buffer.from(event.payload, 'base64'); + this.slpFileWriter.handleData(buf); + } + + if (command === 0x39) { + // End the current game if it's not already ended + // log.info("[Spectate] Game end 0x39"); + this.slpFileWriter.endGame(); + this.gameStarted = false; + } + + break; + default: + log.error(`[Spectate] Event type ${event.type} not supported`); + break; + } + }); + + // Update cursor with redis cursor such that if we disconnect, we can pick back up from where + // we left off + this.cursorByBroadcast[obj.broadcastId] = obj.cursor; + } + + /** + * Connects to the Slippi server and the local Dolphin instance + */ + async connect() { + if (this.wsConnection) { + // We're already connected + console.log("Skipping websocket connection since we're already connected"); + return; + } + + const headers = { + "api-version": 2, + }; + const user = firebase.auth().currentUser; + if (user) { + const token = await user.getIdToken(); + headers.authorization = `Bearer ${token}`; + } + + await new Promise((resolve, reject) => { + const socket = new WebSocketClient(); + + socket.on('connectFailed', (error) => { + log.error(`[Spectate] WS connection failed\n`, error); + const errorAction = displayError( + 'broadcast-global', + error.message, + ); + store.dispatch(errorAction); + + reject(); + }); + + socket.on('connect', (connection) => { + log.info("[Spectate] WS connection successful"); + this.wsConnection = connection; + + connection.on('error', (err) => { + log.error("[Spectate] Error with WS connection\n", err); + const errorAction = displayError( + 'broadcast-global', + err.message, + ); + store.dispatch(errorAction); + }); + + connection.on('close', (code, reason) => { + log.info(`[Spectate] connection close: ${code}, ${reason}`); + // Clear the socket and disconnect from Dolphin too if we're still connected + this.wsConnection = null; + + if (code === 1006) { + // Here we have an abnormal disconnect... try to reconnect? + this.connect().then(() => { + if (!this.prevBroadcastId || !this.wsConnection) { + return; + } + + const watchMsg = { + type: "watch-broadcast", + broadcastId: this.prevBroadcastId, + }; + + // If we were previously watching a broadcast, let's try to reconnect to it + const prevCursor = this.cursorByBroadcast[this.prevBroadcastId]; + if (prevCursor) { + watchMsg.startCursor = prevCursor; + } + + log.info(`[Spectate] Picking up broadcast ${this.prevBroadcastId} starting at: ${prevCursor}`); + + this.wsConnection.sendUTF(JSON.stringify(watchMsg)); + }).catch((err) => { + log.error(`[Specate] Error while reconnecting to broadcast.\n`, err); + }); + + } else { + // TODO: Somehow kill dolphin? Or maybe reconnect to a person's broadcast when it + // TODO: comes back up? + } + }); + + connection.on('message', message => { + if (message.type !== "utf8") { + return; + } + + // console.log(`[Spectator] ${message.utf8Data}`); + const obj = JSON.parse(message.utf8Data); + switch (obj.type) { + case 'list-broadcasts-resp': + const broadcasts = obj.broadcasts || []; + store.dispatch(updateViewableBroadcasts(broadcasts)); + break; + case 'events': + this.handleEvents(obj); + break; + default: + log.error(`[Spectate] Ws resp type ${obj.type} not supported`); + break; + } + }); + + resolve(); + }); + + socket.connect(SLIPPI_WS_SERVER, 'spectate-protocol', undefined, headers); + }); + } + + refreshBroadcasts() { + if (!this.wsConnection) { + return; + } + + this.wsConnection.sendUTF(JSON.stringify({ + type: "list-broadcasts", + })); + } + + watchBroadcast(broadcastId) { + if (!this.wsConnection) { + return; + } + + if (broadcastId === this.prevBroadcastId) { + // If we have not changed broadcasts, don't do anything. Worth noting that closing + // dolphin will count as a broadcast change because it resets prevBroadcastId + return; + } + + if (this.prevBroadcastId) { + this.wsConnection.sendUTF(JSON.stringify({ + type: "close-broadcast", + broadcastId: this.prevBroadcastId, + })); + } + + this.wsConnection.sendUTF(JSON.stringify({ + type: "watch-broadcast", + broadcastId: broadcastId, + })); + + // Play an empty file such that we just launch into the waiting for game screen, this is + // used to clear out any previous file that we were reading for. The file will get updated + // by the fileWriter + this.dolphinManager.playFile("", true); + + this.prevBroadcastId = broadcastId; + } +} + +/* eslint-enable no-underscore-dangle */ +/* eslint-enable promise/always-return */ \ No newline at end of file diff --git a/app/index.js b/app/index.js index 1631af8ff..2a9166ecc 100644 --- a/app/index.js +++ b/app/index.js @@ -3,11 +3,14 @@ import { render } from 'react-dom'; import { AppContainer } from 'react-hot-loader'; import Root from './containers/Root'; import { configureStore, history } from './store/configureStore'; +import { initializeFirebase } from './domain/FirebaseAuthentication'; import './imports.global.css'; import './app.global.scss'; export const store = configureStore(); //eslint-disable-line +initializeFirebase(); + render( diff --git a/app/main.dev.js b/app/main.dev.js index 269ffbbe0..ff18cfe8d 100644 --- a/app/main.dev.js +++ b/app/main.dev.js @@ -26,6 +26,7 @@ import { sudoRemovePath } from './utils/sudoExec'; // Set up AppUpdater log.transports.file.level = 'info'; +// log.transports.file.maxSize = 0; // Remove max log size, default is 1 MB (1048576) autoUpdater.logger = log; autoUpdater.autoInstallOnAppQuit = false; log.info('App starting...'); @@ -57,11 +58,11 @@ const handlePreloadLogic = async () => { if (isProd && (platform === "win32" || platform === "darwin" || process.env.APPIMAGE)) { log.info("Checking if Dolphin path has been moved..."); - const appPath = app.getAppPath(); + const appPath = process.env.APPDIR || app.getAppPath(); const exePlatformPaths = { "win32": path.join(appPath, "../../Slippi Launcher.exe"), "darwin": path.join(appPath, "../../MacOS/Slippi Launcher"), - "linux": path.join(process.env.APPDIR, "AppRun"), + "linux": path.join(appPath, "AppRun"), }; // If on production and mac/windows/appimage, let's see if this is a fresh install @@ -170,7 +171,7 @@ const handlePreloadLogic = async () => { // Handle the dolphin INI file being in different paths per platform switch (platform) { case "darwin": // osx - dolphinPath = isDev ? "./app/dolphin-dev/osx/Dolphin.app/Contents/Resources/User" : path.join(dolphinPath, "Dolphin.app", "Contents", "Resources", "User"); + dolphinPath = isDev ? "./app/dolphin-dev/osx/Slippi Dolphin.app/Contents/Resources/User" : path.join(dolphinPath, "Slippi Dolphin.app", "Contents", "Resources", "User"); break; case "win32": // windows dolphinPath = isDev ? "./app/dolphin-dev/windows/User" : path.join(dolphinPath, "User"); diff --git a/app/reducers/auth.js b/app/reducers/auth.js new file mode 100644 index 000000000..760906cb7 --- /dev/null +++ b/app/reducers/auth.js @@ -0,0 +1,42 @@ +import { SET_AUTH_USER, SET_AUTH_LOADING, SET_AUTH_ERROR } from '../actions/auth'; + +// Default state for this reducer +const defaultState = { + user: null, + loading: false, + error: null, +}; + +export default function broadcastReducer(state = defaultState, action) { + switch (action.type) { + case SET_AUTH_USER: + return setUser(state, action); + case SET_AUTH_LOADING: + return setLoading(state, action); + case SET_AUTH_ERROR: + return setError(state, action); + default: + return state; + } +} + +function setUser(state, action) { + const newState = { ...state }; + const { user } = action; + newState.user = user; + return newState; +} + +function setLoading(state, action) { + const newState = { ...state }; + const { loading } = action; + newState.loading = loading; + return newState; +} + +function setError(state, action) { + const newState = { ...state }; + const { error } = action; + newState.error = error; + return newState; +} diff --git a/app/reducers/broadcast.js b/app/reducers/broadcast.js new file mode 100644 index 000000000..ab26afd0b --- /dev/null +++ b/app/reducers/broadcast.js @@ -0,0 +1,69 @@ +import { ConnectionStatus } from '@slippi/slippi-js'; +import { SET_DOLPHIN_STATUS, SET_SLIPPI_STATUS, UPDATE_VIEWABLE_BROADCASTS } from '../actions/broadcast'; + +// Default state for this reducer +const defaultState = { + startTime: null, + endTime: null, + dolphinConnectionStatus: ConnectionStatus.DISCONNECTED, + slippiConnectionStatus: ConnectionStatus.DISCONNECTED, + isBroadcasting: false, + isConnecting: false, + broadcasts: [], +}; + +export default function broadcastReducer(state = defaultState, action) { + switch (action.type) { + // case START_BROADCAST: + // return startBroadcast(state, action); + // case STOP_BROADCAST: + // return stopBroadcast(state, action); + case SET_DOLPHIN_STATUS: + return setDolphinStatus(state, action); + case SET_SLIPPI_STATUS: + return setSlippiStatus(state, action); + case UPDATE_VIEWABLE_BROADCASTS: + return updateViewableBroadcasts(state, action); + default: + return state; + } +} + +function setSlippiStatus(state, action) { + const newState = { ...state }; + const { status } = action; + newState.slippiConnectionStatus = status; + newState.isBroadcasting = newState.slippiConnectionStatus === ConnectionStatus.CONNECTED && newState.dolphinConnectionStatus === ConnectionStatus.CONNECTED; + return updateBroadcastStatus(state, newState); +} + +function setDolphinStatus(state, action) { + const newState = { ...state }; + const { status } = action; + newState.dolphinConnectionStatus = status; + newState.isBroadcasting = newState.slippiConnectionStatus === ConnectionStatus.CONNECTED && newState.dolphinConnectionStatus === ConnectionStatus.CONNECTED; + return updateBroadcastStatus(state, newState); +} + +function updateBroadcastStatus(oldState, state) { + const newState = { ...state }; + newState.isBroadcasting = newState.slippiConnectionStatus === ConnectionStatus.CONNECTED && newState.dolphinConnectionStatus === ConnectionStatus.CONNECTED; + newState.isConnecting = !newState.isBroadcasting && (newState.slippiConnectionStatus !== ConnectionStatus.DISCONNECTED || newState.dolphinConnectionStatus !== ConnectionStatus.DISCONNECTED); + if (!oldState.isBroadcasting && newState.isBroadcasting) { + // We just started broadcasting + newState.startTime = new Date(); + newState.endTime = null; + } else if (oldState.isBroadcasting && !newState.isBroadcasting) { + // We just stopped broadcasting + newState.endTime = new Date(); + } + return newState; +} + +function updateViewableBroadcasts(state, action) { + const { broadcasts } = action; + return { + ...state, + broadcasts: broadcasts, + }; +} \ No newline at end of file diff --git a/app/reducers/index.js b/app/reducers/index.js index 1deb22c9b..51536c369 100644 --- a/app/reducers/index.js +++ b/app/reducers/index.js @@ -5,8 +5,10 @@ import fileLoader from './fileLoader'; import settings from './settings'; import console from './console'; import game from './game'; +import auth from './auth'; import errors from './error'; import notifs from './notifs'; +import broadcast from './broadcast'; export default function createRootReducer(history) { return combineReducers({ @@ -15,7 +17,9 @@ export default function createRootReducer(history) { settings: settings, console: console, game: game, + auth: auth, errors: errors, notifs: notifs, + broadcast: broadcast, }); } diff --git a/app/routes.js b/app/routes.js index 8d1f76ff9..687a1339a 100644 --- a/app/routes.js +++ b/app/routes.js @@ -6,6 +6,7 @@ import FileLoaderPage from './containers/FileLoaderPage'; import GameProfilePage from './containers/GameProfilePage'; import SettingsPage from './containers/SettingsPage'; import ConsolePage from './containers/ConsolePage'; +import BroadcastPage from './containers/BroadcastPage'; export default () => ( @@ -13,6 +14,7 @@ export default () => ( + diff --git a/build/afterSignHook.macos.js b/build/afterSignHook.macos.js new file mode 100644 index 000000000..3e0c68a54 --- /dev/null +++ b/build/afterSignHook.macos.js @@ -0,0 +1,43 @@ +const fs = require('fs'); +const path = require('path'); +const electronNotarize = require('electron-notarize'); + +module.exports = async function (params) { + if (process.platform !== 'darwin') { + return; + } + + console.log('afterSign hook triggered', params); + + // Bail early if this is a fork-caused PR build, which doesn't get + // secrets. + if ( + !process.env.APPLE_TEAM_PROVIDER_ID || + !process.env.APPLE_API_KEY || + !process.env.APPLE_ISSUER_ID + ) { + console.log("Bailing, no secrets found."); + return; + } + + const appId = 'com.github.projectslippi.slippidesktopapp'; + const appPath = path.join(params.appOutDir, `${params.packager.appInfo.productFilename}.app`); + if (!fs.existsSync(appPath)) { + throw new Error(`Cannot find application at: ${appPath}`); + } + + console.log(`Notarizing ${appId} found at ${appPath} (this could take awhile, get some coffee...)`); + + try { + await electronNotarize.notarize({ + appBundleId: appId, + appPath: appPath, + appleApiKey: process.env.APPLE_API_KEY, + appleApiIssuer: process.env.APPLE_ISSUER_ID, + }); + + console.log(`Successfully notarized ${appId}`); + } catch (error) { + console.error(error); + } +}; diff --git a/build/entitlements.macos.plist b/build/entitlements.macos.plist new file mode 100644 index 000000000..e2e590d54 --- /dev/null +++ b/build/entitlements.macos.plist @@ -0,0 +1,16 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-executable-page-protection + + com.apple.security.automation.apple-events + + + diff --git a/build/load-macos-certs-ci.sh b/build/load-macos-certs-ci.sh new file mode 100644 index 000000000..8d0035317 --- /dev/null +++ b/build/load-macos-certs-ci.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env sh + +KEY_CHAIN=build.keychain +CERTIFICATE_P12=certificate.p12 + +# Recreate the certificate from the secure environment variable +echo $CERTIFICATE_MACOS_APPLICATION | base64 --decode > $CERTIFICATE_P12 + +# Create a temporary keychain +security create-keychain -p actions $KEY_CHAIN + +# Remove the relock timeout, which can happen if our builds take forever. +security set-keychain-settings $KEY_CHAIN + +# Import certificate +security import $CERTIFICATE_P12 -k $KEY_CHAIN -P $CERTIFICATE_MACOS_PASSWORD -T /usr/bin/codesign; + +# Mark this as okay to be accessed from command line tools +security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k actions $KEY_CHAIN + +# Make the keychain the default so identities are found +security default-keychain -s $KEY_CHAIN + +# Unlock the keychain +security unlock-keychain -p actions $KEY_CHAIN + +# remove certs +rm -fr *.p12 diff --git a/configs/webpack.config.base.js b/configs/webpack.config.base.js index 9f285ec07..c1624cc01 100644 --- a/configs/webpack.config.base.js +++ b/configs/webpack.config.base.js @@ -4,6 +4,7 @@ import path from 'path'; import webpack from 'webpack'; +import Dotenv from 'dotenv-webpack'; import { dependencies } from '../package.json'; export default { @@ -43,5 +44,7 @@ export default { }), new webpack.NamedModulesPlugin(), + + new Dotenv(), ], }; diff --git a/internals/scripts/CopyDolphin.js b/internals/scripts/CopyDolphin.js index d6d85d3b5..1dc8d1aad 100644 --- a/internals/scripts/CopyDolphin.js +++ b/internals/scripts/CopyDolphin.js @@ -28,14 +28,14 @@ function CopyDolphin() { } function copyForMac(targetFolder) { - const dolphinSource = './app/dolphin-dev/osx/Dolphin.app'; + const dolphinSource = './app/dolphin-dev/osx/Slippi Dolphin.app'; if (!fs.existsSync(dolphinSource)) { throw new Error( - 'Must have a Dolphin.app application in dolphin-dev/osx folder.' + 'Must have a Slippi Dolphin.app application in dolphin-dev/osx folder.' ); } - const dolphinDest = path.join(targetFolder, 'Dolphin.app'); + const dolphinDest = path.join(targetFolder, 'Slippi Dolphin.app'); const dolphinDestUserFolder = path.join( dolphinDest, 'Contents/Resources/User' diff --git a/package.json b/package.json index 82c0489f7..d6ba209e0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "slippi-desktop-app", "productName": "Slippi Desktop App", - "version": "1.5.1", + "version": "1.6.0", "description": "Slippi Desktop App for browsing and playing replays.", "scripts": { "build": "concurrently \"yarn build-main\" \"yarn build-renderer\"", @@ -20,7 +20,7 @@ "package-ci": "yarn postinstall && yarn build && electron-builder --publish always", "package-linux": "yarn build && electron-builder build --linux", "package-win": "yarn build && electron-builder build --win --x64", - "postinstall": "electron-builder install-app-deps package.json && yarn build-dll", + "postinstall": "electron-builder install-app-deps && yarn build-dll", "postlint-fix": "prettier --ignore-path .eslintignore --single-quote --write '**/*.{*{js,jsx,json},babelrc,eslintrc,prettierrc,stylelintrc}'", "postlint-styles-fix": "prettier --ignore-path .eslintignore --single-quote --write '**/*.{css,scss}'", "prestart": "yarn build", @@ -37,6 +37,7 @@ "build": { "productName": "Slippi Launcher", "appId": "com.github.projectslippi.slippidesktopapp", + "afterSign": "./build/afterSignHook.macos.js", "asarUnpack": [ "**/dolphin/**/*", "**/images/**/*", @@ -81,9 +82,10 @@ "role": "viewer", "icon": "./resources/file.icns" }, - "category": "your.app.category.type", + "hardenedRuntime": true, + "entitlements": "./build/entitlements.macos.plist", + "category": "public.app-category.video", "target": [ - "zip", "dmg" ] }, @@ -201,9 +203,11 @@ "cross-spawn": "^6.0.5", "css-loader": "^1.0.1", "detect-port": "^1.3.0", + "dotenv-webpack": "^2.0.0", "electron": "^4.1.4", - "electron-builder": "^20.34.0", + "electron-builder": "^22.8.0", "electron-devtools-installer": "^2.2.4", + "electron-notarize": "^1.0.0", "enzyme": "^3.7.0", "enzyme-adapter-react-16": "^1.7.0", "enzyme-to-json": "^3.3.4", @@ -254,15 +258,15 @@ "dependencies": { "@fortawesome/fontawesome-free": "^5.5.0", "@google-cloud/storage": "^2.4.2", - "@slippi/slippi-js": "^5.0.5", + "@slippi/slippi-js": "^5.1.1", "async-retry": "^1.2.3", "classnames": "^2.2.6", "devtron": "^1.4.0", "electron-debug": "^2.0.0", "electron-log": "^2.2.17", "electron-settings": "^3.2.0", - "electron-sudo": "^4.0.12", "electron-updater": "^4.0.6", + "firebase": "^7.20.0", "fs-extra": "^8.1.0", "history": "^4.7.2", "ini": "^1.3.5", @@ -271,6 +275,7 @@ "obs-websocket-js": "^3.0.0", "prop-types": "^15.6.2", "react": "^16.6.3", + "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.6.3", "react-hot-loader": "^4.3.12", "react-redux": "^5.1.1", @@ -282,7 +287,8 @@ "semantic-ui-react": "^0.84.0", "semver": "^5.6.0", "source-map-support": "^0.5.9", - "sudo-prompt": "^9.2.1" + "sudo-prompt": "^9.2.1", + "websocket": "^1.0.32" }, "devEngines": { "node": ">=7.x", diff --git a/yarn.lock b/yarn.lock index 93b388a7f..3e5ef1640 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"7zip-bin@~4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-4.1.0.tgz#33eff662a5c39c0c2061170cc003c5120743fff0" - integrity sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA== +"7zip-bin@~5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" + integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== "7zip@0.0.6": version "0.0.6" @@ -938,6 +938,238 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@develar/schema-utils@~2.6.5": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" + integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"@firebase/analytics-types@0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.4.0.tgz#d6716f9fa36a6e340bc0ecfe68af325aa6f60508" + integrity sha512-Jj2xW+8+8XPfWGkv9HPv/uR+Qrmq37NPYT352wf7MvE9LrstpLVmFg3LqG6MCRr5miLAom5sen2gZ+iOhVDeRA== + +"@firebase/analytics@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.5.0.tgz#587292ec9a24410ad795a65c07fb1ea238ccef95" + integrity sha512-WyQ8BT6JSoXpg4q7SV9Yg5EPXbGbG8FkkXAIhV/AnslCglhpxegO1FU33qbuT4Grzc525hZJA97oqtQS8tm4Wg== + dependencies: + "@firebase/analytics-types" "0.4.0" + "@firebase/component" "0.1.19" + "@firebase/installations" "0.4.17" + "@firebase/logger" "0.2.6" + "@firebase/util" "0.3.2" + tslib "^1.11.1" + +"@firebase/app-types@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.1.tgz#dcbd23030a71c0c74fc95d4a3f75ba81653850e9" + integrity sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg== + +"@firebase/app@0.6.11": + version "0.6.11" + resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.6.11.tgz#f73f9e4571ba62f4029d8f9c9880a97e5a94eb1d" + integrity sha512-FH++PaoyTzfTAVuJ0gITNYEIcjT5G+D0671La27MU8Vvr6MTko+5YUZ4xS9QItyotSeRF4rMJ1KR7G8LSyySiA== + dependencies: + "@firebase/app-types" "0.6.1" + "@firebase/component" "0.1.19" + "@firebase/logger" "0.2.6" + "@firebase/util" "0.3.2" + dom-storage "2.1.0" + tslib "^1.11.1" + xmlhttprequest "1.8.0" + +"@firebase/auth-interop-types@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz#9fc9bd7c879f16b8d1bb08373a0f48c3a8b74557" + integrity sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw== + +"@firebase/auth-types@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.10.1.tgz#7815e71c9c6f072034415524b29ca8f1d1770660" + integrity sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw== + +"@firebase/auth@0.14.9": + version "0.14.9" + resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.14.9.tgz#481db24d5bd6eded8ac2e5aea6edb9307040229c" + integrity sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w== + dependencies: + "@firebase/auth-types" "0.10.1" + +"@firebase/component@0.1.19": + version "0.1.19" + resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.1.19.tgz#bd2ac601652c22576b574c08c40da245933dbac7" + integrity sha512-L0S3g8eqaerg8y0zox3oOHSTwn/FE8RbcRHiurnbESvDViZtP5S5WnhuAPd7FnFxa8ElWK0z1Tr3ikzWDv1xdQ== + dependencies: + "@firebase/util" "0.3.2" + tslib "^1.11.1" + +"@firebase/database-types@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.5.2.tgz#23bec8477f84f519727f165c687761e29958b63c" + integrity sha512-ap2WQOS3LKmGuVFKUghFft7RxXTyZTDr0Xd8y2aqmWsbJVjgozi0huL/EUMgTjGFrATAjcf2A7aNs8AKKZ2a8g== + dependencies: + "@firebase/app-types" "0.6.1" + +"@firebase/database@0.6.12": + version "0.6.12" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.6.12.tgz#60b484d34add1c0aad4999e2b1cb58b8f2b707c6" + integrity sha512-OLUxp8TkXiML4X5LWM5IACsSDvo3fcf4mTbTe5RF+N6TRFv0Svzlet5OgGIa3ET1dQvNiisrMX7zzRa0OTLs7Q== + dependencies: + "@firebase/auth-interop-types" "0.1.5" + "@firebase/component" "0.1.19" + "@firebase/database-types" "0.5.2" + "@firebase/logger" "0.2.6" + "@firebase/util" "0.3.2" + faye-websocket "0.11.3" + tslib "^1.11.1" + +"@firebase/firestore-types@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.12.1.tgz#67e999798043d1b3156d0a2c52d4299a92345deb" + integrity sha512-CpWcDriYnGDoAl0D9DcSuwX0b/fXqi7qOwuuTI1M0SYxau48G8cqhVjzjqPDgEM3kDGYJTnPN3ALS0Z4cnwERQ== + +"@firebase/firestore@1.16.7": + version "1.16.7" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.16.7.tgz#046da8e129205538335f261b804273ec04c6df42" + integrity sha512-MrX7te1eUib2pUzD3dLWdRuM7EPcCxtPwO4M9og3IFYr1U3XlxybD7kxyYswltHcUm6+kba3VKL1rvkqZ1sn2g== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/firestore-types" "1.12.1" + "@firebase/logger" "0.2.6" + "@firebase/util" "0.3.2" + "@firebase/webchannel-wrapper" "0.3.0" + "@grpc/grpc-js" "^1.0.0" + "@grpc/proto-loader" "^0.5.0" + node-fetch "2.6.0" + tslib "^1.11.1" + +"@firebase/functions-types@0.3.17": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.3.17.tgz#348bf5528b238eeeeeae1d52e8ca547b21d33a94" + integrity sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ== + +"@firebase/functions@0.4.51": + version "0.4.51" + resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.4.51.tgz#97be571cfe3b9ee3bf289b9dc5194e3ae49a4819" + integrity sha512-PPx8eZcr4eoU9BITOUGUVurs4WZu8Thj3uCWx766dU3mV1W/7kRgtiptmW0XJUB18FZ1PT3+Hadd6V6vjtLgYw== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/functions-types" "0.3.17" + "@firebase/messaging-types" "0.5.0" + isomorphic-fetch "2.2.1" + tslib "^1.11.1" + +"@firebase/installations-types@0.3.4": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.4.tgz#589a941d713f4f64bf9f4feb7f463505bab1afa2" + integrity sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q== + +"@firebase/installations@0.4.17": + version "0.4.17" + resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.17.tgz#1367b721e2c6c4880646bbc4f257e8616986a004" + integrity sha512-AE/TyzIpwkC4UayRJD419xTqZkKzxwk0FLht3Dci8WI2OEKHSwoZG9xv4hOBZebe+fDzoV2EzfatQY8c/6Avig== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/installations-types" "0.3.4" + "@firebase/util" "0.3.2" + idb "3.0.2" + tslib "^1.11.1" + +"@firebase/logger@0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.6.tgz#3aa2ca4fe10327cabf7808bd3994e88db26d7989" + integrity sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw== + +"@firebase/messaging-types@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.5.0.tgz#c5d0ef309ced1758fda93ef3ac70a786de2e73c4" + integrity sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg== + +"@firebase/messaging@0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.7.1.tgz#debbe7eb17c5b789231da6c166c506e19ecf1ed4" + integrity sha512-iev/ST9v0xd/8YpGYrZtDcqdD9J6ZWzSuceRn8EKy5vIgQvW/rk2eTQc8axzvDpQ36ZfphMYuhW6XuNrR3Pd2Q== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/installations" "0.4.17" + "@firebase/messaging-types" "0.5.0" + "@firebase/util" "0.3.2" + idb "3.0.2" + tslib "^1.11.1" + +"@firebase/performance-types@0.0.13": + version "0.0.13" + resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6" + integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA== + +"@firebase/performance@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.4.1.tgz#4e78f406ef2bc0eec2ce67cdfc57a53a55c31476" + integrity sha512-eAqS3/456xnUwuTg4w58x2fYbvTtQpgt67lpBUX3DuhOqwiM8+JELRte52nDgum2lTaTZWiu5de9mPuAYx2WDg== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/installations" "0.4.17" + "@firebase/logger" "0.2.6" + "@firebase/performance-types" "0.0.13" + "@firebase/util" "0.3.2" + tslib "^1.11.1" + +"@firebase/polyfill@0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145" + integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg== + dependencies: + core-js "3.6.5" + promise-polyfill "8.1.3" + whatwg-fetch "2.0.4" + +"@firebase/remote-config-types@0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz#fe6bbe4d08f3b6e92fce30e4b7a9f4d6a96d6965" + integrity sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA== + +"@firebase/remote-config@0.1.28": + version "0.1.28" + resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.28.tgz#1c39916446f1ed82b4c07e556455bd232fcfd8e1" + integrity sha512-4zSdyxpt94jAnFhO8toNjG8oMKBD+xTuBIcK+Nw8BdQWeJhEamgXlupdBARUk1uf3AvYICngHH32+Si/dMVTbw== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/installations" "0.4.17" + "@firebase/logger" "0.2.6" + "@firebase/remote-config-types" "0.1.9" + "@firebase/util" "0.3.2" + tslib "^1.11.1" + +"@firebase/storage-types@0.3.13": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.3.13.tgz#cd43e939a2ab5742e109eb639a313673a48b5458" + integrity sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog== + +"@firebase/storage@0.3.43": + version "0.3.43" + resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.3.43.tgz#107fb5db2eff2561b5c4e35ee4cbff48f28c7e77" + integrity sha512-Jp54jcuyimLxPhZHFVAhNbQmgTu3Sda7vXjXrNpPEhlvvMSq4yuZBR6RrZxe/OrNVprLHh/6lTCjwjOVSo3bWA== + dependencies: + "@firebase/component" "0.1.19" + "@firebase/storage-types" "0.3.13" + "@firebase/util" "0.3.2" + tslib "^1.11.1" + +"@firebase/util@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.3.2.tgz#87de27f9cffc2324651cabf6ec133d0a9eb21b52" + integrity sha512-Dqs00++c8rwKky6KCKLLY2T1qYO4Q+X5t+lF7DInXDNF4ae1Oau35bkD+OpJ9u7l1pEv7KHowP6CUKuySCOc8g== + dependencies: + tslib "^1.11.1" + +"@firebase/webchannel-wrapper@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz#d1689566b94c25423d1fb2cb031c5c2ea4c9f939" + integrity sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ== + "@fortawesome/fontawesome-free@^5.5.0": version "5.6.3" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.6.3.tgz#61c122c420d7a91613f393d6a06e5a4c6ae6abf3" @@ -1007,6 +1239,35 @@ through2 "^3.0.0" xdg-basedir "^3.0.0" +"@grpc/grpc-js@^1.0.0": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.1.6.tgz#43ab7bcb1aec071e18d7b45f8920afc0c9fcfb8e" + integrity sha512-bUeaMN/dHTkt9AqU0Tc1xdHMB3jVLyPNfg8gZ5cMyhFyMeCwoJbFcJrNBgYqRCbvYhvtaEgzQwkw91NnY4Oktg== + dependencies: + "@grpc/proto-loader" "^0.6.0-pre14" + "@types/node" "^12.12.47" + google-auth-library "^6.0.0" + semver "^6.2.0" + +"@grpc/proto-loader@^0.5.0": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.5.tgz#6725e7a1827bdf8e92e29fbf4e9ef0203c0906a9" + integrity sha512-WwN9jVNdHRQoOBo9FDH7qU+mgfjPc8GygPYms3M+y3fbQLfnCe/Kv/E01t7JRgnrsOHH8euvSbed3mIalXhwqQ== + dependencies: + lodash.camelcase "^4.3.0" + protobufjs "^6.8.6" + +"@grpc/proto-loader@^0.6.0-pre14": + version "0.6.0-pre9" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.0-pre9.tgz#0c6fe42f6c5ef9ce1b3cef7be64d5b09d6fe4d6d" + integrity sha512-oM+LjpEjNzW5pNJjt4/hq1HYayNeQT+eGrOPABJnYHv7TyNPDNzkQ76rDYZF86X5swJOa4EujEMzQ9iiTdPgww== + dependencies: + "@types/long" "^4.0.1" + lodash.camelcase "^4.3.0" + long "^4.0.0" + protobufjs "^6.9.0" + yargs "^15.3.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1020,6 +1281,59 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + "@semantic-ui-react/event-stack@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@semantic-ui-react/event-stack/-/event-stack-3.0.1.tgz#41d0b095ac94cc5e1607a4fed4d0f8860d0d2e60" @@ -1033,6 +1347,11 @@ resolved "https://registry.yarnpkg.com/@shelacek/ubjson/-/ubjson-1.0.1.tgz#009d39ea22fa80e036f97e936650951a8225fafe" integrity sha512-0vlllP3M7fUElSd4239wmnv6SqDeymJgjRkb/iusOyDN4I0xjc8hrX4Zk/KYoAesgSdsnnSwhOU7g+IewmdaAw== +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.2.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" @@ -1056,23 +1375,41 @@ array-from "^2.1.1" lodash.get "^4.4.2" -"@slippi/slippi-js@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@slippi/slippi-js/-/slippi-js-5.0.5.tgz#abb86b598451d100519a8cb7cddc048e58e2f9e2" - integrity sha512-iVFhJz1njibZf55KCSk8egRpuc85EnkWQtARnNLzzE6nzffMbUwZip5dHwhuH2PI8BRnPmN2M0d9Ri5QdTaZ/g== +"@slippi/slippi-js@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@slippi/slippi-js/-/slippi-js-5.1.1.tgz#63dc0ba131019fcaf9fe01417c6ecbe53db095aa" + integrity sha512-5iutrhwfjQNA2Ri9vzWM30wsAY43MVzSWT/hW/CkqS3jEU/I8PIpn5kMVLz2gESYnYOjOSTCB4sqEQJBLrBBSA== dependencies: "@shelacek/ubjson" "^1.0.1" + enet "^0.2.9" iconv-lite "^0.6.2" lodash "^4.17.19" moment "^2.27.0" reconnect-core "^1.3.0" semver "^7.3.2" +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@types/caseless@*": version "0.12.1" resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.1.tgz#9794c69c8385d0192acc471a540d1f8e0d16218a" integrity sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A== +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/debug@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" + integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== + "@types/duplexify@^3.5.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@types/duplexify/-/duplexify-3.6.0.tgz#dfc82b64bd3a2168f5bd26444af165bf0237dcd8" @@ -1092,11 +1429,23 @@ dependencies: "@types/node" "*" +"@types/fs-extra@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918" + integrity sha512-B42Sxuaz09MhC3DDeW5kubRcQ5by4iuVQ0cRRWM2lggLzAa/KVom0Aft/208NgMvNQQZ86s5rVcqDdn/SH0/mg== + dependencies: + "@types/node" "*" + "@types/lodash@^4.14.72": version "4.14.119" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.119.tgz#be847e5f4bc3e35e46d041c394ead8b603ad8b39" integrity sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw== +"@types/long@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + "@types/node@*": version "10.12.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" @@ -1107,6 +1456,16 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.4.tgz#1c586b991457cbb58fef51bc4e0cfcfa347714b5" integrity sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg== +"@types/node@^12.12.47": + version "12.12.59" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.59.tgz#3a6154c24d4b5bd95bb1ce921ef805fb722f24cc" + integrity sha512-D2MISWfv2j17aFBAkMD3lQ97vYpXCkAJMJf0mx2eKHNkzXA6Vo9w7A7BWi9fH8sOH1zeFb7fIhOo22z0TtrSag== + +"@types/node@^13.7.0": + version "13.13.20" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.20.tgz#8196a4db574220fc50e2e54f250ad51179bd0a03" + integrity sha512-1kx55tU3AvGX2Cjk2W4GMBxbgIz892V+X10S2gUreIAq8qCWgaQH+tZBOWc0bi2BKFhQt+CX0BTx28V9QPNa+A== + "@types/q@^1.5.1": version "1.5.1" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" @@ -1127,6 +1486,18 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.5": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + dependencies: + "@types/yargs-parser" "*" + "@webassemblyjs/ast@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" @@ -1297,6 +1668,13 @@ abort-controller@^2.0.2: dependencies: event-target-shim "^5.0.0" +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -1350,6 +1728,13 @@ address@^1.0.1: resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== +agent-base@6: + version "6.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" + integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + dependencies: + debug "4" + agent-base@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -1362,11 +1747,16 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.2.0: +ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= +ajv-keywords@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: version "6.6.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" @@ -1377,6 +1767,16 @@ ajv@^6.1.0, ajv@^6.5.3, ajv@^6.5.5, ajv@^6.6.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.0: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1387,12 +1787,12 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: - string-width "^2.0.0" + string-width "^3.0.0" ansi-colors@^1.0.1: version "1.1.0" @@ -1457,6 +1857,16 @@ ansi-regex@^4.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1469,6 +1879,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -1482,40 +1900,38 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.6.1.tgz#aa97f82d341dfa6f1269d78955482d619cc613ed" - integrity sha512-W0l85O+s6lOaziWqAhszPfwiG0s15FvMBP9j9i/bknsMccUkwN60u4Cy7yYtf6akCUDuJenLqpTX4/xvkq1egw== +app-builder-bin@3.5.9: + version "3.5.9" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.9.tgz#a3ac0c25286bac68357321cb2eaf7128b0bc0a4f" + integrity sha512-NSjtqZ3x2kYiDp3Qezsgukx/AUzKPr3Xgf9by4cYt05ILWGAptepeeu0Uv+7MO+41o6ujhLixTou8979JGg2Kg== -app-builder-lib@20.38.4, app-builder-lib@~20.38.3: - version "20.38.4" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-20.38.4.tgz#71a515d01f4f2bd48a67495804f659a46c35303c" - integrity sha512-JbuAJQBndcCW6BJVIb2tPjM5wiuIjz2LUlbyVxNIawM2wFKUBV9kr0N3RNBJFxcrCEuA9oprMUCoymJdrMUVfA== +app-builder-lib@22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.8.0.tgz#342a8976f50ae35cfd07412dbfd4f6c895b32eac" + integrity sha512-RGaIRjCUrqkmh6QOGsyekQPEOaVynHfmeh8JZuyUymFYUOFdzBbPamkA2nhBVBTkkgfjRHsxK7LhedFKPzvWEQ== dependencies: - "7zip-bin" "~4.1.0" - app-builder-bin "2.6.1" + "7zip-bin" "~5.0.3" + "@develar/schema-utils" "~2.6.5" async-exit-hook "^2.0.1" - bluebird-lst "^1.0.6" - builder-util "9.6.1" - builder-util-runtime "8.1.0" + bluebird-lst "^1.0.9" + builder-util "22.8.0" + builder-util-runtime "8.7.2" chromium-pickle-js "^0.2.0" - debug "^4.1.0" - ejs "^2.6.1" - electron-osx-sign "0.4.11" - electron-publish "20.38.3" - fs-extra-p "^7.0.0" - hosted-git-info "^2.7.1" + debug "^4.1.1" + ejs "^3.1.3" + electron-publish "22.8.0" + fs-extra "^9.0.1" + hosted-git-info "^3.0.5" is-ci "^2.0.0" - isbinaryfile "^3.0.3" - js-yaml "^3.12.0" - lazy-val "^1.0.3" + isbinaryfile "^4.0.6" + js-yaml "^3.14.0" + lazy-val "^1.0.4" minimatch "^3.0.4" - normalize-package-data "^2.4.0" - plist "^3.0.1" - read-config-file "3.2.0" - sanitize-filename "^1.6.1" - semver "^5.6.0" - temp-file "^3.3.2" + normalize-package-data "^2.5.0" + read-config-file "6.0.0" + sanitize-filename "^1.6.3" + semver "^7.3.2" + temp-file "^3.3.7" append-transform@^0.4.0: version "0.4.0" @@ -1692,6 +2108,11 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +arrify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1777,6 +2198,11 @@ async@0.2.6: resolved "https://registry.yarnpkg.com/async/-/async-0.2.6.tgz#ad3f373d9249ae324881565582bc90e152abbd68" integrity sha1-rT83PZJJrjJIgVZVgryQ4VKrvWg= +async@0.9.x: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -1801,6 +2227,11 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2618,7 +3049,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3, base64-js@^1.3.0: +base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== @@ -2668,6 +3099,11 @@ bignumber.js@^7.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== +bignumber.js@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" + integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== + bin-v8-flags-filter@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/bin-v8-flags-filter/-/bin-v8-flags-filter-1.1.3.tgz#14c018c6cca7529767c1f42f12bd3bb20d61e4d3" @@ -2700,16 +3136,23 @@ bluebird-lst@^1.0.6: dependencies: bluebird "^3.5.2" -bluebird@^3.4.6: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bluebird-lst@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" + integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== + dependencies: + bluebird "^3.5.5" -bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.2, bluebird@^3.5.3: +bluebird@^3.5.1, bluebird@^3.5.2, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -2753,18 +3196,19 @@ bowser@1.6.0: resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.6.0.tgz#37fc387b616cb6aef370dab4d6bd402b74c5c54d" integrity sha1-N/w4e2Fstq7zcNq01r1AK3TFxU0= -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" brace-expansion@^1.1.7: version "1.1.11" @@ -2966,7 +3410,22 @@ buffer@^5.1.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.1.0, builder-util-runtime@^8.1.0, builder-util-runtime@~8.1.0: +bufferutil@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.1.tgz#3a177e8e5819a1243fe16b63a199951a7ad8d4a7" + integrity sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA== + dependencies: + node-gyp-build "~3.7.0" + +builder-util-runtime@8.7.2: + version "8.7.2" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72" + integrity sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA== + dependencies: + debug "^4.1.1" + sax "^1.2.4" + +builder-util-runtime@~8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.1.0.tgz#dd7fca995d48ceee7580b4851ca057566c94601e" integrity sha512-s1mlJ28mv+56Iebh6c9aXjVe11O3Z0cDTwAGeB0PCcUzHA37fDxGgS8ZGoYNMZP+rBHj21d/od1wuYofTVLaQg== @@ -2976,23 +3435,25 @@ builder-util-runtime@8.1.0, builder-util-runtime@^8.1.0, builder-util-runtime@~8 fs-extra-p "^7.0.0" sax "^1.2.4" -builder-util@9.6.1, builder-util@~9.6.0: - version "9.6.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-9.6.1.tgz#4625620b1535fe40dcacb178d24fe56d0d7c8957" - integrity sha512-8MljKTjeV+A+LLVexuWEV3EpWbiUcsHHrB4Bg2qNo/3dC+vTo6g/27+W3Ij7Ij1UTobSkNBstFieWijXJCco9A== - dependencies: - "7zip-bin" "~4.1.0" - app-builder-bin "2.6.1" - bluebird-lst "^1.0.6" - builder-util-runtime "^8.1.0" - chalk "^2.4.1" - debug "^4.1.0" - fs-extra-p "^7.0.0" +builder-util@22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.8.0.tgz#01684085d1f2370b1bd182f69cbd007426f63f64" + integrity sha512-H80P1JzVy3TGpi63x81epQDK24XalL034+jAZlrPb5IhLtYmnNNdxCCAVJvg3VjSISd73Y71O+uhqCxWpqbPHw== + dependencies: + "7zip-bin" "~5.0.3" + "@types/debug" "^4.1.5" + "@types/fs-extra" "^9.0.1" + app-builder-bin "3.5.9" + bluebird-lst "^1.0.9" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + debug "^4.1.1" + fs-extra "^9.0.1" is-ci "^2.0.0" - js-yaml "^3.12.0" - source-map-support "^0.5.9" - stat-mode "^0.2.2" - temp-file "^3.3.2" + js-yaml "^3.14.0" + source-map-support "^0.5.19" + stat-mode "^1.0.0" + temp-file "^3.3.7" builtin-modules@^1.0.0: version "1.1.1" @@ -3044,6 +3505,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -3119,7 +3593,7 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -3129,6 +3603,11 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -3156,11 +3635,6 @@ capture-exit@^1.2.0: dependencies: rsvp "^3.3.3" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3203,6 +3677,22 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + character-entities-html4@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610" @@ -3351,10 +3841,10 @@ classnames@^2.2.6: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== cli-cursor@^2.1.0: version "2.1.0" @@ -3386,6 +3876,15 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone-deep@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" @@ -3404,6 +3903,13 @@ clone-regexp@^1.0.0: is-regexp "^1.0.0" is-supported-regexp-flag "^1.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -3453,17 +3959,19 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" -color-convert@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" - integrity sha1-vbbGnOZg+t/+CwAHzER+G59ygr0= +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -3526,11 +4034,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-version@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" - integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA= - component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -3613,18 +4116,6 @@ concurrently@^4.1.0: tree-kill "^1.1.0" yargs "^12.0.1" -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - configstore@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" @@ -3637,6 +4128,18 @@ configstore@^4.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + connect-history-api-fallback@^1.3.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -3721,6 +4224,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3: + version "3.3.1" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + dependencies: + toggle-selection "^1.0.6" + +core-js@3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -3769,13 +4284,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3875,6 +4383,11 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -4112,6 +4625,14 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + damerau-levenshtein@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" @@ -4150,6 +4671,13 @@ debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6. dependencies: ms "2.0.0" +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + debug@=3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -4164,13 +4692,6 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.5: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -4196,6 +4717,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + dedent@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.4.0.tgz#87defd040bd4c1595d963282ec57f3c2a8525642" @@ -4258,6 +4786,11 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -4403,19 +4936,17 @@ discontinuous-range@1.0.0: resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= -dmg-builder@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-6.5.3.tgz#95afe3deab33fd874f68d299bc71b481e94f5312" - integrity sha512-ZNl4GFBg6rdFplnuoK56iftxh/qgM7rXJUxgl21eK4WsjxgQwtQ0REZo+pDSL4OzVeyOO8MMNWSNQcCsBLiDyA== +dmg-builder@22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.8.0.tgz#2b17127837ed444db3086317eda5cf8912f6e6a9" + integrity sha512-orePWjcrl97SYLA8F/6UUtbXJSoZCYu5KOP1lVqD4LOomr8bjGDyEVYZmZYcg5WqKmXucdmO6OpqgzH/aRMMuA== dependencies: - app-builder-lib "~20.38.3" - bluebird-lst "^1.0.6" - builder-util "~9.6.0" - fs-extra-p "^7.0.0" - iconv-lite "^0.4.24" - js-yaml "^3.12.0" - parse-color "^1.0.0" - sanitize-filename "^1.6.1" + app-builder-lib "22.8.0" + builder-util "22.8.0" + fs-extra "^9.0.1" + iconv-lite "^0.6.2" + js-yaml "^3.14.0" + sanitize-filename "^1.6.3" dns-equal@^1.0.0: version "1.0.0" @@ -4460,6 +4991,11 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" +dom-storage@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" + integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -4517,15 +5053,36 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -dotenv-expand@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.2.0.tgz#def1f1ca5d6059d24a766e587942c21106ce1275" - integrity sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU= +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" -dotenv@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== +dotenv-defaults@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-2.0.1.tgz#ea6f9632b3b5cc55e48b736760def5561f1cb7c0" + integrity sha512-ugFCyBF7ILuwpmznduHPQZBMucHHJ8T4OBManTEVjemxCm2+nqifSuW2lD2SNKdiKSH1E324kZSdJ8M04b4I/A== + dependencies: + dotenv "^8.2.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv-webpack@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-2.0.0.tgz#064ae42dbb214778d8aff0c76dc97253594f9ec3" + integrity sha512-Omo5IpVl7XRgWXeZjxdfqOBEApJPxGLMOIx3F/w/W7ppUKgYMOXrk4eczlQrErPD4X0YRESlyGJek3O4uobRnw== + dependencies: + dotenv-defaults "^2.0.0" + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== duplexer3@^0.1.4: version "0.1.4" @@ -4570,7 +5127,7 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecdsa-sig-formatter@1.0.11: +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== @@ -4587,29 +5144,37 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== +ejs@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" + integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== + dependencies: + jake "^10.6.1" + ejs@~2.5.6: version "2.5.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5" integrity sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ== -electron-builder@^20.34.0: - version "20.38.4" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.38.4.tgz#67727529ffb87e7fdd78b3a84ea0d6c22bf04ec2" - integrity sha512-WHOr3Rz2wktxV5TqmRL6woO9/wrIZeRfJPSEXOhgfgLskE5Sp2Aer0zAF7lHNqXuG6JhU+0I9IYFAxa73MTs9w== - dependencies: - app-builder-lib "20.38.4" - bluebird-lst "^1.0.6" - builder-util "9.6.1" - builder-util-runtime "8.1.0" - chalk "^2.4.1" - dmg-builder "6.5.3" - fs-extra-p "^7.0.0" +electron-builder@^22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.8.0.tgz#d2c9fc5438c834e41fd794a271fca200165a3bad" + integrity sha512-dUv4F3srJouqxhWivtKqSoQP4Df6vYgjooGdzms+iYMTFi9f0b4LlEbr7kgsPvte8zAglee7VOGOODkCRJDkUQ== + dependencies: + "@types/yargs" "^15.0.5" + app-builder-lib "22.8.0" + bluebird-lst "^1.0.9" + builder-util "22.8.0" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + dmg-builder "22.8.0" + fs-extra "^9.0.1" is-ci "^2.0.0" - lazy-val "^1.0.3" - read-config-file "3.2.0" - sanitize-filename "^1.6.1" - update-notifier "^2.5.0" - yargs "^12.0.5" + lazy-val "^1.0.4" + read-config-file "6.0.0" + sanitize-filename "^1.6.3" + update-notifier "^4.1.0" + yargs "^15.3.1" electron-chromedriver@~3.0.0: version "3.0.0" @@ -4677,30 +5242,27 @@ electron-log@^2.2.17: resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-2.2.17.tgz#e71e2ebb949fc96ded7cdb99eeee7202e48981d2" integrity sha512-v+Af5W5z99ehhaLOfE9eTSXUwjzh2wFlQjz51dvkZ6ZIrET6OB/zAZPvsuwT6tm3t5x+M1r+Ed3U3xtPZYAyuQ== -electron-osx-sign@0.4.11: - version "0.4.11" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz#8377732fe7b207969f264b67582ee47029ce092f" - integrity sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ== - dependencies: - bluebird "^3.5.0" - compare-version "^0.1.2" - debug "^2.6.8" - isbinaryfile "^3.0.2" - minimist "^1.2.0" - plist "^3.0.1" - -electron-publish@20.38.3: - version "20.38.3" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-20.38.3.tgz#7c162904f728ba2bbf2640bc3620b65ce1061ce3" - integrity sha512-Qomq253NT5DfjUZgFSx6p+gheU5YhM6zZ67fTtBZvwyk0v8HwxNXfa8fZT7h+1c3BwEmjusTbmjZRNW/XZBXFA== - dependencies: - bluebird-lst "^1.0.6" - builder-util "~9.6.0" - builder-util-runtime "^8.1.0" - chalk "^2.4.1" - fs-extra-p "^7.0.0" - lazy-val "^1.0.3" - mime "^2.4.0" +electron-notarize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz#bc925b1ccc3f79e58e029e8c4706572b01a9fd8f" + integrity sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + +electron-publish@22.8.0: + version "22.8.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.8.0.tgz#7f410fe043abc5d3d896c4ee9eea7a43ea352c7d" + integrity sha512-uM0Zdi9hUqqGOrPj478v7toTvV1Kgto1w11rIiI168batiXAJvNLD8VZRfehOrZT0ibUyZlw8FtxoGCrjyHUOw== + dependencies: + "@types/fs-extra" "^9.0.1" + bluebird-lst "^1.0.9" + builder-util "22.8.0" + builder-util-runtime "8.7.2" + chalk "^4.1.0" + fs-extra "^9.0.1" + lazy-val "^1.0.4" + mime "^2.4.6" electron-settings@^3.2.0: version "3.2.0" @@ -4710,14 +5272,6 @@ electron-settings@^3.2.0: clone "^2.1.1" jsonfile "^4.0.0" -electron-sudo@^4.0.12: - version "4.0.12" - resolved "https://registry.yarnpkg.com/electron-sudo/-/electron-sudo-4.0.12.tgz#17d27fcb33837b7f6fd3a7946f168d6590566a53" - integrity sha1-F9J/yzODe39v06eUbxaNZZBWalM= - dependencies: - babel-runtime "^6.18.0" - bluebird "^3.4.6" - electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.96: version "1.3.100" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.100.tgz#899fb088def210aee6b838a47655bbb299190e13" @@ -4775,6 +5329,16 @@ emoji-regex@^6.5.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -4785,6 +5349,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -4800,6 +5371,11 @@ endpoint-utils@^1.0.2: ip "^1.1.3" pinkie-promise "^1.0.0" +enet@^0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/enet/-/enet-0.2.9.tgz#d7fd68a0bf8bb3891408ea465e26ed6955822a1a" + integrity sha1-1/1ooL+Ls4kUCOpGXibtaVWCKho= + enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" @@ -4930,6 +5506,24 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promise@^4.0.3: version "4.2.6" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" @@ -4942,6 +5536,19 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -5409,6 +6016,13 @@ express@^4.16.2, express@^4.16.3: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -5510,6 +6124,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-glob@^2.0.2: version "2.2.6" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" @@ -5542,6 +6161,13 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +faye-websocket@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -5614,6 +6240,13 @@ file-loader@^2.0.0: loader-utils "^1.0.2" schema-utils "^1.0.0" +filelist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" + integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== + dependencies: + minimatch "^3.0.4" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -5719,6 +6352,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -5729,6 +6370,26 @@ findup-sync@^2.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +firebase@^7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.20.0.tgz#ac1557a0962070d19d61d150c69421a5503710ec" + integrity sha512-ijgiUPB93UGWw2P2kgUQgghu5WOn/WR2J8C/V6ZSeI1PQqiEwsfn0kvw4iMJeqLQpA/FVeZz/+p0ubE5kzqhBA== + dependencies: + "@firebase/analytics" "0.5.0" + "@firebase/app" "0.6.11" + "@firebase/app-types" "0.6.1" + "@firebase/auth" "0.14.9" + "@firebase/database" "0.6.12" + "@firebase/firestore" "1.16.7" + "@firebase/functions" "0.4.51" + "@firebase/installations" "0.4.17" + "@firebase/messaging" "0.7.1" + "@firebase/performance" "0.4.1" + "@firebase/polyfill" "0.3.36" + "@firebase/remote-config" "0.1.28" + "@firebase/storage" "0.3.43" + "@firebase/util" "0.3.2" + flat-cache@^1.2.1: version "1.3.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" @@ -5857,6 +6518,16 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -5940,6 +6611,17 @@ gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1: https-proxy-agent "^2.2.1" node-fetch "^2.3.0" +gaxios@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-3.2.0.tgz#11b6f0e8fb08d94a10d4d58b044ad3bec6dd486a" + integrity sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.3.0" + gaze@^1.0.0, gaze@~1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" @@ -5955,6 +6637,14 @@ gcp-metadata@^0.9.3: gaxios "^1.0.2" json-bigint "^0.3.0" +gcp-metadata@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.2.0.tgz#3b424355ccdc240ee07c5791e2fd6a60a283d89a" + integrity sha512-vQZD57cQkqIA6YPGXM/zc+PIZfNRFdukWGsGZ5+LcJzesi5xp6Gn7a02wRJi4eXPyArNMIYpPET4QMxGqtlk6Q== + dependencies: + gaxios "^3.0.0" + json-bigint "^1.0.0" + gcs-resumable-upload@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.14.1.tgz#d0b0b2acc608d63e4164329b0a1231227383b532" @@ -5971,6 +6661,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -5991,13 +6686,20 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -6061,12 +6763,12 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== dependencies: - ini "^1.3.4" + ini "^1.3.5" global-modules-path@^2.3.0: version "2.3.1" @@ -6183,6 +6885,21 @@ google-auth-library@^3.0.0: lru-cache "^5.0.0" semver "^5.5.0" +google-auth-library@^6.0.0: + version "6.0.6" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-6.0.6.tgz#5102e5c643baab45b4c16e9752cd56b8861f3a82" + integrity sha512-fWYdRdg55HSJoRq9k568jJA1lrhg9i2xgfhVIMJbskUmbDpJGHsbv9l41DGhCDXM21F9Kn4kUwdysgxSYBYJUw== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^3.0.0" + gcp-metadata "^4.1.0" + gtoken "^5.0.0" + jws "^4.0.0" + lru-cache "^6.0.0" + google-p12-pem@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.3.tgz#3d8acc140573339a5bca7b2f6a4b206bbea6d8d7" @@ -6191,22 +6908,29 @@ google-p12-pem@^1.0.0: node-forge "^0.7.5" pify "^4.0.0" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= +google-p12-pem@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.0.3.tgz#673ac3a75d3903a87f05878f3c75e06fc151669e" + integrity sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA== + dependencies: + node-forge "^0.10.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: - create-error-class "^3.0.0" + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" @@ -6246,6 +6970,16 @@ gtoken@^2.3.2: mime "^2.2.0" pify "^4.0.0" +gtoken@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.0.3.tgz#b76ef8e9a2fed6fef165e47f7d05b60c498e4d05" + integrity sha512-Nyd1wZCMRc2dj/mAD0LlfQLcAO06uKdpKJXvK85SGrF5+5+Bpfil9u/2aw35ltvEHjvl0h5FMKN5knEU+9JrOg== + dependencies: + gaxios "^3.0.0" + google-p12-pem "^3.0.0" + jws "^4.0.0" + mime "^2.2.0" + gulp-clone@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/gulp-clone/-/gulp-clone-2.0.1.tgz#cf4ecb28ca46d032f6949271e8bf7986e78e6ff9" @@ -6337,6 +7071,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" @@ -6378,6 +7117,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -6484,11 +7228,18 @@ hoopy@^0.1.2: resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: +hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hosted-git-info@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.5.tgz#bea87905ef7317442e8df3087faa3c842397df03" + integrity sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ== + dependencies: + lru-cache "^6.0.0" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -6543,6 +7294,11 @@ htmlparser2@^3.9.1, htmlparser2@^3.9.2: inherits "^2.0.1" readable-stream "^3.0.6" +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -6604,6 +7360,14 @@ https-proxy-agent@^2.2.1: agent-base "^4.1.0" debug "^3.1.0" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + humanize-plus@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/humanize-plus/-/humanize-plus-1.8.2.tgz#a65b34459ad6367adbb3707a82a3c9f916167030" @@ -6663,6 +7427,11 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +idb@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384" + integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw== + identity-obj-proxy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -7119,6 +7888,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" @@ -7150,18 +7924,18 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" + global-dirs "^2.0.1" + is-path-inside "^3.0.1" -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== is-number-object@^1.0.3: version "1.0.3" @@ -7192,6 +7966,11 @@ is-obj@^1.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-object@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" @@ -7216,6 +7995,11 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -7243,11 +8027,6 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -7265,21 +8044,21 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - is-stream-ended@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" @@ -7309,7 +8088,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -7339,6 +8118,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + is@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" @@ -7354,12 +8138,10 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isbinaryfile@^3.0.2, isbinaryfile@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" +isbinaryfile@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" + integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== isexe@^2.0.0: version "2.0.0" @@ -7378,6 +8160,14 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isomorphic-fetch@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -7453,6 +8243,16 @@ istanbul-reports@^1.5.1: dependencies: handlebars "^4.0.3" +jake@^10.6.1: + version "10.8.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" + integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + dependencies: + async "0.9.x" + chalk "^2.4.2" + filelist "^1.0.1" + minimatch "^3.0.4" + jest-changed-files@^23.4.2: version "23.4.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" @@ -7815,6 +8615,14 @@ js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1, js-yaml@^3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -7874,6 +8682,18 @@ json-bigint@^0.3.0: dependencies: bignumber.js "^7.0.0" +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -7923,6 +8743,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -7930,6 +8757,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -7961,6 +8797,15 @@ jwa@^1.2.0: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + jws@^3.1.5: version "3.2.1" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.1.tgz#d79d4216a62c9afa0a3d5e8b5356d75abdeb2be5" @@ -7969,6 +8814,14 @@ jws@^3.1.5: jwa "^1.2.0" safe-buffer "^5.0.1" +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + keyboard-key@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/keyboard-key/-/keyboard-key-1.0.2.tgz#212e14dde4c2059814336159bbc5acd0a348ca6b" @@ -7989,6 +8842,13 @@ keypress@^0.2.1: resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77" integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc= +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + killable@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -8041,18 +8901,23 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: - package-json "^4.0.0" + package-json "^6.3.0" lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" integrity sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg== +lazy-val@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65" + integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q== + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -8165,6 +9030,18 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -8267,6 +9144,11 @@ lolex@^3.0.0: resolved "https://registry.yarnpkg.com/lolex/-/lolex-3.0.0.tgz#f04ee1a8aa13f60f1abd7b0e8f4213ec72ec193e" integrity sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ== +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + longest-streak@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" @@ -8287,11 +9169,16 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.3.tgz#51ccd0b4fc0c843587d7a5709ce4d3b7629bedc5" @@ -8312,6 +9199,13 @@ lru-cache@^5.0.0, lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -8319,6 +9213,13 @@ make-dir@^1.0.0, make-dir@^1.3.0: dependencies: pify "^3.0.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -8582,16 +9483,26 @@ mime@1.4.1, mime@~1.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@^2.0.3, mime@^2.2.0, mime@^2.3.1, mime@^2.4.0: +mime@^2.0.3, mime@^2.2.0, mime@^2.3.1: version "2.4.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== +mime@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -8648,6 +9559,11 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -8849,6 +9765,11 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -8865,6 +9786,19 @@ nise@^1.4.7: path-to-regexp "^1.7.0" text-encoding "^0.6.4" +node-fetch@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^2.2.0, node-fetch@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" @@ -8875,11 +9809,21 @@ node-forge@0.7.5: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + node-forge@^0.7.5: version "0.7.6" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac" integrity sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw== +node-gyp-build@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-3.7.0.tgz#daa77a4f547b9aed3e2aac779eaf151afd60ec8d" + integrity sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w== + node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" @@ -9022,7 +9966,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== @@ -9032,6 +9976,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -9054,6 +10008,11 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" @@ -9373,6 +10332,11 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -9402,6 +10366,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -9416,6 +10387,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -9431,15 +10409,15 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" pako@^1.0.7, pako@~1.0.5: version "1.0.7" @@ -9473,13 +10451,6 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" -parse-color@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" - integrity sha1-e3SLlag/A/FqlPU15S1/PZRlhhk= - dependencies: - color-convert "~0.5.0" - parse-entities@^1.0.2, parse-entities@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" @@ -9581,6 +10552,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -9736,15 +10712,6 @@ please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" -plist@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" - integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== - dependencies: - base64-js "^1.2.3" - xmlbuilder "^9.0.7" - xmldom "0.1.x" - plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" @@ -10205,10 +11172,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= preserve@^0.2.0: version "0.2.0" @@ -10274,6 +11241,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" + integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g== + promisify-event@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promisify-event/-/promisify-event-1.0.0.tgz#bd7523ea06b70162f370979016b53a686c60e90f" @@ -10289,6 +11261,15 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" +prop-types@^15.5.8: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" @@ -10297,6 +11278,25 @@ prop-types@^15.6.1, prop-types@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" +protobufjs@^6.8.6, protobufjs@^6.9.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.10.1.tgz#e6a484dd8f04b29629e9053344e3970cccf13cd2" + integrity sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" "^13.7.0" + long "^4.0.0" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -10388,6 +11388,13 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pupa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + dependencies: + escape-goat "^2.0.0" + q@^1.1.2, q@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -10482,7 +11489,7 @@ raw-body@2.3.3: iconv-lite "0.4.23" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.1, rc@^1.2.7: +rc@^1.2.1, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -10492,6 +11499,14 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.1, rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-copy-to-clipboard@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz#d82a437e081e68dfca3761fbd57dbf2abdda1316" + integrity sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg== + dependencies: + copy-to-clipboard "^3" + prop-types "^15.5.8" + react-dom@^16.6.3: version "16.7.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.7.0.tgz#a17b2a7ca89ee7390bc1ed5eb81783c7461748b8" @@ -10522,6 +11537,11 @@ react-is@^16.3.2, react-is@^16.6.0, react-is@^16.6.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa" integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g== +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -10585,20 +11605,16 @@ react@^16.6.3: prop-types "^15.6.2" scheduler "^0.12.0" -read-config-file@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.2.0.tgz#50a2756a9a128ab9dcbe087e2724c512e3d0ccd1" - integrity sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww== +read-config-file@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.0.0.tgz#224b5dca6a5bdc1fb19e63f89f342680efdb9299" + integrity sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA== dependencies: - ajv "^6.5.5" - ajv-keywords "^3.2.0" - bluebird-lst "^1.0.6" - dotenv "^6.1.0" - dotenv-expand "^4.2.0" - fs-extra-p "^7.0.0" - js-yaml "^3.12.0" - json5 "^2.1.0" - lazy-val "^1.0.3" + dotenv "^8.2.0" + dotenv-expand "^5.1.0" + js-yaml "^3.13.1" + json5 "^2.1.2" + lazy-val "^1.0.4" read-file-relative@^1.2.0: version "1.2.0" @@ -10855,20 +11871,19 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.0.2" -registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" - integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== +registry-auth-token@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" + integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" + rc "^1.2.8" -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: - rc "^1.0.1" + rc "^1.2.8" regjsgen@^0.2.0: version "0.2.0" @@ -11035,6 +12050,11 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -11092,6 +12112,13 @@ resolve@1.1.7, resolve@~1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve@^1.10.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" @@ -11099,6 +12126,13 @@ resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.9.0: dependencies: path-parse "^1.0.6" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -11238,13 +12272,20 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" -sanitize-filename@^1.6.0, sanitize-filename@^1.6.1: +sanitize-filename@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" integrity sha1-YS2hyWRz+gLczaktzVtKsWSmdyo= dependencies: truncate-utf8-bytes "^1.0.0" +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -11347,14 +12388,14 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: - semver "^5.0.3" + semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -11364,6 +12405,11 @@ semver@5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== +semver@^6.0.0, semver@^6.2.0, 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== + semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" @@ -11629,6 +12675,14 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@^0.5.9, source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" @@ -11814,10 +12868,10 @@ stackframe@^0.3.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" integrity sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= -stat-mode@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" - integrity sha1-5sgLYjEj19gM8TLOU480YokHJQI= +stat-mode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" + integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== state-toggle@^1.0.0: version "1.0.1" @@ -11918,6 +12972,24 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -11977,6 +13049,20 @@ strip-ansi@^5.0.0: dependencies: ansi-regex "^4.0.0" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -12161,6 +13247,13 @@ supports-color@^6.0.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + supports-color@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" @@ -12282,21 +13375,18 @@ teeny-request@^3.11.3: node-fetch "^2.2.0" uuid "^3.3.2" -temp-file@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.2.tgz#69b6daf1bbe23231d0a5d03844e3d96f3f531aaa" - integrity sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ== +temp-file@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" + integrity sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g== dependencies: async-exit-hook "^2.0.1" - bluebird-lst "^1.0.6" - fs-extra-p "^7.0.0" + fs-extra "^8.1.0" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" +term-size@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== terser-webpack-plugin@^1.1.0: version "1.2.1" @@ -12596,11 +13686,6 @@ time-stamp@^1.0.0: resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - timeout-as-promise@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/timeout-as-promise/-/timeout-as-promise-1.0.0.tgz#7367e811fc992acfcdcdaabf2e50dfaf8b21576f" @@ -12664,6 +13749,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -12682,6 +13772,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + tough-cookie@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" @@ -12775,6 +13870,11 @@ tryer@^1.0.0: resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== +tslib@^1.11.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -12809,6 +13909,11 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -12817,6 +13922,23 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -12924,6 +14046,13 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + unist-util-find-all-after@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" @@ -12967,6 +14096,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -12985,31 +14119,29 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== -update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== +update-notifier@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.1.tgz#895fc8562bbe666179500f9f2cebac4f26323746" + integrity sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg== dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" uri-js@^4.2.2: version "4.2.2" @@ -13032,12 +14164,12 @@ url-loader@^1.1.2: mime "^2.0.3" schema-utils "^1.0.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: - prepend-http "^1.0.1" + prepend-http "^2.0.0" url-parse@^1.4.3: version "1.4.4" @@ -13068,6 +14200,13 @@ useragent@^2.1.7: lru-cache "4.1.x" tmp "0.0.x" +utf-8-validate@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.2.tgz#63cfbccd85dc1f2b66cf7a1d0eebc08ed056bfb3" + integrity sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw== + dependencies: + node-gyp-build "~3.7.0" + utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -13425,6 +14564,18 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +websocket@^1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + wgxpath@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wgxpath/-/wgxpath-1.0.0.tgz#eef8a4b9d558cc495ad3a9a2b751597ecd9af690" @@ -13437,6 +14588,16 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.24" +whatwg-fetch@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" + integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== + +whatwg-fetch@>=0.10.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" + integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== + whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -13493,12 +14654,12 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: - string-width "^2.1.1" + string-width "^4.0.0" wordwrap@~0.0.2: version "0.0.3" @@ -13533,6 +14694,15 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -13547,6 +14717,16 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -13594,20 +14774,20 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xmldom@0.1.x: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= xregexp@4.0.0: version "4.0.0" @@ -13636,6 +14816,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -13646,6 +14831,11 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@^10.0.0, yargs-parser@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -13661,6 +14851,14 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -13711,7 +14909,7 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^12.0.1, yargs@^12.0.4, yargs@^12.0.5: +yargs@^12.0.1, yargs@^12.0.4: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== @@ -13729,6 +14927,23 @@ yargs@^12.0.1, yargs@^12.0.4, yargs@^12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"