Clean up refactor branch
This commit is contained in:
parent
a33474d893
commit
4960da7ec6
7 changed files with 69 additions and 455 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "spacemap",
|
"name": "mqtt-control-map",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"author": "uwap <me+spacemap.package.json@uwap.name>",
|
"author": "uwap <me+mqttmap.package.json@uwap.name>",
|
||||||
"description": "control devices via mqtt on a beautiful map of your space",
|
"description": "control devices via mqtt on a beautiful map of your space",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "webpack --bail --config webpack.dev.js",
|
"build": "webpack --bail --config webpack.dev.js",
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
"material-ui-old": "npm:material-ui@latest",
|
"material-ui-old": "npm:material-ui@latest",
|
||||||
"mdi": "^2.0.46",
|
"mdi": "^2.0.46",
|
||||||
"mqtt": "^2.14.0",
|
"mqtt": "^2.14.0",
|
||||||
"ramda": "^0.24.1",
|
|
||||||
"react": "^16.0.0",
|
"react": "^16.0.0",
|
||||||
"react-dom": "^16.0.0",
|
"react-dom": "^16.0.0",
|
||||||
"react-leaflet": "^1.5.0",
|
"react-leaflet": "^1.5.0",
|
||||||
|
|
|
||||||
149
src/UiItems.js
149
src/UiItems.js
|
|
@ -1,149 +0,0 @@
|
||||||
// @flow
|
|
||||||
import React from "react";
|
|
||||||
import Switch from "material-ui/Switch";
|
|
||||||
import Select from "material-ui/Select";
|
|
||||||
import { MenuItem } from "material-ui/Menu";
|
|
||||||
import Slider from "material-ui-old/Slider";
|
|
||||||
import MuiThemeProvider from "material-ui-old/styles/MuiThemeProvider";
|
|
||||||
import Config from "./config";
|
|
||||||
import Input, { InputLabel } from "material-ui/Input";
|
|
||||||
import { FormControl } from "material-ui/Form";
|
|
||||||
import R from "ramda";
|
|
||||||
import {
|
|
||||||
ListItem,
|
|
||||||
ListItemIcon,
|
|
||||||
ListItemSecondaryAction,
|
|
||||||
ListItemText,
|
|
||||||
ListSubheader
|
|
||||||
} from "material-ui/List";
|
|
||||||
import Button from "material-ui/Button";
|
|
||||||
|
|
||||||
const enabled = (props: ControlUI, state: State) => {
|
|
||||||
if (props.enableCondition == null) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
const val = state.values[props.topic];
|
|
||||||
return props.enableCondition(
|
|
||||||
val.internal == null ? val.actual : val.internal, val.actual,
|
|
||||||
R.map((x) => (x.internal == null ? x.actual
|
|
||||||
: x.internal), state.values == null ? {} : state.values));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const getValue = (topic: string, val: string) =>
|
|
||||||
Config.topics[topic].values[val];
|
|
||||||
|
|
||||||
const renderIcon = (icon: string) => {
|
|
||||||
if (icon != null) {
|
|
||||||
return (
|
|
||||||
<ListItemIcon>
|
|
||||||
<i className={`mdi mdi-${icon} mdi-24px`}></i>
|
|
||||||
</ListItemIcon>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const onSwitch = (topic: string, props: ControlUI, state: State) =>
|
|
||||||
(x, toggled: boolean) => {
|
|
||||||
if (state.mqtt != null) {
|
|
||||||
state.mqtt.publish(Config.topics[topic].command,
|
|
||||||
toggled ? getValue(topic, R.propOr("on", "on", props))
|
|
||||||
: getValue(topic, R.propOr("off", "off", props)));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const isToggled = (state: State, props: ControlUI) => {
|
|
||||||
const val = state.values[props.topic];
|
|
||||||
if (props.toggled != null) {
|
|
||||||
return props.toggled(val.internal == null ? val.actual : val.internal,
|
|
||||||
val.actual);
|
|
||||||
} else {
|
|
||||||
return val.internal === R.propOr("on", "on", props);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const toggle = (state: State, props: ControlUI) => {
|
|
||||||
return (
|
|
||||||
<ListItem>
|
|
||||||
{renderIcon(props.icon)}
|
|
||||||
<ListItemText primary={props.text} />
|
|
||||||
<ListItemSecondaryAction>
|
|
||||||
<Switch label={props.text}
|
|
||||||
checked={isToggled(state, props)}
|
|
||||||
onChange={onSwitch(props.topic, props, state)}
|
|
||||||
disabled={!(enabled(props, state))} />
|
|
||||||
</ListItemSecondaryAction>
|
|
||||||
</ListItem>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onDropDownChange = (topic: string, props: ControlUI, state: State) =>
|
|
||||||
(event) => {
|
|
||||||
if (state.mqtt != null) {
|
|
||||||
state.mqtt.publish(Config.topics[topic].command, event.target.value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const dropDownItem = (topic: string) => (text: string, key: string) => (
|
|
||||||
<MenuItem value={Config.topics[topic].values[key]} key={key}>{text}</MenuItem>
|
|
||||||
);
|
|
||||||
|
|
||||||
export const dropDown = (state: State, props: ControlUI) => {
|
|
||||||
const id = `${props.topic}.${Object.keys(props.options)
|
|
||||||
.reduce((v, r) => v + "." + r)}`;
|
|
||||||
return (
|
|
||||||
<ListItem>
|
|
||||||
{renderIcon(props.icon)}
|
|
||||||
<FormControl>
|
|
||||||
<InputLabel htmlFor={id}>{props.text}</InputLabel>
|
|
||||||
<Select value={state.values[props.topic].actual}
|
|
||||||
onChange={onDropDownChange(props.topic, props, state)}
|
|
||||||
disabled={!(enabled(props, state))}
|
|
||||||
input={<Input id={id} />}
|
|
||||||
>
|
|
||||||
{R.values(R.mapObjIndexed(dropDownItem(props.topic), props.options))}
|
|
||||||
</Select>
|
|
||||||
</FormControl>
|
|
||||||
</ListItem>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const onSliderChange = (state: State, props: ControlUI) =>
|
|
||||||
(event, value) => {
|
|
||||||
if (state.mqtt != null) {
|
|
||||||
state.mqtt.publish(Config.topics[props.topic].command, value.toString());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const slider = (state: State, props: ControlUI) => (
|
|
||||||
<ListItem>
|
|
||||||
{renderIcon(props.icon)}
|
|
||||||
<ListItemText primary={props.text} />
|
|
||||||
<ListItemSecondaryAction>
|
|
||||||
<MuiThemeProvider>
|
|
||||||
<Slider value={state.values[props.topic].actual}
|
|
||||||
min={props.min == null ? 0 : props.min}
|
|
||||||
max={props.max == null ? 1 : props.max}
|
|
||||||
step={props.step == null ? 1 : props.step}
|
|
||||||
onChange={onSliderChange(state, props)}
|
|
||||||
style={{width: 100}}
|
|
||||||
/></MuiThemeProvider>
|
|
||||||
</ListItemSecondaryAction>
|
|
||||||
</ListItem>
|
|
||||||
);
|
|
||||||
|
|
||||||
export const section = (state: State, props: ControlUI) => (
|
|
||||||
<ListSubheader>{props.text}</ListSubheader>
|
|
||||||
);
|
|
||||||
|
|
||||||
export const link = (state: State, props: ControlUI) => (
|
|
||||||
<ListItem>
|
|
||||||
<Button raised
|
|
||||||
onClick={() => window.open(props.link, "_blank")}
|
|
||||||
color="primary"
|
|
||||||
>
|
|
||||||
{props.text}
|
|
||||||
</Button>
|
|
||||||
</ListItem>
|
|
||||||
);
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
// @flow
|
|
||||||
import React from "react";
|
|
||||||
import AppBar from "material-ui/AppBar";
|
|
||||||
import Toolbar from "material-ui/Toolbar";
|
|
||||||
import { CircularProgress } from "material-ui/Progress";
|
|
||||||
import IconButton from "material-ui/IconButton";
|
|
||||||
import Typography from "material-ui/Typography";
|
|
||||||
|
|
||||||
const TopBarLayerSelector = (_props: Object) => (
|
|
||||||
<IconButton>
|
|
||||||
<i className="mdi mdi-layers"></i>
|
|
||||||
</IconButton>
|
|
||||||
);
|
|
||||||
|
|
||||||
const TopBarIndicatorMenu = (props: Object) => (
|
|
||||||
<IconButton>
|
|
||||||
{props.mqtt.connected ?
|
|
||||||
(<i style={{fontSize: 48}} className="mdi mdi-map"></i>) :
|
|
||||||
(<i style={{fontSize: 48}} className="mdi mdi-lan-disconnect"></i>)}
|
|
||||||
</IconButton>
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
const TopBarIndicator = (props: Object) => {
|
|
||||||
if (props.mqtt == null || props.mqtt.reconnecting) {
|
|
||||||
return (<CircularProgress size={48}
|
|
||||||
style={{color: "rgba(0, 0, 0, 0.54)"}} />);
|
|
||||||
} else {
|
|
||||||
return (<TopBarIndicatorMenu {...props} />);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const TopBar = (props: Object) => (
|
|
||||||
<AppBar position="static">
|
|
||||||
<Toolbar>
|
|
||||||
<TopBarIndicator {...props} />
|
|
||||||
<Typography type="title">{props.title}</Typography>
|
|
||||||
{false && <TopBarLayerSelector {...props} />}
|
|
||||||
</Toolbar>
|
|
||||||
</AppBar>
|
|
||||||
);
|
|
||||||
|
|
||||||
export default TopBar;
|
|
||||||
83
src/map.js
83
src/map.js
|
|
@ -1,83 +0,0 @@
|
||||||
// @flow
|
|
||||||
import React from "react";
|
|
||||||
import { Map, ImageOverlay, Marker, LayersControl } from "react-leaflet";
|
|
||||||
import Leaflet from "leaflet";
|
|
||||||
import R from "ramda";
|
|
||||||
import Config from "./config";
|
|
||||||
import { Actions } from "./state";
|
|
||||||
import { store } from "./state";
|
|
||||||
|
|
||||||
// convert width/height coordinates to -height/width coordinates
|
|
||||||
const c = (p) => [-p[1], p[0]];
|
|
||||||
|
|
||||||
const color = (iconColor, state: State) => {
|
|
||||||
// TODO: give iconColor not only internal but also actual values
|
|
||||||
return iconColor == null ? "#000000" :
|
|
||||||
iconColor(
|
|
||||||
R.map((x) => (x.internal == null ?
|
|
||||||
x.actual : x.internal), state.values == null ? {} : state.values)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
const iconHtml = (el, state: State) =>
|
|
||||||
"<i class=\"mdi mdi-" + el.icon + " mdi-36px\" style=\""
|
|
||||||
+ "color:" + color(el.iconColor, state) + ";\">"
|
|
||||||
+ "</i>";
|
|
||||||
|
|
||||||
const Markers = (props) => R.values(R.mapObjIndexed((el, key) => (
|
|
||||||
<Marker position={c(el.position)} key={el.name}
|
|
||||||
icon={Leaflet.divIcon(
|
|
||||||
{
|
|
||||||
html: iconHtml(el, props.state),
|
|
||||||
iconSize: Leaflet.point(36, 36),
|
|
||||||
iconAnchor: Leaflet.point(18, 18)
|
|
||||||
})}
|
|
||||||
onClick={(e) => store.dispatch({
|
|
||||||
type: Actions.CHANGE_UI,
|
|
||||||
payload: key,
|
|
||||||
toggle: e.originalEvent.ctrlKey})}>
|
|
||||||
</Marker>
|
|
||||||
), R.propOr({}, "controls", Config)));
|
|
||||||
|
|
||||||
type SpaceMapProps = {
|
|
||||||
state: State,
|
|
||||||
width: number,
|
|
||||||
height: number,
|
|
||||||
zoom: number,
|
|
||||||
image: string
|
|
||||||
};
|
|
||||||
|
|
||||||
class SpaceMap extends React.Component<SpaceMapProps> {
|
|
||||||
|
|
||||||
constructor(props: SpaceMapProps) {
|
|
||||||
super(props);
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const props = this.props;
|
|
||||||
return (
|
|
||||||
<Map center={c([props.width / 2, props.height / 2])} zoom={props.zoom}
|
|
||||||
crs={Leaflet.CRS.Simple}>
|
|
||||||
{Markers(props)}
|
|
||||||
<LayersControl position="topright">
|
|
||||||
{Config.layers.map((x) =>
|
|
||||||
this.renderLayer(x, [c([0, 0]), c([props.width, props.height])]))}
|
|
||||||
</LayersControl>
|
|
||||||
</Map>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
renderLayer(layer, bounds) {
|
|
||||||
const LayersControlType =
|
|
||||||
layer.baseLayer ? LayersControl.BaseLayer : LayersControl.Overlay;
|
|
||||||
return (
|
|
||||||
<LayersControlType name={layer.name}
|
|
||||||
checked={layer.defaultVisibility === "visible"}>
|
|
||||||
<ImageOverlay url={layer.image}
|
|
||||||
bounds={bounds}
|
|
||||||
opacity={layer.opacity} />
|
|
||||||
</LayersControlType>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default SpaceMap;
|
|
||||||
81
src/state.js
81
src/state.js
|
|
@ -1,81 +0,0 @@
|
||||||
// @flow
|
|
||||||
import R from "ramda";
|
|
||||||
import { createStore } from "redux";
|
|
||||||
import Config from "./config";
|
|
||||||
import { keyOf } from "./util";
|
|
||||||
import { onSwitch, isToggled } from "./UiItems";
|
|
||||||
|
|
||||||
export const Actions = Object.freeze({
|
|
||||||
MQTT_CONNECT: "CONNECT",
|
|
||||||
MQTT_MESSAGE: "MESSAGE",
|
|
||||||
CHANGE_UI: "UI_POPUP"
|
|
||||||
});
|
|
||||||
|
|
||||||
const initState : State = {
|
|
||||||
mqtt: null,
|
|
||||||
uiOpened: null,
|
|
||||||
values: R.map(
|
|
||||||
(topic) => {
|
|
||||||
return {
|
|
||||||
internal: keyOf(topic.values, topic.defaultValue),
|
|
||||||
actual: topic.defaultValue
|
|
||||||
};
|
|
||||||
}, Config.topics),
|
|
||||||
visibleLayers: []
|
|
||||||
};
|
|
||||||
|
|
||||||
const onMessage = (state: State, action: StateAction) => {
|
|
||||||
if (action.payload == null) {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* action.payload.topic is the mqtt topic
|
|
||||||
* topics is the list of all internal topic references
|
|
||||||
* that have their state topic set to action.payload.topic
|
|
||||||
*/
|
|
||||||
const payload = action.payload == null ? { topic: "", message: {} }
|
|
||||||
: action.payload; // thx flow </3
|
|
||||||
const topics = R.keys(R.pickBy(
|
|
||||||
(val) => val.state === payload.topic, Config.topics));
|
|
||||||
const message = payload.message;
|
|
||||||
const parsedMessage = (topic: string) => {
|
|
||||||
let parseFunction = Config.topics[topic].parseState;
|
|
||||||
if (parseFunction == null) {
|
|
||||||
return message.toString();
|
|
||||||
} else {
|
|
||||||
return parseFunction(message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const newValue = (topic: string) => {
|
|
||||||
return {
|
|
||||||
actual: parsedMessage(topic),
|
|
||||||
internal: keyOf(Config.topics[topic].values, parsedMessage(topic))
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return R.mergeDeepRight(state, R.objOf("values", R.mergeAll(
|
|
||||||
R.map((topic) => R.objOf(topic, newValue(topic)), topics)
|
|
||||||
)));
|
|
||||||
};
|
|
||||||
|
|
||||||
const match = (value: any, array: Map<any, any>) => array[value];
|
|
||||||
const handleEvent = (state: State = initState, action: StateAction) => {
|
|
||||||
return match(action.type, {
|
|
||||||
[Actions.MQTT_CONNECT]: R.merge(state, { mqtt: action.payload }),
|
|
||||||
[Actions.MQTT_MESSAGE]: onMessage(state, action),
|
|
||||||
[Actions.CHANGE_UI]: (() => {
|
|
||||||
const control = Config.controls[action.payload];
|
|
||||||
if (action.toggle && control.ui.length > 0
|
|
||||||
&& control.ui[0].type === "toggle") {
|
|
||||||
const props = control.ui[0];
|
|
||||||
onSwitch(props.topic, props, state)(null, !isToggled(state, props));
|
|
||||||
return state;
|
|
||||||
} else {
|
|
||||||
return R.merge(state, { uiOpened: action.payload });
|
|
||||||
}
|
|
||||||
})(),
|
|
||||||
[null]: state
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const store = createStore(handleEvent, initState);
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
// @flow
|
|
||||||
import R from "ramda";
|
|
||||||
|
|
||||||
export const keyOf = <a, b> (map: Map<b, a>, value: a): ?b =>
|
|
||||||
((keys) => keys[R.findIndex((k) => map[k] === value, keys)])(R.keys(map));
|
|
||||||
158
yarn.lock
158
yarn.lock
|
|
@ -2,54 +2,53 @@
|
||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
"@babel/code-frame@7.0.0-beta.31", "@babel/code-frame@^7.0.0-beta.31":
|
"@babel/code-frame@7.0.0-beta.32", "@babel/code-frame@^7.0.0-beta.31":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35"
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz#04f231b8ec70370df830d9926ce0f5add074ec4c"
|
||||||
dependencies:
|
dependencies:
|
||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
js-tokens "^3.0.0"
|
js-tokens "^3.0.0"
|
||||||
|
|
||||||
"@babel/helper-function-name@7.0.0-beta.31":
|
"@babel/helper-function-name@7.0.0-beta.32":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57"
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz#6161af4419f1b4e3ed2d28c0c79c160e218be1f3"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-get-function-arity" "7.0.0-beta.31"
|
"@babel/helper-get-function-arity" "7.0.0-beta.32"
|
||||||
"@babel/template" "7.0.0-beta.31"
|
"@babel/template" "7.0.0-beta.32"
|
||||||
"@babel/traverse" "7.0.0-beta.31"
|
"@babel/types" "7.0.0-beta.32"
|
||||||
"@babel/types" "7.0.0-beta.31"
|
|
||||||
|
|
||||||
"@babel/helper-get-function-arity@7.0.0-beta.31":
|
"@babel/helper-get-function-arity@7.0.0-beta.32":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493"
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz#93721a99db3757de575a83bab7c453299abca568"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "7.0.0-beta.31"
|
"@babel/types" "7.0.0-beta.32"
|
||||||
|
|
||||||
"@babel/template@7.0.0-beta.31":
|
"@babel/template@7.0.0-beta.32":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.32.tgz#e1d9fdbd2a7bcf128f2f920744a67dab18072495"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "7.0.0-beta.31"
|
"@babel/code-frame" "7.0.0-beta.32"
|
||||||
"@babel/types" "7.0.0-beta.31"
|
"@babel/types" "7.0.0-beta.32"
|
||||||
babylon "7.0.0-beta.31"
|
babylon "7.0.0-beta.32"
|
||||||
lodash "^4.2.0"
|
lodash "^4.2.0"
|
||||||
|
|
||||||
"@babel/traverse@7.0.0-beta.31", "@babel/traverse@^7.0.0-beta.31":
|
"@babel/traverse@^7.0.0-beta.31":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.32.tgz#b78b754c6e1af3360626183738e4c7a05951bc99"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "7.0.0-beta.31"
|
"@babel/code-frame" "7.0.0-beta.32"
|
||||||
"@babel/helper-function-name" "7.0.0-beta.31"
|
"@babel/helper-function-name" "7.0.0-beta.32"
|
||||||
"@babel/types" "7.0.0-beta.31"
|
"@babel/types" "7.0.0-beta.32"
|
||||||
babylon "7.0.0-beta.31"
|
babylon "7.0.0-beta.32"
|
||||||
debug "^3.0.1"
|
debug "^3.0.1"
|
||||||
globals "^10.0.0"
|
globals "^10.0.0"
|
||||||
invariant "^2.2.0"
|
invariant "^2.2.0"
|
||||||
lodash "^4.2.0"
|
lodash "^4.2.0"
|
||||||
|
|
||||||
"@babel/types@7.0.0-beta.31", "@babel/types@^7.0.0-beta.31":
|
"@babel/types@7.0.0-beta.32", "@babel/types@^7.0.0-beta.31":
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4"
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.32.tgz#c317d0ecc89297b80bbcb2f50608e31f6452a5ff"
|
||||||
dependencies:
|
dependencies:
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
lodash "^4.2.0"
|
lodash "^4.2.0"
|
||||||
|
|
@ -86,7 +85,7 @@ acorn@^4.0.3:
|
||||||
version "4.0.13"
|
version "4.0.13"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
|
||||||
|
|
||||||
acorn@^5.0.0, acorn@^5.1.1:
|
acorn@^5.0.0, acorn@^5.2.1:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
|
||||||
|
|
||||||
|
|
@ -101,7 +100,7 @@ ajv@^4.9.1:
|
||||||
co "^4.6.0"
|
co "^4.6.0"
|
||||||
json-stable-stringify "^1.0.1"
|
json-stable-stringify "^1.0.1"
|
||||||
|
|
||||||
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3:
|
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -862,9 +861,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
|
||||||
lodash "^4.17.4"
|
lodash "^4.17.4"
|
||||||
to-fast-properties "^1.0.3"
|
to-fast-properties "^1.0.3"
|
||||||
|
|
||||||
babylon@7.0.0-beta.31, babylon@^7.0.0-beta.31:
|
babylon@7.0.0-beta.32, babylon@^7.0.0-beta.31:
|
||||||
version "7.0.0-beta.31"
|
version "7.0.0-beta.32"
|
||||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f"
|
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.32.tgz#e9033cb077f64d6895f4125968b37dc0a8c3bc6e"
|
||||||
|
|
||||||
babylon@^6.18.0:
|
babylon@^6.18.0:
|
||||||
version "6.18.0"
|
version "6.18.0"
|
||||||
|
|
@ -994,10 +993,6 @@ braces@^1.8.2:
|
||||||
preserve "^0.2.0"
|
preserve "^0.2.0"
|
||||||
repeat-element "^1.1.2"
|
repeat-element "^1.1.2"
|
||||||
|
|
||||||
brcast@^2.0.0:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.2.tgz#2db16de44140e418dc37fab10beec0369e78dcef"
|
|
||||||
|
|
||||||
brcast@^3.0.1:
|
brcast@^3.0.1:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd"
|
resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd"
|
||||||
|
|
@ -1066,10 +1061,10 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
|
||||||
electron-to-chromium "^1.2.7"
|
electron-to-chromium "^1.2.7"
|
||||||
|
|
||||||
browserslist@^2.1.2:
|
browserslist@^2.1.2:
|
||||||
version "2.8.0"
|
version "2.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493"
|
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.0.tgz#706aca15c53be15610f466e348cbfa0c00a6a379"
|
||||||
dependencies:
|
dependencies:
|
||||||
caniuse-lite "^1.0.30000758"
|
caniuse-lite "^1.0.30000760"
|
||||||
electron-to-chromium "^1.3.27"
|
electron-to-chromium "^1.3.27"
|
||||||
|
|
||||||
buffer-indexof@^1.0.0:
|
buffer-indexof@^1.0.0:
|
||||||
|
|
@ -1164,7 +1159,7 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
|
||||||
version "1.0.30000760"
|
version "1.0.30000760"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d"
|
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000760.tgz#3ea29473eb78a6ccb09f2eb73ac9e1debfec528d"
|
||||||
|
|
||||||
caniuse-lite@^1.0.30000758:
|
caniuse-lite@^1.0.30000760:
|
||||||
version "1.0.30000760"
|
version "1.0.30000760"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff"
|
||||||
|
|
||||||
|
|
@ -1475,14 +1470,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
sha.js "^2.4.8"
|
sha.js "^2.4.8"
|
||||||
|
|
||||||
create-react-class@^15.6.0:
|
|
||||||
version "15.6.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a"
|
|
||||||
dependencies:
|
|
||||||
fbjs "^0.8.9"
|
|
||||||
loose-envify "^1.3.1"
|
|
||||||
object-assign "^4.1.1"
|
|
||||||
|
|
||||||
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
|
cross-spawn@^5.0.1, cross-spawn@^5.1.0:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||||
|
|
@ -2036,10 +2023,10 @@ eslint-scope@^3.7.1:
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
|
|
||||||
eslint@^4.10.0:
|
eslint@^4.10.0:
|
||||||
version "4.10.0"
|
version "4.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34"
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^5.2.0"
|
ajv "^5.3.0"
|
||||||
babel-code-frame "^6.22.0"
|
babel-code-frame "^6.22.0"
|
||||||
chalk "^2.1.0"
|
chalk "^2.1.0"
|
||||||
concat-stream "^1.6.0"
|
concat-stream "^1.6.0"
|
||||||
|
|
@ -2047,7 +2034,7 @@ eslint@^4.10.0:
|
||||||
debug "^3.0.1"
|
debug "^3.0.1"
|
||||||
doctrine "^2.0.0"
|
doctrine "^2.0.0"
|
||||||
eslint-scope "^3.7.1"
|
eslint-scope "^3.7.1"
|
||||||
espree "^3.5.1"
|
espree "^3.5.2"
|
||||||
esquery "^1.0.0"
|
esquery "^1.0.0"
|
||||||
estraverse "^4.2.0"
|
estraverse "^4.2.0"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
|
|
@ -2060,7 +2047,7 @@ eslint@^4.10.0:
|
||||||
inquirer "^3.0.6"
|
inquirer "^3.0.6"
|
||||||
is-resolvable "^1.0.0"
|
is-resolvable "^1.0.0"
|
||||||
js-yaml "^3.9.1"
|
js-yaml "^3.9.1"
|
||||||
json-stable-stringify "^1.0.1"
|
json-stable-stringify-without-jsonify "^1.0.1"
|
||||||
levn "^0.3.0"
|
levn "^0.3.0"
|
||||||
lodash "^4.17.4"
|
lodash "^4.17.4"
|
||||||
minimatch "^3.0.2"
|
minimatch "^3.0.2"
|
||||||
|
|
@ -2077,11 +2064,11 @@ eslint@^4.10.0:
|
||||||
table "^4.0.1"
|
table "^4.0.1"
|
||||||
text-table "~0.2.0"
|
text-table "~0.2.0"
|
||||||
|
|
||||||
espree@^3.5.1:
|
espree@^3.5.2:
|
||||||
version "3.5.1"
|
version "3.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn "^5.1.1"
|
acorn "^5.2.1"
|
||||||
acorn-jsx "^3.0.0"
|
acorn-jsx "^3.0.0"
|
||||||
|
|
||||||
esprima@^2.6.0:
|
esprima@^2.6.0:
|
||||||
|
|
@ -2269,7 +2256,7 @@ faye-websocket@~0.11.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
websocket-driver ">=0.5.1"
|
websocket-driver ">=0.5.1"
|
||||||
|
|
||||||
fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6, fbjs@^0.8.9:
|
fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6:
|
||||||
version "0.8.16"
|
version "0.8.16"
|
||||||
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
|
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -2449,11 +2436,11 @@ fs.realpath@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
|
||||||
fsevents@^1.0.0:
|
fsevents@^1.0.0:
|
||||||
version "1.1.2"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "^2.3.0"
|
nan "^2.3.0"
|
||||||
node-pre-gyp "^0.6.36"
|
node-pre-gyp "^0.6.39"
|
||||||
|
|
||||||
fstream-ignore@^1.0.5:
|
fstream-ignore@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
|
|
@ -3327,6 +3314,10 @@ json-schema@0.2.3:
|
||||||
version "0.2.3"
|
version "0.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||||
|
|
||||||
|
json-stable-stringify-without-jsonify@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||||
|
|
||||||
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
|
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
|
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
|
||||||
|
|
@ -3919,7 +3910,7 @@ node-libs-browser@^2.0.0:
|
||||||
util "^0.10.3"
|
util "^0.10.3"
|
||||||
vm-browserify "0.0.4"
|
vm-browserify "0.0.4"
|
||||||
|
|
||||||
node-pre-gyp@^0.6.36:
|
node-pre-gyp@^0.6.39:
|
||||||
version "0.6.39"
|
version "0.6.39"
|
||||||
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
|
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -4288,8 +4279,8 @@ pluralize@^7.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
|
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
|
||||||
|
|
||||||
popper.js@^1.12.5:
|
popper.js@^1.12.5:
|
||||||
version "1.12.6"
|
version "1.12.7"
|
||||||
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.6.tgz#91e12a97b07815258b76915d64044e8ac053d426"
|
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.7.tgz#b8d225618e5d95e27ac2b591debf581857a9c16d"
|
||||||
|
|
||||||
portfinder@^1.0.9:
|
portfinder@^1.0.9:
|
||||||
version "1.0.13"
|
version "1.0.13"
|
||||||
|
|
@ -4696,10 +4687,6 @@ rafl@~1.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
global "~4.3.0"
|
global "~4.3.0"
|
||||||
|
|
||||||
ramda@^0.24.1:
|
|
||||||
version "0.24.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857"
|
|
||||||
|
|
||||||
randomatic@^1.1.3:
|
randomatic@^1.1.3:
|
||||||
version "1.1.7"
|
version "1.1.7"
|
||||||
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
|
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
|
||||||
|
|
@ -4775,8 +4762,8 @@ react-jss@^7.2.0:
|
||||||
theming "^1.1.0"
|
theming "^1.1.0"
|
||||||
|
|
||||||
react-leaflet@^1.5.0:
|
react-leaflet@^1.5.0:
|
||||||
version "1.7.3"
|
version "1.7.4"
|
||||||
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-1.7.3.tgz#4575bce582c0e3745019076d5b804ffcd0efd6bb"
|
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-1.7.4.tgz#073202401b5804cb00e97adf0768d1b2e3b7c9e9"
|
||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.0.0"
|
lodash "^4.0.0"
|
||||||
lodash-es "^4.0.0"
|
lodash-es "^4.0.0"
|
||||||
|
|
@ -4824,16 +4811,6 @@ react-transition-group@^2.2.1:
|
||||||
prop-types "^15.5.8"
|
prop-types "^15.5.8"
|
||||||
warning "^3.0.0"
|
warning "^3.0.0"
|
||||||
|
|
||||||
react@^15.5.4:
|
|
||||||
version "15.6.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72"
|
|
||||||
dependencies:
|
|
||||||
create-react-class "^15.6.0"
|
|
||||||
fbjs "^0.8.9"
|
|
||||||
loose-envify "^1.1.0"
|
|
||||||
object-assign "^4.1.0"
|
|
||||||
prop-types "^15.5.10"
|
|
||||||
|
|
||||||
react@^16.0.0:
|
react@^16.0.0:
|
||||||
version "16.1.0"
|
version "16.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/react/-/react-16.1.0.tgz#1c2bdac3c17fe7ee9282fa35aca6cc36387903e1"
|
resolved "https://registry.yarnpkg.com/react/-/react-16.1.0.tgz#1c2bdac3c17fe7ee9282fa35aca6cc36387903e1"
|
||||||
|
|
@ -5590,14 +5567,13 @@ text-table@~0.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
|
|
||||||
theming@^1.1.0:
|
theming@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/theming/-/theming-1.1.0.tgz#0562760b55a1b919c2d5eeb94130351f8958e13a"
|
resolved "https://registry.yarnpkg.com/theming/-/theming-1.2.1.tgz#3de0be696339c6c203013a6c68d1c1057973dc44"
|
||||||
dependencies:
|
dependencies:
|
||||||
brcast "^2.0.0"
|
brcast "^3.0.1"
|
||||||
is-function "^1.0.1"
|
is-function "^1.0.1"
|
||||||
is-plain-object "^2.0.1"
|
is-plain-object "^2.0.1"
|
||||||
prop-types "^15.5.8"
|
prop-types "^15.5.8"
|
||||||
react "^15.5.4"
|
|
||||||
|
|
||||||
through2-filter@^2.0.0:
|
through2-filter@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
|
|
@ -5723,8 +5699,8 @@ ua-parser-js@^0.7.9:
|
||||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
|
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
|
||||||
|
|
||||||
uglify-js@3.1.x:
|
uglify-js@3.1.x:
|
||||||
version "3.1.8"
|
version "3.1.9"
|
||||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.8.tgz#780d08b4f6782fe36ea5484d952362eddaf1d7b8"
|
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.9.tgz#dffca799308cf327ec3ac77eeacb8e196ce3b452"
|
||||||
dependencies:
|
dependencies:
|
||||||
commander "~2.11.0"
|
commander "~2.11.0"
|
||||||
source-map "~0.6.1"
|
source-map "~0.6.1"
|
||||||
|
|
@ -6020,8 +5996,8 @@ websocket-driver@>=0.5.1:
|
||||||
websocket-extensions ">=0.1.1"
|
websocket-extensions ">=0.1.1"
|
||||||
|
|
||||||
websocket-extensions@>=0.1.1:
|
websocket-extensions@>=0.1.1:
|
||||||
version "0.1.2"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d"
|
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
|
||||||
|
|
||||||
websocket-stream@^5.0.1:
|
websocket-stream@^5.0.1:
|
||||||
version "5.1.1"
|
version "5.1.1"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue