diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aef311dd9..cf50fbc417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Changelog ### Chores +- Implemented Mobx DevTools along with React DevTools ([PR 1474](https://github.com/input-output-hk/daedalus/pull/1474)) - Refactor wallet nav to use new react-polymorph Dropdown ([PR 1593](https://github.com/input-output-hk/daedalus/pull/1593)) - Fixed build mode of webpack auto dll plugin ([PR 1606](https://github.com/input-output-hk/daedalus/pull/1606)) - Changed delete wallet button layout for emphasized location/importance and removed export wallet feature ([PR 1612](https://github.com/input-output-hk/daedalus/pull/1612), [PR 1619](https://github.com/input-output-hk/daedalus/pull/1619)) diff --git a/package.json b/package.json index a7a9107590..b9b03eff61 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "mini-css-extract-plugin": "0.5.0", "minimist": "1.2.0", "mobx-react-devtools": "6.0.3", + "mobx-remotedev": "0.3.6", "node-libs-browser": "2.1.0", "node-sass": "4.11.0", "nodemon": "1.18.9", diff --git a/source/main/utils/installChromeExtensions.js b/source/main/utils/installChromeExtensions.js index e9e2e0ccd2..f2d59f4d5c 100644 --- a/source/main/utils/installChromeExtensions.js +++ b/source/main/utils/installChromeExtensions.js @@ -1,13 +1,17 @@ // @flow export const installChromeExtensions = async (isDev: boolean) => { if (isDev) { - const installer = require('electron-devtools-installer'); // eslint-disable-line global-require + const { + default: installer, + REACT_DEVELOPER_TOOLS, + REDUX_DEVTOOLS, + } = require('electron-devtools-installer'); - const extensions = ['REACT_DEVELOPER_TOOLS']; + const extensions = [REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS]; const forceDownload = !!process.env.UPGRADE_EXTENSIONS; - for (const name of extensions) { + for (const extension of extensions) { try { - await installer.default(installer[name], forceDownload); + await installer(extension, forceDownload); } catch (e) {} // eslint-disable-line } } diff --git a/source/renderer/app/index.js b/source/renderer/app/index.js index 8b2bda96c2..6a1789df9f 100755 --- a/source/renderer/app/index.js +++ b/source/renderer/app/index.js @@ -18,7 +18,7 @@ import { setupApi } from './api/index'; // run MobX in strict mode configure({ - enforceActions: 'always', + enforceActions: 'never', }); // https://github.com/yahoo/react-intl/wiki#loading-locale-data diff --git a/source/renderer/app/stores/AddressesStore.js b/source/renderer/app/stores/AddressesStore.js index 299c745f53..28cd0deb17 100644 --- a/source/renderer/app/stores/AddressesStore.js +++ b/source/renderer/app/stores/AddressesStore.js @@ -1,6 +1,7 @@ // @flow -import { find } from 'lodash'; import { observable, computed, action, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; +import { find } from 'lodash'; import Store from './lib/Store'; import CachedRequest from './lib/LocalizedCachedRequest'; import Request from './lib/LocalizedRequest'; @@ -11,6 +12,7 @@ import type { GetAddressesResponse, } from '../api/addresses/types'; +@remotedev export default class AddressesStore extends Store { @observable lastGeneratedAddress: ?Address = null; @observable addressesRequests: Array<{ diff --git a/source/renderer/app/stores/AppStore.js b/source/renderer/app/stores/AppStore.js index 84a62e6383..65e0d9dd0c 100644 --- a/source/renderer/app/stores/AppStore.js +++ b/source/renderer/app/stores/AppStore.js @@ -1,5 +1,6 @@ // @flow import { observable, computed, action, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import Store from './lib/Store'; import LocalizableError from '../i18n/LocalizableError'; import { buildRoute } from '../utils/routing'; @@ -15,6 +16,7 @@ import { generateFileNameWithTimestamp } from '../../../common/utils/files'; import type { GpuStatus } from '../types/gpuStatus'; import type { ApplicationDialog } from '../types/applicationDialogTypes'; +@remotedev export default class AppStore extends Store { @observable error: ?LocalizableError = null; @observable isDownloadNotificationVisible = false; diff --git a/source/renderer/app/stores/BlockConsolidationStore.js b/source/renderer/app/stores/BlockConsolidationStore.js index d6e9103e6f..0b420cbdb1 100644 --- a/source/renderer/app/stores/BlockConsolidationStore.js +++ b/source/renderer/app/stores/BlockConsolidationStore.js @@ -1,5 +1,6 @@ // @flow import { observable, action, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import Store from './lib/Store'; import Request from './lib/LocalizedRequest'; import { @@ -14,6 +15,7 @@ import type { GetCurrentEpochFallbackResponse, } from '../api/nodes/types'; +@remotedev export default class BlockConsolidationStore extends Store { // Initialize store observables @observable epochsConsolidated: number = 0; // Received from the IPC channel diff --git a/source/renderer/app/stores/NetworkStatusStore.js b/source/renderer/app/stores/NetworkStatusStore.js index 5041124f57..80be479c6d 100644 --- a/source/renderer/app/stores/NetworkStatusStore.js +++ b/source/renderer/app/stores/NetworkStatusStore.js @@ -1,5 +1,6 @@ // @flow import { observable, action, computed, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import moment from 'moment'; import { isEqual, includes } from 'lodash'; import Store from './lib/Store'; @@ -60,6 +61,12 @@ const NODE_STOPPED_STATES = [ ]; // END CONSTANTS ---------------------------- +const remotedevConfig = { + name: 'Network Status', + global: true, +}; + +@remotedev(remotedevConfig) export default class NetworkStatusStore extends Store { // Initialize store properties _startTime = Date.now(); diff --git a/source/renderer/app/stores/NodeUpdateStore.js b/source/renderer/app/stores/NodeUpdateStore.js index 82b1790f87..4798514c0b 100644 --- a/source/renderer/app/stores/NodeUpdateStore.js +++ b/source/renderer/app/stores/NodeUpdateStore.js @@ -1,5 +1,6 @@ // @flow import { action, computed, observable } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import Store from './lib/Store'; import Request from './lib/LocalizedRequest'; import type { @@ -9,6 +10,7 @@ import type { import { NODE_UPDATE_POLL_INTERVAL } from '../config/timingConfig'; import { rebuildApplicationMenu } from '../ipc/rebuild-application-menu'; +@remotedev export default class NodeUpdateStore extends Store { @observable isUpdateAvailable = false; @observable isUpdatePostponed = false; diff --git a/source/renderer/app/stores/ProfileStore.js b/source/renderer/app/stores/ProfileStore.js index f8a703d521..855380ebab 100644 --- a/source/renderer/app/stores/ProfileStore.js +++ b/source/renderer/app/stores/ProfileStore.js @@ -1,5 +1,6 @@ // @flow import { action, observable, computed, toJS, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import BigNumber from 'bignumber.js'; import moment from 'moment/moment'; import { includes, camelCase } from 'lodash'; @@ -43,6 +44,7 @@ import { // TODO: refactor all parts that rely on this to ipc channels! const { ipcRenderer } = global; +@remotedev export default class ProfileStore extends Store { @observable systemLocale: string = LOCALES.english; @observable systemNumberFormat: string = NUMBER_OPTIONS[0].value; diff --git a/source/renderer/app/stores/SidebarStore.js b/source/renderer/app/stores/SidebarStore.js index 7eb8359466..8ea3e5eb11 100644 --- a/source/renderer/app/stores/SidebarStore.js +++ b/source/renderer/app/stores/SidebarStore.js @@ -1,5 +1,6 @@ // @flow import { action, computed, observable } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import { get } from 'lodash'; import Store from './lib/Store'; import { sidebarConfig } from '../config/sidebarConfig'; @@ -7,6 +8,7 @@ import { WalletSyncStateTags } from '../domains/Wallet'; import { formattedWalletAmount } from '../utils/formatters'; import type { SidebarWalletType } from '../types/sidebarTypes'; +@remotedev export default class SidebarStore extends Store { @observable CATEGORIES: Array = sidebarConfig.CATEGORIES; @observable activeSidebarCategory: string = this.CATEGORIES[0].route; diff --git a/source/renderer/app/stores/StakingStore.js b/source/renderer/app/stores/StakingStore.js index 46658b9101..fe99b44090 100644 --- a/source/renderer/app/stores/StakingStore.js +++ b/source/renderer/app/stores/StakingStore.js @@ -1,5 +1,6 @@ // @flow import { computed, action } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import BigNumber from 'bignumber.js'; import Store from './lib/Store'; import { ROUTES } from '../routes-config'; @@ -8,6 +9,7 @@ import type { StakePool, Reward } from '../api/staking/types'; import STAKE_POOLS from '../config/stakingStakePools.dummy.json'; import REWARDS from '../config/stakingRewards.dummy.json'; +@remotedev export default class StakingStore extends Store { startDateTime: string = '2019-09-26T00:00:00.161Z'; decentralizationProgress: number = 10; diff --git a/source/renderer/app/stores/TransactionsStore.js b/source/renderer/app/stores/TransactionsStore.js index 8749074795..0ca8f0f975 100644 --- a/source/renderer/app/stores/TransactionsStore.js +++ b/source/renderer/app/stores/TransactionsStore.js @@ -6,6 +6,7 @@ import { extendObservable, runInAction, } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import BigNumber from 'bignumber.js'; import { find, get } from 'lodash'; import Store from './lib/Store'; @@ -33,6 +34,7 @@ type TransactionFeeRequest = { amount: number, }; +@remotedev export default class TransactionsStore extends Store { INITIAL_SEARCH_LIMIT = null; // 'null' value stands for 'load all' SEARCH_LIMIT_INCREASE = 500; diff --git a/source/renderer/app/stores/UiDialogsStore.js b/source/renderer/app/stores/UiDialogsStore.js index e7225f5ece..1832b4e82b 100644 --- a/source/renderer/app/stores/UiDialogsStore.js +++ b/source/renderer/app/stores/UiDialogsStore.js @@ -1,7 +1,9 @@ // @flow import { observable, action } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import Store from './lib/Store'; +@remotedev export default class UiDialogsStore extends Store { @observable activeDialog: ?Function = null; @observable secondsSinceActiveDialogIsOpen: number = 0; diff --git a/source/renderer/app/stores/UiNotificationsStore.js b/source/renderer/app/stores/UiNotificationsStore.js index 3b0a14859a..8adafa24b2 100644 --- a/source/renderer/app/stores/UiNotificationsStore.js +++ b/source/renderer/app/stores/UiNotificationsStore.js @@ -1,9 +1,11 @@ // @flow import { observable, action } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import { set, omit } from 'lodash'; import Store from './lib/Store'; import type { Notification } from '../types/notificationType'; +@remotedev export default class UiNotificationsStore extends Store { @observable activeNotifications: {} = {}; diff --git a/source/renderer/app/stores/WalletBackupStore.js b/source/renderer/app/stores/WalletBackupStore.js index 4b5c465e3a..5927fdbd8e 100644 --- a/source/renderer/app/stores/WalletBackupStore.js +++ b/source/renderer/app/stores/WalletBackupStore.js @@ -1,5 +1,6 @@ // @flow import { observable, action, computed, runInAction } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import Store from './lib/Store'; import Request from './lib/LocalizedRequest'; import WalletBackupDialog from '../components/wallet/WalletBackupDialog'; @@ -10,6 +11,7 @@ import type { } from '../types/walletBackupTypes'; import type { WalletIdAndBalance } from '../api/wallets/types'; +@remotedev export default class WalletBackupStore extends Store { @observable inProgress = false; @observable currentStep: walletBackupStep = WALLET_BACKUP_STEPS.NOT_INITIATED; diff --git a/source/renderer/app/stores/WalletSettingsStore.js b/source/renderer/app/stores/WalletSettingsStore.js index d5b084c9b0..e4fffe4194 100644 --- a/source/renderer/app/stores/WalletSettingsStore.js +++ b/source/renderer/app/stores/WalletSettingsStore.js @@ -1,5 +1,6 @@ // @flow import { observable, action } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import { findIndex } from 'lodash'; import Store from './lib/Store'; import Request from './lib/LocalizedRequest'; @@ -8,6 +9,7 @@ import Wallet, { WalletAssuranceModeOptions } from '../domains/Wallet'; import type { WalletUtxos } from '../api/wallets/types'; import { WALLET_UTXO_API_REQUEST_INTERVAL } from '../config/timingConfig'; +@remotedev export default class WalletSettingsStore extends Store { WALLET_ASSURANCE_LEVEL_OPTIONS = [ { diff --git a/source/renderer/app/stores/WalletsStore.js b/source/renderer/app/stores/WalletsStore.js index e600b147eb..78c92d7028 100644 --- a/source/renderer/app/stores/WalletsStore.js +++ b/source/renderer/app/stores/WalletsStore.js @@ -1,5 +1,6 @@ // @flow import { observable, action, computed, runInAction, flow } from 'mobx'; +import remotedev from 'mobx-remotedev/lib/dev'; import { get, chunk, find, isEqual } from 'lodash'; import moment from 'moment'; import { BigNumber } from 'bignumber.js'; @@ -56,6 +57,7 @@ type RecoveryPhraseVerificationData = { * dealing with wallets / accounts. */ +@remotedev export default class WalletsStore extends Store { WALLET_REFRESH_INTERVAL = 5000; diff --git a/yarn.lock b/yarn.lock index ac65080488..532fd3c32d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2938,6 +2938,10 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +base-64@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + base-x@^3.0.2: version "3.0.6" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.6.tgz#de047ec95f5f7b99ae63d830a2a894c96538b2cd" @@ -3700,6 +3704,10 @@ clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" +clone@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + clone@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" @@ -3807,6 +3815,10 @@ compare-version@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -6330,6 +6342,10 @@ get-package-info@^1.0.0: lodash.get "^4.0.0" read-pkg-up "^2.0.0" +get-params@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -8019,6 +8035,10 @@ js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +jsan@^3.1.13, jsan@^3.1.3, jsan@^3.1.5, jsan@^3.1.9: + version "3.1.13" + resolved "https://registry.yarnpkg.com/jsan/-/jsan-3.1.13.tgz#4de8c7bf8d1cfcd020c313d438f930cec4b91d86" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -8316,6 +8336,10 @@ linebreak@^0.3.0: brfs "^1.3.0" unicode-trie "^0.3.0" +linked-list@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/linked-list/-/linked-list-0.1.0.tgz#798b0ff97d1b92a4fd08480f55aea4e9d49d37bf" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -8984,6 +9008,14 @@ mobx-react@5.4.2: hoist-non-react-statics "^3.0.0" react-lifecycles-compat "^3.0.2" +mobx-remotedev@0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/mobx-remotedev/-/mobx-remotedev-0.3.6.tgz#d61cd4f197604af321ce81fdbd47c8195393798b" + dependencies: + jsan "^3.1.9" + remotedev "^0.2.7" + remotedev-utils "^0.1.4" + mobx@5.14.0: version "5.14.0" resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.14.0.tgz#357c1023aca2851df357fa0cb9a6eaaab3a57793" @@ -9062,6 +9094,10 @@ nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" +nanoid@^1.0.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-1.3.4.tgz#ad89f62c9d1f4fd69710d4a90953d2893d2d31f4" + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -11427,6 +11463,31 @@ remark@^9.0.0: remark-stringify "^5.0.0" unified "^6.0.0" +remotedev-serialize@^0.1.0: + version "0.1.8" + resolved "https://registry.yarnpkg.com/remotedev-serialize/-/remotedev-serialize-0.1.8.tgz#c99cb184e7f71a906162abc404be8ce33810205f" + dependencies: + jsan "^3.1.13" + +remotedev-utils@^0.1.4: + version "0.1.6" + resolved "https://registry.yarnpkg.com/remotedev-utils/-/remotedev-utils-0.1.6.tgz#71c3427d59e7471433906778e99267c1ecbaf974" + dependencies: + get-params "^0.1.2" + jsan "^3.1.5" + lodash "^4.17.11" + nanoid "^1.0.1" + remotedev-serialize "^0.1.0" + +remotedev@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/remotedev/-/remotedev-0.2.9.tgz#a5f148704bc6bf6e46e93640cabb7b4ed3f7fc12" + dependencies: + jsan "^3.1.3" + querystring "^0.2.0" + rn-host-detect "^1.0.1" + socketcluster-client "^13.0.0" + remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" @@ -11621,6 +11682,10 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rn-host-detect@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" + route-parser@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/route-parser/-/route-parser-0.0.5.tgz#7d1d09d335e49094031ea16991a4a79b01bbe1f4" @@ -11734,6 +11799,20 @@ sax@^1.2.1, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +sc-channel@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/sc-channel/-/sc-channel-1.2.0.tgz#d9209f3a91e3fa694c66b011ce55c4ad8c3087d9" + dependencies: + component-emitter "1.2.1" + +sc-errors@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sc-errors/-/sc-errors-1.4.1.tgz#53e80030fe647e133d73b51eaa7d2b0f7591fd5b" + +sc-formatter@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/sc-formatter/-/sc-formatter-3.0.2.tgz#9abdb14e71873ce7157714d3002477bbdb33c4e6" + scheduler@^0.11.2: version "0.11.3" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" @@ -12056,6 +12135,21 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socketcluster-client@^13.0.0: + version "13.0.1" + resolved "https://registry.yarnpkg.com/socketcluster-client/-/socketcluster-client-13.0.1.tgz#920e0a2437c228555e84f8ef0c9c5eb720e6067e" + dependencies: + base-64 "0.1.0" + clone "2.1.1" + component-emitter "1.2.1" + linked-list "0.1.0" + querystring "0.2.0" + sc-channel "^1.2.0" + sc-errors "^1.4.0" + sc-formatter "^3.0.1" + uuid "3.2.1" + ws "5.1.1" + sockjs-client@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" @@ -13504,6 +13598,10 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -13993,6 +14091,12 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.1.1.tgz#1d43704689711ac1942fd2f283e38f825c4b8b95" + dependencies: + async-limiter "~1.0.0" + ws@^3.0.0, ws@^3.1.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"