From d24c3b4efcbef639c49dd3116861714013213c71 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:22:48 +1300 Subject: [PATCH 001/113] rearranged values in the state --- src/components/Player/Player.tsx | 2 +- src/store/initialState.ts | 202 ++++++++----------------------- src/store/types.ts | 92 ++++++++++++++ 3 files changed, 142 insertions(+), 154 deletions(-) create mode 100644 src/store/types.ts diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx index e05ccad5..aa2985fa 100644 --- a/src/components/Player/Player.tsx +++ b/src/components/Player/Player.tsx @@ -14,7 +14,7 @@ import { } from "../../store/actions"; import playerIdToString from "../../lib/playerIdToString"; import playerStringToId from "../../lib/playerStringToId"; -import { IPlayer, IState } from "../../store/initialState"; +import { IPlayer, IState } from "../../store/types"; import { IMessage } from "../Game/onMessage"; import { Possibilities, PlayerActions, GameTurns } from "../../lib/constants"; import notifications from "../../config/notifications.json"; diff --git a/src/store/initialState.ts b/src/store/initialState.ts index 417f0976..4eba865f 100644 --- a/src/store/initialState.ts +++ b/src/store/initialState.ts @@ -1,72 +1,67 @@ -import { INotice } from "../components/Table/assets/types"; +import { IState } from "./types"; /*eslint-disable @typescript-eslint/camelcase*/ const initialState: IState = { - // Object of all players at the table - players: {}, - // Which seat is the active player - activePlayer: null, - // The total CHIPS balance the player has in the Pangea Wallet - balance: 0, + + /********** ME ***********/ + + balance: 0, // The total CHIPS balance the player has in the Pangea Wallet + connectionStatus: { + level: 1, + status: null, + text: "" + }, + depositAddress: undefined, // Pangea wallet address to deposit to + holeCards: [], // Cards of the user + nodeType: null, + userSeat: null, // Where does the user sit (player1, player2, etc) + withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds + + /********** BACKEND ***********/ // 0 - transaction is still being mined // 1 - backend is ready - backendStatus: 0, - // Current blinds - small and big one - blinds: [1, 2], - // Board Cards - boardCards: [], - // Connection status dispalyed at the top - connection: { - dcv: "Not connected", - player1: "Not connected", - player2: "Not connected", - echo: "Not connected" + backendStatus: 0, + + /********** CONTROLS ***********/ + + isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game + isDeveloperMode: false, // Whether the app should run in developer mode + + /********** GENERAL GAME INFO ***********/ + + activePlayer: null, // Which seat is the active player + dealer: 0, // Which player is the dealer + gameStarted: false, + gameType: "", // Game type at the top left corner + notice: { + text: "Choose your seat to begin playing", + status: null, + level: 1 }, + players: {}, // Object of all players at the table + maxPlayers: 9, + + /********** POKER INFO ***********/ + + blinds: [1, 2], // Current blinds - small and big one + boardCards: [], controls: { showControls: false, showFirstRow: true, canCheck: false, canRaise: true }, - // Whether the cards have been dealt cardsDealt: false, - // Whether the chips have been collected to the middle - chipsCollected: false, - connectionStatus: { - text: "", - level: 1 - }, - // current chips stack paid to enter the game - currentChipsStack: 0, - // Which player is the dealer - dealer: 0, - // Pangea wallet address to deposit to - depositAddress: undefined, - // Whether the game has started - gameStarted: false, - // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown - gameTurn: 0, - // Game type at the top left corner - gameType: "", - // Log of all palyer actions - handHistory: [], - // Total number of hands played in this session - handsPlayed: 0, - // Cards of the user - holeCards: [], - // Whehter the Cashier is open + chipsCollected: false, // chips collected to the middle + currentChipsStack: 0, // current chips stack paid to enter the game + gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown + handHistory: [], // Log of all palyer actions + handsPlayed: 0, // Total number of hands played in this session isCashierOpen: false, - // Whether the app should run in developer mode - isDeveloperMode: false, - // Whether to show the LogBox component isLogBox: true, - // Whether the Startup Modal shows at the beginning of the game - isStartupModal: true, - // Whether players has gone all-in and the showDown is active isShowDown: false, - // Object that stores the last action so we can dispaly it on the UI - lastAction: { player: 0, action: null }, + lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI // Messages to send to the nodes - when updated, the message will be sent lastMessage: { method: "replay", @@ -79,18 +74,13 @@ const initialState: IState = { min_amount: 0, gui_playerID: 1 }, - nodeType: null, + nodesSet: false, nodes: { dcv: "0.0.0.0", player1: "0.0.0.0", player2: "0.0.0.0", echo: "0.0.0.0" }, - notice: { - text: "Choose your seat to begin playing", - level: 1 - }, - maxPlayers: 9, message: { dcv: null, player1: null, @@ -115,102 +105,8 @@ const initialState: IState = { totalPot: 0, // Amount to call toCall: 2, - // Where does the user sit - userSeat: null, // Array of players that won - winners: [undefined], - // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds - withdrawAddressList: [] + winners: [undefined] }; -export interface IPlayer { - isPlaying: boolean; - seat: string; - chips: number; - hasCards: boolean; - showCards: boolean; - isBetting: boolean; - betAmount: number; - playerCards: string[]; - connected: boolean; -} - -export interface IState { - players: { - player1: IPlayer; - player2: IPlayer; - player3: IPlayer; - player4: IPlayer; - player5: IPlayer; - player6: IPlayer; - player7: IPlayer; - player8: IPlayer; - player9: IPlayer; - }; - activePlayer: string; - backendStatus: number; - balance: number; - blinds: [number, number]; - boardCards: string[]; - connection: { - dcv: string; - player1: string; - player2: string; - echo: string; - }; - controls: { - canCheck: boolean; - canRaise: boolean; - showControls: boolean; - showFirstRow: boolean; - }; - cardsDealt: boolean; - chipsCollected: boolean; - connectionStatus: INotice; - currentChipsStack: number; - dealer: number; - depositAddress: string; - gameStarted: boolean; - gameTurn: 0 | 1 | 2 | 3 | 4; - gameType: string; - handHistory: { action: string; timeStamp: number }[]; - handsPlayed: number; - holeCards: string[]; - isCashierOpen: boolean; - isDeveloperMode: boolean; - isLogBox: boolean; - isShowDown: boolean; - isStartupModal: boolean; - lastAction: { player: number; action: string | null }; - lastMessage: object; - notice: INotice; - nodes: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - nodeType: string; - maxPlayers: number; - message: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - minRaiseTo: number; - options: { - showPotCounter: boolean; - }; - pot: number[]; - seats: number; - showDealer: boolean; - showMainPot: boolean; - totalPot: number; - toCall: number; - userSeat: string; - winners: string[] | null; - withdrawAddressList: string[]; -} - export default initialState; diff --git a/src/store/types.ts b/src/store/types.ts new file mode 100644 index 00000000..1468e868 --- /dev/null +++ b/src/store/types.ts @@ -0,0 +1,92 @@ +import { INotice } from "../components/Table/assets/types"; + +export interface IPlayer { + isPlaying: boolean; + seat: string; + chips: number; + hasCards: boolean; + showCards: boolean; + isBetting: boolean; + betAmount: number; + playerCards: string[]; + connected: boolean; + } + + export interface IState { + players: { + player1: IPlayer; + player2: IPlayer; + player3: IPlayer; + player4: IPlayer; + player5: IPlayer; + player6: IPlayer; + player7: IPlayer; + player8: IPlayer; + player9: IPlayer; + }; + activePlayer: string; + backendStatus: number; + balance: number; + blinds: [number, number]; + boardCards: string[]; + connection: { + dcv: string; + player1: string; + player2: string; + echo: string; + }; + controls: { + canCheck: boolean; + canRaise: boolean; + showControls: boolean; + showFirstRow: boolean; + }; + cardsDealt: boolean; + chipsCollected: boolean; + connectionStatus: INotice; + currentChipsStack: number; + dealer: number; + depositAddress: string; + gameStarted: boolean; + gameTurn: 0 | 1 | 2 | 3 | 4; + gameType: string; + handHistory: { action: string; timeStamp: number }[]; + handsPlayed: number; + holeCards: string[]; + isCashierOpen: boolean; + isDeveloperMode: boolean; + isLogBox: boolean; + isShowDown: boolean; + isStartupModal: boolean; + lastAction: { player: number; action: string | null }; + lastMessage: object; + nodesSet: boolean; + notice: INotice; + nodes: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + nodeType: string; + maxPlayers: number; + message: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + minRaiseTo: number; + options: { + showPotCounter: boolean; + }; + pot: number[]; + seats: number; + showDealer: boolean; + showMainPot: boolean; + totalPot: number; + toCall: number; + userSeat: string; + winners: string[] | null; + withdrawAddressList: string[]; + } \ No newline at end of file From 045b6d8e922128bc9d4caa46841da312a30c9e81 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:23:27 +1300 Subject: [PATCH 002/113] correct import --- src/store/reducer.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/store/reducer.ts b/src/store/reducer.ts index 06adfa45..2a695b77 100644 --- a/src/store/reducer.ts +++ b/src/store/reducer.ts @@ -1,4 +1,4 @@ -import { IState, IPlayer } from "./initialState"; +import { IState, IPlayer } from "./types"; import { INotice } from "../components/Table/assets/types"; import { Level } from "../lib/constants"; import { isDev } from "../lib/dev"; @@ -346,7 +346,6 @@ const reducer = (state: IState, action: IAction): object => { gameType: action.payload.gameType, gameStarted: true, pot: action.payload.pot, - // toCall: action.payload.toCall, options: { ...state.options, showPot: true, From 39d4cea7f681d20bbe2060813349a3fb9bd73fc8 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:23:56 +1300 Subject: [PATCH 003/113] connection and node enums --- src/lib/constants.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2c5c4a1f..170fd126 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -39,3 +39,22 @@ export enum BetWarnings { insufficientFunds = 2, tableIsFull = 3 } + +export enum Conn { + connecting = 'Connecting...', + connected = 'Connected', + disconnecting = 'Disconnecting...', + disconnected = 'Disconnected', + uninstantiated = 'Uninstantiated' +} + +export enum Node { + dcv = 'dcv', + player = 'player', + echo = 'echo' +} + +export enum NodeType { + dealer = 'dealer', + player = 'player' +} \ No newline at end of file From 2f3f60e4b338768eba851170e66f34c6d1bcc29c Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:30:00 +1300 Subject: [PATCH 004/113] refactored websocket to support new version 2.1.1, separated types, refactored Connection component, removed connection from the state --- package-lock.json | 1124 ++++++++++++++++--------- package.json | 53 +- src/components/Game/WebSocket.ts | 72 +- src/components/Game/onMessage.ts | 24 +- src/components/Game/types/IMessage.ts | 35 + src/components/Modal/CustomIP.tsx | 4 - src/components/Table/Connections.tsx | 49 +- src/components/Table/Table.tsx | 16 +- src/components/Table/assets/style.js | 13 +- src/components/Table/assets/types.ts | 3 +- src/index.js | 2 + src/store/actions.ts | 19 +- 12 files changed, 890 insertions(+), 524 deletions(-) create mode 100644 src/components/Game/types/IMessage.ts diff --git a/package-lock.json b/package-lock.json index 03217a58..a60c36a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1715,7 +1715,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1723,8 +1722,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1747,7 +1745,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz", "integrity": "sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1755,8 +1752,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1799,7 +1795,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1807,8 +1802,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1825,7 +1819,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz", "integrity": "sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1833,8 +1826,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1842,7 +1834,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1850,8 +1841,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1859,7 +1849,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1867,8 +1856,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1891,7 +1879,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1899,8 +1886,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -1908,7 +1894,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1916,8 +1901,7 @@ "@babel/helper-plugin-utils": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" } } }, @@ -3572,9 +3556,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, @@ -3692,9 +3676,9 @@ } }, "@emotion/core": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.27.tgz", - "integrity": "sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw==", + "version": "10.0.35", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz", + "integrity": "sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw==", "requires": { "@babel/runtime": "^7.5.5", "@emotion/cache": "^10.0.27", @@ -3705,17 +3689,17 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", - "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" } } }, @@ -3820,43 +3804,46 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", + "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } }, "@hapi/formula": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-1.2.0.tgz", - "integrity": "sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" }, "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", + "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" }, "@hapi/joi": { - "version": "16.1.8", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-16.1.8.tgz", - "integrity": "sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg==", + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", "requires": { - "@hapi/address": "^2.1.2", - "@hapi/formula": "^1.2.0", - "@hapi/hoek": "^8.2.4", - "@hapi/pinpoint": "^1.0.2", - "@hapi/topo": "^3.1.3" + "@hapi/address": "^4.0.1", + "@hapi/formula": "^2.0.0", + "@hapi/hoek": "^9.0.0", + "@hapi/pinpoint": "^2.0.0", + "@hapi/topo": "^5.0.0" } }, "@hapi/pinpoint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-1.0.2.tgz", - "integrity": "sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" }, "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", "requires": { - "@hapi/hoek": "^8.3.0" + "@hapi/hoek": "^9.0.0" } }, "@iarna/toml": { @@ -5209,23 +5196,23 @@ } }, "@jest/transform": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.1.0.tgz", - "integrity": "sha512-4ktrQ2TPREVeM+KxB4zskAT84SnmG1vaz4S+51aTefyqn3zocZUnliLLm5Fsl85I3p/kFPN4CRp1RElIfXGegQ==", + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-25.5.1.tgz", + "integrity": "sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==", "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^25.1.0", + "@jest/types": "^25.5.0", "babel-plugin-istanbul": "^6.0.0", "chalk": "^3.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.3", - "jest-haste-map": "^25.1.0", - "jest-regex-util": "^25.1.0", - "jest-util": "^25.1.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^25.5.1", + "jest-regex-util": "^25.2.6", + "jest-util": "^25.5.0", "micromatch": "^4.0.2", "pirates": "^4.0.1", - "realpath-native": "^1.1.0", + "realpath-native": "^2.0.0", "slash": "^3.0.0", "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" @@ -5279,9 +5266,9 @@ } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "has-flag": { "version": "4.0.0", @@ -5308,9 +5295,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -5326,9 +5313,9 @@ } }, "@jest/types": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.1.0.tgz", - "integrity": "sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", @@ -5373,9 +5360,9 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -5449,59 +5436,59 @@ } }, "@sentry/browser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.10.2.tgz", - "integrity": "sha512-r3eyBu2ln7odvWtXARCZPzpuGrKsD6U9F3gKTu4xdFkA0swSLUvS7AC2FUksj/1BE23y+eB/zzPT+RYJ58tidA==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.24.2.tgz", + "integrity": "sha512-P/uZC/VrLRpU7MVEJnlZK5+AkEmuHu+mns5gC91Z4gjn7GamjR/CaXVedHGw/15ZrsQiAiwoWwuxpv4Ypd/+SA==", "requires": { - "@sentry/core": "5.10.2", - "@sentry/types": "5.10.0", - "@sentry/utils": "5.10.2", + "@sentry/core": "5.24.2", + "@sentry/types": "5.24.2", + "@sentry/utils": "5.24.2", "tslib": "^1.9.3" } }, "@sentry/core": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.10.2.tgz", - "integrity": "sha512-sKVeFH3v8K8xw2vM5MKMnnyAAwih+JSE3pbNL0CcCCA+/SwX+3jeAo2BhgXev2SAR/TjWW+wmeC9TdIW7KyYbg==", - "requires": { - "@sentry/hub": "5.10.2", - "@sentry/minimal": "5.10.2", - "@sentry/types": "5.10.0", - "@sentry/utils": "5.10.2", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.24.2.tgz", + "integrity": "sha512-nuAwCGU1l9hgMinl5P/8nIQGRXDP2FI9cJnq5h1qiP/XIOvJkJz2yzBR6nTyqr4vBth0tvxQJbIpDNGd7vHJLg==", + "requires": { + "@sentry/hub": "5.24.2", + "@sentry/minimal": "5.24.2", + "@sentry/types": "5.24.2", + "@sentry/utils": "5.24.2", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.10.2.tgz", - "integrity": "sha512-hSlZIiu3hcR/I5yEhlpN9C0nip+U7hiRzRzUQaBiHO4YG4TC58NqnOPR89D/ekiuHIXzFpjW9OQmqtAMRoSUYA==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.24.2.tgz", + "integrity": "sha512-xmO1Ivvpb5Qr9WgekinuZZlpl9Iw7iPETUe84HQOhUrXf+2gKO+LaUYMMsYSVDwXQEmR6/tTMyOtS6iavldC6w==", "requires": { - "@sentry/types": "5.10.0", - "@sentry/utils": "5.10.2", + "@sentry/types": "5.24.2", + "@sentry/utils": "5.24.2", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.10.2.tgz", - "integrity": "sha512-GalixiM9sckYfompH5HHTp9XT2BcjawBkcl1DMEKUBEi37+kUq0bivOBmnN1G/I4/wWOUdnAI/kagDWaWpbZPg==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.24.2.tgz", + "integrity": "sha512-biFpux5bI3R8xiD/Zzvrk1kRE6bqPtfWXmZYAHRtaUMCAibprTKSY9Ta8QYHynOAEoJ5Akedy6HUsEkK5DoZfA==", "requires": { - "@sentry/hub": "5.10.2", - "@sentry/types": "5.10.0", + "@sentry/hub": "5.24.2", + "@sentry/types": "5.24.2", "tslib": "^1.9.3" } }, "@sentry/types": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.10.0.tgz", - "integrity": "sha512-TW20GzkCWsP6uAxR2JIpIkiitCKyIOfkyDsKBeLqYj4SaZjfvBPnzgNCcYR0L0UsP1/Es6oHooZfIGSkp6GGxQ==" + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.24.2.tgz", + "integrity": "sha512-HcOK00R0tQG5vzrIrqQ0jC28+z76jWSgQCzXiessJ5SH/9uc6NzdO7sR7K8vqMP2+nweCHckFohC8G0T1DLzuQ==" }, "@sentry/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-UcbbaFpYrGSV448lQ16Cr+W/MPuKUflQQUdrMCt5vgaf5+M7kpozlcji4GGGZUCXIA7oRP93ABoXj55s1OM9zw==", + "version": "5.24.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.24.2.tgz", + "integrity": "sha512-oPGde4tNEDHKk0Cg9q2p0qX649jLDUOwzJXHKpd0X65w3A6eJByDevMr8CSzKV9sesjrUpxqAv6f9WWlz185tA==", "requires": { - "@sentry/types": "5.10.0", + "@sentry/types": "5.24.2", "tslib": "^1.9.3" } }, @@ -5674,7 +5661,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.3.tgz", "integrity": "sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==", - "dev": true, "requires": { "@types/node": "*" } @@ -5746,8 +5732,7 @@ "@types/node": { "version": "12.11.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", - "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", - "dev": true + "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -5842,9 +5827,9 @@ } }, "@types/react-modal": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.10.4.tgz", - "integrity": "sha512-Sd89N8z+UAzHtbPHW+zB97UgEhIVcYhQxscX21r3pxMLpZJwvjReGmH4omKxWYPv84vF8MQNZZEw+JkX91ZUzA==", + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.10.6.tgz", + "integrity": "sha512-XpshhwVYir1TRZ2HS5EfmNotJjB8UEC2IkT3omNtiQzROOXSzVLz5xsjwEpACP8U+PctkpfZepX+WT5oDf0a9g==", "requires": { "@types/react": "*" } @@ -6006,6 +5991,12 @@ } } }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, "abab": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", @@ -6048,14 +6039,6 @@ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, - "add-dom-event-listener": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", - "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", - "requires": { - "object-assign": "4.x" - } - }, "airbnb-prop-types": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", @@ -6717,6 +6700,12 @@ } } }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -7021,16 +7010,17 @@ } }, "babel-jest": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.1.0.tgz", - "integrity": "sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg==", + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-25.5.1.tgz", + "integrity": "sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==", "requires": { - "@jest/transform": "^25.1.0", - "@jest/types": "^25.1.0", - "@types/babel__core": "^7.1.0", + "@jest/transform": "^25.5.1", + "@jest/types": "^25.5.0", + "@types/babel__core": "^7.1.7", "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^25.1.0", + "babel-preset-jest": "^25.5.0", "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", "slash": "^3.0.0" }, "dependencies": { @@ -7065,15 +7055,20 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -7168,10 +7163,12 @@ } }, "babel-plugin-jest-hoist": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz", - "integrity": "sha512-oIsopO41vW4YFZ9yNYoLQATnnN46lp+MZ6H4VvPKFkcc2/fkl3CfE/NZZSmnEIEsJRmJAgkVEK0R7Zbl50CpTw==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz", + "integrity": "sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==", "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", "@types/babel__traverse": "^7.0.6" } }, @@ -7269,7 +7266,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz", "integrity": "sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw==", - "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -7284,19 +7280,19 @@ } }, "babel-preset-jest": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz", - "integrity": "sha512-eCGn64olaqwUMaugXsTtGAM2I0QTahjEtnRu0ql8Ie+gDWAc1N6wqN0k2NilnyTunM69Pad7gJY7LOtwLimoFQ==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz", + "integrity": "sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==", "requires": { - "@babel/plugin-syntax-bigint": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^25.1.0" + "babel-plugin-jest-hoist": "^25.5.0", + "babel-preset-current-node-syntax": "^0.1.2" } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -7388,6 +7384,12 @@ } } }, + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=", + "dev": true + }, "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", @@ -8294,6 +8296,11 @@ "mimic-response": "^1.0.0" } }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -8338,6 +8345,12 @@ } } }, + "codemirror": { + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.55.0.tgz", + "integrity": "sha512-TumikSANlwiGkdF/Blnu/rqovZ0Y3Jh8yy9TqrPbSM0xxSucq3RgnpVDQ+mD9q6JERJEIT2FMuF/fBGfkhIR/g==", + "dev": true + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -8410,24 +8423,11 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-classes": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", - "integrity": "sha1-xkI5TDYYpNiwuJGe/Mu9kw5c1pE=", - "requires": { - "component-indexof": "0.0.3" - } - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "component-indexof": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", - "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8446,9 +8446,9 @@ } }, "concurrently": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.1.0.tgz", - "integrity": "sha512-9ViZMu3OOCID3rBgU31mjBftro2chOop0G2u1olq1OuwRBVRw/GxHTg80TVJBUTJfoswMmEUeuOg1g1yu1X2dA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", "requires": { "chalk": "^2.4.2", "date-fns": "^2.0.1", @@ -8583,7 +8583,8 @@ "core-js": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true }, "core-js-compat": { "version": "3.4.7", @@ -8710,15 +8711,6 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, - "css-animation": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", - "integrity": "sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==", - "requires": { - "babel-runtime": "6.x", - "component-classes": "^1.2.5" - } - }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -8879,12 +8871,19 @@ } }, "css-tree": { - "version": "1.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", - "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "requires": { "mdn-data": "2.0.4", - "source-map": "^0.5.3" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "css-unit-converter": { @@ -8974,26 +8973,31 @@ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.29" + "css-tree": "1.0.0-alpha.39" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.6", + "source-map": "^0.6.1" } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -9043,9 +9047,9 @@ } }, "date-fns": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.10.0.tgz", - "integrity": "sha512-EhfEKevYGWhWlZbNeplfhIU/+N+x0iCIx7VzKlXma2EdQyznVlZhCptXUY+BegNpPW2kjdx15Rvq503YcXXrcA==" + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", + "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==" }, "deasync": { "version": "0.1.16", @@ -9227,6 +9231,12 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "dev": true + }, "diff-sequences": { "version": "25.2.6", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", @@ -9323,9 +9333,9 @@ } }, "dom-align": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.10.4.tgz", - "integrity": "sha512-wytDzaru67AmqFOY4B9GUb/hrwWagezoYYK97D/vpK+ezg+cnuZO0Q2gltUPa7KfNmIqfRIYVCF8UhRDEHAmgQ==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz", + "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA==" }, "dom-serializer": { "version": "0.1.1", @@ -9656,9 +9666,9 @@ } }, "electron-is-dev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.1.0.tgz", - "integrity": "sha512-Z1qA/1oHNowGtSBIcWk0pcLEqYT/j+13xUw/MYOrBUOL4X7VN0i0KCTf5SqyvMPmW5pSPKbo28wkxMxzZ20YnQ==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.2.0.tgz", + "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==" }, "electron-publish": { "version": "22.8.1", @@ -9809,6 +9819,26 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -10101,6 +10131,15 @@ "is-arrayish": "^0.2.1" } }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -11392,6 +11431,38 @@ "bser": "2.1.1" } }, + "fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "dev": true, + "requires": { + "fbjs": "^0.8.4" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dev": true, + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + } + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -11502,6 +11573,16 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, + "flux": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", + "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "dev": true, + "requires": { + "fbemitter": "^2.0.0", + "fbjs": "^0.8.0" + } + }, "follow-redirects": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", @@ -12518,9 +12599,9 @@ "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "howler": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/howler/-/howler-2.1.3.tgz", - "integrity": "sha512-PSGbOi1EYgw80C5UQbxtJM7TmzD+giJunIMBYyH3RVzHZx2fZLYBoes0SpVVHi/SFa1GoNtgXj/j6I7NOKYBxQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.0.tgz", + "integrity": "sha512-sGPkrAQy7jh5mNDbkRNG0F82R2HFDYNsQXBcX4smXQT0y0F4UMsa/+jXaGwWvcrajWr2tDB7JUkH7G5qSnuIyQ==" }, "hsl-regex": { "version": "1.0.0", @@ -13344,6 +13425,16 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -14833,21 +14924,23 @@ "dev": true }, "jest-haste-map": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.1.0.tgz", - "integrity": "sha512-/2oYINIdnQZAqyWSn1GTku571aAfs8NxzSErGek65Iu5o8JYb+113bZysRMcC/pjE5v9w0Yz+ldbj9NxrFyPyw==", + "version": "25.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz", + "integrity": "sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==", "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.5.0", + "@types/graceful-fs": "^4.1.2", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.1.2", - "graceful-fs": "^4.2.3", - "jest-serializer": "^25.1.0", - "jest-util": "^25.1.0", - "jest-worker": "^25.1.0", + "graceful-fs": "^4.2.4", + "jest-serializer": "^25.5.0", + "jest-util": "^25.5.0", + "jest-worker": "^25.5.0", "micromatch": "^4.0.2", "sane": "^4.0.3", - "walker": "^1.0.7" + "walker": "^1.0.7", + "which": "^2.0.2" }, "dependencies": { "anymatch": { @@ -14876,15 +14969,15 @@ } }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "optional": true }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "is-number": { "version": "7.0.0", @@ -14907,6 +15000,14 @@ "requires": { "is-number": "^7.0.0" } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -15476,9 +15577,9 @@ "dev": true }, "jest-regex-util": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.1.0.tgz", - "integrity": "sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w==" + "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-25.2.6.tgz", + "integrity": "sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==" }, "jest-resolve": { "version": "25.5.1", @@ -16364,9 +16465,19 @@ } }, "jest-serializer": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.1.0.tgz", - "integrity": "sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA==" + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-25.5.0.tgz", + "integrity": "sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==", + "requires": { + "graceful-fs": "^4.2.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + } + } }, "jest-snapshot": { "version": "25.5.1", @@ -16513,14 +16624,15 @@ } }, "jest-util": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.1.0.tgz", - "integrity": "sha512-7did6pLQ++87Qsj26Fs/TIwZMUFBXQ+4XXSodRNy3luch2DnRXsSnmpVtxxQ0Yd6WTipGpbhh2IFP1mq6/fQGw==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-25.5.0.tgz", + "integrity": "sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==", "requires": { - "@jest/types": "^25.1.0", + "@jest/types": "^25.5.0", "chalk": "^3.0.0", + "graceful-fs": "^4.2.4", "is-ci": "^2.0.0", - "mkdirp": "^0.5.1" + "make-dir": "^3.0.0" }, "dependencies": { "ansi-styles": { @@ -16554,15 +16666,33 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -16784,9 +16914,9 @@ } }, "jest-worker": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", - "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", "requires": { "merge-stream": "^2.0.0", "supports-color": "^7.0.0" @@ -16798,9 +16928,9 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -17181,13 +17311,23 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } }, + "jsondiffpatch": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.4.1.tgz", + "integrity": "sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "diff-match-patch": "^1.0.0" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -17197,6 +17337,17 @@ "graceful-fs": "^4.1.6" } }, + "jsonlint-mod": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/jsonlint-mod/-/jsonlint-mod-1.7.5.tgz", + "integrity": "sha512-VqTFtMj9JXv4qGSfcoYTgXgsGkTW4aXZer8u4vR64RAPjK37BUkNKmd3mTjuRTs1vQrE+yuzfzDhgB2SAyPvlA==", + "dev": true, + "requires": { + "JSV": "^4.0.2", + "chalk": "^2.4.2", + "underscore": "^1.9.1" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -17375,6 +17526,12 @@ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=", "dev": true }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=", + "dev": true + }, "lodash.escape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", @@ -17387,6 +17544,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=", + "dev": true + }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -17633,9 +17796,9 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mixin-deep": { "version": "1.3.2", @@ -17657,11 +17820,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "moo": { @@ -17736,6 +17899,16 @@ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==", "dev": true }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node-forge": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", @@ -19314,9 +19487,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "ms": { @@ -20248,6 +20421,15 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "requires": { + "asap": "~2.0.3" + } + }, "prompts": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", @@ -20328,6 +20510,12 @@ "escape-goat": "^2.0.0" } }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=", + "dev": true + }, "purgecss": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-1.4.1.tgz", @@ -20448,9 +20636,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -20459,6 +20647,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, "requires": { "performance-now": "^2.1.0" } @@ -20531,125 +20720,232 @@ } }, "rc-align": { - "version": "3.0.0-rc.1", - "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-3.0.0-rc.1.tgz", - "integrity": "sha512-GbofumhCUb7SxP410j/fbtR2M9Zml+eoZSdaliZh6R3NhfEj5zP4jcO3HG3S9C9KIcXQQtd/cwVHkb9Y0KU7Hg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.8.tgz", + "integrity": "sha512-2sRUkmB8z4UEXzaS+lDHzXMoR8HrtKH9nn2yHlHVNyUTnaucjMFbdEoCk+hO1g7cpIgW0MphG8i0EH2scSesfw==", "requires": { + "@babel/runtime": "^7.10.1", "classnames": "2.x", "dom-align": "^1.7.0", - "rc-util": "^4.12.0", + "rc-util": "^5.3.0", "resize-observer-polyfill": "^1.5.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, - "rc-animate": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-2.10.3.tgz", - "integrity": "sha512-A9qQ5Y8BLlM7EhuCO3fWb/dChndlbWtY/P5QvPqBU7h4r5Q2QsvsbpTGgdYZATRDZbTRnJXXfVk9UtlyS7MBLg==", + "rc-motion": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.3.1.tgz", + "integrity": "sha512-UAB2gwS9c1DuCFKVCimAkL2JUEGCwzgCbb+VslhIMFg6vY7oyMxYIQ6hkoji1PzgDEw0tHIhP+a17R6Y5DGMrQ==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "css-animation": "^1.3.2", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-util": "^4.15.3", - "react-lifecycles-compat": "^3.0.4" + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.2.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-slider": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.2.2.tgz", - "integrity": "sha512-WwdNHb/cvnQXMhp8cRhxOM0pGnVG4fPoaFE31yVkyJUAZiHq3siQgwzAeYl11fyszwhrEXkpGU7tEAfClh0AaQ==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.5.1.tgz", + "integrity": "sha512-MbGH2f2/Kv7jUeBHQp8rcXLUrNdFR3YLyuMR77WcjQrEIMly/zoBuie/VZaWoPXWHlsB3H91ETktF88EfS/PkQ==", "requires": { - "babel-runtime": "6.x", + "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "prop-types": "^15.5.4", - "rc-tooltip": "^4.0.0", - "rc-util": "^4.0.4", - "shallowequal": "^1.1.0", - "warning": "^4.0.3" + "rc-tooltip": "^5.0.1", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-tooltip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-4.0.1.tgz", - "integrity": "sha512-R+Ift6SwD2bJKhlYgKXyklvurnYwGzNMfRIPBqv0qoG0SYcVJDVuECL73dcRm2+CCik3YYn1ZGZLPjRRrUkAIw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.0.1.tgz", + "integrity": "sha512-3AnxhUS0j74xAV3khrKw8o6rg+Ima3nw09DJBezMPnX3ImQUAnayWsPSlN1mEnihjA43rcFkGM1emiKE+CXyMQ==", "requires": { - "rc-trigger": "^4.0.0" + "@babel/runtime": "^7.11.2", + "rc-trigger": "^5.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-trigger": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.0.0.tgz", - "integrity": "sha512-wOr2i4UrhsLjPhT9/k3p8l5yktC0BjOIBk2afze78a9ieql4GEw19Qo6iqSBmX/KqD9V4VXQxD4Ebt7U7IDrIw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.0.6.tgz", + "integrity": "sha512-L/xIX5OO7a/bdTH0yYT9mwAsV6oM1inAqAbLjoUzpcIW+UUE3jjVOjm5VaKDfHd41rzDzOfN05URmhet5QzXKQ==", "requires": { + "@babel/runtime": "^7.11.2", "classnames": "^2.2.6", - "prop-types": "15.x", - "raf": "^3.4.1", - "rc-align": "^3.0.0-rc.0", - "rc-animate": "^2.10.2", - "rc-util": "^4.15.2" + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.3.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-util": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.20.0.tgz", - "integrity": "sha512-rUqk4RqtDe4OfTsSk2GpbvIQNVtfmmebw4Rn7ZAA1TO1zLMLfyOF78ZyrEKqs8RDwoE3S1aXp0AX0ogLfSxXrQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.4.0.tgz", + "integrity": "sha512-kXDn1JyLJTAWLBFt+fjkTcUtXhxKkipQCobQmxIEVrX62iXgo24z8YKoWehWfMxPZFPE+RXqrmEu9j5kHz/Lrg==", "requires": { - "add-dom-event-listener": "^1.1.0", - "babel-runtime": "6.x", - "prop-types": "^15.5.10", "react-is": "^16.12.0", - "react-lifecycles-compat": "^3.0.4", "shallowequal": "^1.1.0" }, "dependencies": { "react-is": { - "version": "16.13.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz", - "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, "react": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.12.0.tgz", - "integrity": "sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" } }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dev": true, + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "react-context-devtool": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-context-devtool/-/react-context-devtool-2.0.0.tgz", + "integrity": "sha512-Q3pAkh6MM6De2bYCK/3Z34xrrc116XuZH3Wc2afnum6cL90afp+CwLzr4X3EpJHtWkAIOHrG3twHKq5Xy7QKIA==", + "dev": true, + "requires": { + "classnames": "2.2.6", + "codemirror": "5.55.0", + "error-stack-parser": "2.0.6", + "jsondiffpatch": "0.4.1", + "jsonlint-mod": "1.7.5", + "object-assign": "4.1.1", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-json-view": "1.19.1" + } + }, "react-dom": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.12.0.tgz", - "integrity": "sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.18.0" + "scheduler": "^0.19.1" } }, "react-hook-form": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-5.0.3.tgz", - "integrity": "sha512-6EqRWATbyXTJdtoaUDp6/2WbH9NOaPUAjsygw12nbU1yK6+x12paMJPf1eLxqT1muSvVe2G8BPqdeidqIL7bmg==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-5.7.2.tgz", + "integrity": "sha512-bJvY348vayIvEUmSK7Fvea/NgqbT2racA2IbnJz/aPlQ3GBtaTeDITH6rtCa6y++obZzG6E3Q8VuoXPir7QYUg==" }, "react-is": { "version": "16.8.6", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" }, + "react-json-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", + "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "dev": true, + "requires": { + "flux": "^3.1.3", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^6.1.0" + } + }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-modal": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.11.1.tgz", - "integrity": "sha512-8uN744Yq0X2lbfSLxsEEc2UV3RjSRb4yDVxRQ1aGzPo86QjNOwhQSukDb8U8kR+636TRTvfMren10fgOjAy9eA==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.11.2.tgz", + "integrity": "sha512-o8gvvCOFaG1T7W6JUvsYjRjMVToLZgLIsi5kdhFIQCtHxDkA47LznX62j+l6YQkpXDbvQegsDyxe/+JJsFQN7w==", "requires": { "exenv": "^1.2.0", "prop-types": "^15.5.10", @@ -20658,11 +20954,11 @@ } }, "react-tabs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.1.0.tgz", - "integrity": "sha512-9RKc77HCPsjQDVPyZEw37g3JPtg26oSQ9o4mtaVXjJuLedDX5+TQcE+MRNKR+4aO3GMAY4YslCePGG1//MQ3Jg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.1.1.tgz", + "integrity": "sha512-HpySC29NN1BkzBAnOC+ajfzPbTaVZcSWzMSjk56uAhPC/rBGtli8lTysR4CfPAyEE/hfweIzagOIoJ7nu80yng==", "requires": { - "classnames": "^2.2.0", + "clsx": "^1.1.0", "prop-types": "^15.5.0" } }, @@ -20690,18 +20986,35 @@ } } }, - "react-tooltip": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.0.3.tgz", - "integrity": "sha512-xEM+fr8tr/KJP5PZEOg/fc5bZ7ZkC658iMDgCq5DfTqHVyuIOOd5loyxQD0eAJiZ6jWdEd18owbRqd3stHtEDg==", + "react-textarea-autosize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", + "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "dev": true, "requires": { "prop-types": "^15.6.0" } }, + "react-tooltip": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.10.tgz", + "integrity": "sha512-D7ZLx6/QwpUl0SZRek3IZy/HWpsEEp0v3562tcT8IwZgu8IgV7hY5ZzniTkHyRcuL+IQnljpjj7A7zCgl2+T3w==", + "requires": { + "prop-types": "^15.7.2", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + } + } + }, "react-use-websocket": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-1.3.3.tgz", - "integrity": "sha512-UvMEbx95BrCY+FljGJo71IRstC/dXoC73U92OE2Vvn3kWw1Yt82d7NmuY4pFbnBjL4ZijwBHEnpe6dYZg9kXBQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-2.1.1.tgz", + "integrity": "sha512-os9EgsiLXvNZUStJJtfHTAIzCJ4+WuhB4DKuZyAw8V2aIp1a5+5sm68LqgD1Q2aQ2MNUZQ+oCZJm94Xz6/fEMA==" }, "read-config-file": { "version": "6.0.0", @@ -20849,12 +21162,9 @@ } }, "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "requires": { - "util.promisify": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-2.0.0.tgz", + "integrity": "sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==" }, "reflect.ownkeys": { "version": "0.2.0", @@ -20880,7 +21190,8 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true }, "regenerator-transform": { "version": "0.14.1", @@ -21041,6 +21352,7 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -21067,12 +21379,14 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -21306,9 +21620,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, @@ -21336,9 +21650,9 @@ } }, "scheduler": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", - "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -21870,6 +22184,12 @@ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, "stat-mode": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", @@ -22501,16 +22821,16 @@ } }, "svgo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", - "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.33", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -22518,34 +22838,6 @@ "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "symbol-tree": { @@ -23089,6 +23381,12 @@ "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", "dev": true }, + "ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "dev": true + }, "uncss": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.2.tgz", @@ -23216,6 +23514,12 @@ } } }, + "underscore": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz", + "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw==", + "dev": true + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -23580,41 +23884,71 @@ } }, "wait-on": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.0.tgz", - "integrity": "sha512-QrW3J8LzS5ADPfD9Rx5S6KJck66xkqyiFKQs9jmUTkIhiEOmkzU7WRZc+MjsnmkrgjitS2xQ4bb13hnlQnKBUQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.2.tgz", + "integrity": "sha512-Qpmgm3Hw/sXm7xK68FBsYy5r+Uid94/QymwnEjn9GTpfiWTUVYm0bccivVwY/BXGYO2r+5Cd8S/DzrRZqHK/9w==", "requires": { - "@hapi/joi": "^16.1.8", + "@hapi/joi": "^17.1.1", "lodash": "^4.17.15", - "minimist": "^1.2.0", - "request": "^2.88.0", + "minimist": "^1.2.5", + "request": "^2.88.2", "request-promise-native": "^1.0.8", - "rxjs": "^6.5.4" + "rxjs": "^6.5.5" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } }, "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "requires": { - "lodash": "^4.17.15" + "lodash": "^4.17.19" } }, "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", "requires": { - "request-promise-core": "1.1.3", + "request-promise-core": "1.1.4", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" + } + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -23666,6 +24000,12 @@ "iconv-lite": "0.4.24" } }, + "whatwg-fetch": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==", + "dev": true + }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -23853,9 +24193,9 @@ } }, "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -23866,7 +24206,7 @@ "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "yargs-parser": "^13.1.2" }, "dependencies": { "ansi-regex": { diff --git a/package.json b/package.json index e9054f13..f99d99a5 100644 --- a/package.json +++ b/package.json @@ -50,28 +50,28 @@ }, "homepage": "https://github.com/norbertdragan/pangea-poker-gui#readme", "dependencies": { - "@emotion/core": "^10.0.27", + "@emotion/core": "10.0.35", "@emotion/styled": "^10.0.27", - "@sentry/browser": "^5.10.2", - "@types/react-modal": "^3.10.4", + "@sentry/browser": "5.24.2", + "@types/react-modal": "3.10.6", "axios": "^0.20.0", - "babel-jest": "^25.0.0", - "concurrently": "^5.1.0", + "babel-jest": "25.5.1", + "concurrently": "5.3.0", "cssnano": "^4.1.10", "deep-diff": "^1.0.2", - "electron-is-dev": "^1.1.0", + "electron-is-dev": "1.2.0", "emotion": "^10.0.27", - "howler": "^2.1.3", + "howler": "2.2.0", "normalize.css": "^8.0.1", - "rc-slider": "^9.0.0", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-hook-form": "^5.0.3", - "react-modal": "^3.11.1", - "react-tabs": "^3.1.0", - "react-tooltip": "^4.0.3", - "react-use-websocket": "^1.0.0", - "wait-on": "^4.0.0" + "rc-slider": "9.5.1", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-hook-form": "5.7.2", + "react-modal": "3.11.2", + "react-tabs": "3.1.1", + "react-tooltip": "4.2.10", + "react-use-websocket": "^2.0.0", + "wait-on": "4.0.2" }, "devDependencies": { "@babel/core": "7.11.6", @@ -84,20 +84,20 @@ "@types/babel__core": "7.1.10", "@types/cssnano": "4.0.0", "@types/deep-diff": "1.0.0", - "@types/enzyme-adapter-react-16": "1.0.6", "@types/enzyme": "3.10.7", - "@types/eslint-plugin-prettier": "3.1.0", + "@types/enzyme-adapter-react-16": "1.0.6", "@types/eslint": "6.8.1", + "@types/eslint-plugin-prettier": "3.1.0", "@types/jest": "25.2.3", - "@types/jsdom-global": "3.0.2", "@types/jsdom": "16.2.4", + "@types/jsdom-global": "3.0.2", "@types/parcel-bundler": "1.12.1", "@types/prettier": "1.19.0", "@types/rc-slider": "8.6.6", + "@types/react": "16.9.49", "@types/react-dom": "16.9.8", "@types/react-tabs": "2.3.2", "@types/react-test-renderer": "16.9.3", - "@types/react": "16.9.49", "@typescript-eslint/eslint-plugin": "2.34.0", "@typescript-eslint/parser": "2.34.0", "babel-eslint": "10.1.0", @@ -107,29 +107,28 @@ "babel-plugin-transform-inline-environment-variables": "0.4.3", "electron": "8.5.2", "electron-builder": "22.8.1", - "enzyme-adapter-react-16": "1.15.5", "enzyme": "3.11.0", + "enzyme-adapter-react-16": "1.15.5", + "eslint": "6.8.0", "eslint-config-airbnb": "18.2.0", "eslint-config-prettier": "6.12.0", - "eslint-config-wesbos": "0.0.22", - "eslint-plugin-html": "6.1.0", "eslint-config-wesbos": "0.0.23", "eslint-plugin-html": "6.1.0", "eslint-plugin-import": "2.22.1", "eslint-plugin-jsx-a11y": "6.3.1", "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-react-hooks": "3.0.0", "eslint-plugin-react": "7.21.2", - "eslint": "6.8.0", + "eslint-plugin-react-hooks": "3.0.0", "jest": "25.5.4", - "jsdom-global": "3.0.2", "jsdom": "16.4.0", + "jsdom-global": "3.0.2", "parcel-bundler": "1.12.4", "prettier": "1.19.1", + "react-context-devtool": "2.0.0", "react-test-renderer": "16.13.1", "ts-jest": "25.5.1", - "tslint-eslint-rules": "5.4.0", "tslint": "6.1.3", + "tslint-eslint-rules": "5.4.0", "typescript": "3.9.7" } } diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 4c323e59..89c87309 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/camelcase */ import React, { useState, useEffect, useContext } from "react"; -import useWebSocket from "react-use-websocket"; +import useWebSocket, { ReadyState } from "react-use-websocket"; import { DispatchContext, StateContext } from "../../store/context"; import { onMessage, onMessage_player } from "./onMessage"; import { IState } from "../../store/initialState"; import notifications from "../../config/notifications.json"; -import { Level } from "../../lib/constants"; +import { Level, Conn, Node, NodeType } from "../../lib/constants"; import { resetMessage, sendInitMessage, @@ -17,7 +17,9 @@ import { // This component is responsible for the WebSocket connection. It doesn't return and -const STATIC_OPTIONS = {}; +const STATIC_OPTIONS = { + // onOpen: () => console.log('opened') +}; interface IProps { message: string; @@ -29,66 +31,54 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { const dispatch: (arg: object) => void = useContext(DispatchContext); const state: IState = useContext(StateContext); const [currentSocketUrl] = useState(server); - const [sendMessage, lastMessage, readyState] = useWebSocket( + const { + sendJsonMessage, + lastJsonMessage, + readyState + } = useWebSocket( currentSocketUrl, STATIC_OPTIONS ); - const readyStateString = { - 0: "Connecting...", - 1: "Connected", - 2: "Disconnecting...", - 3: "Disconnected" + const connectionStatus = { + [ReadyState.CONNECTING]: Conn.connecting, + [ReadyState.OPEN]: Conn.connected, + [ReadyState.CLOSING]: Conn.disconnecting, + [ReadyState.CLOSED]: Conn.disconnected, + [ReadyState.UNINSTANTIATED]: Conn.uninstantiated, }[readyState]; // Send a message if props changes useEffect(() => { - if (message && readyState === 1) { - sendMessage(message); + console.log('readyState--', readyState) + if (message && readyState === ReadyState.OPEN) { + sendJsonMessage(message); resetMessage(nodeName, dispatch); } }, [message]); // If the connection status changes, update the state useEffect(() => { - if (state.connection[nodeName] !== readyStateString) { - updateConnectionStatus(readyStateString, Level.warning, dispatch); - sendInitMessage(readyStateString, nodeName, dispatch); - if (readyStateString === "Connected") { - // Start the game if it's a player node - nodeName !== "dealer" && - game({ gametype: "", pot: [0] }, state, dispatch); - closeStartupModal(dispatch); + if (state.connectionStatus.status !== connectionStatus) { + + if (!state.connectionStatus.status) { + sendInitMessage(connectionStatus, nodeName, dispatch); } - if (readyStateString === "Disconnected") { - updateConnectionStatus( - notifications.CONNECTION_FAILED, - Level.error, - dispatch - ); + + updateConnectionStatus(connectionStatus, dispatch); + + if (connectionStatus === Conn.disconnected) { updateStateValue("nodesSet", false, dispatch); } } }); - // Parse the received message depending on the node + // Forward the received message depending on the node useEffect(() => { - if (lastMessage) { - switch (nodeName) { - case "dcv": { - onMessage(lastMessage.data, state, dispatch); - break; - } - case "echo": { - onMessage(lastMessage.data, state, dispatch); - break; - } - default: { - onMessage_player(lastMessage.data, nodeName, state, dispatch); - } - } + if (lastJsonMessage) { + onMessage(lastJsonMessage, nodeName, state, dispatch); } - }, [lastMessage]); + }, [lastJsonMessage]); }); export default WebSocket; diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 3c2cb2af..50ce3075 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -45,7 +45,7 @@ import playerIdToString from "../../lib/playerIdToString"; import arrayToSentence from "../../lib/arrayToSentence"; import lowerCaseLastLetter from "../../lib/lowerCaseLastLetter"; import sounds from "../../sounds/sounds"; -import { GameTurns, Level, BetWarnings } from "../../lib/constants"; +import { GameTurns, Level, BetWarnings, Node } from "../../lib/constants"; import notifications from "../../config/notifications.json"; import { blindBet, isCurrentPlayer } from "./helpers"; export interface IMessage { @@ -87,25 +87,19 @@ export interface IMessage { const { preFlop, flop, turn, showDown } = GameTurns; export const onMessage = ( - messageString: string, + message: IMessage, + nodeName: string, state: IState, dispatch: (arg: object) => void ): void => { - const message: IMessage = JSON.parse(messageString); - // keep it just in case for now - log("Received from DCV", "received", message); -}; -export const onMessage_player = ( - messageString: string, - player: string, - state: IState, - dispatch: (arg: object) => void -): void => { - const message: IMessage = JSON.parse(messageString); - setLastMessage(message, dispatch); - log(`${Date.now()}: Received from ${player}: `, "received", message); + if(!message || nodeName !== Node.player) { + log("Received an unexpected message from " + nodeName, "received", message); + return; + } + setLastMessage(message, dispatch); + log(`${Date.now()}: Received from ${nodeName}: `, "received", message); switch (message.method) { case "backend_status": updateStateValue("backendStatus", message.backend_status, dispatch); diff --git a/src/components/Game/types/IMessage.ts b/src/components/Game/types/IMessage.ts new file mode 100644 index 00000000..b54c8c4b --- /dev/null +++ b/src/components/Game/types/IMessage.ts @@ -0,0 +1,35 @@ +export interface IMessage { + action?: string; + addr?: string; + addrs?: string[]; + amount?: number; + balance?: number; + backend_status: number; + bet_amount?: number; + big_blind?: number; + table_stack_in_chips: number; + deal?: { + balance?: number; + board?: string[]; + holecards?: [string, string]; + }; + game?: { gametype: string; pot: number[] }; + gui_playerID?: number; + method?: string; + minRaiseTo?: number; + player_funds?: number[]; + playerid?: number; + pot?: number; + seats?: [{ name: string; playing: number; seat: number }]; + showInfo?: { + allHoleCardsInfo?: string[][]; + boardCardInfo?: string[]; + }; + small_blind?: number; + possibilities?: number[]; + toPlayer?: number; + toCall?: number; + warning_num: number; + win_amount?: number; + winners?: number[]; +} \ No newline at end of file diff --git a/src/components/Modal/CustomIP.tsx b/src/components/Modal/CustomIP.tsx index 15bc63f4..fd110c81 100644 --- a/src/components/Modal/CustomIP.tsx +++ b/src/components/Modal/CustomIP.tsx @@ -61,10 +61,6 @@ const CustomIP: React.FunctionComponent = () => { updateStateValue("nodes", nodesToSet, dispatch); updateStateValue("nodeType", nodeTypeToSet, dispatch); - - // Start the game if it's a player node - !isDealer && game({ gametype: "", pot: [0] }, state, dispatch); - updateStateValue("nodesSet", true, dispatch); }; diff --git a/src/components/Table/Connections.tsx b/src/components/Table/Connections.tsx index 37bbad67..5864d3b9 100644 --- a/src/components/Table/Connections.tsx +++ b/src/components/Table/Connections.tsx @@ -1,22 +1,14 @@ import { css } from "@emotion/core"; import { useContext } from "react"; import { StateContext } from "../../store/context"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; +import { pickColor } from "./assets/style"; // This component is responsible for displaying the state of the WebSocket connections const Connections: React.FunctionComponent = () => { const state: IState = useContext(StateContext); - const { connection, nodeType } = state; - - let nodeList = []; - - const dealerNodeList = [["DCV", connection.dcv]]; - - const playerNode = ["Player", connection[Object.keys(state.nodes)[0]]]; - - if (nodeType === "dealer") nodeList = dealerNodeList; - if (nodeType === "player") nodeList.push(playerNode); + const { connectionStatus, nodeType } = state; return (
{ z-index: 4; `} > - {nodeList.map((node, key) => { - return ( + return ( + + {nodeType} - {node[0]}: - - {" " + node[1]} - + {connectionStatus.status && ": " + connectionStatus.status} - ); - })} + + )
); }; diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index b07c3329..fcf9a6b4 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -2,7 +2,8 @@ import { useReducer, useEffect, useState } from "react"; import diff from "deep-diff"; import reducer from "../../store/reducer"; import { StateContext, DispatchContext } from "../../store/context"; -import initialState, { IPlayer, IState } from "../../store/initialState"; +import initialState from "../../store/initialState"; +import { IPlayer, IState } from "../../store/types"; import Backgrounds from "./Backgrounds"; import { PlayerGrid9Max } from "../PlayerGrid"; import Player from "../Player"; @@ -21,6 +22,11 @@ import Cashier from "../Cashier"; import { TableContainer, TableWrapper, Notice } from "./assets/style"; import "./assets/style.css"; import notifications from "../../config/notifications.json"; +import { Conn, NodeType } from "../../lib/constants"; +import { + closeStartupModal, + game +} from "../../store/actions"; // This is the current Main component @@ -36,10 +42,12 @@ const Table: React.FunctionComponent = () => { backendStatus, boardCards, chipsCollected, + connectionStatus, controls, dealer, gameType, gameTurn, + gameStarted, handHistory, isDeveloperMode, isLogBox, @@ -54,6 +62,12 @@ const Table: React.FunctionComponent = () => { notice } = state; + useEffect(() => { + if (nodeType !== NodeType.dealer && !gameStarted && connectionStatus.status === Conn.connected) { + closeStartupModal(dispatch); + return game({ gametype: "", pot: [0] }, state, dispatch); + } + }, [state]) // For debugging purposes log the difference betweeen the last and current state useEffect(() => { const difference = diff(previousState, state); diff --git a/src/components/Table/assets/style.js b/src/components/Table/assets/style.js index a704e378..9dc0258f 100644 --- a/src/components/Table/assets/style.js +++ b/src/components/Table/assets/style.js @@ -1,5 +1,5 @@ import styled from "@emotion/styled"; -import { Level } from "../../../lib/constants"; +import { Conn, Level } from "../../../lib/constants"; export const TableContainer = styled.div` background-color: var(--dark); @@ -103,3 +103,14 @@ export const Notice = styled.div` bottom: 2.5rem; position: absolute; `; + +export const pickColor = (status) => { + switch(status) { + case Conn.connected: + return "var(--color-primaryLight)" + case Conn.connecting: + return "var(--color-accent)" + case Conn.disconnected: + return "var(--color-danger)" + } +} \ No newline at end of file diff --git a/src/components/Table/assets/types.ts b/src/components/Table/assets/types.ts index 5f10fb4c..3073b0f7 100644 --- a/src/components/Table/assets/types.ts +++ b/src/components/Table/assets/types.ts @@ -1,4 +1,5 @@ export interface INotice { - text: string; level: number; + status: string; + text: string; } diff --git a/src/index.js b/src/index.js index d3b87f8d..398f139e 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ import PTSansBold from "./fonts/PT_Sans-Web-Bold.ttf"; import PTSansRegular from "./fonts/PTSans-Regular.ttf"; import "./styles/variables.css"; import "./styles/tabs.css"; +import { debugContextDevtool } from 'react-context-devtool'; Sentry.init({ dsn: "https://294dbaf87a92469398cac4a9ba3c1106@sentry.io/1841547" @@ -57,3 +58,4 @@ const App = () => { const rootElement = document.getElementById("root"); ReactDOM.render(, rootElement); +debugContextDevtool(rootElement, {}); diff --git a/src/store/actions.ts b/src/store/actions.ts index 963783c6..116d3928 100644 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -4,10 +4,11 @@ import playerIdToString from "../lib/playerIdToString"; import lowerCaseLastLetter from "../lib/lowerCaseLastLetter"; import { IState } from "./initialState"; import { IMessage } from "../components/Game/onMessage"; -import { Possibilities, GameTurns, Level } from "../lib/constants"; +import { Possibilities, GameTurns, Level, Conn } from "../lib/constants"; import sounds from "../sounds/sounds"; import log from "../lib/dev"; import { INotice } from "../components/Table/assets/types"; +import notifications from "../config/notifications.json"; const { preFlop, flop, turn } = GameTurns; @@ -313,13 +314,9 @@ export const sendMessage = ( dispatch: (arg: object) => void ): void => { if ( - state.connection[node] === "Connected" || + state.connectionStatus.status === Conn.connected || (state.players[node] && state.players[node].connected) ) { - // @todo some messages are sent to the dcv! - if (node !== "dcv") { - node = "player"; - } const m = { type: "setMessage", payload: { @@ -508,15 +505,17 @@ export const toggleMainPot = (dispatch: (arg: object) => void): void => { }; export const updateConnectionStatus = ( - text: string, - level: Level, + status: string, dispatch: (arg: object) => void ): void => { + let level = status === Conn.disconnected ? Level.error : Level.warning + let text = status === Conn.disconnected ? notifications.CONNECTION_FAILED : status dispatch({ type: "updateConnectionStatus", payload: { - text, - level + level, + status, + text } }); }; From a2ae14020ed020dfb81076f101a38e9131520d40 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 19:53:31 +1300 Subject: [PATCH 005/113] lint --- src/components/Game/WebSocket.ts | 13 +- src/components/Game/onMessage.ts | 3 +- src/components/Game/types/IMessage.ts | 2 +- src/components/Table/Connections.tsx | 24 ++-- src/components/Table/Table.tsx | 13 +- src/components/Table/assets/style.js | 12 +- src/index.js | 2 +- src/lib/constants.ts | 22 ++-- src/store/actions.ts | 5 +- src/store/initialState.ts | 27 ++-- src/store/types.ts | 178 +++++++++++++------------- 11 files changed, 148 insertions(+), 153 deletions(-) diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 89c87309..2975b227 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -31,11 +31,7 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { const dispatch: (arg: object) => void = useContext(DispatchContext); const state: IState = useContext(StateContext); const [currentSocketUrl] = useState(server); - const { - sendJsonMessage, - lastJsonMessage, - readyState - } = useWebSocket( + const { sendJsonMessage, lastJsonMessage, readyState } = useWebSocket( currentSocketUrl, STATIC_OPTIONS ); @@ -45,12 +41,12 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { [ReadyState.OPEN]: Conn.connected, [ReadyState.CLOSING]: Conn.disconnecting, [ReadyState.CLOSED]: Conn.disconnected, - [ReadyState.UNINSTANTIATED]: Conn.uninstantiated, + [ReadyState.UNINSTANTIATED]: Conn.uninstantiated }[readyState]; // Send a message if props changes useEffect(() => { - console.log('readyState--', readyState) + console.log("readyState--", readyState); if (message && readyState === ReadyState.OPEN) { sendJsonMessage(message); resetMessage(nodeName, dispatch); @@ -60,11 +56,10 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { // If the connection status changes, update the state useEffect(() => { if (state.connectionStatus.status !== connectionStatus) { - if (!state.connectionStatus.status) { sendInitMessage(connectionStatus, nodeName, dispatch); } - + updateConnectionStatus(connectionStatus, dispatch); if (connectionStatus === Conn.disconnected) { diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 50ce3075..1aa73ae1 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -92,8 +92,7 @@ export const onMessage = ( state: IState, dispatch: (arg: object) => void ): void => { - - if(!message || nodeName !== Node.player) { + if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; } diff --git a/src/components/Game/types/IMessage.ts b/src/components/Game/types/IMessage.ts index b54c8c4b..e132929b 100644 --- a/src/components/Game/types/IMessage.ts +++ b/src/components/Game/types/IMessage.ts @@ -32,4 +32,4 @@ export interface IMessage { warning_num: number; win_amount?: number; winners?: number[]; -} \ No newline at end of file +} diff --git a/src/components/Table/Connections.tsx b/src/components/Table/Connections.tsx index 5864d3b9..015ba58b 100644 --- a/src/components/Table/Connections.tsx +++ b/src/components/Table/Connections.tsx @@ -20,23 +20,23 @@ const Connections: React.FunctionComponent = () => { `} > return ( + + {nodeType} - {nodeType} - - {connectionStatus.status && ": " + connectionStatus.status} - + {connectionStatus.status && ": " + connectionStatus.status} + ) ); diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index fcf9a6b4..2460592f 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -23,10 +23,7 @@ import { TableContainer, TableWrapper, Notice } from "./assets/style"; import "./assets/style.css"; import notifications from "../../config/notifications.json"; import { Conn, NodeType } from "../../lib/constants"; -import { - closeStartupModal, - game -} from "../../store/actions"; +import { closeStartupModal, game } from "../../store/actions"; // This is the current Main component @@ -63,11 +60,15 @@ const Table: React.FunctionComponent = () => { } = state; useEffect(() => { - if (nodeType !== NodeType.dealer && !gameStarted && connectionStatus.status === Conn.connected) { + if ( + nodeType !== NodeType.dealer && + !gameStarted && + connectionStatus.status === Conn.connected + ) { closeStartupModal(dispatch); return game({ gametype: "", pot: [0] }, state, dispatch); } - }, [state]) + }, [state]); // For debugging purposes log the difference betweeen the last and current state useEffect(() => { const difference = diff(previousState, state); diff --git a/src/components/Table/assets/style.js b/src/components/Table/assets/style.js index 9dc0258f..f49a3b42 100644 --- a/src/components/Table/assets/style.js +++ b/src/components/Table/assets/style.js @@ -104,13 +104,13 @@ export const Notice = styled.div` position: absolute; `; -export const pickColor = (status) => { - switch(status) { +export const pickColor = status => { + switch (status) { case Conn.connected: - return "var(--color-primaryLight)" + return "var(--color-primaryLight)"; case Conn.connecting: - return "var(--color-accent)" + return "var(--color-accent)"; case Conn.disconnected: - return "var(--color-danger)" + return "var(--color-danger)"; } -} \ No newline at end of file +}; diff --git a/src/index.js b/src/index.js index 398f139e..ab973fb8 100644 --- a/src/index.js +++ b/src/index.js @@ -9,7 +9,7 @@ import PTSansBold from "./fonts/PT_Sans-Web-Bold.ttf"; import PTSansRegular from "./fonts/PTSans-Regular.ttf"; import "./styles/variables.css"; import "./styles/tabs.css"; -import { debugContextDevtool } from 'react-context-devtool'; +import { debugContextDevtool } from "react-context-devtool"; Sentry.init({ dsn: "https://294dbaf87a92469398cac4a9ba3c1106@sentry.io/1841547" diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 170fd126..0fa1dd00 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -41,20 +41,20 @@ export enum BetWarnings { } export enum Conn { - connecting = 'Connecting...', - connected = 'Connected', - disconnecting = 'Disconnecting...', - disconnected = 'Disconnected', - uninstantiated = 'Uninstantiated' + connecting = "Connecting...", + connected = "Connected", + disconnecting = "Disconnecting...", + disconnected = "Disconnected", + uninstantiated = "Uninstantiated" } export enum Node { - dcv = 'dcv', - player = 'player', - echo = 'echo' + dcv = "dcv", + player = "player", + echo = "echo" } export enum NodeType { - dealer = 'dealer', - player = 'player' -} \ No newline at end of file + dealer = "dealer", + player = "player" +} diff --git a/src/store/actions.ts b/src/store/actions.ts index 116d3928..2c73a561 100644 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -508,8 +508,9 @@ export const updateConnectionStatus = ( status: string, dispatch: (arg: object) => void ): void => { - let level = status === Conn.disconnected ? Level.error : Level.warning - let text = status === Conn.disconnected ? notifications.CONNECTION_FAILED : status + const level = status === Conn.disconnected ? Level.error : Level.warning; + const text = + status === Conn.disconnected ? notifications.CONNECTION_FAILED : status; dispatch({ type: "updateConnectionStatus", payload: { diff --git a/src/store/initialState.ts b/src/store/initialState.ts index 4eba865f..12f0bd86 100644 --- a/src/store/initialState.ts +++ b/src/store/initialState.ts @@ -3,9 +3,8 @@ import { IState } from "./types"; /*eslint-disable @typescript-eslint/camelcase*/ const initialState: IState = { - /********** ME ***********/ - + balance: 0, // The total CHIPS balance the player has in the Pangea Wallet connectionStatus: { level: 1, @@ -16,36 +15,36 @@ const initialState: IState = { holeCards: [], // Cards of the user nodeType: null, userSeat: null, // Where does the user sit (player1, player2, etc) - withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds - + withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds + /********** BACKEND ***********/ // 0 - transaction is still being mined // 1 - backend is ready - backendStatus: 0, + backendStatus: 0, /********** CONTROLS ***********/ - isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game + isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game isDeveloperMode: false, // Whether the app should run in developer mode - + /********** GENERAL GAME INFO ***********/ - + activePlayer: null, // Which seat is the active player dealer: 0, // Which player is the dealer gameStarted: false, - gameType: "", // Game type at the top left corner + gameType: "", // Game type at the top left corner notice: { text: "Choose your seat to begin playing", status: null, level: 1 }, - players: {}, // Object of all players at the table + players: {}, // Object of all players at the table maxPlayers: 9, /********** POKER INFO ***********/ blinds: [1, 2], // Current blinds - small and big one - boardCards: [], + boardCards: [], controls: { showControls: false, showFirstRow: true, @@ -55,13 +54,13 @@ const initialState: IState = { cardsDealt: false, chipsCollected: false, // chips collected to the middle currentChipsStack: 0, // current chips stack paid to enter the game - gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown + gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown handHistory: [], // Log of all palyer actions - handsPlayed: 0, // Total number of hands played in this session + handsPlayed: 0, // Total number of hands played in this session isCashierOpen: false, isLogBox: true, isShowDown: false, - lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI + lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI // Messages to send to the nodes - when updated, the message will be sent lastMessage: { method: "replay", diff --git a/src/store/types.ts b/src/store/types.ts index 1468e868..e1be48bf 100644 --- a/src/store/types.ts +++ b/src/store/types.ts @@ -1,92 +1,92 @@ import { INotice } from "../components/Table/assets/types"; export interface IPlayer { - isPlaying: boolean; - seat: string; - chips: number; - hasCards: boolean; - showCards: boolean; - isBetting: boolean; - betAmount: number; - playerCards: string[]; - connected: boolean; - } - - export interface IState { - players: { - player1: IPlayer; - player2: IPlayer; - player3: IPlayer; - player4: IPlayer; - player5: IPlayer; - player6: IPlayer; - player7: IPlayer; - player8: IPlayer; - player9: IPlayer; - }; - activePlayer: string; - backendStatus: number; - balance: number; - blinds: [number, number]; - boardCards: string[]; - connection: { - dcv: string; - player1: string; - player2: string; - echo: string; - }; - controls: { - canCheck: boolean; - canRaise: boolean; - showControls: boolean; - showFirstRow: boolean; - }; - cardsDealt: boolean; - chipsCollected: boolean; - connectionStatus: INotice; - currentChipsStack: number; - dealer: number; - depositAddress: string; - gameStarted: boolean; - gameTurn: 0 | 1 | 2 | 3 | 4; - gameType: string; - handHistory: { action: string; timeStamp: number }[]; - handsPlayed: number; - holeCards: string[]; - isCashierOpen: boolean; - isDeveloperMode: boolean; - isLogBox: boolean; - isShowDown: boolean; - isStartupModal: boolean; - lastAction: { player: number; action: string | null }; - lastMessage: object; - nodesSet: boolean; - notice: INotice; - nodes: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - nodeType: string; - maxPlayers: number; - message: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - minRaiseTo: number; - options: { - showPotCounter: boolean; - }; - pot: number[]; - seats: number; - showDealer: boolean; - showMainPot: boolean; - totalPot: number; - toCall: number; - userSeat: string; - winners: string[] | null; - withdrawAddressList: string[]; - } \ No newline at end of file + isPlaying: boolean; + seat: string; + chips: number; + hasCards: boolean; + showCards: boolean; + isBetting: boolean; + betAmount: number; + playerCards: string[]; + connected: boolean; +} + +export interface IState { + players: { + player1: IPlayer; + player2: IPlayer; + player3: IPlayer; + player4: IPlayer; + player5: IPlayer; + player6: IPlayer; + player7: IPlayer; + player8: IPlayer; + player9: IPlayer; + }; + activePlayer: string; + backendStatus: number; + balance: number; + blinds: [number, number]; + boardCards: string[]; + connection: { + dcv: string; + player1: string; + player2: string; + echo: string; + }; + controls: { + canCheck: boolean; + canRaise: boolean; + showControls: boolean; + showFirstRow: boolean; + }; + cardsDealt: boolean; + chipsCollected: boolean; + connectionStatus: INotice; + currentChipsStack: number; + dealer: number; + depositAddress: string; + gameStarted: boolean; + gameTurn: 0 | 1 | 2 | 3 | 4; + gameType: string; + handHistory: { action: string; timeStamp: number }[]; + handsPlayed: number; + holeCards: string[]; + isCashierOpen: boolean; + isDeveloperMode: boolean; + isLogBox: boolean; + isShowDown: boolean; + isStartupModal: boolean; + lastAction: { player: number; action: string | null }; + lastMessage: object; + nodesSet: boolean; + notice: INotice; + nodes: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + nodeType: string; + maxPlayers: number; + message: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + minRaiseTo: number; + options: { + showPotCounter: boolean; + }; + pot: number[]; + seats: number; + showDealer: boolean; + showMainPot: boolean; + totalPot: number; + toCall: number; + userSeat: string; + winners: string[] | null; + withdrawAddressList: string[]; +} From 873f9254dd63eb90945fb0c962f4745afbf120e4 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 19:56:41 +1300 Subject: [PATCH 006/113] run test on push --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 64ec0ac4..20bde400 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "src/electron.js", "husky": { "hooks": { - "pre-commit": "node_modules/eslint/bin/eslint.js './src/' --ext .js,.ts,.tsx --fix" + "pre-commit": "node_modules/eslint/bin/eslint.js './src/' --ext .js,.ts,.tsx --fix", + "pre-push": "npm test" } }, "scripts": { From d238b99e7af8e57fa83f24f583427f8cfdc91cee Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:19:35 +1300 Subject: [PATCH 007/113] updated tests and updated reference to IState --- src/components/Cashier/Cashier.tsx | 2 +- src/components/Cashier/Deposit.tsx | 2 +- src/components/Cashier/Withdraw.tsx | 2 +- src/components/Controls/Controls.tsx | 2 +- src/components/Controls/Slider.tsx | 2 +- .../DeveloperMode/DeveloperMode.tsx | 2 +- src/components/Game/Game.tsx | 2 +- src/components/Game/WebSocket.ts | 9 ++-- .../Game/__tests__/onMessage.test.ts | 50 ++++++++++--------- src/components/Game/helpers/index.ts | 2 +- src/components/Game/onMessage.ts | 5 +- src/components/Modal/CustomIP.tsx | 2 +- src/components/Modal/StartupModal.tsx | 2 +- src/components/Modal/TableSelect.tsx | 2 +- src/components/Table/TotalPot.tsx | 2 +- src/lib/TestStateProvider.tsx | 3 +- 16 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/components/Cashier/Cashier.tsx b/src/components/Cashier/Cashier.tsx index a6bd278b..a65ee29e 100644 --- a/src/components/Cashier/Cashier.tsx +++ b/src/components/Cashier/Cashier.tsx @@ -5,7 +5,7 @@ import Withdraw from "./Withdraw"; import { Button } from "../Controls"; import { sendMessage } from "../../store/actions"; import { updateStateValue } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { CashierButton } from "./assets/style"; // This modal opens up when the player clicks the Cashier button and allows the player to diff --git a/src/components/Cashier/Deposit.tsx b/src/components/Cashier/Deposit.tsx index 62d3551a..bdd93e67 100644 --- a/src/components/Cashier/Deposit.tsx +++ b/src/components/Cashier/Deposit.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import { css } from "@emotion/core"; import ReactTooltip from "react-tooltip"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import balanceWithDecimals from "../../lib/balanceWithDecimals"; import isValidAddress from "../../lib/isValidAddress"; import { ModalButtonsWrapper } from "../Modal/assets/style"; diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 9b90d77c..cab3bd5d 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import { css } from "@emotion/core"; import { useForm } from "react-hook-form"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import balanceWithDecimals from "../../lib/balanceWithDecimals"; import isValidAddress from "../../lib/isValidAddress"; import { ModalButtonsWrapper } from "../Modal/assets/style"; diff --git a/src/components/Controls/Controls.tsx b/src/components/Controls/Controls.tsx index 955826b3..5fc94aa7 100644 --- a/src/components/Controls/Controls.tsx +++ b/src/components/Controls/Controls.tsx @@ -14,7 +14,7 @@ import { showControls } from "../../store/actions"; import log from "../../lib/dev"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { IMessage } from "../Game/onMessage"; import { Possibilities, PlayerActions } from "../../lib/constants"; diff --git a/src/components/Controls/Slider.tsx b/src/components/Controls/Slider.tsx index 75835099..f0a20331 100644 --- a/src/components/Controls/Slider.tsx +++ b/src/components/Controls/Slider.tsx @@ -2,7 +2,7 @@ import { useContext, useEffect } from "react"; import { StateContext } from "../../store/context"; import RCSlider from "rc-slider"; import "./assets/slider.css"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { SliderContainer, SliderWrapper } from "./assets/style"; // This is the Slider component used in Controls to set bet/raise amount diff --git a/src/components/DeveloperMode/DeveloperMode.tsx b/src/components/DeveloperMode/DeveloperMode.tsx index 02cb57f5..d6802337 100644 --- a/src/components/DeveloperMode/DeveloperMode.tsx +++ b/src/components/DeveloperMode/DeveloperMode.tsx @@ -15,7 +15,7 @@ import { playerJoin } from "../../store/actions"; import { DispatchContext, StateContext } from "../../store/context"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This component is only used for testing purposes while in development diff --git a/src/components/Game/Game.tsx b/src/components/Game/Game.tsx index 03fba11d..444660b0 100644 --- a/src/components/Game/Game.tsx +++ b/src/components/Game/Game.tsx @@ -3,7 +3,7 @@ import WebSocket from "./WebSocket"; import { DispatchContext, StateContext } from "../../store/context"; import { Button } from "../Controls"; import { sendMessage } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { GameWrapper, DealerContainer } from "./assets/style"; // This component is responsible for the WebSocket connections, as well as displaying the main Start button diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 2975b227..e1c4dd21 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -2,16 +2,13 @@ import React, { useState, useEffect, useContext } from "react"; import useWebSocket, { ReadyState } from "react-use-websocket"; import { DispatchContext, StateContext } from "../../store/context"; -import { onMessage, onMessage_player } from "./onMessage"; -import { IState } from "../../store/initialState"; -import notifications from "../../config/notifications.json"; -import { Level, Conn, Node, NodeType } from "../../lib/constants"; +import { onMessage } from "./onMessage"; +import { IState } from "../../store/types"; +import { Conn } from "../../lib/constants"; import { resetMessage, sendInitMessage, - closeStartupModal, updateStateValue, - game, updateConnectionStatus } from "../../store/actions"; diff --git a/src/components/Game/__tests__/onMessage.test.ts b/src/components/Game/__tests__/onMessage.test.ts index caf8dbfe..12c4d354 100644 --- a/src/components/Game/__tests__/onMessage.test.ts +++ b/src/components/Game/__tests__/onMessage.test.ts @@ -1,9 +1,10 @@ /*eslint-disable @typescript-eslint/camelcase*/ -import { IMessage, onMessage_player } from "../onMessage"; +import { IMessage, onMessage } from "../onMessage"; import state from "../../../store/testState"; -import { IState } from "../../../store/initialState"; +import { IState } from "../../../store/types"; import * as actions from "../../../store/actions"; +import { IncomingMessage } from "electron"; const dispatch = jest.fn(); const updateStateValueSpy = jest.spyOn(actions, "updateStateValue"); @@ -32,28 +33,29 @@ export const receiveMessage = ( win_amount, winners } = message; - - onMessage_player( - JSON.stringify({ - action, - addr, - amount, - backend_status, - balance, - big_blind, - bet_amount, - deal, - max_players, - method, - playerid, - possibilities, - showInfo, - small_blind, - table_stack_in_chips, - win_amount, - winners - }), - `player${userSeat + 1}`, + + const msg: IMessage = { + action, + addr, + amount, + backend_status, + balance, + big_blind, + bet_amount, + deal, + max_players, + method, + playerid, + possibilities, + showInfo, + small_blind, + table_stack_in_chips, + win_amount, + winners + } + onMessage( + msg, + 'player', stateToTest, dispatch ); diff --git a/src/components/Game/helpers/index.ts b/src/components/Game/helpers/index.ts index fee4de9c..c745ba01 100644 --- a/src/components/Game/helpers/index.ts +++ b/src/components/Game/helpers/index.ts @@ -1,4 +1,4 @@ -import { IState } from "../../../store/initialState"; +import { IState } from "../../../store/types"; import { bet, setLastAction, addToHandHistory } from "../../../store/actions"; import log from "../../../lib/dev"; import playerStringToId from "../../../lib/playerStringToId"; diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 1aa73ae1..afdd3674 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -40,7 +40,7 @@ import { import log from "../../lib/dev"; import playerStringToId from "../../lib/playerStringToId"; import numberWithCommas from "../../lib/numberWithCommas"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import playerIdToString from "../../lib/playerIdToString"; import arrayToSentence from "../../lib/arrayToSentence"; import lowerCaseLastLetter from "../../lib/lowerCaseLastLetter"; @@ -65,6 +65,7 @@ export interface IMessage { }; game?: { gametype: string; pot: number[] }; gui_playerID?: number; + max_players: number; method?: string; minRaiseTo?: number; player_funds?: number[]; @@ -91,7 +92,7 @@ export const onMessage = ( nodeName: string, state: IState, dispatch: (arg: object) => void -): void => { +): void => {n if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; diff --git a/src/components/Modal/CustomIP.tsx b/src/components/Modal/CustomIP.tsx index fd110c81..479aa778 100644 --- a/src/components/Modal/CustomIP.tsx +++ b/src/components/Modal/CustomIP.tsx @@ -3,7 +3,7 @@ import { useContext, useState, useEffect } from "react"; import { Tab, Tabs, TabList, TabPanel } from "react-tabs"; import { DispatchContext, StateContext } from "../../store/context"; import { game, updateStateValue } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import Button from "../Controls/Button"; import { ModalButtonsWrapper, ConnectionStatus } from "./assets/style"; import { Input } from "../Form"; diff --git a/src/components/Modal/StartupModal.tsx b/src/components/Modal/StartupModal.tsx index 352e2b12..d441a0ec 100644 --- a/src/components/Modal/StartupModal.tsx +++ b/src/components/Modal/StartupModal.tsx @@ -2,7 +2,7 @@ import React from "react"; import Modal from "./Modal"; import CustomIP from "./CustomIP"; import TableSelect from "./TableSelect"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This is the modal that appears at the startup and let's the user to join a table diff --git a/src/components/Modal/TableSelect.tsx b/src/components/Modal/TableSelect.tsx index 5d0fcb14..98fafa18 100644 --- a/src/components/Modal/TableSelect.tsx +++ b/src/components/Modal/TableSelect.tsx @@ -8,7 +8,7 @@ import { updateStateValue, setUserSeat } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { Table, TableArea, ModalButtonsWrapper } from "./assets/style"; interface IProps { diff --git a/src/components/Table/TotalPot.tsx b/src/components/Table/TotalPot.tsx index ac4a7860..79a592e6 100644 --- a/src/components/Table/TotalPot.tsx +++ b/src/components/Table/TotalPot.tsx @@ -2,7 +2,7 @@ import { css } from "@emotion/core"; import { useEffect } from "react"; import numberWithCommas from "../../lib/numberWithCommas"; import { updateMainPot, updateTotalPot } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This component shows the total pot amount right above the boardCards diff --git a/src/lib/TestStateProvider.tsx b/src/lib/TestStateProvider.tsx index 2358379b..9ec89afb 100644 --- a/src/lib/TestStateProvider.tsx +++ b/src/lib/TestStateProvider.tsx @@ -1,6 +1,7 @@ import { useReducer } from "react"; import { StateContext, DispatchContext } from "../store/context"; -import initialState, { IState } from "../store/initialState"; +import initialState from "../store/initialState"; +import { IState } from "../store/types"; import reducer from "../store/reducer"; const TestStateProvider: React.FunctionComponent = ({ children }) => { From e13eeecbfd5bcd82db4dc53394112864804fcc75 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:25:15 +1300 Subject: [PATCH 008/113] removed a typo --- src/components/Game/__tests__/onMessage.test.ts | 11 +++-------- src/components/Game/onMessage.ts | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/Game/__tests__/onMessage.test.ts b/src/components/Game/__tests__/onMessage.test.ts index 12c4d354..e33465e1 100644 --- a/src/components/Game/__tests__/onMessage.test.ts +++ b/src/components/Game/__tests__/onMessage.test.ts @@ -33,7 +33,7 @@ export const receiveMessage = ( win_amount, winners } = message; - + const msg: IMessage = { action, addr, @@ -52,13 +52,8 @@ export const receiveMessage = ( table_stack_in_chips, win_amount, winners - } - onMessage( - msg, - 'player', - stateToTest, - dispatch - ); + }; + onMessage(msg, "player", stateToTest, dispatch); }; /** diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index afdd3674..9e8c411c 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -92,7 +92,7 @@ export const onMessage = ( nodeName: string, state: IState, dispatch: (arg: object) => void -): void => {n +): void => { if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; From 6e365892bef6114f0071e77f762c67c311d674f7 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:56:30 +1300 Subject: [PATCH 009/113] moved dealer buttons from Game to Table, added helper for isPlayer isDealer --- src/components/Game/Game.tsx | 25 +++---------------------- src/components/Table/Table.tsx | 34 ++++++++++++++++++++++++++-------- src/lib/helper.ts | 9 +++++++++ 3 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 src/lib/helper.ts diff --git a/src/components/Game/Game.tsx b/src/components/Game/Game.tsx index 444660b0..1ba8d3cf 100644 --- a/src/components/Game/Game.tsx +++ b/src/components/Game/Game.tsx @@ -1,10 +1,8 @@ import { useContext } from "react"; import WebSocket from "./WebSocket"; import { DispatchContext, StateContext } from "../../store/context"; -import { Button } from "../Controls"; -import { sendMessage } from "../../store/actions"; import { IState } from "../../store/types"; -import { GameWrapper, DealerContainer } from "./assets/style"; +import { isDealer, isPlayer } from "../../lib/helper"; // This component is responsible for the WebSocket connections, as well as displaying the main Start button @@ -19,26 +17,9 @@ const Game: React.FunctionComponent = () => { const SOCKET_URL_DCV = `ws://${nodes.dcv}:9000`; const SOCKET_URL_PLAYER1 = `ws://${[Object.values(nodes)[0]]}:9000`; - const startGame = () => (): void => { - sendMessage({ method: "game" }, "dcv", state, dispatch); - }; - - const resetGame = () => (): void => { - sendMessage({ method: "reset" }, "dcv", state, dispatch); - }; - return (
- - {nodeType === "dealer" && ( - -
); }; From ed8a8300a97ec3d714d9ee333c09de76f53e6734 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Fri, 16 Oct 2020 19:09:20 +1300 Subject: [PATCH 053/113] styled form errors --- src/components/Cashier/Withdraw.tsx | 29 +++++++++++++++---------- src/components/Cashier/assets/style.css | 2 +- src/components/Cashier/assets/style.js | 3 ++- src/components/Form/assets/style.css | 2 +- src/components/Form/assets/style.js | 4 ++-- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 6467d8db..1d230f21 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -37,6 +37,7 @@ const Withdraw: React.FunctionComponent = ({ const [amountToWithdraw, setAmountToWithdraw] = useState(0); const [difference, setDifference] = useState(0); + const [addressError, setAddressError] = useState(" "); const [withdrawAddress, setWithdrawAddress] = useState(""); const [withdrawStatus, setWithdrawStatus] = useState(Status.Initial); @@ -54,7 +55,7 @@ const Withdraw: React.FunctionComponent = ({ setAmountToWithdraw(Number(amount)); } const diff: number = Number(amount) - Number(state.transactionFee); - setDifference(displayBalanceDecimals(diff)); + setDifference(Number(displayBalanceDecimals(diff))); }; // Handle focusing out from the input component @@ -68,12 +69,18 @@ const Withdraw: React.FunctionComponent = ({ // Handle address input const handleAddressInput = () => (e): void => { - const addr = e.target.value; - if (isValidAddress(addr)) { - setWithdrawAddress(addr); + if(addressError) { + setAddressError(" "); } + setWithdrawAddress(e.target.value); }; + const onAddressBlur = () => (e): void => { + if(!isValidAddress(e.target.value)) { + setAddressError('The specified address is invalid.'); + } + } + const setMaxAmount = () => (): void => setAmountToWithdraw(balanceNumber); return ( @@ -104,22 +111,24 @@ const Withdraw: React.FunctionComponent = ({ type="number" value={amountToWithdraw} /> - - {errors["withdraw-amount"] && "Please set a withdaw amount"} - + + {addressError} + {errors["withdraw-amount"] && "Please set a withdaw amount"} +
Fee
@@ -130,10 +139,6 @@ const Withdraw: React.FunctionComponent = ({
{difference} CHIPS
- - {errors["withdraw-address-list"] && - "Please select a withdraw address"} - )} diff --git a/src/components/Cashier/assets/style.css b/src/components/Cashier/assets/style.css index 0f3f2024..c9eb93f3 100644 --- a/src/components/Cashier/assets/style.css +++ b/src/components/Cashier/assets/style.css @@ -15,5 +15,5 @@ } #cashierInfo { - padding: 0 0 0 1rem; + padding: 0.5rem 0.5rem 0 0.5rem; } \ No newline at end of file diff --git a/src/components/Cashier/assets/style.js b/src/components/Cashier/assets/style.js index 46e06cde..07dcd85f 100644 --- a/src/components/Cashier/assets/style.js +++ b/src/components/Cashier/assets/style.js @@ -45,8 +45,9 @@ export const CashierButton = styled.div` /** WITHDRAW */ export const ErrorMessage = styled.div` - color: var(--color-accent); + color: var(--color-danger); font-size: var(--font-size-xs); + height: 1rem; `; export const InputWrapper = styled.div` diff --git a/src/components/Form/assets/style.css b/src/components/Form/assets/style.css index 29f804aa..f9b38fff 100644 --- a/src/components/Form/assets/style.css +++ b/src/components/Form/assets/style.css @@ -12,5 +12,5 @@ label { text-align: center; width: 100%; justify-content: space-between; - margin: 1rem 0 0 0.5rem; + margin: 0.5rem 0 0 0; } \ No newline at end of file diff --git a/src/components/Form/assets/style.js b/src/components/Form/assets/style.js index 695ec60e..d0e7afc6 100644 --- a/src/components/Form/assets/style.js +++ b/src/components/Form/assets/style.js @@ -44,7 +44,7 @@ export const inputStyle = css` `; export const InputWrapper = styled.div` - padding: 0 0.5rem 0.5rem 0.5rem; + padding: 0.5rem 0 0 0; `; /** Input with Button */ @@ -59,7 +59,7 @@ export const customButtonStyle = css` position: absolute; height: 1.25rem; width: 2rem; - top: 1.5rem; + top: 2rem; right: 0.5rem; `; From f6dfaaec400fcfebf34d95f18963109e509503c1 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Fri, 16 Oct 2020 19:10:40 +1300 Subject: [PATCH 054/113] reset the withdraw amount to max balance --- src/components/Cashier/Withdraw.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 1d230f21..bb59a9c7 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -64,22 +64,22 @@ const Withdraw: React.FunctionComponent = ({ setAmountToWithdraw(displayBalanceDecimals(amountToWithdraw)); // Reset the input field to the max amount (i.e. the balance) when focus changes - // if (e.target.value > balanceNumber) setAmountToWithdraw(balanceNumber); + if (e.target.value > balanceNumber) setAmountToWithdraw(balanceNumber); }; // Handle address input const handleAddressInput = () => (e): void => { - if(addressError) { + if (addressError) { setAddressError(" "); } setWithdrawAddress(e.target.value); }; const onAddressBlur = () => (e): void => { - if(!isValidAddress(e.target.value)) { - setAddressError('The specified address is invalid.'); + if (!isValidAddress(e.target.value)) { + setAddressError("The specified address is invalid."); } - } + }; const setMaxAmount = () => (): void => setAmountToWithdraw(balanceNumber); From 5ef41696b2a4188a77e59b1ea3943c33b5e76230 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Fri, 16 Oct 2020 19:13:03 +1300 Subject: [PATCH 055/113] setting Difference to 0 when withdraw amount is more than balance --- src/components/Cashier/Withdraw.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index bb59a9c7..5c82f79c 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -64,7 +64,10 @@ const Withdraw: React.FunctionComponent = ({ setAmountToWithdraw(displayBalanceDecimals(amountToWithdraw)); // Reset the input field to the max amount (i.e. the balance) when focus changes - if (e.target.value > balanceNumber) setAmountToWithdraw(balanceNumber); + if (e.target.value > balanceNumber) { + setAmountToWithdraw(balanceNumber); + setDifference(0); + } }; // Handle address input From 348ed1d6c9eb76349735a99bbc77e68bc96ab7ba Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Fri, 16 Oct 2020 19:19:29 +1300 Subject: [PATCH 056/113] lint --- src/components/Cashier/Cashier.tsx | 1 - src/components/Cashier/Withdraw.tsx | 7 +++---- src/components/Form/Dropdown.tsx | 1 - src/lib/playerIdDecoder.ts | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/components/Cashier/Cashier.tsx b/src/components/Cashier/Cashier.tsx index 58a3953a..0a6c5dae 100644 --- a/src/components/Cashier/Cashier.tsx +++ b/src/components/Cashier/Cashier.tsx @@ -6,7 +6,6 @@ import { Button } from "../Controls"; import { updateStateValue } from "../../store/actions"; import { IState } from "../../store/types"; import { CashierButton } from "./assets/style"; -import { Node } from "../../lib/constants"; // This modal opens up when the player clicks the Cashier button and allows the player to // move funds to and away from the account diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 5c82f79c..d9d6e207 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -1,11 +1,10 @@ -import React, { useState, useEffect, forwardRef } from "react"; +import React, { useState } from "react"; import { css } from "@emotion/core"; import { useForm } from "react-hook-form"; import balanceWithDecimals from "../../lib/balanceWithDecimals"; import isValidAddress from "../../lib/isValidAddress"; -import { ModalButtonsWrapper } from "../Modal/assets/style"; import { Button } from "../Controls"; -import { Dropdown, Input } from "../Form"; +import { Input } from "../Form"; import InputWithButton from "../Form/InputWIthButton"; import "../../styles/tooltip.css"; import "./assets/style.css"; @@ -25,7 +24,7 @@ const Withdraw: React.FunctionComponent = ({ state, closeCashierModal }) => { - const { balance, withdrawAddressList } = state; + const { balance } = state; const balanceNumber = Number(balance); enum Status { diff --git a/src/components/Form/Dropdown.tsx b/src/components/Form/Dropdown.tsx index e4240586..54197a74 100644 --- a/src/components/Form/Dropdown.tsx +++ b/src/components/Form/Dropdown.tsx @@ -1,6 +1,5 @@ import React from "react"; import { DropdownWrapper, dropdownStyle } from "./assets/style"; -import Label from "./Label"; interface IProps { forwardRef?: (ref: object) => void; diff --git a/src/lib/playerIdDecoder.ts b/src/lib/playerIdDecoder.ts index 59be9cc9..4c1c32a0 100644 --- a/src/lib/playerIdDecoder.ts +++ b/src/lib/playerIdDecoder.ts @@ -1,7 +1,7 @@ export const getStringId = (id: number): string => "player".concat(id.toString()); -export const validID = (min: number, max: number, id: number) => +export const validID = (min: number, max: number, id: number): boolean => typeof id === "number" && id <= max && id >= min && id % 1 === 0; export const validBEid = (id: number): boolean => validID(0, 8, id); From 692ed8aaf4e9d1182c2ddafbcd2cd72e664636ca Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Fri, 16 Oct 2020 19:26:28 +1300 Subject: [PATCH 057/113] test changes --- src/components/Cashier/Withdraw.tsx | 2 +- .../Cashier/__tests__/Deposit.test.js | 2 +- .../Cashier/__tests__/Withdraw.test.js | 32 +++++-------------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index d9d6e207..760f060f 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -116,7 +116,7 @@ const Withdraw: React.FunctionComponent = ({ { expect( wrapper.find(`div[data-test="balance-cashier-deposit"]`).text() - ).toBe("Available CHIPS: 8.00000000"); + ).toBe("Available: 8.00000000 CHIPS"); }); test("displays correct deposit address", () => { diff --git a/src/components/Cashier/__tests__/Withdraw.test.js b/src/components/Cashier/__tests__/Withdraw.test.js index e13ce01b..8b33dc46 100644 --- a/src/components/Cashier/__tests__/Withdraw.test.js +++ b/src/components/Cashier/__tests__/Withdraw.test.js @@ -60,7 +60,7 @@ describe("Withdraw", () => { expect(wrapper.find(`div[data-test="withdraw-balance"]`)).toHaveLength(1); expect(wrapper.find(`div[data-test="withdraw-balance"]`).text()).toBe( - "Available CHIPS: 9.00000000" + "Available: 9.00000000 CHIPS" ); }); @@ -69,7 +69,7 @@ describe("Withdraw", () => { expect(wrapper.find(`div[data-test="withdraw-balance"]`)).toHaveLength(1); expect(wrapper.find(`div[data-test="withdraw-balance"]`).text()).toBe( - "Available CHIPS: 9.00000000" + "Available: 9.00000000 CHIPS" ); }); @@ -91,19 +91,6 @@ describe("Withdraw", () => { ); }); - test("displays the address selector", () => { - const withdrawAddressList = [ - "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", - "1XPTgDRhN8RFnzniWCddobD9iKZatrvH4" - ]; - const wrapper = createWrapper({ withdrawAddressList }); - - expect(wrapper.find(`[data-test="withdraw-address-list"]`)).toHaveLength(1); - expect( - wrapper.find(`[data-test="withdraw-address-list"]`).props().options - ).toEqual(withdrawAddressList); - }); - test("Closes the cashier modal when clicking close button", () => { const wrapper = createWrapper(); @@ -124,17 +111,14 @@ describe("Withdraw", () => { }); test("Withdraw button is enabled when amount and withdraw address are set", () => { - const wrapper = createWrapper({ - withdrawAddressList: [ - "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", - "1XPTgDRhN8RFnzniWCddobD9iKZatrvH4" - ] - }); + const wrapper = createWrapper(); wrapper.find(`input#withdraw-amount`).simulate("change"); - expect( - wrapper.find(`Button[data-test="withdraw-button"]`).props()["disabled"] - ).toBe(false); + wrapper.find(`input#withdraw-address`).simulate("change"); + //@TODO FIX + // expect( + // wrapper.find(`Button[data-test="withdraw-button"]`).props()["disabled"] + // ).toBe(false); }); test("Amount can't be set to be more than the balance ", () => { From 87c0246d8c4c1d5e0c7a00a46b926bf7a67f4eea Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 16 Oct 2020 15:10:20 +0000 Subject: [PATCH 058/113] Update dependency eslint-config-prettier to v6.13.0 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf85208f..a9cd820c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10439,9 +10439,9 @@ } }, "eslint-config-prettier": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.12.0.tgz", - "integrity": "sha512-9jWPlFlgNwRUYVoujvWTQ1aMO8o6648r+K7qU7K5Jmkbyqav1fuEZC0COYpGBxyiAJb65Ra9hrmFx19xRGwXWw==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.13.0.tgz", + "integrity": "sha512-LcT0i0LSmnzqK2t764pyIt7kKH2AuuqKRTtJTdddWxOiUja9HdG5GXBVF2gmCTvVYWVsTu8J2MhJLVGRh+pj8w==", "dev": true, "requires": { "get-stdin": "^6.0.0" diff --git a/package.json b/package.json index 56e2f167..9f420fbe 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "enzyme-adapter-react-16": "1.15.5", "eslint": "6.8.0", "eslint-config-airbnb": "18.2.0", - "eslint-config-prettier": "6.12.0", + "eslint-config-prettier": "6.13.0", "eslint-config-wesbos": "0.0.23", "eslint-plugin-html": "6.1.0", "eslint-plugin-import": "2.22.1", From a8246315f937db9b21e5a37057d32d58a4e3847b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 16 Oct 2020 18:59:52 +0000 Subject: [PATCH 059/113] Update dependency @types/react to v16.9.53 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf85208f..f0a63a36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5701,9 +5701,9 @@ } }, "@types/react": { - "version": "16.9.52", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.52.tgz", - "integrity": "sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q==", + "version": "16.9.53", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", + "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index 56e2f167..3596df97 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "@types/parcel-bundler": "1.12.1", "@types/prettier": "1.19.0", "@types/rc-slider": "8.6.6", - "@types/react": "16.9.52", + "@types/react": "16.9.53", "@types/react-dom": "16.9.8", "@types/react-tabs": "2.3.2", "@types/react-test-renderer": "16.9.3", From e80a461fe3ac2da6e1f4d2818275247b88cc0395 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 16 Oct 2020 22:26:15 +0000 Subject: [PATCH 060/113] Update dependency @babel/core to v7.12.3 --- package-lock.json | 20 ++++++++++---------- package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index bf85208f..4c2d3a4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,15 +25,15 @@ "dev": true }, "@babel/core": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.1.tgz", - "integrity": "sha512-6bGmltqzIJrinwRRdczQsMhruSi9Sqty9Te+/5hudn4Izx/JYRhW1QELpR+CIL0gC/c9A7WroH6FmkDGxmWx3w==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.1", "@babel/helper-module-transforms": "^7.12.1", "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.1", + "@babel/parser": "^7.12.3", "@babel/template": "^7.10.4", "@babel/traverse": "^7.12.1", "@babel/types": "^7.12.1", @@ -102,9 +102,9 @@ } }, "@babel/parser": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.1.tgz", - "integrity": "sha512-xjZsx0sBjb6J2+QkoHI69UeD2EWbsyUW0WyZKOoJ9sBrQLxfOApWEefR9dIVOYJVj97VRXnLKLDvnn3dPDNgww==" + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" }, "@babel/template": { "version": "7.10.4", @@ -1275,9 +1275,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.1.tgz", - "integrity": "sha512-xjZsx0sBjb6J2+QkoHI69UeD2EWbsyUW0WyZKOoJ9sBrQLxfOApWEefR9dIVOYJVj97VRXnLKLDvnn3dPDNgww==" + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" } } }, diff --git a/package.json b/package.json index 56e2f167..49f45a38 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "wait-on": "4.0.2" }, "devDependencies": { - "@babel/core": "7.12.1", + "@babel/core": "7.12.3", "@babel/plugin-proposal-object-rest-spread": "7.12.1", "@babel/plugin-transform-typescript": "7.12.1", "@babel/preset-env": "7.12.1", From 39af0c8df418dfd7ac183bb2c98ec2f5db23bfe4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 20 Oct 2020 01:53:57 +0000 Subject: [PATCH 061/113] Update dependency electron to v10 --- package-lock.json | 23 +++-------------------- package.json | 2 +- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2230808a..f955903d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9381,9 +9381,9 @@ } }, "electron": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-8.5.2.tgz", - "integrity": "sha512-VU+zZnmCzxoZ5UfBg2UGVm+nyxlNlQOQkotMLfk7FCtnkIOhX+sosl618OCxUWjOvPc+Mpg5MEkEmxPU5ziW4Q==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/electron/-/electron-10.1.4.tgz", + "integrity": "sha512-5wiiGsif8jd1lS3Qhe9j8oQvUMnoWCvqBwYzzn+BGXGDq8aN8oTdM+j/2NY35Ktt3JrJdjKWcu9b7pDo8kNjbw==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -11264,23 +11264,6 @@ "debug": "^2.6.9", "mkdirp": "^0.5.4", "yauzl": "^2.10.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } } }, "extsprintf": { diff --git a/package.json b/package.json index 33673a07..b4cf3da7 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "babel-plugin-emotion": "10.0.33", "babel-plugin-jsx-pragmatic": "1.0.2", "babel-plugin-transform-inline-environment-variables": "0.4.3", - "electron": "8.5.2", + "electron": "10.1.4", "electron-builder": "22.9.1", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.5", From a46d12081835626e5af1db45c4003a9443d13b90 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 20 Oct 2020 01:55:10 +0000 Subject: [PATCH 062/113] Update dependency eslint-config-wesbos to v1 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2230808a..b73737c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10448,9 +10448,9 @@ } }, "eslint-config-wesbos": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/eslint-config-wesbos/-/eslint-config-wesbos-0.0.23.tgz", - "integrity": "sha512-7z6GHP/gnp00cB0iZg06SoubyJYWd0fHiJIEimxsTiA3xm53myonNvj0sefTxRTmcWr1y0i3bbRK5k/69B9ysA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-wesbos/-/eslint-config-wesbos-1.0.1.tgz", + "integrity": "sha512-CHlJ/B2hrVsfRm3OaRH+UFD6DINV4SzFtPODzMw1y7VH5bPZqlvndcqKRnicEK9bmu2U3AT43XWU2QT2vBRDFg==", "dev": true }, "eslint-import-resolver-node": { diff --git a/package.json b/package.json index 33673a07..01a188a1 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,7 @@ "eslint": "6.8.0", "eslint-config-airbnb": "18.2.0", "eslint-config-prettier": "6.13.0", - "eslint-config-wesbos": "0.0.23", + "eslint-config-wesbos": "1.0.1", "eslint-plugin-html": "6.1.0", "eslint-plugin-import": "2.22.1", "eslint-plugin-jsx-a11y": "6.3.1", From 0679d9259b2c1ad8062ccc6ec9d0f253ed202ef4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 20 Oct 2020 05:17:07 +0000 Subject: [PATCH 063/113] Update dependency eslint-plugin-react to v7.21.5 --- package-lock.json | 24 +++++++++++++++++------- package.json | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2230808a..6325943f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10767,9 +10767,9 @@ } }, "eslint-plugin-react": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", - "integrity": "sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", "dev": true, "requires": { "array-includes": "^3.1.1", @@ -10781,7 +10781,7 @@ "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.17.0", + "resolve": "^1.18.1", "string.prototype.matchall": "^4.0.2" }, "dependencies": { @@ -10898,11 +10898,12 @@ } }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", "dev": true, "requires": { + "is-core-module": "^2.0.0", "path-parse": "^1.0.6" } } @@ -13304,6 +13305,15 @@ "rgba-regex": "^1.0.0" } }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", diff --git a/package.json b/package.json index 33673a07..12cae58d 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "eslint-plugin-import": "2.22.1", "eslint-plugin-jsx-a11y": "6.3.1", "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-react": "7.21.4", + "eslint-plugin-react": "7.21.5", "eslint-plugin-react-hooks": "3.0.0", "husky": "4.3.0", "jest": "25.5.4", From 3e7842ff0d5be74081cb6c6f09c26504be9cc7bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 20 Oct 2020 07:31:31 +0000 Subject: [PATCH 064/113] Update dependency @types/jest to v26 --- package-lock.json | 102 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 62 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2230808a..b03c7922 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5587,13 +5587,13 @@ } }, "@types/jest": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-25.2.3.tgz", - "integrity": "sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==", + "version": "26.0.15", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", + "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", "dev": true, "requires": { - "jest-diff": "^25.2.1", - "pretty-format": "^25.2.1" + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, "@types/jsdom": { @@ -14533,31 +14533,30 @@ } }, "jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.0.tgz", + "integrity": "sha512-IH09rKsdWY8YEY7ii2BHlSq59oXyF2pK3GoK+hOK9eD/x6009eNB5Jv1shLMKgxekodPzLlV7eZP1jPFQYds8w==", "dev": true, "requires": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" + "chalk": "^4.0.0", + "diff-sequences": "^26.5.0", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.0" }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -14579,16 +14578,28 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.5.0.tgz", + "integrity": "sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -20458,27 +20469,37 @@ } }, "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.0.tgz", + "integrity": "sha512-Uumr9URVB7bm6SbaByXtx+zGlS+0loDkFMHP0kHahMjmfCtmFY03iqd++5v3Ld6iB5TocVXlBN/T+DXMn9d4BA==", "dev": true, "requires": { - "@jest/types": "^25.5.0", + "@jest/types": "^26.6.0", "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^16.12.0" }, "dependencies": { "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "version": "26.6.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.0.tgz", + "integrity": "sha512-8pDeq/JVyAYw7jBGU83v8RMYAkdrRxLG3BGnAJuqaQAUd6GWBmND2uyl+awI88+hit48suLoLjNFtR+ZXxWaYg==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "chalk": "^4.0.0" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" } }, "ansi-regex": { @@ -20488,19 +20509,18 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -20535,9 +20555,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" diff --git a/package.json b/package.json index 33673a07..7dda816d 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "@types/enzyme-adapter-react-16": "1.0.6", "@types/eslint": "6.8.1", "@types/eslint-plugin-prettier": "3.1.0", - "@types/jest": "25.2.3", + "@types/jest": "26.0.15", "@types/jsdom": "16.2.4", "@types/jsdom-global": "3.0.2", "@types/parcel-bundler": "1.12.1", From d535af184b8e5db4bf4289927d97c591adcc8c8a Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 21 Oct 2020 12:43:37 +1300 Subject: [PATCH 065/113] minor style adjustments, text color change, margins --- src/components/Cashier/assets/style.css | 7 +++++++ src/components/Form/assets/style.js | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/Cashier/assets/style.css b/src/components/Cashier/assets/style.css index c9eb93f3..d4bc2e19 100644 --- a/src/components/Cashier/assets/style.css +++ b/src/components/Cashier/assets/style.css @@ -10,6 +10,13 @@ margin: 0 } +.infoLine h5 { + opacity: 0.5; + font-size: var(--font-size-s); + font-weight: 400; + margin-top: 3px; +} + .infoLine div { color: var(--color-chipsTealLight) } diff --git a/src/components/Form/assets/style.js b/src/components/Form/assets/style.js index d0e7afc6..0a8f6d2a 100644 --- a/src/components/Form/assets/style.js +++ b/src/components/Form/assets/style.js @@ -53,13 +53,14 @@ export const customInputStyle = css` max-width: 19rem; background-color: black; font-size: var(--font-size-s); + margin-top: 5px; `; export const customButtonStyle = css` position: absolute; height: 1.25rem; width: 2rem; - top: 2rem; + top: 1.85rem; right: 0.5rem; `; From 6545b5913cfe211c20aa0cdf3b96deafe3093c19 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 21 Oct 2020 13:47:05 +1300 Subject: [PATCH 066/113] refactored Withdraw component and the corresponding libs --- src/components/Cashier/Withdraw.tsx | 76 ++++++++++++------------- src/components/Cashier/helpers/index.ts | 5 +- src/lib/balanceWithDecimals.ts | 5 +- src/lib/constants.ts | 7 +++ 4 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 760f060f..c670d86f 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -1,79 +1,79 @@ import React, { useState } from "react"; -import { css } from "@emotion/core"; import { useForm } from "react-hook-form"; -import balanceWithDecimals from "../../lib/balanceWithDecimals"; + import isValidAddress from "../../lib/isValidAddress"; +import displayBalanceDecimals from "../../lib/balanceWithDecimals"; +import { getTotal, inputIsValid } from "./helpers"; +import { IBalance, IProps } from "./types"; +import { Status } from "../../lib/constants"; + +import { css } from "@emotion/core"; import { Button } from "../Controls"; import { Input } from "../Form"; import InputWithButton from "../Form/InputWIthButton"; import "../../styles/tooltip.css"; import "./assets/style.css"; -import displayBalanceDecimals from "../../lib/balanceWithDecimals"; - import { Balance, ErrorMessage, InputWrapper, SuccessMessage } from "./assets/style"; -import { inputIsValid } from "./helpers"; -import { IBalance, IProps } from "./types"; import { customInputStyle, customLabelStyle } from "../Form/assets/style"; const Withdraw: React.FunctionComponent = ({ state, closeCashierModal }) => { - const { balance } = state; - const balanceNumber = Number(balance); - - enum Status { - Initial, - Processing, - Success, - Error - } - + const { balance, transactionFee } = state; const [amountToWithdraw, setAmountToWithdraw] = useState(0); const [difference, setDifference] = useState(0); const [addressError, setAddressError] = useState(" "); const [withdrawAddress, setWithdrawAddress] = useState(""); const [withdrawStatus, setWithdrawStatus] = useState(Status.Initial); - // Form handling const { register, handleSubmit, errors } = useForm(); + + const setWithdrawAmount = (amount: string | number): void => + setAmountToWithdraw(displayBalanceDecimals(amount)); + + const setDifferenceAmount = (amount: string | number): void => + setDifference( + Number(displayBalanceDecimals(getTotal(amount, transactionFee))) + ); + + const setAmount = (amount: string | number): void => { + setWithdrawAmount(amount); + setDifferenceAmount(amount); + }; + + const setMaxAmount = () => (): void => setAmount(balance); + + /****** HANDLERS ******/ + const onSubmit = (): void => { // TODO: Add withdraw message to dcv setWithdrawStatus(Status.Success); }; - // Handle Amount Input const handleAmountInput = () => (e): void => { - const amount: string = e.target.value; - if (inputIsValid(amount)) { - setAmountToWithdraw(Number(amount)); + if (inputIsValid(e.target.value)) { + setAmount(e.target.value); } - const diff: number = Number(amount) - Number(state.transactionFee); - setDifference(Number(displayBalanceDecimals(diff))); }; - // Handle focusing out from the input component const handleOnBlur = () => (e): void => { - // Convert the amount to 8 decimals when the focus changes - setAmountToWithdraw(displayBalanceDecimals(amountToWithdraw)); - - // Reset the input field to the max amount (i.e. the balance) when focus changes - if (e.target.value > balanceNumber) { - setAmountToWithdraw(balanceNumber); - setDifference(0); + if (e.target.value > balance) { + setWithdrawAmount(balance); + setDifferenceAmount(0); + return; } + setWithdrawAmount(e.target.value); }; // Handle address input const handleAddressInput = () => (e): void => { - if (addressError) { - setAddressError(" "); - } + setAddressError(" "); setWithdrawAddress(e.target.value); }; @@ -83,8 +83,6 @@ const Withdraw: React.FunctionComponent = ({ } }; - const setMaxAmount = () => (): void => setAmountToWithdraw(balanceNumber); - return (
{withdrawStatus === Status.Success ? ( @@ -95,7 +93,7 @@ const Withdraw: React.FunctionComponent = ({ ) : ( - Available: {balanceWithDecimals(balanceNumber)} CHIPS + Available: {displayBalanceDecimals(balance)} CHIPS = ({ handleButtonClick={setMaxAmount()} label="Enter amount" min={0} - max={balanceNumber} + max={balance} name="withdraw-amount" onChange={handleAmountInput()} onBlur={handleOnBlur()} @@ -134,7 +132,7 @@ const Withdraw: React.FunctionComponent = ({
Fee
-
{displayBalanceDecimals(state.transactionFee)} CHIPS
+
{displayBalanceDecimals(transactionFee)} CHIPS
Total
diff --git a/src/components/Cashier/helpers/index.ts b/src/components/Cashier/helpers/index.ts index 5edc647e..c17bac84 100644 --- a/src/components/Cashier/helpers/index.ts +++ b/src/components/Cashier/helpers/index.ts @@ -1,3 +1,6 @@ -export const inputIsValid = (val: string) => (): boolean => +export const inputIsValid = (val: string): boolean => // Limit input to 8 decimal points maximum /^[0-9]|[0-9]+(\.[0-9]{1,8})$/g.test(val); + +export const getTotal = (amount: string | number, fee: number): number => + Number(amount) - fee; diff --git a/src/lib/balanceWithDecimals.ts b/src/lib/balanceWithDecimals.ts index f152f30a..4f5812a3 100644 --- a/src/lib/balanceWithDecimals.ts +++ b/src/lib/balanceWithDecimals.ts @@ -1,7 +1,8 @@ -// Displays the balance with 8 decimals +const DECIMALS = 8; +const COEF = Math.pow(10, DECIMALS); const displayBalanceDecimals = (balance: number | string): string => { - return (Math.round(Number(balance) * 100000000) / 100000000).toFixed(8); + return (Math.round(Number(balance) * COEF) / COEF).toFixed(DECIMALS); }; export default displayBalanceDecimals; diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2115d7c9..bd10a101 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -60,3 +60,10 @@ export enum NodeType { dealer = "dealer", player = "player" } + +export enum Status { + Initial, + Processing, + Success, + Error +} From 94fb12f081b78c8434acf59352f8ddbafe0fd06f Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 21 Oct 2020 14:31:13 +1300 Subject: [PATCH 067/113] test updates --- .../Cashier/__tests__/Withdraw.test.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/components/Cashier/__tests__/Withdraw.test.js b/src/components/Cashier/__tests__/Withdraw.test.js index 8b33dc46..11fef8bd 100644 --- a/src/components/Cashier/__tests__/Withdraw.test.js +++ b/src/components/Cashier/__tests__/Withdraw.test.js @@ -2,7 +2,7 @@ import React from "react"; import { mount } from "enzyme"; import Withdraw from "../Withdraw"; import { StateContext, DispatchContext } from "../../../store/context"; -import initialState from "../../../store/initialState"; +import initialState from "../../../store/testState"; const dispatch = jest.fn(); const closeCashierModal = jest.fn(); @@ -87,7 +87,7 @@ describe("Withdraw", () => { expect(wrapper.find(`InputWithButton Button`)).toHaveLength(1); wrapper.find(`InputWithButton Button`).simulate("click"); expect(wrapper.find(`InputWithButton input`).props().value).toEqual( - balance + "" + balance ); }); @@ -112,22 +112,21 @@ describe("Withdraw", () => { test("Withdraw button is enabled when amount and withdraw address are set", () => { const wrapper = createWrapper(); - wrapper.find(`input#withdraw-amount`).simulate("change"); - wrapper.find(`input#withdraw-address`).simulate("change"); - //@TODO FIX - // expect( - // wrapper.find(`Button[data-test="withdraw-button"]`).props()["disabled"] - // ).toBe(false); + wrapper.find(`input#withdraw-address`).simulate("change", { target: { value: "RMwqv9VNBu7wjrEvQtMrDD7c6ddogyStBG" } }); + expect( + wrapper.find(`Button[data-test="withdraw-button"]`).props()["disabled"] + ).toBe(false); }); test("Amount can't be set to be more than the balance ", () => { + const value = "1.00000000"; const wrapper = createWrapper({ balance: 1 }); wrapper .find(`input#withdraw-amount`) .simulate("change", { target: { value: 2 } }); wrapper.find(`input#withdraw-amount`).simulate("blur"); - expect(wrapper.find(`input#withdraw-amount`).props().value).toBe(1); + expect(wrapper.find(`input#withdraw-amount`).props().value).toBe(value); }); }); From d95ba6c36ec61a0f3b902c62813c7a712a8da59b Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 21 Oct 2020 14:31:57 +1300 Subject: [PATCH 068/113] lint --- src/components/Cashier/Withdraw.tsx | 2 +- src/components/Cashier/__tests__/Withdraw.test.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index c670d86f..b58f0ca9 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -112,9 +112,9 @@ const Withdraw: React.FunctionComponent = ({ value={amountToWithdraw} /> { test("Withdraw button is enabled when amount and withdraw address are set", () => { const wrapper = createWrapper(); wrapper.find(`input#withdraw-amount`).simulate("change"); - wrapper.find(`input#withdraw-address`).simulate("change", { target: { value: "RMwqv9VNBu7wjrEvQtMrDD7c6ddogyStBG" } }); + wrapper.find(`input#withdraw-address`).simulate("change", { + target: { value: "RMwqv9VNBu7wjrEvQtMrDD7c6ddogyStBG" } + }); expect( wrapper.find(`Button[data-test="withdraw-button"]`).props()["disabled"] ).toBe(false); From 51f5f4de36bf661b4d0f06fd5a8e977d4d1d7120 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 21 Oct 2020 14:45:40 +1300 Subject: [PATCH 069/113] changed px to rem --- src/components/Cashier/assets/style.css | 2 +- src/components/Form/assets/style.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Cashier/assets/style.css b/src/components/Cashier/assets/style.css index d4bc2e19..3b24e2b3 100644 --- a/src/components/Cashier/assets/style.css +++ b/src/components/Cashier/assets/style.css @@ -14,7 +14,7 @@ opacity: 0.5; font-size: var(--font-size-s); font-weight: 400; - margin-top: 3px; + margin-top: 0.25rem; } .infoLine div { diff --git a/src/components/Form/assets/style.js b/src/components/Form/assets/style.js index 0a8f6d2a..3b57ee3d 100644 --- a/src/components/Form/assets/style.js +++ b/src/components/Form/assets/style.js @@ -15,7 +15,7 @@ export const dropdownStyle = css` background-position: right 0.5rem center; padding: 0.5rem 2rem 0.5rem 1rem; font-size: 0.75rem; - margin-top: 5px; + margin-top: 0.25rem; `; /** Input */ @@ -53,7 +53,7 @@ export const customInputStyle = css` max-width: 19rem; background-color: black; font-size: var(--font-size-s); - margin-top: 5px; + margin-top: 0.25rem; `; export const customButtonStyle = css` From dd2039a02fa43dc9ac3fceb90ccc88ff0f26f623 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 12 Oct 2020 16:47:25 +0000 Subject: [PATCH 070/113] Update dependency electron-builder to v22.9.1 --- package-lock.json | 225 ++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 87 insertions(+), 140 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2b97a7ea..5cea24d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3573,9 +3573,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", - "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -5649,9 +5649,9 @@ } }, "@types/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-B42Sxuaz09MhC3DDeW5kubRcQ5by4iuVQ0cRRWM2lggLzAa/KVom0Aft/208NgMvNQQZ86s5rVcqDdn/SH0/mg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.2.tgz", + "integrity": "sha512-jp0RI6xfZpi5JL8v7WQwpBEQTq63RqW2kxwTZt+m27LcJqQdPVU1yGnT1ZI4EtCDynQQJtIGyQahkiCGCS7e+A==", "dev": true, "requires": { "@types/node": "*" @@ -6256,21 +6256,21 @@ "dev": true }, "app-builder-lib": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.8.1.tgz", - "integrity": "sha512-D/ac1+vuGIAAwEeTtXl8b+qWl7Gz/IQatFyzYl2ocag/7N8LqUjKzZFJJISQPWt6PFDPDH0oCj8/GMh63aV0yw==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.9.1.tgz", + "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", "dev": true, "requires": { "7zip-bin": "~5.0.3", "@develar/schema-utils": "~2.6.5", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.8.1", + "builder-util": "22.9.1", "builder-util-runtime": "8.7.2", "chromium-pickle-js": "^0.2.0", - "debug": "^4.2.0", - "ejs": "^3.1.3", - "electron-publish": "22.8.1", + "debug": "^4.3.0", + "ejs": "^3.1.5", + "electron-publish": "22.9.1", "fs-extra": "^9.0.1", "hosted-git-info": "^3.0.5", "is-ci": "^2.0.0", @@ -6286,9 +6286,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", + "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", "dev": true, "requires": { "ms": "2.1.2" @@ -7509,12 +7509,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -7803,9 +7802,9 @@ "dev": true }, "builder-util": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.8.1.tgz", - "integrity": "sha512-LZG+E1xszMdut5hL5h7RkJQ7yOsQqdhJYgn1wvOP7MmF3MoUPRNDiRodLpYiWlaqZmgYhcfaipR/Mb8F/RqK8w==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.9.1.tgz", + "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", "dev": true, "requires": { "7zip-bin": "~5.0.3", @@ -7815,7 +7814,7 @@ "bluebird-lst": "^1.0.9", "builder-util-runtime": "8.7.2", "chalk": "^4.1.0", - "debug": "^4.2.0", + "debug": "^4.3.0", "fs-extra": "^9.0.1", "is-ci": "^2.0.0", "js-yaml": "^3.14.0", @@ -7825,12 +7824,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -7860,9 +7858,9 @@ "dev": true }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.0.tgz", + "integrity": "sha512-jjO6JD2rKfiZQnBoRzhRTbXjHLGLfH+UtGkWLc/UXAh/rzZMyjbgn0NcfFpqT8nd1kTtFnDiJcrIFkq4UKeJVg==", "dev": true, "requires": { "ms": "2.1.2" @@ -9301,13 +9299,13 @@ "dev": true }, "dmg-builder": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.8.1.tgz", - "integrity": "sha512-WeGom1moM00gBII6swljl4DQGrlJuEivoUhOmh8U9p1ALgeJL+EiTHbZFERlj8Ejy62xUUjURV+liOxUKmJFWg==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.9.1.tgz", + "integrity": "sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ==", "dev": true, "requires": { - "app-builder-lib": "22.8.1", - "builder-util": "22.8.1", + "app-builder-lib": "22.9.1", + "builder-util": "22.9.1", "fs-extra": "^9.0.1", "iconv-lite": "^0.6.2", "js-yaml": "^3.14.0", @@ -9495,31 +9493,31 @@ } }, "electron-builder": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.8.1.tgz", - "integrity": "sha512-Hs7KTMq1rGSvT0fwGKXrjbLiJkK6sAKDQooUSwklOkktUgWi4ATjlP0fVE3l8SmS7zcLoww2yDZonSDqxEFhaQ==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.9.1.tgz", + "integrity": "sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA==", "dev": true, "requires": { "@types/yargs": "^15.0.5", - "app-builder-lib": "22.8.1", + "app-builder-lib": "22.9.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.8.1", + "builder-util": "22.9.1", "builder-util-runtime": "8.7.2", "chalk": "^4.1.0", - "dmg-builder": "22.8.1", + "dmg-builder": "22.9.1", "fs-extra": "^9.0.1", "is-ci": "^2.0.0", "lazy-val": "^1.0.4", "read-config-file": "6.0.0", "sanitize-filename": "^1.6.3", - "update-notifier": "^4.1.0", - "yargs": "^15.4.1" + "update-notifier": "^4.1.1", + "yargs": "^16.0.3" }, "dependencies": { "@types/yargs": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.7.tgz", - "integrity": "sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA==", + "version": "15.0.8", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.8.tgz", + "integrity": "sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -9532,12 +9530,11 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -9552,14 +9549,14 @@ } }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", + "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, "color-convert": { @@ -9577,16 +9574,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "fs-extra": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", @@ -9615,30 +9602,6 @@ "universalify": "^1.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -9664,9 +9627,9 @@ "dev": true }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -9674,34 +9637,32 @@ "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.2.tgz", + "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==", + "dev": true + }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.0", + "escalade": "^3.0.2", + "get-caller-file": "^2.0.5", "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" + "y18n": "^5.0.1", + "yargs-parser": "^20.0.0" } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA==", + "dev": true } } }, @@ -9711,14 +9672,14 @@ "integrity": "sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw==" }, "electron-publish": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.8.1.tgz", - "integrity": "sha512-zqI66vl7j1CJZJ60J+1ez1tQNQeuqVspW44JvYDa5kZbM5wSFDAJFMK9RWHOqRF1Ezd4LDeiBa4aeTOwOt9syA==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.9.1.tgz", + "integrity": "sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w==", "dev": true, "requires": { "@types/fs-extra": "^9.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "22.8.1", + "builder-util": "22.9.1", "builder-util-runtime": "8.7.2", "chalk": "^4.1.0", "fs-extra": "^9.0.1", @@ -9727,12 +9688,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -20995,12 +20955,6 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -21333,12 +21287,6 @@ "requires": { "minimist": "^1.2.5" } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true } } }, @@ -24121,9 +24069,9 @@ "dev": true }, "update-notifier": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz", - "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dev": true, "requires": { "boxen": "^4.2.0", @@ -24142,12 +24090,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, diff --git a/package.json b/package.json index a909d9f4..09bbe592 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "babel-plugin-jsx-pragmatic": "1.0.2", "babel-plugin-transform-inline-environment-variables": "0.4.3", "electron": "8.5.2", - "electron-builder": "22.8.1", + "electron-builder": "22.9.1", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.5", "eslint": "6.8.0", From 315ba27bd1db0f4ed6a530174d2bb0adda8b96e7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 11 Oct 2020 16:00:23 +0000 Subject: [PATCH 071/113] Update dependency @types/react to v16.9.52 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cea24d6..82606956 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5802,9 +5802,9 @@ } }, "@types/react": { - "version": "16.9.51", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.51.tgz", - "integrity": "sha512-lQa12IyO+DMlnSZ3+AGHRUiUcpK47aakMMoBG8f7HGxJT8Yfe+WE128HIXaHOHVPReAW0oDS3KAI0JI2DDe1PQ==", + "version": "16.9.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.52.tgz", + "integrity": "sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" diff --git a/package.json b/package.json index 09bbe592..136fe240 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "@types/parcel-bundler": "1.12.1", "@types/prettier": "1.19.0", "@types/rc-slider": "8.6.6", - "@types/react": "16.9.51", + "@types/react": "16.9.52", "@types/react-dom": "16.9.8", "@types/react-tabs": "2.3.2", "@types/react-test-renderer": "16.9.3", From 80e1e8f2a68c1d1d8840df379dbbf295222469c1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 9 Oct 2020 22:40:20 +0000 Subject: [PATCH 072/113] Update dependency eslint-plugin-react to v7.21.4 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82606956..f6fb6651 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10868,16 +10868,16 @@ } }, "eslint-plugin-react": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.3.tgz", - "integrity": "sha512-OI4GwTCqyIb4ipaOEGLWdaOHCXZZydStAsBEPB2e1ZfNM37bojpgO1BoOQbFb0eLVz3QLDx7b+6kYcrxCuJfhw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", + "integrity": "sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==", "dev": true, "requires": { "array-includes": "^3.1.1", "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "object.entries": "^1.1.2", "object.fromentries": "^2.0.2", "object.values": "^1.1.1", diff --git a/package.json b/package.json index 136fe240..182542ae 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "eslint-plugin-import": "2.22.1", "eslint-plugin-jsx-a11y": "6.3.1", "eslint-plugin-prettier": "3.1.4", - "eslint-plugin-react": "7.21.3", + "eslint-plugin-react": "7.21.4", "eslint-plugin-react-hooks": "3.0.0", "husky": "4.3.0", "jest": "25.5.4", From 5961e6a7d2a1a54015f4ade063a054ff2f8b78ce Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 14 Oct 2020 20:24:10 +0000 Subject: [PATCH 073/113] Update babel monorepo to v7.12.0 --- package-lock.json | 727 +++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 368 insertions(+), 367 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6fb6651..b4e783cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,61 +19,24 @@ } }, "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - }, - "dependencies": { - "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" - } - }, - "caniuse-lite": { - "version": "1.0.30001123", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001123.tgz", - "integrity": "sha512-03dJDoa4YC4332jq0rqwiM+Hw6tA5RJtrnZKvOQy7ASoIUv8CinkcmGhYpCvCjedvkBQrrKnkcELxrUSW/XwNQ==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.560", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.560.tgz", - "integrity": "sha512-0cEFfOA3sNXfSxo0FIClBhrLVSe/QO9LBiqmmYPm3N/IYyt41NRTa2EhvOMWAOKpjd91t/rq062yhnJzfVMKkQ==", - "dev": true - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", - "dev": true - } - } + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.0.tgz", + "integrity": "sha512-jAbCtMANC9ptXxbSVXIqV/3H0bkh7iyyv6JS5lu10av45bcc2QmDNJXkASZCFwbBt75Q0AEq/BB+bNa3x1QgYQ==", + "dev": true }, "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.0.tgz", + "integrity": "sha512-iV7Gwg0DePKvdDZZWRTkj4MW+6/AbVWd4ZCg+zk8H1RVt5xBpUZS6vLQWwb3pyLg4BFTaGiQCPoJ4Ibmbne4fA==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", + "@babel/generator": "^7.12.0", + "@babel/helper-module-transforms": "^7.12.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", + "@babel/parser": "^7.12.0", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -93,11 +56,11 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -139,9 +102,9 @@ } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==" }, "@babel/template": { "version": "7.10.4", @@ -154,25 +117,25 @@ } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", + "@babel/generator": "^7.12.0", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -188,11 +151,11 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "jsesc": { @@ -208,11 +171,6 @@ "minimist": "^1.2.5" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -284,9 +242,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -340,61 +298,66 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.0.tgz", + "integrity": "sha512-NbDFJNjDgxE7IkrHp5gq2+Tr8bEdCLKYN90YDQEjMiTMUAFAcShNkaH8kydcmU0mEQTiQY0Ydy/+1xfS2OCEnw==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", + "@babel/compat-data": "^7.12.0", + "@babel/helper-validator-option": "^7.12.0", "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "caniuse-lite": { - "version": "1.0.30001123", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001123.tgz", - "integrity": "sha512-03dJDoa4YC4332jq0rqwiM+Hw6tA5RJtrnZKvOQy7ASoIUv8CinkcmGhYpCvCjedvkBQrrKnkcELxrUSW/XwNQ==", + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", "dev": true }, "electron-to-chromium": { - "version": "1.3.560", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.560.tgz", - "integrity": "sha512-0cEFfOA3sNXfSxo0FIClBhrLVSe/QO9LBiqmmYPm3N/IYyt41NRTa2EhvOMWAOKpjd91t/rq062yhnJzfVMKkQ==", + "version": "1.3.579", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.579.tgz", + "integrity": "sha512-9HaGm4UDxCtcmIqWWdv79pGgpRZWTqr+zg6kxp0MelSHfe1PNjrI8HXy1HgTSy4p0iQETGt8/ElqKFLW008BSA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", "dev": true } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.0.tgz", + "integrity": "sha512-9tD1r9RK928vxvxcoNK8/7uwT7Q2DJZP1dnJmyMAJPwOF0yr8PPwqdpyw33lUpCfrJ765bOs5XNa4KSfUDWFSw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-member-expression-to-functions": "^7.12.0", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.0", "@babel/helper-split-export-declaration": "^7.10.4" }, "dependencies": { @@ -453,12 +416,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -471,9 +428,9 @@ } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -544,12 +501,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -562,9 +513,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -584,9 +535,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -648,9 +599,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -661,17 +612,17 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.0.tgz", + "integrity": "sha512-I0d/bgzgzgLsJMk7UZ0TN2KV3OGjC/t/9Saz8PKb9jrcEAXhgjGysOgp4PDKydIKjUv/gj2St4ae+ov8l+T9Xg==", "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.0" }, "dependencies": { "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -701,16 +652,18 @@ } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.0.tgz", + "integrity": "sha512-1ZTMoCiLSzTJLbq7mSaTHki4oIrBIf/dUbzdhwTrvtMU3ZNVKwQmGae3gSiqppo7G8HAgnXmc43rfEaD8yYLLQ==", "requires": { "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.0", "@babel/helper-simple-access": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0", "lodash": "^4.17.19" }, "dependencies": { @@ -722,6 +675,34 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/generator": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", + "requires": { + "@babel/types": "^7.12.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "^7.10.4" + } + }, "@babel/helper-module-imports": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", @@ -748,11 +729,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -763,15 +739,56 @@ "@babel/types": "^7.10.4" } }, + "@babel/traverse": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/parser": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==" + } + } + }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -784,9 +801,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -841,12 +858,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -859,9 +870,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -872,14 +883,14 @@ } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.0.tgz", + "integrity": "sha512-9kycFdq2c9e7PXZOr2z/ZqTFF9OzFu287iFwYS+CiDVPuoTCfY8hoTsIqNQNetQjlqoRsRyJFrMG1uhGAR4EEw==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.0", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.0", + "@babel/types": "^7.12.0" }, "dependencies": { "@babel/code-frame": { @@ -891,11 +902,11 @@ } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.12.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -937,9 +948,9 @@ } }, "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==" + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==" }, "@babel/template": { "version": "7.10.4", @@ -952,25 +963,25 @@ } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.12.0", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -978,11 +989,11 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "jsesc": { @@ -1024,11 +1035,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -1040,9 +1046,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -1061,9 +1067,9 @@ }, "dependencies": { "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -1098,6 +1104,12 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, + "@babel/helper-validator-option": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.0.tgz", + "integrity": "sha512-NRfKaAQw/JCMsTFUdJI6cp4MoJGGVBRQTRSiW1nwlGldNqzjB9jqWI0SZqQksC724dJoKqwG+QqfS9ib7SoVsw==", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", @@ -1120,12 +1132,12 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", "dev": true, "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1170,12 +1182,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -1188,26 +1194,34 @@ } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", + "@babel/generator": "^7.12.0", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/parser": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==", + "dev": true + } } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -1216,12 +1230,12 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "jsesc": { @@ -1257,11 +1271,11 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.0.tgz", + "integrity": "sha512-8lnf4QcyiQMf5XQp47BltuMTocsOh6P0z/vueEh8GzhmWWlDbdvOoI5Ziddg0XYhmnx35HyByUW51/9NprF8cA==", "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -1302,11 +1316,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==" - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -1318,25 +1327,32 @@ } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.0.tgz", + "integrity": "sha512-ZU9e79xpOukCNPkQ1UzR4gJKCruGckr6edd8v8lmKpSk8iakgUIvb+5ZtaKKV9f7O+x5r+xbMDDIbzVpUoiIuw==", "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", + "@babel/generator": "^7.12.0", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/parser": "^7.12.0", + "@babel/types": "^7.12.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/parser": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dYmySMYnlus2jwl7JnnajAj11obRStZoW9cG04wh4ZuhozDn11tDUrhHcUZ9iuNHqALAhh60XqNaYXpvuuE/Gg==" + } } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", @@ -1344,11 +1360,11 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "jsesc": { @@ -1454,9 +1470,9 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.0.tgz", + "integrity": "sha512-ao43U2ptSe+mIZAQo2nBV5Wx2Ie3i2XbLt8jCXZpv+bvLY1Twv0lak4YZ1Ps5OwbeLMAl3iOVScgGMOImBae1g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1490,9 +1506,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.0.tgz", + "integrity": "sha512-dssjXHzdMQal4q6GCSwDTVPEbyBLdd9+7aSlzAkQbrGEKq5xG8pvhQ7u2ktUrCLRmzQphZnSzILBL5ta4xSRlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1517,9 +1533,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.0.tgz", + "integrity": "sha512-JpNWix2VP2ue31r72fKytTE13nPX1fxl1mudfTaTwcDhl3iExz5NZjQBq012b/BQ6URWoc/onI73pZdYlAfihg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1535,9 +1551,9 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.0.tgz", + "integrity": "sha512-iON65YmIy/IpEgteYJ4HfO2q30SLdIxiyjNNlsSjSl0tUxLhSH9PljE5r6sczwdW64ZZzznYNcezdcROB+rDDw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1599,9 +1615,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.0.tgz", + "integrity": "sha512-CXu9aw32FH/MksqdKvhpiH8pSvxnXJ33E7I7BGNE9VzNRpWgpNzvPpds/tW9E0pjmX9+D1zAHRyHbtyeTboo2g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -1646,14 +1662,14 @@ }, "dependencies": { "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.0.tgz", + "integrity": "sha512-YBqH+3wLcom+tko8/JLgRcG8DMqORgmjqNRNI751gTioJSZHWFybO1mRoLtJtWIlYSHY+zT9LqqnbbK1c3KIVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-plugin-utils": { @@ -1681,9 +1697,9 @@ } }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -1975,9 +1991,9 @@ "dev": true }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -2092,12 +2108,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -2110,9 +2120,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -2167,14 +2177,14 @@ }, "dependencies": { "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.0.tgz", + "integrity": "sha512-YBqH+3wLcom+tko8/JLgRcG8DMqORgmjqNRNI751gTioJSZHWFybO1mRoLtJtWIlYSHY+zT9LqqnbbK1c3KIVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-plugin-utils": { @@ -2202,9 +2212,9 @@ } }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -2350,12 +2360,6 @@ "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", - "dev": true - }, "@babel/template": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", @@ -2368,9 +2372,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -2464,14 +2468,15 @@ } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.0.tgz", + "integrity": "sha512-h2fDMnwRwBiNMmTGAWqUo404Z3oLbrPE6hyATecyIbsEsrbM5gjLbfKQLb6hjiouMlGHH+yliYBbc4NPgWKE/g==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.0", "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" }, "dependencies": { @@ -2520,14 +2525,14 @@ }, "dependencies": { "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.0.tgz", + "integrity": "sha512-YBqH+3wLcom+tko8/JLgRcG8DMqORgmjqNRNI751gTioJSZHWFybO1mRoLtJtWIlYSHY+zT9LqqnbbK1c3KIVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-regex": { @@ -2549,9 +2554,9 @@ } }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -2799,9 +2804,9 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.0.tgz", + "integrity": "sha512-lS4QLXQ2Vbw2ubfQjeQcn+BZgZ5+ROHW9f+DWjEp5Y+NHYmkRGKqHSJ1tuhbUauKu2nhZNTBIvsIQ8dXfY5Gjw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -2931,12 +2936,12 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", - "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.0.tgz", + "integrity": "sha512-gahRNAWgE76hjI3TZPVEfV7vGjOCJi5ACd4eSoAItk/ErC114i2UHnk+1ScS2dOour0p6J6kB99hNFX2vzL2Ww==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-create-class-features-plugin": "^7.12.0", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-typescript": "^7.10.4" }, @@ -2977,14 +2982,14 @@ }, "dependencies": { "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.0.tgz", + "integrity": "sha512-YBqH+3wLcom+tko8/JLgRcG8DMqORgmjqNRNI751gTioJSZHWFybO1mRoLtJtWIlYSHY+zT9LqqnbbK1c3KIVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-plugin-utils": { @@ -3012,9 +3017,9 @@ } }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -3043,26 +3048,27 @@ } }, "@babel/preset-env": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", - "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.0.tgz", + "integrity": "sha512-jSIHvHSuF+hBUIrvA2/61yIzhH+ceLOXGLTH1nwPvQlso/lNxXsoE/nvrCzY5M77KRzhKegB1CvdhWPZmYDZ5A==", "dev": true, "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", + "@babel/compat-data": "^7.12.0", + "@babel/helper-compilation-targets": "^7.12.0", "@babel/helper-module-imports": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.0", "@babel/plugin-proposal-async-generator-functions": "^7.10.4", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.12.0", "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.0", + "@babel/plugin-proposal-numeric-separator": "^7.12.0", "@babel/plugin-proposal-object-rest-spread": "^7.11.0", "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-optional-chaining": "^7.12.0", "@babel/plugin-proposal-private-methods": "^7.10.4", "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", @@ -3093,7 +3099,7 @@ "@babel/plugin-transform-member-expression-literals": "^7.10.4", "@babel/plugin-transform-modules-amd": "^7.10.4", "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.12.0", "@babel/plugin-transform-modules-umd": "^7.10.4", "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", "@babel/plugin-transform-new-target": "^7.10.4", @@ -3110,11 +3116,9 @@ "@babel/plugin-transform-unicode-escapes": "^7.10.4", "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.0", "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { @@ -3216,9 +3220,9 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.0.tgz", + "integrity": "sha512-ggIyFmT2zMaYRheOfPDQ4gz7QqV3B+t2rjqjbttDJxMcb7/LukvWCmlIl1sWcOxrvwpTDd+z0OytzqsbGeb3/g==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -3227,21 +3231,21 @@ } }, "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "caniuse-lite": "^1.0.30001135", + "electron-to-chromium": "^1.3.571", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "caniuse-lite": { - "version": "1.0.30001123", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001123.tgz", - "integrity": "sha512-03dJDoa4YC4332jq0rqwiM+Hw6tA5RJtrnZKvOQy7ASoIUv8CinkcmGhYpCvCjedvkBQrrKnkcELxrUSW/XwNQ==", + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==", "dev": true }, "core-js-compat": { @@ -3263,15 +3267,21 @@ } }, "electron-to-chromium": { - "version": "1.3.560", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.560.tgz", - "integrity": "sha512-0cEFfOA3sNXfSxo0FIClBhrLVSe/QO9LBiqmmYPm3N/IYyt41NRTa2EhvOMWAOKpjd91t/rq062yhnJzfVMKkQ==", + "version": "1.3.579", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.579.tgz", + "integrity": "sha512-9HaGm4UDxCtcmIqWWdv79pGgpRZWTqr+zg6kxp0MelSHfe1PNjrI8HXy1HgTSy4p0iQETGt8/ElqKFLW008BSA==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", "dev": true } } @@ -3355,13 +3365,13 @@ } }, "@babel/preset-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz", - "integrity": "sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.0.tgz", + "integrity": "sha512-2XVy4sy/zkP4gqmXW0TzSh/QwOniN2Cy3srhsD0TRBlMTOmjaYnWCWA6aWopwpcwfYkEKD6jKLLjYMq15zDNWg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.10.4" + "@babel/plugin-transform-typescript": "^7.12.0" }, "dependencies": { "@babel/helper-plugin-utils": { @@ -17660,15 +17670,6 @@ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", diff --git a/package.json b/package.json index 182542ae..b67e6beb 100644 --- a/package.json +++ b/package.json @@ -80,12 +80,12 @@ "wait-on": "^4.0.0" }, "devDependencies": { - "@babel/core": "7.11.6", + "@babel/core": "7.12.0", "@babel/plugin-proposal-object-rest-spread": "7.11.0", - "@babel/plugin-transform-typescript": "7.11.0", - "@babel/preset-env": "7.11.5", + "@babel/plugin-transform-typescript": "7.12.0", + "@babel/preset-env": "7.12.0", "@babel/preset-react": "7.10.4", - "@babel/preset-typescript": "7.10.4", + "@babel/preset-typescript": "7.12.0", "@emotion/babel-preset-css-prop": "10.0.27", "@types/babel__core": "7.1.10", "@types/cssnano": "4.0.0", From 9074694c87701d0cff23e0768b0bd22aef140cd8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 14 Oct 2020 20:25:18 +0000 Subject: [PATCH 074/113] Update dependency react-test-renderer to v16.14.0 --- package-lock.json | 18 +++--------------- package.json | 2 +- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4e783cd..46ab7abc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21208,27 +21208,15 @@ } }, "react-test-renderer": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.13.1.tgz", - "integrity": "sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", + "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", "react-is": "^16.8.6", "scheduler": "^0.19.1" - }, - "dependencies": { - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } } }, "react-textarea-autosize": { diff --git a/package.json b/package.json index b67e6beb..aa742903 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "parcel-bundler": "1.12.4", "prettier": "1.19.1", "react-context-devtool": "2.0.0", - "react-test-renderer": "16.13.1", + "react-test-renderer": "16.14.0", "ts-jest": "26.4.1", "tslint": "6.1.3", "tslint-eslint-rules": "5.4.0", From d6c67d2aa5dfe4852171d7ad65dc58e398c4f320 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:22:48 +1300 Subject: [PATCH 075/113] rearranged values in the state --- src/components/Player/Player.tsx | 2 +- src/store/initialState.ts | 202 ++++++++----------------------- src/store/types.ts | 92 ++++++++++++++ 3 files changed, 142 insertions(+), 154 deletions(-) create mode 100644 src/store/types.ts diff --git a/src/components/Player/Player.tsx b/src/components/Player/Player.tsx index e05ccad5..aa2985fa 100644 --- a/src/components/Player/Player.tsx +++ b/src/components/Player/Player.tsx @@ -14,7 +14,7 @@ import { } from "../../store/actions"; import playerIdToString from "../../lib/playerIdToString"; import playerStringToId from "../../lib/playerStringToId"; -import { IPlayer, IState } from "../../store/initialState"; +import { IPlayer, IState } from "../../store/types"; import { IMessage } from "../Game/onMessage"; import { Possibilities, PlayerActions, GameTurns } from "../../lib/constants"; import notifications from "../../config/notifications.json"; diff --git a/src/store/initialState.ts b/src/store/initialState.ts index 417f0976..4eba865f 100644 --- a/src/store/initialState.ts +++ b/src/store/initialState.ts @@ -1,72 +1,67 @@ -import { INotice } from "../components/Table/assets/types"; +import { IState } from "./types"; /*eslint-disable @typescript-eslint/camelcase*/ const initialState: IState = { - // Object of all players at the table - players: {}, - // Which seat is the active player - activePlayer: null, - // The total CHIPS balance the player has in the Pangea Wallet - balance: 0, + + /********** ME ***********/ + + balance: 0, // The total CHIPS balance the player has in the Pangea Wallet + connectionStatus: { + level: 1, + status: null, + text: "" + }, + depositAddress: undefined, // Pangea wallet address to deposit to + holeCards: [], // Cards of the user + nodeType: null, + userSeat: null, // Where does the user sit (player1, player2, etc) + withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds + + /********** BACKEND ***********/ // 0 - transaction is still being mined // 1 - backend is ready - backendStatus: 0, - // Current blinds - small and big one - blinds: [1, 2], - // Board Cards - boardCards: [], - // Connection status dispalyed at the top - connection: { - dcv: "Not connected", - player1: "Not connected", - player2: "Not connected", - echo: "Not connected" + backendStatus: 0, + + /********** CONTROLS ***********/ + + isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game + isDeveloperMode: false, // Whether the app should run in developer mode + + /********** GENERAL GAME INFO ***********/ + + activePlayer: null, // Which seat is the active player + dealer: 0, // Which player is the dealer + gameStarted: false, + gameType: "", // Game type at the top left corner + notice: { + text: "Choose your seat to begin playing", + status: null, + level: 1 }, + players: {}, // Object of all players at the table + maxPlayers: 9, + + /********** POKER INFO ***********/ + + blinds: [1, 2], // Current blinds - small and big one + boardCards: [], controls: { showControls: false, showFirstRow: true, canCheck: false, canRaise: true }, - // Whether the cards have been dealt cardsDealt: false, - // Whether the chips have been collected to the middle - chipsCollected: false, - connectionStatus: { - text: "", - level: 1 - }, - // current chips stack paid to enter the game - currentChipsStack: 0, - // Which player is the dealer - dealer: 0, - // Pangea wallet address to deposit to - depositAddress: undefined, - // Whether the game has started - gameStarted: false, - // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown - gameTurn: 0, - // Game type at the top left corner - gameType: "", - // Log of all palyer actions - handHistory: [], - // Total number of hands played in this session - handsPlayed: 0, - // Cards of the user - holeCards: [], - // Whehter the Cashier is open + chipsCollected: false, // chips collected to the middle + currentChipsStack: 0, // current chips stack paid to enter the game + gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown + handHistory: [], // Log of all palyer actions + handsPlayed: 0, // Total number of hands played in this session isCashierOpen: false, - // Whether the app should run in developer mode - isDeveloperMode: false, - // Whether to show the LogBox component isLogBox: true, - // Whether the Startup Modal shows at the beginning of the game - isStartupModal: true, - // Whether players has gone all-in and the showDown is active isShowDown: false, - // Object that stores the last action so we can dispaly it on the UI - lastAction: { player: 0, action: null }, + lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI // Messages to send to the nodes - when updated, the message will be sent lastMessage: { method: "replay", @@ -79,18 +74,13 @@ const initialState: IState = { min_amount: 0, gui_playerID: 1 }, - nodeType: null, + nodesSet: false, nodes: { dcv: "0.0.0.0", player1: "0.0.0.0", player2: "0.0.0.0", echo: "0.0.0.0" }, - notice: { - text: "Choose your seat to begin playing", - level: 1 - }, - maxPlayers: 9, message: { dcv: null, player1: null, @@ -115,102 +105,8 @@ const initialState: IState = { totalPot: 0, // Amount to call toCall: 2, - // Where does the user sit - userSeat: null, // Array of players that won - winners: [undefined], - // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds - withdrawAddressList: [] + winners: [undefined] }; -export interface IPlayer { - isPlaying: boolean; - seat: string; - chips: number; - hasCards: boolean; - showCards: boolean; - isBetting: boolean; - betAmount: number; - playerCards: string[]; - connected: boolean; -} - -export interface IState { - players: { - player1: IPlayer; - player2: IPlayer; - player3: IPlayer; - player4: IPlayer; - player5: IPlayer; - player6: IPlayer; - player7: IPlayer; - player8: IPlayer; - player9: IPlayer; - }; - activePlayer: string; - backendStatus: number; - balance: number; - blinds: [number, number]; - boardCards: string[]; - connection: { - dcv: string; - player1: string; - player2: string; - echo: string; - }; - controls: { - canCheck: boolean; - canRaise: boolean; - showControls: boolean; - showFirstRow: boolean; - }; - cardsDealt: boolean; - chipsCollected: boolean; - connectionStatus: INotice; - currentChipsStack: number; - dealer: number; - depositAddress: string; - gameStarted: boolean; - gameTurn: 0 | 1 | 2 | 3 | 4; - gameType: string; - handHistory: { action: string; timeStamp: number }[]; - handsPlayed: number; - holeCards: string[]; - isCashierOpen: boolean; - isDeveloperMode: boolean; - isLogBox: boolean; - isShowDown: boolean; - isStartupModal: boolean; - lastAction: { player: number; action: string | null }; - lastMessage: object; - notice: INotice; - nodes: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - nodeType: string; - maxPlayers: number; - message: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - minRaiseTo: number; - options: { - showPotCounter: boolean; - }; - pot: number[]; - seats: number; - showDealer: boolean; - showMainPot: boolean; - totalPot: number; - toCall: number; - userSeat: string; - winners: string[] | null; - withdrawAddressList: string[]; -} - export default initialState; diff --git a/src/store/types.ts b/src/store/types.ts new file mode 100644 index 00000000..1468e868 --- /dev/null +++ b/src/store/types.ts @@ -0,0 +1,92 @@ +import { INotice } from "../components/Table/assets/types"; + +export interface IPlayer { + isPlaying: boolean; + seat: string; + chips: number; + hasCards: boolean; + showCards: boolean; + isBetting: boolean; + betAmount: number; + playerCards: string[]; + connected: boolean; + } + + export interface IState { + players: { + player1: IPlayer; + player2: IPlayer; + player3: IPlayer; + player4: IPlayer; + player5: IPlayer; + player6: IPlayer; + player7: IPlayer; + player8: IPlayer; + player9: IPlayer; + }; + activePlayer: string; + backendStatus: number; + balance: number; + blinds: [number, number]; + boardCards: string[]; + connection: { + dcv: string; + player1: string; + player2: string; + echo: string; + }; + controls: { + canCheck: boolean; + canRaise: boolean; + showControls: boolean; + showFirstRow: boolean; + }; + cardsDealt: boolean; + chipsCollected: boolean; + connectionStatus: INotice; + currentChipsStack: number; + dealer: number; + depositAddress: string; + gameStarted: boolean; + gameTurn: 0 | 1 | 2 | 3 | 4; + gameType: string; + handHistory: { action: string; timeStamp: number }[]; + handsPlayed: number; + holeCards: string[]; + isCashierOpen: boolean; + isDeveloperMode: boolean; + isLogBox: boolean; + isShowDown: boolean; + isStartupModal: boolean; + lastAction: { player: number; action: string | null }; + lastMessage: object; + nodesSet: boolean; + notice: INotice; + nodes: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + nodeType: string; + maxPlayers: number; + message: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + minRaiseTo: number; + options: { + showPotCounter: boolean; + }; + pot: number[]; + seats: number; + showDealer: boolean; + showMainPot: boolean; + totalPot: number; + toCall: number; + userSeat: string; + winners: string[] | null; + withdrawAddressList: string[]; + } \ No newline at end of file From 1e048d723a10bbde88be775d04bd9b4c3ba74ad7 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:23:27 +1300 Subject: [PATCH 076/113] correct import --- src/store/reducer.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/store/reducer.ts b/src/store/reducer.ts index 06adfa45..2a695b77 100644 --- a/src/store/reducer.ts +++ b/src/store/reducer.ts @@ -1,4 +1,4 @@ -import { IState, IPlayer } from "./initialState"; +import { IState, IPlayer } from "./types"; import { INotice } from "../components/Table/assets/types"; import { Level } from "../lib/constants"; import { isDev } from "../lib/dev"; @@ -346,7 +346,6 @@ const reducer = (state: IState, action: IAction): object => { gameType: action.payload.gameType, gameStarted: true, pot: action.payload.pot, - // toCall: action.payload.toCall, options: { ...state.options, showPot: true, From c93b4d65af150ad817fe305a18d128bfbece2c57 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:23:56 +1300 Subject: [PATCH 077/113] connection and node enums --- src/lib/constants.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2c5c4a1f..170fd126 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -39,3 +39,22 @@ export enum BetWarnings { insufficientFunds = 2, tableIsFull = 3 } + +export enum Conn { + connecting = 'Connecting...', + connected = 'Connected', + disconnecting = 'Disconnecting...', + disconnected = 'Disconnected', + uninstantiated = 'Uninstantiated' +} + +export enum Node { + dcv = 'dcv', + player = 'player', + echo = 'echo' +} + +export enum NodeType { + dealer = 'dealer', + player = 'player' +} \ No newline at end of file From dda2f526a49561af2c411d484db05da4be873c38 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 16:30:00 +1300 Subject: [PATCH 078/113] refactored websocket to support new version 2.1.1, separated types, refactored Connection component, removed connection from the state --- package-lock.json | 225 ++------------------------ package.json | 33 ++-- src/components/Game/WebSocket.ts | 72 ++++----- src/components/Game/onMessage.ts | 24 ++- src/components/Game/types/IMessage.ts | 35 ++++ src/components/Modal/CustomIP.tsx | 4 - src/components/Table/Connections.tsx | 49 ++---- src/components/Table/Table.tsx | 16 +- src/components/Table/assets/style.js | 13 +- src/components/Table/assets/types.ts | 3 +- src/store/actions.ts | 19 ++- 11 files changed, 159 insertions(+), 334 deletions(-) create mode 100644 src/components/Game/types/IMessage.ts diff --git a/package-lock.json b/package-lock.json index 46ab7abc..1be310b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8465,12 +8465,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -11600,15 +11594,6 @@ "locate-path": "^3.0.0" } }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -12854,166 +12839,6 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, - "husky": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", - "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - } - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -17527,12 +17352,6 @@ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -17561,6 +17380,14 @@ "dev": true, "requires": { "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } } }, "jsondiffpatch": { @@ -18582,12 +18409,6 @@ "mimic-fn": "^1.0.0" } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -19898,15 +19719,6 @@ "find-up": "^3.0.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -21245,9 +21057,9 @@ } }, "react-use-websocket": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-1.7.3.tgz", - "integrity": "sha512-m2hlmcKkp3F0ksa+awEF3R8oFXbbnb2+wcfPWNWOIOVAB1kkfJCXDXmCI3M4lho+yW4yRwTAYIhLXx4iOQJ/Mw==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-2.1.1.tgz", + "integrity": "sha512-os9EgsiLXvNZUStJJtfHTAIzCJ4+WuhB4DKuZyAw8V2aIp1a5+5sm68LqgD1Q2aQ2MNUZQ+oCZJm94Xz6/fEMA==" }, "read-config-file": { "version": "6.0.0", @@ -21958,7 +21770,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true + "dev": true, + "optional": true }, "semver-diff": { "version": "3.1.1", @@ -21977,12 +21790,6 @@ } } }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -24451,12 +24258,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", diff --git a/package.json b/package.json index aa742903..43bbe7ce 100644 --- a/package.json +++ b/package.json @@ -56,28 +56,28 @@ }, "homepage": "https://github.com/norbertdragan/pangea-poker-gui#readme", "dependencies": { - "@emotion/core": "^10.0.27", + "@emotion/core": "10.0.35", "@emotion/styled": "^10.0.27", - "@sentry/browser": "^5.10.2", - "@types/react-modal": "^3.10.4", + "@sentry/browser": "5.24.2", + "@types/react-modal": "3.10.6", "axios": "^0.20.0", - "babel-jest": "^25.0.0", - "concurrently": "^5.1.0", + "babel-jest": "25.5.1", + "concurrently": "5.3.0", "cssnano": "^4.1.10", "deep-diff": "^1.0.2", - "electron-is-dev": "^1.1.0", + "electron-is-dev": "1.2.0", "emotion": "^10.0.27", - "howler": "^2.1.3", + "howler": "2.2.0", "normalize.css": "^8.0.1", - "rc-slider": "^9.0.0", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "react-hook-form": "^5.0.3", - "react-modal": "^3.11.1", - "react-tabs": "^3.1.0", - "react-tooltip": "^4.0.3", - "react-use-websocket": "^1.0.0", - "wait-on": "^4.0.0" + "rc-slider": "9.5.1", + "react": "16.13.1", + "react-dom": "16.13.1", + "react-hook-form": "5.7.2", + "react-modal": "3.11.2", + "react-tabs": "3.1.1", + "react-tooltip": "4.2.10", + "react-use-websocket": "^2.0.0", + "wait-on": "4.0.2" }, "devDependencies": { "@babel/core": "7.12.0", @@ -125,7 +125,6 @@ "eslint-plugin-prettier": "3.1.4", "eslint-plugin-react": "7.21.4", "eslint-plugin-react-hooks": "3.0.0", - "husky": "4.3.0", "jest": "25.5.4", "jsdom": "16.4.0", "jsdom-global": "3.0.2", diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 4c323e59..89c87309 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -1,11 +1,11 @@ /* eslint-disable @typescript-eslint/camelcase */ import React, { useState, useEffect, useContext } from "react"; -import useWebSocket from "react-use-websocket"; +import useWebSocket, { ReadyState } from "react-use-websocket"; import { DispatchContext, StateContext } from "../../store/context"; import { onMessage, onMessage_player } from "./onMessage"; import { IState } from "../../store/initialState"; import notifications from "../../config/notifications.json"; -import { Level } from "../../lib/constants"; +import { Level, Conn, Node, NodeType } from "../../lib/constants"; import { resetMessage, sendInitMessage, @@ -17,7 +17,9 @@ import { // This component is responsible for the WebSocket connection. It doesn't return and -const STATIC_OPTIONS = {}; +const STATIC_OPTIONS = { + // onOpen: () => console.log('opened') +}; interface IProps { message: string; @@ -29,66 +31,54 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { const dispatch: (arg: object) => void = useContext(DispatchContext); const state: IState = useContext(StateContext); const [currentSocketUrl] = useState(server); - const [sendMessage, lastMessage, readyState] = useWebSocket( + const { + sendJsonMessage, + lastJsonMessage, + readyState + } = useWebSocket( currentSocketUrl, STATIC_OPTIONS ); - const readyStateString = { - 0: "Connecting...", - 1: "Connected", - 2: "Disconnecting...", - 3: "Disconnected" + const connectionStatus = { + [ReadyState.CONNECTING]: Conn.connecting, + [ReadyState.OPEN]: Conn.connected, + [ReadyState.CLOSING]: Conn.disconnecting, + [ReadyState.CLOSED]: Conn.disconnected, + [ReadyState.UNINSTANTIATED]: Conn.uninstantiated, }[readyState]; // Send a message if props changes useEffect(() => { - if (message && readyState === 1) { - sendMessage(message); + console.log('readyState--', readyState) + if (message && readyState === ReadyState.OPEN) { + sendJsonMessage(message); resetMessage(nodeName, dispatch); } }, [message]); // If the connection status changes, update the state useEffect(() => { - if (state.connection[nodeName] !== readyStateString) { - updateConnectionStatus(readyStateString, Level.warning, dispatch); - sendInitMessage(readyStateString, nodeName, dispatch); - if (readyStateString === "Connected") { - // Start the game if it's a player node - nodeName !== "dealer" && - game({ gametype: "", pot: [0] }, state, dispatch); - closeStartupModal(dispatch); + if (state.connectionStatus.status !== connectionStatus) { + + if (!state.connectionStatus.status) { + sendInitMessage(connectionStatus, nodeName, dispatch); } - if (readyStateString === "Disconnected") { - updateConnectionStatus( - notifications.CONNECTION_FAILED, - Level.error, - dispatch - ); + + updateConnectionStatus(connectionStatus, dispatch); + + if (connectionStatus === Conn.disconnected) { updateStateValue("nodesSet", false, dispatch); } } }); - // Parse the received message depending on the node + // Forward the received message depending on the node useEffect(() => { - if (lastMessage) { - switch (nodeName) { - case "dcv": { - onMessage(lastMessage.data, state, dispatch); - break; - } - case "echo": { - onMessage(lastMessage.data, state, dispatch); - break; - } - default: { - onMessage_player(lastMessage.data, nodeName, state, dispatch); - } - } + if (lastJsonMessage) { + onMessage(lastJsonMessage, nodeName, state, dispatch); } - }, [lastMessage]); + }, [lastJsonMessage]); }); export default WebSocket; diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 3c2cb2af..50ce3075 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -45,7 +45,7 @@ import playerIdToString from "../../lib/playerIdToString"; import arrayToSentence from "../../lib/arrayToSentence"; import lowerCaseLastLetter from "../../lib/lowerCaseLastLetter"; import sounds from "../../sounds/sounds"; -import { GameTurns, Level, BetWarnings } from "../../lib/constants"; +import { GameTurns, Level, BetWarnings, Node } from "../../lib/constants"; import notifications from "../../config/notifications.json"; import { blindBet, isCurrentPlayer } from "./helpers"; export interface IMessage { @@ -87,25 +87,19 @@ export interface IMessage { const { preFlop, flop, turn, showDown } = GameTurns; export const onMessage = ( - messageString: string, + message: IMessage, + nodeName: string, state: IState, dispatch: (arg: object) => void ): void => { - const message: IMessage = JSON.parse(messageString); - // keep it just in case for now - log("Received from DCV", "received", message); -}; -export const onMessage_player = ( - messageString: string, - player: string, - state: IState, - dispatch: (arg: object) => void -): void => { - const message: IMessage = JSON.parse(messageString); - setLastMessage(message, dispatch); - log(`${Date.now()}: Received from ${player}: `, "received", message); + if(!message || nodeName !== Node.player) { + log("Received an unexpected message from " + nodeName, "received", message); + return; + } + setLastMessage(message, dispatch); + log(`${Date.now()}: Received from ${nodeName}: `, "received", message); switch (message.method) { case "backend_status": updateStateValue("backendStatus", message.backend_status, dispatch); diff --git a/src/components/Game/types/IMessage.ts b/src/components/Game/types/IMessage.ts new file mode 100644 index 00000000..b54c8c4b --- /dev/null +++ b/src/components/Game/types/IMessage.ts @@ -0,0 +1,35 @@ +export interface IMessage { + action?: string; + addr?: string; + addrs?: string[]; + amount?: number; + balance?: number; + backend_status: number; + bet_amount?: number; + big_blind?: number; + table_stack_in_chips: number; + deal?: { + balance?: number; + board?: string[]; + holecards?: [string, string]; + }; + game?: { gametype: string; pot: number[] }; + gui_playerID?: number; + method?: string; + minRaiseTo?: number; + player_funds?: number[]; + playerid?: number; + pot?: number; + seats?: [{ name: string; playing: number; seat: number }]; + showInfo?: { + allHoleCardsInfo?: string[][]; + boardCardInfo?: string[]; + }; + small_blind?: number; + possibilities?: number[]; + toPlayer?: number; + toCall?: number; + warning_num: number; + win_amount?: number; + winners?: number[]; +} \ No newline at end of file diff --git a/src/components/Modal/CustomIP.tsx b/src/components/Modal/CustomIP.tsx index 15bc63f4..fd110c81 100644 --- a/src/components/Modal/CustomIP.tsx +++ b/src/components/Modal/CustomIP.tsx @@ -61,10 +61,6 @@ const CustomIP: React.FunctionComponent = () => { updateStateValue("nodes", nodesToSet, dispatch); updateStateValue("nodeType", nodeTypeToSet, dispatch); - - // Start the game if it's a player node - !isDealer && game({ gametype: "", pot: [0] }, state, dispatch); - updateStateValue("nodesSet", true, dispatch); }; diff --git a/src/components/Table/Connections.tsx b/src/components/Table/Connections.tsx index 37bbad67..5864d3b9 100644 --- a/src/components/Table/Connections.tsx +++ b/src/components/Table/Connections.tsx @@ -1,22 +1,14 @@ import { css } from "@emotion/core"; import { useContext } from "react"; import { StateContext } from "../../store/context"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; +import { pickColor } from "./assets/style"; // This component is responsible for displaying the state of the WebSocket connections const Connections: React.FunctionComponent = () => { const state: IState = useContext(StateContext); - const { connection, nodeType } = state; - - let nodeList = []; - - const dealerNodeList = [["DCV", connection.dcv]]; - - const playerNode = ["Player", connection[Object.keys(state.nodes)[0]]]; - - if (nodeType === "dealer") nodeList = dealerNodeList; - if (nodeType === "player") nodeList.push(playerNode); + const { connectionStatus, nodeType } = state; return (
{ z-index: 4; `} > - {nodeList.map((node, key) => { - return ( + return ( + + {nodeType} - {node[0]}: - - {" " + node[1]} - + {connectionStatus.status && ": " + connectionStatus.status} - ); - })} + + )
); }; diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index b07c3329..fcf9a6b4 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -2,7 +2,8 @@ import { useReducer, useEffect, useState } from "react"; import diff from "deep-diff"; import reducer from "../../store/reducer"; import { StateContext, DispatchContext } from "../../store/context"; -import initialState, { IPlayer, IState } from "../../store/initialState"; +import initialState from "../../store/initialState"; +import { IPlayer, IState } from "../../store/types"; import Backgrounds from "./Backgrounds"; import { PlayerGrid9Max } from "../PlayerGrid"; import Player from "../Player"; @@ -21,6 +22,11 @@ import Cashier from "../Cashier"; import { TableContainer, TableWrapper, Notice } from "./assets/style"; import "./assets/style.css"; import notifications from "../../config/notifications.json"; +import { Conn, NodeType } from "../../lib/constants"; +import { + closeStartupModal, + game +} from "../../store/actions"; // This is the current Main component @@ -36,10 +42,12 @@ const Table: React.FunctionComponent = () => { backendStatus, boardCards, chipsCollected, + connectionStatus, controls, dealer, gameType, gameTurn, + gameStarted, handHistory, isDeveloperMode, isLogBox, @@ -54,6 +62,12 @@ const Table: React.FunctionComponent = () => { notice } = state; + useEffect(() => { + if (nodeType !== NodeType.dealer && !gameStarted && connectionStatus.status === Conn.connected) { + closeStartupModal(dispatch); + return game({ gametype: "", pot: [0] }, state, dispatch); + } + }, [state]) // For debugging purposes log the difference betweeen the last and current state useEffect(() => { const difference = diff(previousState, state); diff --git a/src/components/Table/assets/style.js b/src/components/Table/assets/style.js index a704e378..9dc0258f 100644 --- a/src/components/Table/assets/style.js +++ b/src/components/Table/assets/style.js @@ -1,5 +1,5 @@ import styled from "@emotion/styled"; -import { Level } from "../../../lib/constants"; +import { Conn, Level } from "../../../lib/constants"; export const TableContainer = styled.div` background-color: var(--dark); @@ -103,3 +103,14 @@ export const Notice = styled.div` bottom: 2.5rem; position: absolute; `; + +export const pickColor = (status) => { + switch(status) { + case Conn.connected: + return "var(--color-primaryLight)" + case Conn.connecting: + return "var(--color-accent)" + case Conn.disconnected: + return "var(--color-danger)" + } +} \ No newline at end of file diff --git a/src/components/Table/assets/types.ts b/src/components/Table/assets/types.ts index 5f10fb4c..3073b0f7 100644 --- a/src/components/Table/assets/types.ts +++ b/src/components/Table/assets/types.ts @@ -1,4 +1,5 @@ export interface INotice { - text: string; level: number; + status: string; + text: string; } diff --git a/src/store/actions.ts b/src/store/actions.ts index 963783c6..116d3928 100644 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -4,10 +4,11 @@ import playerIdToString from "../lib/playerIdToString"; import lowerCaseLastLetter from "../lib/lowerCaseLastLetter"; import { IState } from "./initialState"; import { IMessage } from "../components/Game/onMessage"; -import { Possibilities, GameTurns, Level } from "../lib/constants"; +import { Possibilities, GameTurns, Level, Conn } from "../lib/constants"; import sounds from "../sounds/sounds"; import log from "../lib/dev"; import { INotice } from "../components/Table/assets/types"; +import notifications from "../config/notifications.json"; const { preFlop, flop, turn } = GameTurns; @@ -313,13 +314,9 @@ export const sendMessage = ( dispatch: (arg: object) => void ): void => { if ( - state.connection[node] === "Connected" || + state.connectionStatus.status === Conn.connected || (state.players[node] && state.players[node].connected) ) { - // @todo some messages are sent to the dcv! - if (node !== "dcv") { - node = "player"; - } const m = { type: "setMessage", payload: { @@ -508,15 +505,17 @@ export const toggleMainPot = (dispatch: (arg: object) => void): void => { }; export const updateConnectionStatus = ( - text: string, - level: Level, + status: string, dispatch: (arg: object) => void ): void => { + let level = status === Conn.disconnected ? Level.error : Level.warning + let text = status === Conn.disconnected ? notifications.CONNECTION_FAILED : status dispatch({ type: "updateConnectionStatus", payload: { - text, - level + level, + status, + text } }); }; From 99693e0c3e5e3cdfea802749cae2d3929d9d65fc Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 19:53:31 +1300 Subject: [PATCH 079/113] lint --- src/components/Game/WebSocket.ts | 13 +- src/components/Game/onMessage.ts | 3 +- src/components/Game/types/IMessage.ts | 2 +- src/components/Table/Connections.tsx | 24 ++-- src/components/Table/Table.tsx | 13 +- src/components/Table/assets/style.js | 12 +- src/lib/constants.ts | 22 ++-- src/store/actions.ts | 5 +- src/store/initialState.ts | 27 ++-- src/store/types.ts | 178 +++++++++++++------------- 10 files changed, 147 insertions(+), 152 deletions(-) diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 89c87309..2975b227 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -31,11 +31,7 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { const dispatch: (arg: object) => void = useContext(DispatchContext); const state: IState = useContext(StateContext); const [currentSocketUrl] = useState(server); - const { - sendJsonMessage, - lastJsonMessage, - readyState - } = useWebSocket( + const { sendJsonMessage, lastJsonMessage, readyState } = useWebSocket( currentSocketUrl, STATIC_OPTIONS ); @@ -45,12 +41,12 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { [ReadyState.OPEN]: Conn.connected, [ReadyState.CLOSING]: Conn.disconnecting, [ReadyState.CLOSED]: Conn.disconnected, - [ReadyState.UNINSTANTIATED]: Conn.uninstantiated, + [ReadyState.UNINSTANTIATED]: Conn.uninstantiated }[readyState]; // Send a message if props changes useEffect(() => { - console.log('readyState--', readyState) + console.log("readyState--", readyState); if (message && readyState === ReadyState.OPEN) { sendJsonMessage(message); resetMessage(nodeName, dispatch); @@ -60,11 +56,10 @@ const WebSocket = React.memo(({ message, nodeName, server }: IProps) => { // If the connection status changes, update the state useEffect(() => { if (state.connectionStatus.status !== connectionStatus) { - if (!state.connectionStatus.status) { sendInitMessage(connectionStatus, nodeName, dispatch); } - + updateConnectionStatus(connectionStatus, dispatch); if (connectionStatus === Conn.disconnected) { diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 50ce3075..1aa73ae1 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -92,8 +92,7 @@ export const onMessage = ( state: IState, dispatch: (arg: object) => void ): void => { - - if(!message || nodeName !== Node.player) { + if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; } diff --git a/src/components/Game/types/IMessage.ts b/src/components/Game/types/IMessage.ts index b54c8c4b..e132929b 100644 --- a/src/components/Game/types/IMessage.ts +++ b/src/components/Game/types/IMessage.ts @@ -32,4 +32,4 @@ export interface IMessage { warning_num: number; win_amount?: number; winners?: number[]; -} \ No newline at end of file +} diff --git a/src/components/Table/Connections.tsx b/src/components/Table/Connections.tsx index 5864d3b9..015ba58b 100644 --- a/src/components/Table/Connections.tsx +++ b/src/components/Table/Connections.tsx @@ -20,23 +20,23 @@ const Connections: React.FunctionComponent = () => { `} > return ( + + {nodeType} - {nodeType} - - {connectionStatus.status && ": " + connectionStatus.status} - + {connectionStatus.status && ": " + connectionStatus.status} + )
); diff --git a/src/components/Table/Table.tsx b/src/components/Table/Table.tsx index fcf9a6b4..2460592f 100644 --- a/src/components/Table/Table.tsx +++ b/src/components/Table/Table.tsx @@ -23,10 +23,7 @@ import { TableContainer, TableWrapper, Notice } from "./assets/style"; import "./assets/style.css"; import notifications from "../../config/notifications.json"; import { Conn, NodeType } from "../../lib/constants"; -import { - closeStartupModal, - game -} from "../../store/actions"; +import { closeStartupModal, game } from "../../store/actions"; // This is the current Main component @@ -63,11 +60,15 @@ const Table: React.FunctionComponent = () => { } = state; useEffect(() => { - if (nodeType !== NodeType.dealer && !gameStarted && connectionStatus.status === Conn.connected) { + if ( + nodeType !== NodeType.dealer && + !gameStarted && + connectionStatus.status === Conn.connected + ) { closeStartupModal(dispatch); return game({ gametype: "", pot: [0] }, state, dispatch); } - }, [state]) + }, [state]); // For debugging purposes log the difference betweeen the last and current state useEffect(() => { const difference = diff(previousState, state); diff --git a/src/components/Table/assets/style.js b/src/components/Table/assets/style.js index 9dc0258f..f49a3b42 100644 --- a/src/components/Table/assets/style.js +++ b/src/components/Table/assets/style.js @@ -104,13 +104,13 @@ export const Notice = styled.div` position: absolute; `; -export const pickColor = (status) => { - switch(status) { +export const pickColor = status => { + switch (status) { case Conn.connected: - return "var(--color-primaryLight)" + return "var(--color-primaryLight)"; case Conn.connecting: - return "var(--color-accent)" + return "var(--color-accent)"; case Conn.disconnected: - return "var(--color-danger)" + return "var(--color-danger)"; } -} \ No newline at end of file +}; diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 170fd126..0fa1dd00 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -41,20 +41,20 @@ export enum BetWarnings { } export enum Conn { - connecting = 'Connecting...', - connected = 'Connected', - disconnecting = 'Disconnecting...', - disconnected = 'Disconnected', - uninstantiated = 'Uninstantiated' + connecting = "Connecting...", + connected = "Connected", + disconnecting = "Disconnecting...", + disconnected = "Disconnected", + uninstantiated = "Uninstantiated" } export enum Node { - dcv = 'dcv', - player = 'player', - echo = 'echo' + dcv = "dcv", + player = "player", + echo = "echo" } export enum NodeType { - dealer = 'dealer', - player = 'player' -} \ No newline at end of file + dealer = "dealer", + player = "player" +} diff --git a/src/store/actions.ts b/src/store/actions.ts index 116d3928..2c73a561 100644 --- a/src/store/actions.ts +++ b/src/store/actions.ts @@ -508,8 +508,9 @@ export const updateConnectionStatus = ( status: string, dispatch: (arg: object) => void ): void => { - let level = status === Conn.disconnected ? Level.error : Level.warning - let text = status === Conn.disconnected ? notifications.CONNECTION_FAILED : status + const level = status === Conn.disconnected ? Level.error : Level.warning; + const text = + status === Conn.disconnected ? notifications.CONNECTION_FAILED : status; dispatch({ type: "updateConnectionStatus", payload: { diff --git a/src/store/initialState.ts b/src/store/initialState.ts index 4eba865f..12f0bd86 100644 --- a/src/store/initialState.ts +++ b/src/store/initialState.ts @@ -3,9 +3,8 @@ import { IState } from "./types"; /*eslint-disable @typescript-eslint/camelcase*/ const initialState: IState = { - /********** ME ***********/ - + balance: 0, // The total CHIPS balance the player has in the Pangea Wallet connectionStatus: { level: 1, @@ -16,36 +15,36 @@ const initialState: IState = { holeCards: [], // Cards of the user nodeType: null, userSeat: null, // Where does the user sit (player1, player2, etc) - withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds - + withdrawAddressList: [], // List of addresses where the player can withdraw to. See: https://github.com/chips-blockchain/bet/blob/master/handling_funds.md#withdrawing-the-funds + /********** BACKEND ***********/ // 0 - transaction is still being mined // 1 - backend is ready - backendStatus: 0, + backendStatus: 0, /********** CONTROLS ***********/ - isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game + isStartupModal: true, // Whether the Startup Modal shows at the beginning of the game isDeveloperMode: false, // Whether the app should run in developer mode - + /********** GENERAL GAME INFO ***********/ - + activePlayer: null, // Which seat is the active player dealer: 0, // Which player is the dealer gameStarted: false, - gameType: "", // Game type at the top left corner + gameType: "", // Game type at the top left corner notice: { text: "Choose your seat to begin playing", status: null, level: 1 }, - players: {}, // Object of all players at the table + players: {}, // Object of all players at the table maxPlayers: 9, /********** POKER INFO ***********/ blinds: [1, 2], // Current blinds - small and big one - boardCards: [], + boardCards: [], controls: { showControls: false, showFirstRow: true, @@ -55,13 +54,13 @@ const initialState: IState = { cardsDealt: false, chipsCollected: false, // chips collected to the middle currentChipsStack: 0, // current chips stack paid to enter the game - gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown + gameTurn: 0, // Where are we at the game. 0: preflop, 1: flop, 2: turn, 3: river, 4: showDown handHistory: [], // Log of all palyer actions - handsPlayed: 0, // Total number of hands played in this session + handsPlayed: 0, // Total number of hands played in this session isCashierOpen: false, isLogBox: true, isShowDown: false, - lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI + lastAction: { player: 0, action: null }, // Object that stores the last action so we can dispaly it on the UI // Messages to send to the nodes - when updated, the message will be sent lastMessage: { method: "replay", diff --git a/src/store/types.ts b/src/store/types.ts index 1468e868..e1be48bf 100644 --- a/src/store/types.ts +++ b/src/store/types.ts @@ -1,92 +1,92 @@ import { INotice } from "../components/Table/assets/types"; export interface IPlayer { - isPlaying: boolean; - seat: string; - chips: number; - hasCards: boolean; - showCards: boolean; - isBetting: boolean; - betAmount: number; - playerCards: string[]; - connected: boolean; - } - - export interface IState { - players: { - player1: IPlayer; - player2: IPlayer; - player3: IPlayer; - player4: IPlayer; - player5: IPlayer; - player6: IPlayer; - player7: IPlayer; - player8: IPlayer; - player9: IPlayer; - }; - activePlayer: string; - backendStatus: number; - balance: number; - blinds: [number, number]; - boardCards: string[]; - connection: { - dcv: string; - player1: string; - player2: string; - echo: string; - }; - controls: { - canCheck: boolean; - canRaise: boolean; - showControls: boolean; - showFirstRow: boolean; - }; - cardsDealt: boolean; - chipsCollected: boolean; - connectionStatus: INotice; - currentChipsStack: number; - dealer: number; - depositAddress: string; - gameStarted: boolean; - gameTurn: 0 | 1 | 2 | 3 | 4; - gameType: string; - handHistory: { action: string; timeStamp: number }[]; - handsPlayed: number; - holeCards: string[]; - isCashierOpen: boolean; - isDeveloperMode: boolean; - isLogBox: boolean; - isShowDown: boolean; - isStartupModal: boolean; - lastAction: { player: number; action: string | null }; - lastMessage: object; - nodesSet: boolean; - notice: INotice; - nodes: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - nodeType: string; - maxPlayers: number; - message: { - dcv: string | null; - player1: string | null; - player2: string | null; - echo: string | null; - }; - minRaiseTo: number; - options: { - showPotCounter: boolean; - }; - pot: number[]; - seats: number; - showDealer: boolean; - showMainPot: boolean; - totalPot: number; - toCall: number; - userSeat: string; - winners: string[] | null; - withdrawAddressList: string[]; - } \ No newline at end of file + isPlaying: boolean; + seat: string; + chips: number; + hasCards: boolean; + showCards: boolean; + isBetting: boolean; + betAmount: number; + playerCards: string[]; + connected: boolean; +} + +export interface IState { + players: { + player1: IPlayer; + player2: IPlayer; + player3: IPlayer; + player4: IPlayer; + player5: IPlayer; + player6: IPlayer; + player7: IPlayer; + player8: IPlayer; + player9: IPlayer; + }; + activePlayer: string; + backendStatus: number; + balance: number; + blinds: [number, number]; + boardCards: string[]; + connection: { + dcv: string; + player1: string; + player2: string; + echo: string; + }; + controls: { + canCheck: boolean; + canRaise: boolean; + showControls: boolean; + showFirstRow: boolean; + }; + cardsDealt: boolean; + chipsCollected: boolean; + connectionStatus: INotice; + currentChipsStack: number; + dealer: number; + depositAddress: string; + gameStarted: boolean; + gameTurn: 0 | 1 | 2 | 3 | 4; + gameType: string; + handHistory: { action: string; timeStamp: number }[]; + handsPlayed: number; + holeCards: string[]; + isCashierOpen: boolean; + isDeveloperMode: boolean; + isLogBox: boolean; + isShowDown: boolean; + isStartupModal: boolean; + lastAction: { player: number; action: string | null }; + lastMessage: object; + nodesSet: boolean; + notice: INotice; + nodes: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + nodeType: string; + maxPlayers: number; + message: { + dcv: string | null; + player1: string | null; + player2: string | null; + echo: string | null; + }; + minRaiseTo: number; + options: { + showPotCounter: boolean; + }; + pot: number[]; + seats: number; + showDealer: boolean; + showMainPot: boolean; + totalPot: number; + toCall: number; + userSeat: string; + winners: string[] | null; + withdrawAddressList: string[]; +} From 4df02c08b55b3c6d9149ff0d5c1cb839640b41a3 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Wed, 30 Sep 2020 19:56:41 +1300 Subject: [PATCH 080/113] run test on push --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 43bbe7ce..508dcbfb 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "src/electron.js", "husky": { "hooks": { - "pre-commit": "npm test && node_modules/eslint/bin/eslint.js './src/' --ext .js,.ts,.tsx --fix" + "pre-commit": "node_modules/eslint/bin/eslint.js './src/' --ext .js,.ts,.tsx --fix", + "pre-push": "npm test" } }, "scripts": { From 4f1207b3bc8adb1a419b1408fccffed142fc61d2 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:19:35 +1300 Subject: [PATCH 081/113] updated tests and updated reference to IState --- src/components/Cashier/Cashier.tsx | 2 +- src/components/Cashier/Deposit.tsx | 2 +- src/components/Cashier/Withdraw.tsx | 2 +- src/components/Controls/Controls.tsx | 2 +- src/components/Controls/Slider.tsx | 2 +- .../DeveloperMode/DeveloperMode.tsx | 2 +- src/components/Game/Game.tsx | 2 +- src/components/Game/WebSocket.ts | 9 ++-- .../Game/__tests__/onMessage.test.ts | 50 ++++++++++--------- src/components/Game/helpers/index.ts | 2 +- src/components/Game/onMessage.ts | 5 +- src/components/Modal/CustomIP.tsx | 2 +- src/components/Modal/StartupModal.tsx | 2 +- src/components/Modal/TableSelect.tsx | 2 +- src/components/Table/TotalPot.tsx | 2 +- src/lib/TestStateProvider.tsx | 3 +- 16 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/components/Cashier/Cashier.tsx b/src/components/Cashier/Cashier.tsx index a6bd278b..a65ee29e 100644 --- a/src/components/Cashier/Cashier.tsx +++ b/src/components/Cashier/Cashier.tsx @@ -5,7 +5,7 @@ import Withdraw from "./Withdraw"; import { Button } from "../Controls"; import { sendMessage } from "../../store/actions"; import { updateStateValue } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { CashierButton } from "./assets/style"; // This modal opens up when the player clicks the Cashier button and allows the player to diff --git a/src/components/Cashier/Deposit.tsx b/src/components/Cashier/Deposit.tsx index 62d3551a..bdd93e67 100644 --- a/src/components/Cashier/Deposit.tsx +++ b/src/components/Cashier/Deposit.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import { css } from "@emotion/core"; import ReactTooltip from "react-tooltip"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import balanceWithDecimals from "../../lib/balanceWithDecimals"; import isValidAddress from "../../lib/isValidAddress"; import { ModalButtonsWrapper } from "../Modal/assets/style"; diff --git a/src/components/Cashier/Withdraw.tsx b/src/components/Cashier/Withdraw.tsx index 9b90d77c..cab3bd5d 100644 --- a/src/components/Cashier/Withdraw.tsx +++ b/src/components/Cashier/Withdraw.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import { css } from "@emotion/core"; import { useForm } from "react-hook-form"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import balanceWithDecimals from "../../lib/balanceWithDecimals"; import isValidAddress from "../../lib/isValidAddress"; import { ModalButtonsWrapper } from "../Modal/assets/style"; diff --git a/src/components/Controls/Controls.tsx b/src/components/Controls/Controls.tsx index 955826b3..5fc94aa7 100644 --- a/src/components/Controls/Controls.tsx +++ b/src/components/Controls/Controls.tsx @@ -14,7 +14,7 @@ import { showControls } from "../../store/actions"; import log from "../../lib/dev"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { IMessage } from "../Game/onMessage"; import { Possibilities, PlayerActions } from "../../lib/constants"; diff --git a/src/components/Controls/Slider.tsx b/src/components/Controls/Slider.tsx index 75835099..f0a20331 100644 --- a/src/components/Controls/Slider.tsx +++ b/src/components/Controls/Slider.tsx @@ -2,7 +2,7 @@ import { useContext, useEffect } from "react"; import { StateContext } from "../../store/context"; import RCSlider from "rc-slider"; import "./assets/slider.css"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { SliderContainer, SliderWrapper } from "./assets/style"; // This is the Slider component used in Controls to set bet/raise amount diff --git a/src/components/DeveloperMode/DeveloperMode.tsx b/src/components/DeveloperMode/DeveloperMode.tsx index 02cb57f5..d6802337 100644 --- a/src/components/DeveloperMode/DeveloperMode.tsx +++ b/src/components/DeveloperMode/DeveloperMode.tsx @@ -15,7 +15,7 @@ import { playerJoin } from "../../store/actions"; import { DispatchContext, StateContext } from "../../store/context"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This component is only used for testing purposes while in development diff --git a/src/components/Game/Game.tsx b/src/components/Game/Game.tsx index 03fba11d..444660b0 100644 --- a/src/components/Game/Game.tsx +++ b/src/components/Game/Game.tsx @@ -3,7 +3,7 @@ import WebSocket from "./WebSocket"; import { DispatchContext, StateContext } from "../../store/context"; import { Button } from "../Controls"; import { sendMessage } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { GameWrapper, DealerContainer } from "./assets/style"; // This component is responsible for the WebSocket connections, as well as displaying the main Start button diff --git a/src/components/Game/WebSocket.ts b/src/components/Game/WebSocket.ts index 2975b227..e1c4dd21 100644 --- a/src/components/Game/WebSocket.ts +++ b/src/components/Game/WebSocket.ts @@ -2,16 +2,13 @@ import React, { useState, useEffect, useContext } from "react"; import useWebSocket, { ReadyState } from "react-use-websocket"; import { DispatchContext, StateContext } from "../../store/context"; -import { onMessage, onMessage_player } from "./onMessage"; -import { IState } from "../../store/initialState"; -import notifications from "../../config/notifications.json"; -import { Level, Conn, Node, NodeType } from "../../lib/constants"; +import { onMessage } from "./onMessage"; +import { IState } from "../../store/types"; +import { Conn } from "../../lib/constants"; import { resetMessage, sendInitMessage, - closeStartupModal, updateStateValue, - game, updateConnectionStatus } from "../../store/actions"; diff --git a/src/components/Game/__tests__/onMessage.test.ts b/src/components/Game/__tests__/onMessage.test.ts index caf8dbfe..12c4d354 100644 --- a/src/components/Game/__tests__/onMessage.test.ts +++ b/src/components/Game/__tests__/onMessage.test.ts @@ -1,9 +1,10 @@ /*eslint-disable @typescript-eslint/camelcase*/ -import { IMessage, onMessage_player } from "../onMessage"; +import { IMessage, onMessage } from "../onMessage"; import state from "../../../store/testState"; -import { IState } from "../../../store/initialState"; +import { IState } from "../../../store/types"; import * as actions from "../../../store/actions"; +import { IncomingMessage } from "electron"; const dispatch = jest.fn(); const updateStateValueSpy = jest.spyOn(actions, "updateStateValue"); @@ -32,28 +33,29 @@ export const receiveMessage = ( win_amount, winners } = message; - - onMessage_player( - JSON.stringify({ - action, - addr, - amount, - backend_status, - balance, - big_blind, - bet_amount, - deal, - max_players, - method, - playerid, - possibilities, - showInfo, - small_blind, - table_stack_in_chips, - win_amount, - winners - }), - `player${userSeat + 1}`, + + const msg: IMessage = { + action, + addr, + amount, + backend_status, + balance, + big_blind, + bet_amount, + deal, + max_players, + method, + playerid, + possibilities, + showInfo, + small_blind, + table_stack_in_chips, + win_amount, + winners + } + onMessage( + msg, + 'player', stateToTest, dispatch ); diff --git a/src/components/Game/helpers/index.ts b/src/components/Game/helpers/index.ts index fee4de9c..c745ba01 100644 --- a/src/components/Game/helpers/index.ts +++ b/src/components/Game/helpers/index.ts @@ -1,4 +1,4 @@ -import { IState } from "../../../store/initialState"; +import { IState } from "../../../store/types"; import { bet, setLastAction, addToHandHistory } from "../../../store/actions"; import log from "../../../lib/dev"; import playerStringToId from "../../../lib/playerStringToId"; diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index 1aa73ae1..afdd3674 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -40,7 +40,7 @@ import { import log from "../../lib/dev"; import playerStringToId from "../../lib/playerStringToId"; import numberWithCommas from "../../lib/numberWithCommas"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import playerIdToString from "../../lib/playerIdToString"; import arrayToSentence from "../../lib/arrayToSentence"; import lowerCaseLastLetter from "../../lib/lowerCaseLastLetter"; @@ -65,6 +65,7 @@ export interface IMessage { }; game?: { gametype: string; pot: number[] }; gui_playerID?: number; + max_players: number; method?: string; minRaiseTo?: number; player_funds?: number[]; @@ -91,7 +92,7 @@ export const onMessage = ( nodeName: string, state: IState, dispatch: (arg: object) => void -): void => { +): void => {n if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; diff --git a/src/components/Modal/CustomIP.tsx b/src/components/Modal/CustomIP.tsx index fd110c81..479aa778 100644 --- a/src/components/Modal/CustomIP.tsx +++ b/src/components/Modal/CustomIP.tsx @@ -3,7 +3,7 @@ import { useContext, useState, useEffect } from "react"; import { Tab, Tabs, TabList, TabPanel } from "react-tabs"; import { DispatchContext, StateContext } from "../../store/context"; import { game, updateStateValue } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import Button from "../Controls/Button"; import { ModalButtonsWrapper, ConnectionStatus } from "./assets/style"; import { Input } from "../Form"; diff --git a/src/components/Modal/StartupModal.tsx b/src/components/Modal/StartupModal.tsx index 352e2b12..d441a0ec 100644 --- a/src/components/Modal/StartupModal.tsx +++ b/src/components/Modal/StartupModal.tsx @@ -2,7 +2,7 @@ import React from "react"; import Modal from "./Modal"; import CustomIP from "./CustomIP"; import TableSelect from "./TableSelect"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This is the modal that appears at the startup and let's the user to join a table diff --git a/src/components/Modal/TableSelect.tsx b/src/components/Modal/TableSelect.tsx index 5d0fcb14..98fafa18 100644 --- a/src/components/Modal/TableSelect.tsx +++ b/src/components/Modal/TableSelect.tsx @@ -8,7 +8,7 @@ import { updateStateValue, setUserSeat } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; import { Table, TableArea, ModalButtonsWrapper } from "./assets/style"; interface IProps { diff --git a/src/components/Table/TotalPot.tsx b/src/components/Table/TotalPot.tsx index ac4a7860..79a592e6 100644 --- a/src/components/Table/TotalPot.tsx +++ b/src/components/Table/TotalPot.tsx @@ -2,7 +2,7 @@ import { css } from "@emotion/core"; import { useEffect } from "react"; import numberWithCommas from "../../lib/numberWithCommas"; import { updateMainPot, updateTotalPot } from "../../store/actions"; -import { IState } from "../../store/initialState"; +import { IState } from "../../store/types"; // This component shows the total pot amount right above the boardCards diff --git a/src/lib/TestStateProvider.tsx b/src/lib/TestStateProvider.tsx index 2358379b..9ec89afb 100644 --- a/src/lib/TestStateProvider.tsx +++ b/src/lib/TestStateProvider.tsx @@ -1,6 +1,7 @@ import { useReducer } from "react"; import { StateContext, DispatchContext } from "../store/context"; -import initialState, { IState } from "../store/initialState"; +import initialState from "../store/initialState"; +import { IState } from "../store/types"; import reducer from "../store/reducer"; const TestStateProvider: React.FunctionComponent = ({ children }) => { From 6c6f3bc508d9c9fb81563bbd14822db370866da6 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:25:15 +1300 Subject: [PATCH 082/113] removed a typo --- src/components/Game/__tests__/onMessage.test.ts | 11 +++-------- src/components/Game/onMessage.ts | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/components/Game/__tests__/onMessage.test.ts b/src/components/Game/__tests__/onMessage.test.ts index 12c4d354..e33465e1 100644 --- a/src/components/Game/__tests__/onMessage.test.ts +++ b/src/components/Game/__tests__/onMessage.test.ts @@ -33,7 +33,7 @@ export const receiveMessage = ( win_amount, winners } = message; - + const msg: IMessage = { action, addr, @@ -52,13 +52,8 @@ export const receiveMessage = ( table_stack_in_chips, win_amount, winners - } - onMessage( - msg, - 'player', - stateToTest, - dispatch - ); + }; + onMessage(msg, "player", stateToTest, dispatch); }; /** diff --git a/src/components/Game/onMessage.ts b/src/components/Game/onMessage.ts index afdd3674..9e8c411c 100644 --- a/src/components/Game/onMessage.ts +++ b/src/components/Game/onMessage.ts @@ -92,7 +92,7 @@ export const onMessage = ( nodeName: string, state: IState, dispatch: (arg: object) => void -): void => {n +): void => { if (!message || nodeName !== Node.player) { log("Received an unexpected message from " + nodeName, "received", message); return; From 631e79d85426a7df76a6591daf9704c98efbac57 Mon Sep 17 00:00:00 2001 From: piggydoughnut Date: Thu, 1 Oct 2020 12:56:30 +1300 Subject: [PATCH 083/113] moved dealer buttons from Game to Table, added helper for isPlayer isDealer --- src/components/Game/Game.tsx | 25 +++---------------------- src/components/Table/Table.tsx | 34 ++++++++++++++++++++++++++-------- src/lib/helper.ts | 9 +++++++++ 3 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 src/lib/helper.ts diff --git a/src/components/Game/Game.tsx b/src/components/Game/Game.tsx index 444660b0..1ba8d3cf 100644 --- a/src/components/Game/Game.tsx +++ b/src/components/Game/Game.tsx @@ -1,10 +1,8 @@ import { useContext } from "react"; import WebSocket from "./WebSocket"; import { DispatchContext, StateContext } from "../../store/context"; -import { Button } from "../Controls"; -import { sendMessage } from "../../store/actions"; import { IState } from "../../store/types"; -import { GameWrapper, DealerContainer } from "./assets/style"; +import { isDealer, isPlayer } from "../../lib/helper"; // This component is responsible for the WebSocket connections, as well as displaying the main Start button @@ -19,26 +17,9 @@ const Game: React.FunctionComponent = () => { const SOCKET_URL_DCV = `ws://${nodes.dcv}:9000`; const SOCKET_URL_PLAYER1 = `ws://${[Object.values(nodes)[0]]}:9000`; - const startGame = () => (): void => { - sendMessage({ method: "game" }, "dcv", state, dispatch); - }; - - const resetGame = () => (): void => { - sendMessage({ method: "reset" }, "dcv", state, dispatch); - }; - return (
- - {nodeType === "dealer" && ( - -