From b22e28dc441f60f75784768a3b9896f3e932a43d Mon Sep 17 00:00:00 2001 From: uwap Date: Fri, 10 Nov 2017 19:45:44 +0100 Subject: [PATCH] First sketch of ui types --- .eslintrc.js | 5 + config/rzl.js | 2 +- package.json | 6 +- src/components/App.js | 12 ++- src/components/SideBar.js | 1 + src/components/UiItemList.js | 88 +++++++++++++++ src/utils/parseIconName.js | 10 ++ yarn.lock | 202 ++++++++++++++++++----------------- 8 files changed, 221 insertions(+), 105 deletions(-) create mode 100644 src/components/UiItemList.js create mode 100644 src/utils/parseIconName.js diff --git a/.eslintrc.js b/.eslintrc.js index ea33d35..83cca54 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -126,6 +126,11 @@ module.exports = { "space-before-blocks": "error", "quotes": ["error", "double"], + // ES6 + "arrow-spacing": "error", + "arrow-parens": "warning", + "no-confusing-arrow": ["error", {"allowParens": true}], + // react "react/prop-types": "off", "react/display-name": "off", diff --git a/config/rzl.js b/config/rzl.js index 6561b2c..088e479 100644 --- a/config/rzl.js +++ b/config/rzl.js @@ -350,7 +350,7 @@ const config : Config = { name: "Rundumleuchte", position: [310,275], icon: "alarm-light", - iconColor: ({runumleuchte}) => rundumleuchte == "on" ? "#CCCC00" : "#000000", + iconColor: ({rundumleuchte}) => rundumleuchte == "on" ? "#CCCC00" : "#000000", ui: [ { type: "toggle", diff --git a/package.json b/package.json index 2b83983..9c92663 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,10 @@ "mdi": "^2.0.46", "mqtt": "^2.11.0", "ramda": "^0.24.1", - "react": "^15.6.1", - "react-dom": "^15.6.1", + "react": "^16.0.0", + "react-dom": "^16.0.0", "react-leaflet": "^1.5.0", - "react-tap-event-plugin": "^2.0.1", + "react-tap-event-plugin": "^3.0.0", "redux": "^3.7.2" }, "devDependencies": { diff --git a/src/components/App.js b/src/components/App.js index bd44a09..4865bd8 100644 --- a/src/components/App.js +++ b/src/components/App.js @@ -10,6 +10,7 @@ import * as Colors from "material-ui/colors"; import SideBar from "components/SideBar"; import ControlMap from "components/ControlMap"; import TopBar from "components/TopBar"; +import UiItemList from "components/UiItemList"; export type AppProps = { config: Config @@ -27,7 +28,10 @@ class App extends React.Component { this.state = { selectedControl: null, drawerOpened: false, - mqttState: _.map(props.topics, ({defaultValue}) => defaultValue) + mqttState: _.map(props.topics, topic => ({ + actual: topic.defaultValue, + internal: topic.values[topic.defaultValue] + })) }; } @@ -64,7 +68,11 @@ class App extends React.Component { connected={false} /> + onCloseRequest={this.closeDrawer.bind(this)} + > + {this.state.selectedControl == null + || } + { + {this.props.children} ); diff --git a/src/components/UiItemList.js b/src/components/UiItemList.js new file mode 100644 index 0000000..9b722b9 --- /dev/null +++ b/src/components/UiItemList.js @@ -0,0 +1,88 @@ +// @flow +import React from "react"; +import _ from "lodash"; +import { + ListItem, + ListItemIcon, + ListItemSecondaryAction, + ListItemText, + ListSubheader +} from "material-ui/List"; +import Switch from "material-ui/Switch"; +import { renderIcon } from "utils/parseIconName"; + +export type UiItemListProps = { + controls: Array, + state: State +}; + +export default class UiItemList extends React.Component { + constructor(props: UiItemListProps) { + super(props); + } + + render() { + return this.props.controls.map((control, key) => ( + + {control.icon == null || {renderIcon(control.icon, "mdi-24px")}} + {this.renderControl(control)} + + )); + } + + renderControl(control: ControlUI) { + switch (control.type) { + case "toggle": { + return this.renderToggle(control); + } + default: { + console.error( + `Unknown UI type "${control.type}" for "${control.text}" component` + ); + return "unknown ui type"; + } + } + } + + isEnabled(control: ControlUI) { + const enableCondition = control.enableCondition; + if (enableCondition == null) { + return true; + } else { + const value = this.getValue(control); + return enableCondition( + value.internal || value.actual, value.actual, this.props.state); + } + } + + getValue(control: ControlUI) { + const value = this.props.state[control.topic]; + if (value == null) { + console.error( + `Unknown topic "${control.topic}" in ${control.type} "${control.text}"` + ); + return { internal: "error", actual: "error" }; + } + return value; + } + + toggleSwitch(control: ControlUI, newState: boolean) { + + } + + renderToggle(control: ControlUI) { + const value = this.getValue(control); + const isToggled = control.isToggled || (i => i === (control.on || "on")); + const checked = isToggled( + value.internal || value.actual, value.actual, this.props.state); + return [ + , + + this.toggleSwitch(control, state)} + disabled={!this.isEnabled(control)} /> + + ]; + } +} diff --git a/src/utils/parseIconName.js b/src/utils/parseIconName.js new file mode 100644 index 0000000..a07dede --- /dev/null +++ b/src/utils/parseIconName.js @@ -0,0 +1,10 @@ +// @flow +import React from "react"; + +export default function parseIconName(name: string): string { + return `mdi ${name.split(" ").map(icon => "mdi-".concat(icon)).join(" ")}`; +} + +export const renderIcon = (name: string, extraClass?: string) => { + return ; +}; diff --git a/yarn.lock b/yarn.lock index e6e044a..632662c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,59 @@ # yarn lockfile v1 +"@babel/code-frame@7.0.0-beta.31", "@babel/code-frame@^7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/helper-function-name@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.31" + "@babel/template" "7.0.0-beta.31" + "@babel/traverse" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + +"@babel/helper-get-function-arity@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" + dependencies: + "@babel/types" "7.0.0-beta.31" + +"@babel/template@7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + lodash "^4.2.0" + +"@babel/traverse@7.0.0-beta.31", "@babel/traverse@^7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" + dependencies: + "@babel/code-frame" "7.0.0-beta.31" + "@babel/helper-function-name" "7.0.0-beta.31" + "@babel/types" "7.0.0-beta.31" + babylon "7.0.0-beta.31" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +"@babel/types@7.0.0-beta.31", "@babel/types@^7.0.0-beta.31": + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -209,8 +262,8 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.2, async@^2.4.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" @@ -262,14 +315,6 @@ babel-cli@^6.24.1: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.0.tgz#418a7b5f3f7dc9a4670e61b1158b4c5661bec98d" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -303,13 +348,13 @@ babel-core@^6.25.0, babel-core@^6.26.0: source-map "^0.5.6" babel-eslint@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.1.tgz#5d718be7a328625d006022eb293ed3008cbd6346" + version "8.0.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.2.tgz#e44fb9a037d749486071d52d65312f5c20aa7530" dependencies: - babel-code-frame "7.0.0-beta.0" - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" + "@babel/code-frame" "^7.0.0-beta.31" + "@babel/traverse" "^7.0.0-beta.31" + "@babel/types" "^7.0.0-beta.31" + babylon "^7.0.0-beta.31" babel-generator@^6.26.0: version "6.26.0" @@ -366,15 +411,6 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-function-name@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.0.tgz#d1b6779b647e5c5c31ebeb05e13b998e4d352d56" - dependencies: - babel-helper-get-function-arity "7.0.0-beta.0" - babel-template "7.0.0-beta.0" - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -385,12 +421,6 @@ babel-helper-function-name@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-get-function-arity@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.0.tgz#9d1ab7213bb5efe1ef1638a8ea1489969b5a8b6e" - dependencies: - babel-types "7.0.0-beta.0" - babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" @@ -456,10 +486,6 @@ babel-loader@^7.1.1: loader-utils "^1.0.2" mkdirp "^0.5.1" -babel-messages@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-7.0.0-beta.0.tgz#6df01296e49fc8fbd0637394326a167f36da817b" - babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -803,15 +829,6 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runti core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.0.tgz#85083cf9e4395d5e48bf5154d7a8d6991cafecfb" - dependencies: - babel-traverse "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" - lodash "^4.2.0" - babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" @@ -822,20 +839,6 @@ babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.0.tgz#da14be9b762f62a2f060db464eaafdd8cd072a41" - dependencies: - babel-code-frame "7.0.0-beta.0" - babel-helper-function-name "7.0.0-beta.0" - babel-messages "7.0.0-beta.0" - babel-types "7.0.0-beta.0" - babylon "7.0.0-beta.22" - debug "^3.0.1" - globals "^10.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" @@ -850,14 +853,6 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.0.tgz#eb8b6e556470e6dcc4aef982d79ad229469b5169" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" @@ -867,9 +862,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.22: - version "7.0.0-beta.22" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" +babylon@7.0.0-beta.31, babylon@^7.0.0-beta.31: + version "7.0.0-beta.31" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" babylon@^6.18.0: version "6.18.0" @@ -1071,10 +1066,10 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: electron-to-chromium "^1.2.7" browserslist@^2.1.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.7.0.tgz#dc375dc70048fec3d989042a35022342902eff00" + version "2.8.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493" dependencies: - caniuse-lite "^1.0.30000757" + caniuse-lite "^1.0.30000758" electron-to-chromium "^1.3.27" buffer-indexof@^1.0.0: @@ -1166,12 +1161,12 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000758" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000758.tgz#a235627b1922e878b63164942c991b84de92c810" + version "1.0.30000760" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d" -caniuse-lite@^1.0.30000757: - version "1.0.30000758" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000758.tgz#e261140076651049cf6891ed4bc649b5c8c26c69" +caniuse-lite@^1.0.30000758: + version "1.0.30000760" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff" caseless@~0.12.0: version "0.12.0" @@ -1299,8 +1294,8 @@ cliui@^3.2.0: wrap-ansi "^2.0.0" clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" co@^4.6.0: version "4.6.0" @@ -1317,8 +1312,8 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" @@ -1404,8 +1399,8 @@ concat-stream@^1.6.0: typedarray "^0.0.6" connect-history-api-fallback@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz#3db24f973f4b923b0e82f619ce0df02411ca623d" + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" console-browserify@^1.1.0: version "1.1.0" @@ -2446,8 +2441,8 @@ fs-extra@^4.0.0: universalify "^0.1.0" fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" fs.realpath@^1.0.0: version "1.0.0" @@ -4747,14 +4742,14 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^15.6.1: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" +react-dom@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.1.0.tgz#ab6fd2a285096f388aeba51919a573d06c9bdde4" dependencies: - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" + object-assign "^4.1.1" + prop-types "^15.6.0" react-event-listener@^0.5.0, react-event-listener@^0.5.1: version "0.5.1" @@ -4802,9 +4797,9 @@ react-scrollbar-size@^2.0.2: prop-types "^15.5.10" react-event-listener "^0.5.0" -react-tap-event-plugin@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-2.0.1.tgz#316beb3bc6556e29ec869a7293e89c826a9074d2" +react-tap-event-plugin@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-3.0.2.tgz#280371677b881c31376e0027a0b86d2c6de039ee" dependencies: fbjs "^0.8.6" @@ -4829,7 +4824,7 @@ react-transition-group@^2.2.1: prop-types "^15.5.8" warning "^3.0.0" -react@^15.5.4, react@^15.6.1: +react@^15.5.4: version "15.6.2" resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" dependencies: @@ -4839,6 +4834,15 @@ react@^15.5.4, react@^15.6.1: object-assign "^4.1.0" prop-types "^15.5.10" +react@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.1.0.tgz#1c2bdac3c17fe7ee9282fa35aca6cc36387903e1" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -5719,8 +5723,8 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@3.1.x: - version "3.1.7" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.7.tgz#13379168b7fcf132ed977254a7802e0a294b1ffb" + version "3.1.8" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.8.tgz#780d08b4f6782fe36ea5484d952362eddaf1d7b8" dependencies: commander "~2.11.0" source-map "~0.6.1" @@ -6092,8 +6096,8 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.0.tgz#f8b948a1378af7efa702f5513da08dd516897c31" + version "3.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.1.tgz#d97e34dee06a1190c61ac1e95f43cb60b78cf939" dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0"