├── .gitignore ├── README.md ├── mobile ├── .gitignore ├── .idea │ ├── codeStyles │ │ └── codeStyleConfig.xml │ ├── misc.xml │ ├── mobile.iml │ ├── modules.xml │ └── vcs.xml ├── .watchmanconfig ├── App.js ├── __tests__ │ └── App-test.js ├── app.json ├── assets │ ├── fonts │ │ └── SpaceMono-Regular.ttf │ └── images │ │ ├── accessory │ │ ├── air-conditioner.svg │ │ └── ceiling-lamp.svg │ │ ├── avatar.jpeg │ │ ├── bedroom.jpeg │ │ ├── icon.png │ │ ├── index.js │ │ ├── living-room-unity.jpg │ │ ├── robot-dev.png │ │ ├── robot-prod.png │ │ ├── room │ │ ├── humidity.svg │ │ ├── living-room.svg │ │ └── thermometer.svg │ │ └── splash.png ├── babel.config.js ├── components │ ├── Grid.js │ ├── StyledButton.js │ ├── StyledText.js │ ├── SvgUri │ │ ├── index.js │ │ └── utils.js │ ├── TabBarIcon.js │ └── __tests__ │ │ └── StyledText-test.js ├── constants │ ├── Colors.js │ └── Layout.js ├── navigation │ ├── AppNavigator.js │ └── MainTabNavigator.js ├── package-lock.json ├── package.json └── screens │ ├── HomeScreen │ ├── Accessory.js │ ├── HomeHeader.js │ ├── Room.js │ └── index.js │ ├── LinksScreen.js │ └── SettingsScreen.js ├── package.json ├── screenshots └── desktop1.png ├── services └── gateway │ ├── config │ ├── config.ts │ └── express.ts │ ├── controllers │ └── accessory.controller.ts │ ├── index.ts │ ├── package-lock.json │ ├── package.json │ ├── routes │ ├── accessory.route.ts │ └── index.route.ts │ ├── services │ └── debug.service.ts │ ├── tsconfig.json │ ├── tslint.json │ ├── types │ └── hap-types.ts │ └── yarn.lock └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | /dist 3 | /services/data 4 | /services/mqtt 5 | 6 | **/.env 7 | **/.DS_Store 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | .vscode 15 | frontend/.env 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Homify 2 | 3 | Homify is a home automation platform which allows you to control and track all internet devices at home. 4 | 5 | The goal of Homify is providing a platform that supports all kind of things from different brands and protocols, enable smart devices to talk to each other and make corresponding interactions. 6 | 7 | Screenshot 8 | 9 | ### Installation 10 | 11 | In root folder, execute following command: 12 | 13 | ``` 14 | cd frontend && npm install && cd ../services/gateway && npm install 15 | ``` 16 | 17 | ### Get Started 18 | 19 | In root folder, execute following command: 20 | 21 | ``` 22 | npm run docker 23 | npm run web 24 | npm run gateway 25 | ``` 26 | 27 | Todos: moving eveything to docker 28 | -------------------------------------------------------------------------------- /mobile/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | .expo/* 3 | npm-debug.* 4 | *.jks 5 | *.p12 6 | *.key 7 | *.mobileprovision 8 | -------------------------------------------------------------------------------- /mobile/.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /mobile/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /mobile/.idea/mobile.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /mobile/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /mobile/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /mobile/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Platform, StatusBar, StyleSheet, View } from 'react-native'; 3 | import { AppLoading, Asset, Font, Icon } from 'expo'; 4 | import AppNavigator from './navigation/AppNavigator'; 5 | 6 | export default class App extends React.Component { 7 | state = { 8 | isLoadingComplete: false, 9 | }; 10 | 11 | render() { 12 | if (!this.state.isLoadingComplete && !this.props.skipLoadingScreen) { 13 | return ( 14 | 19 | ); 20 | } else { 21 | return ( 22 | 23 | {Platform.OS === 'ios' && } 24 | 25 | 26 | ); 27 | } 28 | } 29 | 30 | _loadResourcesAsync = async () => { 31 | return Promise.all([ 32 | Asset.loadAsync([ 33 | require('./assets/images/robot-dev.png'), 34 | require('./assets/images/robot-prod.png'), 35 | ]), 36 | Font.loadAsync({ 37 | // This is the font that we are using for our tab bar 38 | ...Icon.Ionicons.font, 39 | // We include SpaceMono because we use it in index.jsl free 40 | // to remove this if you are not using it in your app 41 | 'space-mono': require('./assets/fonts/SpaceMono-Regular.ttf'), 42 | }), 43 | ]); 44 | }; 45 | 46 | _handleLoadingError = error => { 47 | // In this case, you might want to report the error to your error 48 | // reporting service, for example Sentry 49 | console.warn(error); 50 | }; 51 | 52 | _handleFinishLoading = () => { 53 | this.setState({ isLoadingComplete: true }); 54 | }; 55 | } 56 | 57 | const styles = StyleSheet.create({ 58 | container: { 59 | flex: 1, 60 | backgroundColor: '#fff', 61 | }, 62 | }); 63 | -------------------------------------------------------------------------------- /mobile/__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import App from '../App'; 4 | import renderer from 'react-test-renderer'; 5 | import NavigationTestUtils from 'react-navigation/NavigationTestUtils'; 6 | 7 | describe('App snapshot', () => { 8 | jest.useFakeTimers(); 9 | beforeEach(() => { 10 | NavigationTestUtils.resetInternalState(); 11 | }); 12 | 13 | it('renders the loading screen', async () => { 14 | const tree = renderer.create().toJSON(); 15 | expect(tree).toMatchSnapshot(); 16 | }); 17 | 18 | it('renders the root without loading screen', async () => { 19 | const tree = renderer.create().toJSON(); 20 | expect(tree).toMatchSnapshot(); 21 | }); 22 | }); 23 | -------------------------------------------------------------------------------- /mobile/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "mobile", 4 | "slug": "mobile", 5 | "privacy": "public", 6 | "sdkVersion": "31.0.0", 7 | "platforms": [ 8 | "ios", 9 | "android" 10 | ], 11 | "version": "1.0.0", 12 | "orientation": "portrait", 13 | "icon": "./assets/images/icon.png", 14 | "splash": { 15 | "image": "./assets/images/splash.png", 16 | "resizeMode": "contain", 17 | "backgroundColor": "#ffffff" 18 | }, 19 | "updates": { 20 | "fallbackToCacheTimeout": 0 21 | }, 22 | "assetBundlePatterns": [ 23 | "**/*" 24 | ], 25 | "ios": { 26 | "supportsTablet": true 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /mobile/assets/fonts/SpaceMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/fonts/SpaceMono-Regular.ttf -------------------------------------------------------------------------------- /mobile/assets/images/accessory/air-conditioner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /mobile/assets/images/accessory/ceiling-lamp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mobile/assets/images/avatar.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/avatar.jpeg -------------------------------------------------------------------------------- /mobile/assets/images/bedroom.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/bedroom.jpeg -------------------------------------------------------------------------------- /mobile/assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/icon.png -------------------------------------------------------------------------------- /mobile/assets/images/index.js: -------------------------------------------------------------------------------- 1 | const images = { 2 | 'air-conditioner': require("./accessory/air-conditioner.svg"), 3 | 'ceiling-lamp': require("./accessory/ceiling-lamp.svg") 4 | }; 5 | export default images; -------------------------------------------------------------------------------- /mobile/assets/images/living-room-unity.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/living-room-unity.jpg -------------------------------------------------------------------------------- /mobile/assets/images/robot-dev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/robot-dev.png -------------------------------------------------------------------------------- /mobile/assets/images/robot-prod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/robot-prod.png -------------------------------------------------------------------------------- /mobile/assets/images/room/humidity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mobile/assets/images/room/living-room.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mobile/assets/images/room/thermometer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /mobile/assets/images/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/mobile/assets/images/splash.png -------------------------------------------------------------------------------- /mobile/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /mobile/components/Grid.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | Text, 4 | StyleSheet, 5 | View, 6 | } from "react-native"; 7 | 8 | export class Grid extends React.Component { 9 | render() { 10 | return ( 11 | 12 | 13 | 24C 14 | avg house temp 15 | 16 | 17 | 69% 18 | humidity 19 | 20 | 21 | 36C 22 | outside temp 23 | 24 | 25 | 8 26 | devices on 27 | 28 | 29 | ); 30 | } 31 | } 32 | 33 | const styles = StyleSheet.create({ 34 | gridContainer: { 35 | flexWrap: 'wrap', 36 | flexDirection: 'row', 37 | margin: 20, 38 | backgroundColor: 'white', 39 | borderRadius: 20, 40 | shadowColor: '#444', 41 | shadowOpacity: 0.2, 42 | shadowRadius: 8, 43 | }, 44 | gridItem: { 45 | width: '50%', 46 | borderColor: '#bbb', 47 | alignItems: 'center', 48 | padding: 16 49 | }, 50 | itemValue: { 51 | fontSize: 22, 52 | fontWeight: '400', 53 | lineHeight: 36 54 | }, 55 | itemTitle: { 56 | color: 'rgba(0,0,0,0.4)' 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /mobile/components/StyledButton.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | TouchableOpacity, 4 | StyleSheet, 5 | } from "react-native"; 6 | 7 | export class StyledButton extends React.Component { 8 | render() { 9 | const { 10 | style, 11 | onPress, 12 | disabled, 13 | children 14 | } = this.props; 15 | const childrenWithProps = React.Children.map(children, child => 16 | React.cloneElement(child, { ...this.props }) 17 | ); 18 | return ( 19 | 23 | {childrenWithProps} 24 | 25 | ); 26 | } 27 | } 28 | 29 | const styles = StyleSheet.create({ 30 | container: { 31 | margin: 4, 32 | borderRadius: 10, 33 | shadowColor: '#000', 34 | shadowOffset: { width: 0, height: 2 }, 35 | shadowOpacity: 0.25, 36 | shadowRadius: 2, 37 | elevation: 1, 38 | padding: 10, 39 | backgroundColor: 'white', 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /mobile/components/StyledText.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text } from 'react-native'; 3 | 4 | export class MonoText extends React.Component { 5 | render() { 6 | return ; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /mobile/components/SvgUri/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from "react"; 2 | import { View } from 'react-native'; 3 | import { Svg } from 'expo'; 4 | import PropTypes from 'prop-types' 5 | import xmldom from 'xmldom'; 6 | import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource'; 7 | 8 | const { 9 | Circle, 10 | Ellipse, 11 | G , 12 | LinearGradient, 13 | RadialGradient, 14 | Line, 15 | Path, 16 | Polygon, 17 | Polyline, 18 | Rect, 19 | Text, 20 | TSpan, 21 | Defs, 22 | Stop 23 | } = Svg; 24 | 25 | import * as utils from './utils'; 26 | 27 | const ACCEPTED_SVG_ELEMENTS = [ 28 | 'svg', 29 | 'g', 30 | 'circle', 31 | 'path', 32 | 'rect', 33 | 'defs', 34 | 'line', 35 | 'linearGradient', 36 | 'radialGradient', 37 | 'stop', 38 | 'ellipse', 39 | 'polygon', 40 | 'polyline', 41 | 'text', 42 | 'tspan' 43 | ]; 44 | 45 | // Attributes from SVG elements that are mapped directly. 46 | const SVG_ATTS = ['viewBox', 'width', 'height']; 47 | const G_ATTS = ['id']; 48 | 49 | const CIRCLE_ATTS = ['cx', 'cy', 'r']; 50 | const PATH_ATTS = ['d']; 51 | const RECT_ATTS = ['width', 'height']; 52 | const LINE_ATTS = ['x1', 'y1', 'x2', 'y2']; 53 | const LINEARG_ATTS = LINE_ATTS.concat(['id', 'gradientUnits']); 54 | const RADIALG_ATTS = CIRCLE_ATTS.concat(['id', 'gradientUnits']); 55 | const STOP_ATTS = ['offset']; 56 | const ELLIPSE_ATTS = ['cx', 'cy', 'rx', 'ry']; 57 | 58 | const TEXT_ATTS = ['fontFamily', 'fontSize', 'fontWeight', 'textAnchor'] 59 | 60 | const POLYGON_ATTS = ['points']; 61 | const POLYLINE_ATTS = ['points']; 62 | 63 | const COMMON_ATTS = ['fill', 'fillOpacity', 'stroke', 'strokeWidth', 'strokeOpacity', 'opacity', 64 | 'strokeLinecap', 'strokeLinejoin', 65 | 'strokeDasharray', 'strokeDashoffset', 'x', 'y', 'rotate', 'scale', 'origin', 'originX', 'originY', 'transform', 'clipPath']; 66 | 67 | let ind = 0; 68 | 69 | function fixYPosition (y, node) { 70 | if (node.attributes) { 71 | const fontSizeAttr = Object.keys(node.attributes).find(a => node.attributes[a].name === 'font-size'); 72 | if (fontSizeAttr) { 73 | return '' + (parseFloat(y) - parseFloat(node.attributes[fontSizeAttr].value)); 74 | } 75 | } 76 | if (!node.parentNode) { 77 | return y; 78 | } 79 | return fixYPosition(y, node.parentNode) 80 | } 81 | 82 | class SvgUri extends Component{ 83 | 84 | constructor(props){ 85 | super(props); 86 | 87 | this.state = {fill: props.fill, svgXmlData: props.svgXmlData}; 88 | 89 | this.createSVGElement = this.createSVGElement.bind(this); 90 | this.obtainComponentAtts = this.obtainComponentAtts.bind(this); 91 | this.inspectNode = this.inspectNode.bind(this); 92 | this.fetchSVGData = this.fetchSVGData.bind(this); 93 | 94 | this.isComponentMounted = false; 95 | 96 | // Gets the image data from an URL or a static file 97 | if (props.source) { 98 | const source = resolveAssetSource(props.source) || {}; 99 | this.fetchSVGData(source.uri); 100 | } 101 | } 102 | 103 | componentWillMount() { 104 | this.isComponentMounted = true; 105 | } 106 | 107 | componentWillReceiveProps (nextProps){ 108 | if (nextProps.source) { 109 | const source = resolveAssetSource(nextProps.source) || {}; 110 | const oldSource = resolveAssetSource(this.props.source) || {}; 111 | if(source.uri !== oldSource.uri){ 112 | this.fetchSVGData(source.uri); 113 | } 114 | } 115 | 116 | if (nextProps.svgXmlData !== this.props.svgXmlData) { 117 | this.setState({ svgXmlData: nextProps.svgXmlData }); 118 | } 119 | 120 | if (nextProps.fill !== this.props.fill) { 121 | this.setState({ fill: nextProps.fill }); 122 | } 123 | } 124 | 125 | componentWillUnmount() { 126 | this.isComponentMounted = false 127 | } 128 | 129 | async fetchSVGData(uri) { 130 | let responseXML = null, error = null; 131 | try { 132 | const response = await fetch(uri); 133 | responseXML = await response.text(); 134 | } catch(e) { 135 | error = e; 136 | console.error("ERROR SVG", e); 137 | } finally { 138 | if (this.isComponentMounted) { 139 | this.setState({ svgXmlData: responseXML }, () => { 140 | const { onLoad } = this.props; 141 | if (onLoad && !error) { 142 | onLoad(); 143 | } 144 | }); 145 | } 146 | } 147 | 148 | return responseXML; 149 | } 150 | 151 | // Remove empty strings from children array 152 | trimElementChilden(children) { 153 | for (child of children) { 154 | if (typeof child === 'string') { 155 | if (child.trim().length === 0) 156 | children.splice(children.indexOf(child), 1); 157 | } 158 | } 159 | } 160 | 161 | createSVGElement(node, childs){ 162 | this.trimElementChilden(childs); 163 | let componentAtts = {}; 164 | const i = ind++; 165 | switch (node.nodeName) { 166 | case 'svg': 167 | componentAtts = this.obtainComponentAtts(node, SVG_ATTS); 168 | if (this.props.width) { 169 | componentAtts.width = this.props.width; 170 | } 171 | if (this.props.height) { 172 | componentAtts.height = this.props.height; 173 | } 174 | 175 | if (this.props.fill) { 176 | componentAtts.fill = this.props.fill; 177 | } 178 | 179 | return {childs}; 180 | case 'g': 181 | componentAtts = this.obtainComponentAtts(node, G_ATTS); 182 | return {childs}; 183 | case 'path': 184 | componentAtts = this.obtainComponentAtts(node, PATH_ATTS); 185 | return {childs}; 186 | case 'circle': 187 | componentAtts = this.obtainComponentAtts(node, CIRCLE_ATTS); 188 | return {childs}; 189 | case 'rect': 190 | componentAtts = this.obtainComponentAtts(node, RECT_ATTS); 191 | return {childs}; 192 | case 'line': 193 | componentAtts = this.obtainComponentAtts(node, LINE_ATTS); 194 | return {childs}; 195 | case 'defs': 196 | return {childs}; 197 | case 'linearGradient': 198 | componentAtts = this.obtainComponentAtts(node, LINEARG_ATTS); 199 | return {childs}; 200 | case 'radialGradient': 201 | componentAtts = this.obtainComponentAtts(node, RADIALG_ATTS); 202 | return {childs}; 203 | case 'stop': 204 | componentAtts = this.obtainComponentAtts(node, STOP_ATTS); 205 | return {childs}; 206 | case 'ellipse': 207 | componentAtts = this.obtainComponentAtts(node, ELLIPSE_ATTS); 208 | return {childs}; 209 | case 'polygon': 210 | componentAtts = this.obtainComponentAtts(node, POLYGON_ATTS); 211 | return {childs}; 212 | case 'polyline': 213 | componentAtts = this.obtainComponentAtts(node, POLYLINE_ATTS); 214 | return {childs}; 215 | case 'text': 216 | componentAtts = this.obtainComponentAtts(node, TEXT_ATTS); 217 | return {childs}; 218 | case 'tspan': 219 | componentAtts = this.obtainComponentAtts(node, TEXT_ATTS); 220 | if (componentAtts.y) { 221 | componentAtts.y = fixYPosition(componentAtts.y, node) 222 | } 223 | return {childs}; 224 | default: 225 | return null; 226 | } 227 | } 228 | 229 | obtainComponentAtts({attributes}, enabledAttributes) { 230 | const styleAtts = {}; 231 | 232 | if (this.state.fill && this.props.fillAll) { 233 | styleAtts.fill = this.state.fill; 234 | } 235 | 236 | Array.from(attributes).forEach(({nodeName, nodeValue}) => { 237 | Object.assign(styleAtts, utils.transformStyle({ 238 | nodeName, 239 | nodeValue, 240 | fillProp: this.state.fill 241 | })); 242 | }); 243 | 244 | const componentAtts = Array.from(attributes) 245 | .map(utils.camelCaseNodeName) 246 | .map(utils.removePixelsFromNodeValue) 247 | .filter(utils.getEnabledAttributes(enabledAttributes.concat(COMMON_ATTS))) 248 | .reduce((acc, {nodeName, nodeValue}) => { 249 | acc[nodeName] = (this.state.fill && nodeName === 'fill' && nodeValue !== 'none') ? this.state.fill : nodeValue 250 | return acc 251 | }, {}); 252 | Object.assign(componentAtts, styleAtts); 253 | 254 | return componentAtts; 255 | } 256 | 257 | inspectNode(node){ 258 | // Only process accepted elements 259 | if (!ACCEPTED_SVG_ELEMENTS.includes(node.nodeName)) { 260 | return (); 261 | } 262 | 263 | // Process the xml node 264 | const arrayElements = []; 265 | 266 | // if have children process them. 267 | // Recursive function. 268 | if (node.childNodes && node.childNodes.length > 0){ 269 | for (let i = 0; i < node.childNodes.length; i++){ 270 | const isTextValue = node.childNodes[i].nodeValue 271 | if (isTextValue) { 272 | arrayElements.push(node.childNodes[i].nodeValue) 273 | } else { 274 | const nodo = this.inspectNode(node.childNodes[i]); 275 | if (nodo != null) { 276 | arrayElements.push(nodo); 277 | } 278 | } 279 | } 280 | } 281 | 282 | return this.createSVGElement(node, arrayElements); 283 | } 284 | 285 | render () { 286 | try { 287 | if (this.state.svgXmlData == null) { 288 | return null; 289 | } 290 | 291 | const inputSVG = this.state.svgXmlData.substring( 292 | this.state.svgXmlData.indexOf("") + 6) 294 | ).replace(//g, ''); 295 | 296 | const doc = new xmldom.DOMParser().parseFromString(inputSVG); 297 | 298 | const rootSVG = this.inspectNode(doc.childNodes[0]); 299 | 300 | return( 301 | 302 | {rootSVG} 303 | 304 | ); 305 | } catch(e){ 306 | console.error("ERROR SVG", e); 307 | return null; 308 | } 309 | } 310 | } 311 | 312 | SvgUri.propTypes = { 313 | style: PropTypes.object, 314 | width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), 315 | height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), 316 | svgXmlData: PropTypes.string, 317 | source: PropTypes.any, 318 | fill: PropTypes.string, 319 | onLoad: PropTypes.func, 320 | fillAll: PropTypes.bool 321 | } 322 | 323 | module.exports = SvgUri; -------------------------------------------------------------------------------- /mobile/components/SvgUri/utils.js: -------------------------------------------------------------------------------- 1 | export const camelCase = value => 2 | value.replace(/-([a-z])/g, g => g[1].toUpperCase()); 3 | 4 | export const camelCaseNodeName = ({ nodeName, nodeValue }) => ({ 5 | nodeName: camelCase(nodeName), 6 | nodeValue, 7 | }); 8 | 9 | export const removePixelsFromNodeValue = ({ nodeName, nodeValue }) => ({ 10 | nodeName, 11 | nodeValue: nodeValue.replace('px', ''), 12 | }); 13 | 14 | export const transformStyle = ({ nodeName, nodeValue, fillProp }) => { 15 | if (nodeName === 'style') { 16 | return nodeValue.split(';').reduce((acc, attribute) => { 17 | const [property, value] = attribute.split(':'); 18 | if (property == '') return acc; 19 | else 20 | return { 21 | ...acc, 22 | [camelCase(property)]: fillProp && property === 'fill' 23 | ? fillProp 24 | : value, 25 | }; 26 | }, {}); 27 | } 28 | return null; 29 | }; 30 | 31 | export const getEnabledAttributes = enabledAttributes => ({ nodeName }) => 32 | enabledAttributes.includes(camelCase(nodeName)); 33 | -------------------------------------------------------------------------------- /mobile/components/TabBarIcon.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Icon } from 'expo'; 3 | 4 | import Colors from '../constants/Colors'; 5 | 6 | export default class TabBarIcon extends React.Component { 7 | render() { 8 | return ( 9 | 15 | ); 16 | } 17 | } -------------------------------------------------------------------------------- /mobile/components/__tests__/StyledText-test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import { MonoText } from '../StyledText'; 4 | import renderer from 'react-test-renderer'; 5 | 6 | it('renders correctly', () => { 7 | const tree = renderer.create(Snapshot test!).toJSON(); 8 | 9 | expect(tree).toMatchSnapshot(); 10 | }); 11 | -------------------------------------------------------------------------------- /mobile/constants/Colors.js: -------------------------------------------------------------------------------- 1 | const tintColor = '#2f95dc'; 2 | 3 | export default { 4 | tintColor, 5 | tabIconDefault: '#ccc', 6 | tabIconSelected: tintColor, 7 | tabBar: '#fefefe', 8 | errorBackground: 'red', 9 | errorText: '#fff', 10 | warningBackground: '#EAEB5E', 11 | warningText: '#666804', 12 | noticeBackground: tintColor, 13 | noticeText: '#fff', 14 | }; 15 | -------------------------------------------------------------------------------- /mobile/constants/Layout.js: -------------------------------------------------------------------------------- 1 | import { Dimensions } from 'react-native'; 2 | 3 | const width = Dimensions.get('window').width; 4 | const height = Dimensions.get('window').height; 5 | 6 | export default { 7 | window: { 8 | width, 9 | height, 10 | }, 11 | isSmallDevice: width < 375, 12 | }; 13 | -------------------------------------------------------------------------------- /mobile/navigation/AppNavigator.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createSwitchNavigator } from 'react-navigation'; 3 | 4 | import MainTabNavigator from './MainTabNavigator'; 5 | 6 | export default createSwitchNavigator({ 7 | // You could add another route here for authentication. 8 | // Read more at https://reactnavigation.org/docs/en/auth-flow.html 9 | Main: MainTabNavigator, 10 | }); -------------------------------------------------------------------------------- /mobile/navigation/MainTabNavigator.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Platform } from 'react-native'; 3 | import { createStackNavigator, createBottomTabNavigator } from 'react-navigation'; 4 | 5 | import TabBarIcon from '../components/TabBarIcon'; 6 | import Index from '../screens/HomeScreen'; 7 | import LinksScreen from '../screens/LinksScreen'; 8 | import SettingsScreen from '../screens/SettingsScreen'; 9 | 10 | const HomeStack = createStackNavigator({ 11 | Home: Index, 12 | }); 13 | 14 | HomeStack.navigationOptions = { 15 | tabBarLabel: 'Home', 16 | tabBarIcon: ({ focused }) => ( 17 | 25 | ), 26 | }; 27 | 28 | const LinksStack = createStackNavigator({ 29 | Links: LinksScreen, 30 | }); 31 | 32 | LinksStack.navigationOptions = { 33 | tabBarLabel: 'Links', 34 | tabBarIcon: ({ focused }) => ( 35 | 39 | ), 40 | }; 41 | 42 | const SettingsStack = createStackNavigator({ 43 | Settings: SettingsScreen, 44 | }); 45 | 46 | SettingsStack.navigationOptions = { 47 | tabBarLabel: 'Settings', 48 | tabBarIcon: ({ focused }) => ( 49 | 53 | ), 54 | }; 55 | 56 | export default createBottomTabNavigator({ 57 | HomeStack, 58 | LinksStack, 59 | SettingsStack, 60 | }); 61 | -------------------------------------------------------------------------------- /mobile/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "node_modules/expo/AppEntry.js", 3 | "scripts": { 4 | "start": "expo start", 5 | "android": "expo start --android", 6 | "ios": "expo start --ios", 7 | "eject": "expo eject", 8 | "test": "node ./node_modules/jest/bin/jest.js --watchAll" 9 | }, 10 | "jest": { 11 | "preset": "jest-expo" 12 | }, 13 | "dependencies": { 14 | "@expo/samples": "2.1.1", 15 | "@expo/vector-icons": "^9.0.0", 16 | "expo": "^31.0.2", 17 | "react": "16.5.0", 18 | "react-native": "https://github.com/expo/react-native/archive/sdk-31.0.0.tar.gz", 19 | "react-native-ui-kitten": "^3.1.2", 20 | "react-navigation": "^2.18.2" 21 | }, 22 | "devDependencies": { 23 | "babel-preset-expo": "^5.0.0", 24 | "jest-expo": "^31.0.0" 25 | }, 26 | "private": true 27 | } 28 | -------------------------------------------------------------------------------- /mobile/screens/HomeScreen/Accessory.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { 4 | Text, 5 | View, 6 | StyleSheet, 7 | } from 'react-native'; 8 | import { StyledButton } from "../../components/StyledButton"; 9 | import SvgUri from "../../components/SvgUri"; 10 | import { LinearGradient } from 'expo'; 11 | 12 | export class Accessory extends React.Component { 13 | render() { 14 | const { 15 | item, 16 | } = this.props; 17 | return ( 18 | 19 | 20 | 26 | 27 | {item.name} 28 | 29 | 30 | 31 | ); 32 | } 33 | } 34 | 35 | const styles = StyleSheet.create({ 36 | container: { 37 | flex: 1, 38 | flexDirection: 'row', 39 | }, 40 | accessoryName: { 41 | paddingTop: 10 42 | }, 43 | }); -------------------------------------------------------------------------------- /mobile/screens/HomeScreen/HomeHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { 4 | Text, 5 | View, 6 | Image, 7 | ImageBackground, 8 | StyleSheet, 9 | } from 'react-native'; 10 | 11 | export class HomeHeader extends React.Component { 12 | render() { 13 | return ( 14 | 18 | 19 | 21 | 22 | Welcome Home, Andrew 23 | 24 | 25 | 26 | ); 27 | } 28 | } 29 | 30 | const styles = StyleSheet.create({ 31 | header: { 32 | paddingBottom: 40 33 | }, 34 | headerContent: { 35 | flexDirection: 'row', 36 | justifyContent: 'space-between', 37 | paddingVertical: 50, 38 | paddingHorizontal: 30, 39 | alignItems: 'center' 40 | }, 41 | avatar: { 42 | width: 50, 43 | height: 50, 44 | borderRadius: 25 45 | }, 46 | name: { 47 | fontSize: 22, 48 | color: "#FFFFFF", 49 | fontWeight: '600', 50 | }, 51 | }); -------------------------------------------------------------------------------- /mobile/screens/HomeScreen/Room.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { 4 | Text, 5 | View, 6 | StyleSheet, 7 | } from 'react-native'; 8 | import { StyledButton } from "../../components/StyledButton"; 9 | import SvgUri from "../../components/SvgUri"; 10 | import { LinearGradient } from 'expo'; 11 | 12 | export class Room extends React.Component { 13 | render() { 14 | const { 15 | name, 16 | } = this.props; 17 | return ( 18 | 19 | 20 | 21 | 27 | 28 | 29 | 30 | {name} 31 | 32 | 33 | 34 | 40 | 24℃ 41 | 42 | 43 | 49 | 69% 50 | 51 | 52 | 53 | 54 | 55 | ); 56 | } 57 | } 58 | 59 | const styles = StyleSheet.create({ 60 | container: { 61 | flex: 1, 62 | flexDirection: 'row', 63 | alignItems: 'center', 64 | }, 65 | roundedIcon: { 66 | padding: 8, 67 | alignItems:'center', 68 | borderRadius:100, 69 | }, 70 | roomInfo: { 71 | flex: 1, 72 | justifyContent: 'space-between', 73 | paddingLeft: 10 74 | }, 75 | roomName: { 76 | fontSize: 18, 77 | paddingBottom: 10 78 | }, 79 | roomStatusContainer: { 80 | flexDirection: 'row' 81 | }, 82 | roomStatus: { 83 | flexDirection: 'row', 84 | paddingRight: 6 85 | } 86 | }); -------------------------------------------------------------------------------- /mobile/screens/HomeScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | ScrollView, 4 | StyleSheet, 5 | Text, 6 | View, 7 | FlatList, 8 | } from 'react-native'; 9 | 10 | import { HomeHeader } from "./HomeHeader"; 11 | import { Grid } from "../../components/Grid"; 12 | import { Room } from "./Room"; 13 | import { Accessory } from "./Accessory"; 14 | import images from "../../assets/images"; 15 | 16 | export default class HomeScreen extends React.Component { 17 | static navigationOptions = { 18 | header: null, 19 | }; 20 | 21 | render() { 22 | return ( 23 | 24 | 25 | 26 | 27 | 28 | {this._showRoomList()} 29 | {this._showRecentDevices()} 30 | 31 | 32 | 33 | ); 34 | } 35 | 36 | _showRoomList() { 37 | return ( 38 | 39 | Rooms 40 | ( 44 | 45 | )} 46 | /> 47 | 48 | ) 49 | } 50 | 51 | _showRecentDevices() { 52 | return ( 53 | 54 | Recently used devices 55 | ( 64 | 65 | )} 66 | /> 67 | 68 | ) 69 | } 70 | } 71 | 72 | const styles = StyleSheet.create({ 73 | container: { 74 | flex: 1, 75 | backgroundColor: '#fff', 76 | }, 77 | horizontalList: { 78 | marginHorizontal: 20, 79 | marginBottom: 16 80 | }, 81 | horizontalListTitle: { 82 | fontSize: 18, 83 | fontWeight: '500', 84 | paddingVertical: 10 85 | }, 86 | item: { 87 | alignItems: "center", 88 | backgroundColor: "#dcda48", 89 | flex: 1, 90 | margin: 4, 91 | padding: 20 92 | }, 93 | text: { 94 | color: "#333333" 95 | } 96 | }); 97 | -------------------------------------------------------------------------------- /mobile/screens/LinksScreen.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ScrollView, StyleSheet } from 'react-native'; 3 | import { ExpoLinksView } from '@expo/samples'; 4 | 5 | export default class LinksScreen extends React.Component { 6 | static navigationOptions = { 7 | title: 'Links', 8 | }; 9 | 10 | render() { 11 | return ( 12 | 13 | {/* Go ahead and delete ExpoLinksView and replace it with your 14 | * content, we just wanted to provide you with some helpful links */} 15 | 16 | 17 | ); 18 | } 19 | } 20 | 21 | const styles = StyleSheet.create({ 22 | container: { 23 | flex: 1, 24 | paddingTop: 15, 25 | backgroundColor: '#fff', 26 | }, 27 | }); 28 | -------------------------------------------------------------------------------- /mobile/screens/SettingsScreen.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ExpoConfigView } from '@expo/samples'; 3 | 4 | export default class SettingsScreen extends React.Component { 5 | static navigationOptions = { 6 | title: 'app.json', 7 | }; 8 | 9 | render() { 10 | /* Go ahead and delete ExpoConfigView and replace it with your 11 | * content, we just wanted to give you a quick view of your config */ 12 | return ; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "homify", 3 | "version": "0.0.1", 4 | "description": "Homify is a home automation platform which allows you to control and track all internet devices at home.", 5 | "main": "index.js", 6 | "scripts": { 7 | "mobile": "cd mobile && npm run start", 8 | "gateway": "cd services/gateway && npm run start" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/homify-iot/homify.git" 13 | }, 14 | "keywords": [ 15 | "Home", 16 | "automation", 17 | "Homify", 18 | "IoT" 19 | ], 20 | "author": "Andrew Yang", 21 | "license": "GPL-3.0", 22 | "bugs": { 23 | "url": "https://github.com/homify-iot/homify/issues" 24 | }, 25 | "homepage": "https://github.com/homify-iot/homify#readme" 26 | } -------------------------------------------------------------------------------- /screenshots/desktop1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/homify-iot/homify/5eca40b849164605c44a9a0328beffe0700e5665/screenshots/desktop1.png -------------------------------------------------------------------------------- /services/gateway/config/config.ts: -------------------------------------------------------------------------------- 1 | import dotenv from "dotenv"; 2 | import Joi from "joi"; 3 | 4 | dotenv.config(); 5 | 6 | const envVarsSchema = Joi.object({ 7 | NODE_ENV: Joi.string() 8 | .allow(["development", "production", "test", "provision"]) 9 | .default("development"), 10 | SERVER_PORT: Joi.number().default(3000), 11 | }) 12 | .unknown() 13 | .required(); 14 | 15 | const { error, value: envVars } = Joi.validate(process.env, envVarsSchema); 16 | if (error) { 17 | throw new Error(`Config validation error: ${error.message}`); 18 | } 19 | 20 | const config = { 21 | env: envVars.NODE_ENV, 22 | port: envVars.SERVER_PORT, 23 | }; 24 | 25 | export default config; 26 | -------------------------------------------------------------------------------- /services/gateway/config/express.ts: -------------------------------------------------------------------------------- 1 | import bodyParser from "body-parser"; 2 | import express from "express"; 3 | import routes from "../routes/index.route"; 4 | 5 | const app = express(); 6 | app.use(bodyParser.json()); 7 | app.use(bodyParser.urlencoded({ extended: true })); 8 | 9 | app.use("/api/v1", routes); 10 | export default app; 11 | -------------------------------------------------------------------------------- /services/gateway/controllers/accessory.controller.ts: -------------------------------------------------------------------------------- 1 | import { Characteristics, CharacteristicType, Services, ServiceType } from "@/types/hap-types"; 2 | import axios from "axios"; 3 | import decamelize from "decamelize"; 4 | import inflection from "inflection"; 5 | 6 | export const getAccessories = (_req, res) => { 7 | axios.get("http://localhost:1124/accessories") 8 | .then((response) => { 9 | res.json(getAllServices(response.data.accessories)); 10 | }) 11 | .catch((error) => { 12 | console.log(error); 13 | }); 14 | }; 15 | const hiddenServices = [ 16 | Services.AccessoryInformation 17 | ]; 18 | 19 | const hiddenCharacteristics = [ 20 | Characteristics.Name 21 | ]; 22 | 23 | function humanizeString(s: string) { 24 | return inflection.titleize(decamelize(s)); 25 | } 26 | function getAllServices(accessories) { 27 | const services = []; 28 | accessories.forEach((accessory) => { 29 | 30 | /* Parse Accessory Information */ 31 | const accessoryInformationService = accessory.services.find((x) => x.type === Services.AccessoryInformation); 32 | const accessoryInformation = {}; 33 | 34 | if (accessoryInformationService && accessoryInformationService.characteristics) { 35 | accessoryInformationService.characteristics.forEach((c) => { 36 | if (c.value) { 37 | accessoryInformation[c.description] = c.value; 38 | } 39 | }); 40 | } 41 | 42 | /* Parse All Services */ 43 | accessory.services 44 | .filter((s) => hiddenServices.indexOf(s.type) < 0 && Services[s.type]) 45 | .map((s) => { 46 | let serviceName = s.characteristics.find((x) => x.type === Characteristics.Name); 47 | 48 | /* Set default name characteristic if none defined */ 49 | serviceName = serviceName ? serviceName : { 50 | iid: 0, 51 | type: Characteristics.Name, 52 | description: "Name", 53 | format: "string", 54 | value: humanizeString(Services[s.type]), 55 | perms: ["pr"] 56 | }; 57 | 58 | /* Parse Service Characteristics */ 59 | const serviceCharacteristics: CharacteristicType[] = s.characteristics 60 | .filter((c) => hiddenCharacteristics.indexOf(c.type) < 0 && Characteristics[c.type]) 61 | .map((c) => { 62 | return { 63 | aid: accessory.aid, 64 | iid: c.iid, 65 | uuid: c.type, 66 | type: Characteristics[c.type], 67 | serviceType: Services[s.type], 68 | serviceName: serviceName.value.toString(), 69 | description: c.description, 70 | value: c.value, 71 | format: c.format, 72 | perms: c.perms, 73 | unit: c.unit, 74 | maxValue: c.maxValue, 75 | minValue: c.minValue, 76 | minStep: c.minStep, 77 | canRead: c.perms.includes("pr"), 78 | canWrite: c.perms.includes("pw") 79 | }; 80 | }); 81 | 82 | const service: ServiceType = { 83 | aid: accessory.aid, 84 | iid: s.iid, 85 | uuid: s.type, 86 | type: Services[s.type], 87 | humanType: humanizeString(Services[s.type]), 88 | serviceName: serviceName.value.toString(), 89 | serviceCharacteristics, 90 | accessoryInformation, 91 | values: {}, 92 | }; 93 | 94 | // /* Helper function to trigger a call to the accessory to get all the characteristic values */ 95 | // service.refreshCharacteristics = () => { 96 | // return refreshServiceCharacteristics.bind(this)(service); 97 | // }; 98 | // 99 | // /* Helper function to set the value of a characteristic */ 100 | // service.setCharacteristic = (iid: number, value: number | string | boolean) => { 101 | // return setCharacteristic.bind(this)(service, iid, value); 102 | // }; 103 | 104 | /* Helper function to returns a characteristic by it's type name */ 105 | service.getCharacteristic = (type: string) => { 106 | return service.serviceCharacteristics.find((c) => c.type === type); 107 | }; 108 | 109 | service.serviceCharacteristics.forEach((c) => { 110 | // /* Helper function to set the value of a characteristic */ 111 | // c.setValue = async (value: number | string | boolean) => { 112 | // return await setCharacteristic.bind(this)(service, c.iid, value); 113 | // }; 114 | // 115 | // /* Helper function to get the value of a characteristic from the accessory */ 116 | // c.getValue = async () => { 117 | // return await getCharacteristic.bind(this)(service, c.iid); 118 | // }; 119 | 120 | /* set the values for each characteristic type in an easy-to-access object */ 121 | service.values[c.type] = c.value; 122 | }); 123 | 124 | services.push(service); 125 | }); 126 | }); 127 | return services; 128 | } 129 | 130 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /services/gateway/index.ts: -------------------------------------------------------------------------------- 1 | import { createDebug } from "services/debug.service"; 2 | import config from "./config/config"; 3 | import app from "./config/express"; 4 | 5 | const log = createDebug("Server"); 6 | 7 | app.listen(config.port, async () => { 8 | log(`server started on port ${config.port} (${config.env})`); 9 | }); 10 | export default app; 11 | -------------------------------------------------------------------------------- /services/gateway/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gateway", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.ts", 6 | "scripts": { 7 | "start": "DEBUG=homify:* ts-node-dev -r tsconfig-paths/register index" 8 | }, 9 | "author": "Andrew Yang", 10 | "license": "GPL-3.0", 11 | "dependencies": { 12 | "axios": "^0.18.0", 13 | "decamelize": "^2.0.0", 14 | "dotenv": "^6.0.0", 15 | "express": "^4.16.3", 16 | "homebridge": "^0.4.45", 17 | "inflection": "^1.12.0", 18 | "joi": "^13.4.0", 19 | "ramda": "^0.25.0" 20 | }, 21 | "devDependencies": { 22 | "@types/node": "^10.5.2", 23 | "debug": "^3.1.0", 24 | "eslint": "^5.1.0", 25 | "ts-node-dev": "^1.0.0-pre.26", 26 | "tsconfig-paths": "^3.5.0", 27 | "tslint": "^5.11.0", 28 | "typescript": "^2.9.2", 29 | "typescript-eslint-parser": "^18.0.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /services/gateway/routes/accessory.route.ts: -------------------------------------------------------------------------------- 1 | import { getAccessories } from "@/controllers/accessory.controller"; 2 | import * as express from "express"; 3 | 4 | export const accessoryRoutes = express.Router(); 5 | 6 | accessoryRoutes.route("/").get(getAccessories); 7 | -------------------------------------------------------------------------------- /services/gateway/routes/index.route.ts: -------------------------------------------------------------------------------- 1 | import { accessoryRoutes } from "@/routes/accessory.route"; 2 | import express from "express"; 3 | 4 | const router = express.Router(); 5 | 6 | router.use("/accessories", accessoryRoutes); 7 | 8 | export default router; 9 | -------------------------------------------------------------------------------- /services/gateway/services/debug.service.ts: -------------------------------------------------------------------------------- 1 | import debug from "debug"; 2 | 3 | export const createDebug = (namespace: string) => { 4 | const key = "homify:" + namespace; 5 | return debug(key); 6 | }; 7 | -------------------------------------------------------------------------------- /services/gateway/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true, 8 | "noUnusedLocals": true, 9 | "noUnusedParameters": true, 10 | "downlevelIteration": true, 11 | "lib": [ 12 | "es2015.promise", 13 | "es2017", 14 | "esnext.asynciterable" 15 | ], 16 | "typeRoots": [ 17 | "node_modules/@types" 18 | ], 19 | "baseUrl": "./", 20 | "paths": { 21 | "@/*": [ 22 | "*" 23 | ] 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /services/gateway/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "max-line-length": { 5 | "options": [ 6 | 120 7 | ] 8 | }, 9 | "new-parens": true, 10 | "no-unused-variable": true, 11 | "no-arg": true, 12 | "no-bitwise": true, 13 | "no-conditional-assignment": true, 14 | "no-consecutive-blank-lines": false, 15 | "no-console": { 16 | "severity": "warning", 17 | "options": [ 18 | "debug", 19 | "info", 20 | "log", 21 | "time", 22 | "timeEnd", 23 | "trace" 24 | ] 25 | }, 26 | "max-classes-per-file": [ 27 | true, 28 | 2 29 | ], 30 | "object-literal-sort-keys": false, 31 | "interface-name": false, 32 | "no-empty-interface": false, 33 | "trailing-comma": false 34 | }, 35 | "jsRules": { 36 | "max-line-length": { 37 | "options": [ 38 | 120 39 | ] 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /services/gateway/types/hap-types.ts: -------------------------------------------------------------------------------- 1 | export const Services = { 2 | "0000003E-0000-1000-8000-0026BB765291": "AccessoryInformation", 3 | "AccessoryInformation": "0000003E-0000-1000-8000-0026BB765291", 4 | "000000BB-0000-1000-8000-0026BB765291": "AirPurifier", 5 | "AirPurifier": "000000BB-0000-1000-8000-0026BB765291", 6 | "0000008D-0000-1000-8000-0026BB765291": "AirQualitySensor", 7 | "AirQualitySensor": "0000008D-0000-1000-8000-0026BB765291", 8 | "00000096-0000-1000-8000-0026BB765291": "BatteryService", 9 | "BatteryService": "00000096-0000-1000-8000-0026BB765291", 10 | "00000110-0000-1000-8000-0026BB765291": "CameraRTPStreamManagement", 11 | "CameraRTPStreamManagement": "00000110-0000-1000-8000-0026BB765291", 12 | "00000097-0000-1000-8000-0026BB765291": "CarbonDioxideSensor", 13 | "CarbonDioxideSensor": "00000097-0000-1000-8000-0026BB765291", 14 | "0000007F-0000-1000-8000-0026BB765291": "CarbonMonoxideSensor", 15 | "CarbonMonoxideSensor": "0000007F-0000-1000-8000-0026BB765291", 16 | "00000080-0000-1000-8000-0026BB765291": "ContactSensor", 17 | "ContactSensor": "00000080-0000-1000-8000-0026BB765291", 18 | "00000081-0000-1000-8000-0026BB765291": "Door", 19 | "Door": "00000081-0000-1000-8000-0026BB765291", 20 | "00000121-0000-1000-8000-0026BB765291": "Doorbell", 21 | "Doorbell": "00000121-0000-1000-8000-0026BB765291", 22 | "00000040-0000-1000-8000-0026BB765291": "Fan", 23 | "Fan": "00000040-0000-1000-8000-0026BB765291", 24 | "000000B7-0000-1000-8000-0026BB765291": "Fanv2", 25 | "Fanv2": "000000B7-0000-1000-8000-0026BB765291", 26 | "000000BA-0000-1000-8000-0026BB765291": "FilterMaintenance", 27 | "FilterMaintenance": "000000BA-0000-1000-8000-0026BB765291", 28 | "000000D7-0000-1000-8000-0026BB765291": "Faucet", 29 | "Faucet": "000000D7-0000-1000-8000-0026BB765291", 30 | "00000041-0000-1000-8000-0026BB765291": "GarageDoorOpener", 31 | "GarageDoorOpener": "00000041-0000-1000-8000-0026BB765291", 32 | "000000BC-0000-1000-8000-0026BB765291": "HeaterCooler", 33 | "HeaterCooler": "000000BC-0000-1000-8000-0026BB765291", 34 | "000000BD-0000-1000-8000-0026BB765291": "HumidifierDehumidifier", 35 | "HumidifierDehumidifier": "000000BD-0000-1000-8000-0026BB765291", 36 | "00000082-0000-1000-8000-0026BB765291": "HumiditySensor", 37 | "HumiditySensor": "00000082-0000-1000-8000-0026BB765291", 38 | "000000CF-0000-1000-8000-0026BB765291": "IrrigationSystem", 39 | "IrrigationSystem": "000000CF-0000-1000-8000-0026BB765291", 40 | "00000083-0000-1000-8000-0026BB765291": "LeakSensor", 41 | "LeakSensor": "00000083-0000-1000-8000-0026BB765291", 42 | "00000084-0000-1000-8000-0026BB765291": "LightSensor", 43 | "LightSensor": "00000084-0000-1000-8000-0026BB765291", 44 | "00000043-0000-1000-8000-0026BB765291": "Lightbulb", 45 | "Lightbulb": "00000043-0000-1000-8000-0026BB765291", 46 | "00000044-0000-1000-8000-0026BB765291": "LockManagement", 47 | "LockManagement": "00000044-0000-1000-8000-0026BB765291", 48 | "00000045-0000-1000-8000-0026BB765291": "LockMechanism", 49 | "LockMechanism": "00000045-0000-1000-8000-0026BB765291", 50 | "00000112-0000-1000-8000-0026BB765291": "Microphone", 51 | "Microphone": "00000112-0000-1000-8000-0026BB765291", 52 | "00000085-0000-1000-8000-0026BB765291": "MotionSensor", 53 | "MotionSensor": "00000085-0000-1000-8000-0026BB765291", 54 | "00000086-0000-1000-8000-0026BB765291": "OccupancySensor", 55 | "OccupancySensor": "00000086-0000-1000-8000-0026BB765291", 56 | "00000047-0000-1000-8000-0026BB765291": "Outlet", 57 | "Outlet": "00000047-0000-1000-8000-0026BB765291", 58 | "0000007E-0000-1000-8000-0026BB765291": "SecuritySystem", 59 | "SecuritySystem": "0000007E-0000-1000-8000-0026BB765291", 60 | "000000CC-0000-1000-8000-0026BB765291": "ServiceLabel", 61 | "ServiceLabel": "000000CC-0000-1000-8000-0026BB765291", 62 | "000000B9-0000-1000-8000-0026BB765291": "Slat", 63 | "Slat": "000000B9-0000-1000-8000-0026BB765291", 64 | "00000087-0000-1000-8000-0026BB765291": "SmokeSensor", 65 | "SmokeSensor": "00000087-0000-1000-8000-0026BB765291", 66 | "00000113-0000-1000-8000-0026BB765291": "Speaker", 67 | "Speaker": "00000113-0000-1000-8000-0026BB765291", 68 | "00000089-0000-1000-8000-0026BB765291": "StatelessProgrammableSwitch", 69 | "StatelessProgrammableSwitch": "00000089-0000-1000-8000-0026BB765291", 70 | "00000049-0000-1000-8000-0026BB765291": "Switch", 71 | "Switch": "00000049-0000-1000-8000-0026BB765291", 72 | "0000008A-0000-1000-8000-0026BB765291": "TemperatureSensor", 73 | "TemperatureSensor": "0000008A-0000-1000-8000-0026BB765291", 74 | "0000004A-0000-1000-8000-0026BB765291": "Thermostat", 75 | "Thermostat": "0000004A-0000-1000-8000-0026BB765291", 76 | "000000D0-0000-1000-8000-0026BB765291": "Valve", 77 | "Valve": "000000D0-0000-1000-8000-0026BB765291", 78 | "0000008B-0000-1000-8000-0026BB765291": "Window", 79 | "Window": "0000008B-0000-1000-8000-0026BB765291", 80 | "0000008C-0000-1000-8000-0026BB765291": "WindowCovering", 81 | "WindowCovering": "0000008C-0000-1000-8000-0026BB765291", 82 | }; 83 | 84 | export const Characteristics = { 85 | "000000A6-0000-1000-8000-0026BB765291": "AccessoryFlags", 86 | "AccessoryFlags": "000000A6-0000-1000-8000-0026BB765291", 87 | "000000B0-0000-1000-8000-0026BB765291": "Active", 88 | "Active": "000000B0-0000-1000-8000-0026BB765291", 89 | "00000001-0000-1000-8000-0026BB765291": "AdministratorOnlyAccess", 90 | "AdministratorOnlyAccess": "00000001-0000-1000-8000-0026BB765291", 91 | "00000064-0000-1000-8000-0026BB765291": "AirParticulateDensity", 92 | "AirParticulateDensity": "00000064-0000-1000-8000-0026BB765291", 93 | "00000065-0000-1000-8000-0026BB765291": "AirParticulateSize", 94 | "AirParticulateSize": "00000065-0000-1000-8000-0026BB765291", 95 | "00000095-0000-1000-8000-0026BB765291": "AirQuality", 96 | "AirQuality": "00000095-0000-1000-8000-0026BB765291", 97 | "00000005-0000-1000-8000-0026BB765291": "AudioFeedback", 98 | "AudioFeedback": "00000005-0000-1000-8000-0026BB765291", 99 | "00000068-0000-1000-8000-0026BB765291": "BatteryLevel", 100 | "BatteryLevel": "00000068-0000-1000-8000-0026BB765291", 101 | "00000008-0000-1000-8000-0026BB765291": "Brightness", 102 | "Brightness": "00000008-0000-1000-8000-0026BB765291", 103 | "00000092-0000-1000-8000-0026BB765291": "CarbonDioxideDetected", 104 | "CarbonDioxideDetected": "00000092-0000-1000-8000-0026BB765291", 105 | "00000093-0000-1000-8000-0026BB765291": "CarbonDioxideLevel", 106 | "CarbonDioxideLevel": "00000093-0000-1000-8000-0026BB765291", 107 | "00000094-0000-1000-8000-0026BB765291": "CarbonDioxidePeakLevel", 108 | "CarbonDioxidePeakLevel": "00000094-0000-1000-8000-0026BB765291", 109 | "00000069-0000-1000-8000-0026BB765291": "CarbonMonoxideDetected", 110 | "CarbonMonoxideDetected": "00000069-0000-1000-8000-0026BB765291", 111 | "00000090-0000-1000-8000-0026BB765291": "CarbonMonoxideLevel", 112 | "CarbonMonoxideLevel": "00000090-0000-1000-8000-0026BB765291", 113 | "00000091-0000-1000-8000-0026BB765291": "CarbonMonoxidePeakLevel", 114 | "CarbonMonoxidePeakLevel": "00000091-0000-1000-8000-0026BB765291", 115 | "0000008F-0000-1000-8000-0026BB765291": "ChargingState", 116 | "ChargingState": "0000008F-0000-1000-8000-0026BB765291", 117 | "000000CE-0000-1000-8000-0026BB765291": "ColorTemperature", 118 | "ColorTemperature": "000000CE-0000-1000-8000-0026BB765291", 119 | "0000006A-0000-1000-8000-0026BB765291": "ContactSensorState", 120 | "ContactSensorState": "0000006A-0000-1000-8000-0026BB765291", 121 | "0000000D-0000-1000-8000-0026BB765291": "CoolingThresholdTemperature", 122 | "CoolingThresholdTemperature": "0000000D-0000-1000-8000-0026BB765291", 123 | "000000A9-0000-1000-8000-0026BB765291": "CurrentAirPurifierState", 124 | "CurrentAirPurifierState": "000000A9-0000-1000-8000-0026BB765291", 125 | "0000006B-0000-1000-8000-0026BB765291": "CurrentAmbientLightLevel", 126 | "CurrentAmbientLightLevel": "0000006B-0000-1000-8000-0026BB765291", 127 | "0000000E-0000-1000-8000-0026BB765291": "CurrentDoorState", 128 | "CurrentDoorState": "0000000E-0000-1000-8000-0026BB765291", 129 | "000000AF-0000-1000-8000-0026BB765291": "CurrentFanState", 130 | "CurrentFanState": "000000AF-0000-1000-8000-0026BB765291", 131 | "000000B1-0000-1000-8000-0026BB765291": "CurrentHeaterCoolerState", 132 | "CurrentHeaterCoolerState": "000000B1-0000-1000-8000-0026BB765291", 133 | "0000000F-0000-1000-8000-0026BB765291": "CurrentHeatingCoolingState", 134 | "CurrentHeatingCoolingState": "0000000F-0000-1000-8000-0026BB765291", 135 | "0000006C-0000-1000-8000-0026BB765291": "CurrentHorizontalTiltAngle", 136 | "CurrentHorizontalTiltAngle": "0000006C-0000-1000-8000-0026BB765291", 137 | "000000B3-0000-1000-8000-0026BB765291": "CurrentHumidifierDehumidifierState", 138 | "CurrentHumidifierDehumidifierState": "000000B3-0000-1000-8000-0026BB765291", 139 | "0000006D-0000-1000-8000-0026BB765291": "CurrentPosition", 140 | "CurrentPosition": "0000006D-0000-1000-8000-0026BB765291", 141 | "00000010-0000-1000-8000-0026BB765291": "CurrentRelativeHumidity", 142 | "CurrentRelativeHumidity": "00000010-0000-1000-8000-0026BB765291", 143 | "000000AA-0000-1000-8000-0026BB765291": "CurrentSlatState", 144 | "CurrentSlatState": "000000AA-0000-1000-8000-0026BB765291", 145 | "00000011-0000-1000-8000-0026BB765291": "CurrentTemperature", 146 | "CurrentTemperature": "00000011-0000-1000-8000-0026BB765291", 147 | "000000C1-0000-1000-8000-0026BB765291": "CurrentTiltAngle", 148 | "CurrentTiltAngle": "000000C1-0000-1000-8000-0026BB765291", 149 | "0000006E-0000-1000-8000-0026BB765291": "CurrentVerticalTiltAngle", 150 | "CurrentVerticalTiltAngle": "0000006E-0000-1000-8000-0026BB765291", 151 | "0000011D-0000-1000-8000-0026BB765291": "DigitalZoom", 152 | "DigitalZoom": "0000011D-0000-1000-8000-0026BB765291", 153 | "000000AC-0000-1000-8000-0026BB765291": "FilterChangeIndication", 154 | "FilterChangeIndication": "000000AC-0000-1000-8000-0026BB765291", 155 | "000000AB-0000-1000-8000-0026BB765291": "FilterLifeLevel", 156 | "FilterLifeLevel": "000000AB-0000-1000-8000-0026BB765291", 157 | "00000052-0000-1000-8000-0026BB765291": "FirmwareRevision", 158 | "FirmwareRevision": "00000052-0000-1000-8000-0026BB765291", 159 | "00000053-0000-1000-8000-0026BB765291": "HardwareRevision", 160 | "HardwareRevision": "00000053-0000-1000-8000-0026BB765291", 161 | "00000012-0000-1000-8000-0026BB765291": "HeatingThresholdTemperature", 162 | "HeatingThresholdTemperature": "00000012-0000-1000-8000-0026BB765291", 163 | "0000006F-0000-1000-8000-0026BB765291": "HoldPosition", 164 | "HoldPosition": "0000006F-0000-1000-8000-0026BB765291", 165 | "00000013-0000-1000-8000-0026BB765291": "Hue", 166 | "Hue": "00000013-0000-1000-8000-0026BB765291", 167 | "00000014-0000-1000-8000-0026BB765291": "Identify", 168 | "Identify": "00000014-0000-1000-8000-0026BB765291", 169 | "0000011F-0000-1000-8000-0026BB765291": "ImageMirroring", 170 | "ImageMirroring": "0000011F-0000-1000-8000-0026BB765291", 171 | "0000011E-0000-1000-8000-0026BB765291": "ImageRotation", 172 | "ImageRotation": "0000011E-0000-1000-8000-0026BB765291", 173 | "000000D2-0000-1000-8000-0026BB765291": "InUse", 174 | "InUse": "000000D2-0000-1000-8000-0026BB765291", 175 | "000000D6-0000-1000-8000-0026BB765291": "IsConfigured", 176 | "IsConfigured": "000000D6-0000-1000-8000-0026BB765291", 177 | "00000070-0000-1000-8000-0026BB765291": "LeakDetected", 178 | "LeakDetected": "00000070-0000-1000-8000-0026BB765291", 179 | "00000019-0000-1000-8000-0026BB765291": "LockControlPoint", 180 | "LockControlPoint": "00000019-0000-1000-8000-0026BB765291", 181 | "0000001D-0000-1000-8000-0026BB765291": "LockCurrentState", 182 | "LockCurrentState": "0000001D-0000-1000-8000-0026BB765291", 183 | "0000001C-0000-1000-8000-0026BB765291": "LockLastKnownAction", 184 | "LockLastKnownAction": "0000001C-0000-1000-8000-0026BB765291", 185 | "0000001A-0000-1000-8000-0026BB765291": "LockManagementAutoSecurityTimeout", 186 | "LockManagementAutoSecurityTimeout": "0000001A-0000-1000-8000-0026BB765291", 187 | "000000A7-0000-1000-8000-0026BB765291": "LockPhysicalControls", 188 | "LockPhysicalControls": "000000A7-0000-1000-8000-0026BB765291", 189 | "0000001E-0000-1000-8000-0026BB765291": "LockTargetState", 190 | "LockTargetState": "0000001E-0000-1000-8000-0026BB765291", 191 | "0000001F-0000-1000-8000-0026BB765291": "Logs", 192 | "Logs": "0000001F-0000-1000-8000-0026BB765291", 193 | "00000020-0000-1000-8000-0026BB765291": "Manufacturer", 194 | "Manufacturer": "00000020-0000-1000-8000-0026BB765291", 195 | "00000021-0000-1000-8000-0026BB765291": "Model", 196 | "Model": "00000021-0000-1000-8000-0026BB765291", 197 | "00000022-0000-1000-8000-0026BB765291": "MotionDetected", 198 | "MotionDetected": "00000022-0000-1000-8000-0026BB765291", 199 | "0000011A-0000-1000-8000-0026BB765291": "Mute", 200 | "Mute": "0000011A-0000-1000-8000-0026BB765291", 201 | "00000023-0000-1000-8000-0026BB765291": "Name", 202 | "Name": "00000023-0000-1000-8000-0026BB765291", 203 | "0000011B-0000-1000-8000-0026BB765291": "NightVision", 204 | "NightVision": "0000011B-0000-1000-8000-0026BB765291", 205 | "000000C4-0000-1000-8000-0026BB765291": "NitrogenDioxideDensity", 206 | "NitrogenDioxideDensity": "000000C4-0000-1000-8000-0026BB765291", 207 | "00000024-0000-1000-8000-0026BB765291": "ObstructionDetected", 208 | "ObstructionDetected": "00000024-0000-1000-8000-0026BB765291", 209 | "00000071-0000-1000-8000-0026BB765291": "OccupancyDetected", 210 | "OccupancyDetected": "00000071-0000-1000-8000-0026BB765291", 211 | "00000025-0000-1000-8000-0026BB765291": "On", 212 | "On": "00000025-0000-1000-8000-0026BB765291", 213 | "0000011C-0000-1000-8000-0026BB765291": "OpticalZoom", 214 | "OpticalZoom": "0000011C-0000-1000-8000-0026BB765291", 215 | "00000026-0000-1000-8000-0026BB765291": "OutletInUse", 216 | "OutletInUse": "00000026-0000-1000-8000-0026BB765291", 217 | "000000C3-0000-1000-8000-0026BB765291": "OzoneDensity", 218 | "OzoneDensity": "000000C3-0000-1000-8000-0026BB765291", 219 | "0000004C-0000-1000-8000-0026BB765291": "PairSetup", 220 | "PairSetup": "0000004C-0000-1000-8000-0026BB765291", 221 | "0000004E-0000-1000-8000-0026BB765291": "PairVerify", 222 | "PairVerify": "0000004E-0000-1000-8000-0026BB765291", 223 | "0000004F-0000-1000-8000-0026BB765291": "PairingFeatures", 224 | "PairingFeatures": "0000004F-0000-1000-8000-0026BB765291", 225 | "00000050-0000-1000-8000-0026BB765291": "PairingPairings", 226 | "PairingPairings": "00000050-0000-1000-8000-0026BB765291", 227 | "000000C7-0000-1000-8000-0026BB765291": "PM10Density", 228 | "PM10Density": "000000C7-0000-1000-8000-0026BB765291", 229 | "000000C6-0000-1000-8000-0026BB765291": "PM2_5Density", 230 | "PM2_5Density": "000000C6-0000-1000-8000-0026BB765291", 231 | "00000072-0000-1000-8000-0026BB765291": "PositionState", 232 | "PositionState": "00000072-0000-1000-8000-0026BB765291", 233 | "000000D1-0000-1000-8000-0026BB765291": "ProgramMode", 234 | "ProgramMode": "000000D1-0000-1000-8000-0026BB765291", 235 | "00000073-0000-1000-8000-0026BB765291": "ProgrammableSwitchEvent", 236 | "ProgrammableSwitchEvent": "00000073-0000-1000-8000-0026BB765291", 237 | "000000C9-0000-1000-8000-0026BB765291": "RelativeHumidityDehumidifierThreshold", 238 | "RelativeHumidityDehumidifierThreshold": "000000C9-0000-1000-8000-0026BB765291", 239 | "000000CA-0000-1000-8000-0026BB765291": "RelativeHumidityHumidifierThreshold", 240 | "RelativeHumidityHumidifierThreshold": "000000CA-0000-1000-8000-0026BB765291", 241 | "000000D4-0000-1000-8000-0026BB765291": "RemainingDuration", 242 | "RemainingDuration": "000000D4-0000-1000-8000-0026BB765291", 243 | "000000AD-0000-1000-8000-0026BB765291": "ResetFilterIndication", 244 | "ResetFilterIndication": "000000AD-0000-1000-8000-0026BB765291", 245 | "00000028-0000-1000-8000-0026BB765291": "RotationDirection", 246 | "RotationDirection": "00000028-0000-1000-8000-0026BB765291", 247 | "00000029-0000-1000-8000-0026BB765291": "RotationSpeed", 248 | "RotationSpeed": "00000029-0000-1000-8000-0026BB765291", 249 | "0000002F-0000-1000-8000-0026BB765291": "Saturation", 250 | "Saturation": "0000002F-0000-1000-8000-0026BB765291", 251 | "0000008E-0000-1000-8000-0026BB765291": "SecuritySystemAlarmType", 252 | "SecuritySystemAlarmType": "0000008E-0000-1000-8000-0026BB765291", 253 | "00000066-0000-1000-8000-0026BB765291": "SecuritySystemCurrentState", 254 | "SecuritySystemCurrentState": "00000066-0000-1000-8000-0026BB765291", 255 | "00000067-0000-1000-8000-0026BB765291": "SecuritySystemTargetState", 256 | "SecuritySystemTargetState": "00000067-0000-1000-8000-0026BB765291", 257 | "00000117-0000-1000-8000-0026BB765291": "SelectedRTPStreamConfiguration", 258 | "SelectedRTPStreamConfiguration": "00000117-0000-1000-8000-0026BB765291", 259 | "00000030-0000-1000-8000-0026BB765291": "SerialNumber", 260 | "SerialNumber": "00000030-0000-1000-8000-0026BB765291", 261 | "000000CB-0000-1000-8000-0026BB765291": "ServiceLabelIndex", 262 | "ServiceLabelIndex": "000000CB-0000-1000-8000-0026BB765291", 263 | "000000CD-0000-1000-8000-0026BB765291": "ServiceLabelNamespace", 264 | "ServiceLabelNamespace": "000000CD-0000-1000-8000-0026BB765291", 265 | "000000D3-0000-1000-8000-0026BB765291": "SetDuration", 266 | "SetDuration": "000000D3-0000-1000-8000-0026BB765291", 267 | "00000118-0000-1000-8000-0026BB765291": "SetupEndpoints", 268 | "SetupEndpoints": "00000118-0000-1000-8000-0026BB765291", 269 | "000000C0-0000-1000-8000-0026BB765291": "SlatType", 270 | "SlatType": "000000C0-0000-1000-8000-0026BB765291", 271 | "00000076-0000-1000-8000-0026BB765291": "SmokeDetected", 272 | "SmokeDetected": "00000076-0000-1000-8000-0026BB765291", 273 | "00000075-0000-1000-8000-0026BB765291": "StatusActive", 274 | "StatusActive": "00000075-0000-1000-8000-0026BB765291", 275 | "00000077-0000-1000-8000-0026BB765291": "StatusFault", 276 | "StatusFault": "00000077-0000-1000-8000-0026BB765291", 277 | "00000078-0000-1000-8000-0026BB765291": "StatusJammed", 278 | "StatusJammed": "00000078-0000-1000-8000-0026BB765291", 279 | "00000079-0000-1000-8000-0026BB765291": "StatusLowBattery", 280 | "StatusLowBattery": "00000079-0000-1000-8000-0026BB765291", 281 | "0000007A-0000-1000-8000-0026BB765291": "StatusTampered", 282 | "StatusTampered": "0000007A-0000-1000-8000-0026BB765291", 283 | "00000120-0000-1000-8000-0026BB765291": "StreamingStatus", 284 | "StreamingStatus": "00000120-0000-1000-8000-0026BB765291", 285 | "000000C5-0000-1000-8000-0026BB765291": "SulphurDioxideDensity", 286 | "SulphurDioxideDensity": "000000C5-0000-1000-8000-0026BB765291", 287 | "00000115-0000-1000-8000-0026BB765291": "SupportedAudioStreamConfiguration", 288 | "SupportedAudioStreamConfiguration": "00000115-0000-1000-8000-0026BB765291", 289 | "00000116-0000-1000-8000-0026BB765291": "SupportedRTPConfiguration", 290 | "SupportedRTPConfiguration": "00000116-0000-1000-8000-0026BB765291", 291 | "00000114-0000-1000-8000-0026BB765291": "SupportedVideoStreamConfiguration", 292 | "SupportedVideoStreamConfiguration": "00000114-0000-1000-8000-0026BB765291", 293 | "000000B6-0000-1000-8000-0026BB765291": "SwingMode", 294 | "SwingMode": "000000B6-0000-1000-8000-0026BB765291", 295 | "000000A8-0000-1000-8000-0026BB765291": "TargetAirPurifierState", 296 | "TargetAirPurifierState": "000000A8-0000-1000-8000-0026BB765291", 297 | "000000AE-0000-1000-8000-0026BB765291": "TargetAirQuality", 298 | "TargetAirQuality": "000000AE-0000-1000-8000-0026BB765291", 299 | "00000032-0000-1000-8000-0026BB765291": "TargetDoorState", 300 | "TargetDoorState": "00000032-0000-1000-8000-0026BB765291", 301 | "000000BF-0000-1000-8000-0026BB765291": "TargetFanState", 302 | "TargetFanState": "000000BF-0000-1000-8000-0026BB765291", 303 | "000000B2-0000-1000-8000-0026BB765291": "TargetHeaterCoolerState", 304 | "TargetHeaterCoolerState": "000000B2-0000-1000-8000-0026BB765291", 305 | "00000033-0000-1000-8000-0026BB765291": "TargetHeatingCoolingState", 306 | "TargetHeatingCoolingState": "00000033-0000-1000-8000-0026BB765291", 307 | "0000007B-0000-1000-8000-0026BB765291": "TargetHorizontalTiltAngle", 308 | "TargetHorizontalTiltAngle": "0000007B-0000-1000-8000-0026BB765291", 309 | "000000B4-0000-1000-8000-0026BB765291": "TargetHumidifierDehumidifierState", 310 | "TargetHumidifierDehumidifierState": "000000B4-0000-1000-8000-0026BB765291", 311 | "0000007C-0000-1000-8000-0026BB765291": "TargetPosition", 312 | "TargetPosition": "0000007C-0000-1000-8000-0026BB765291", 313 | "00000034-0000-1000-8000-0026BB765291": "TargetRelativeHumidity", 314 | "TargetRelativeHumidity": "00000034-0000-1000-8000-0026BB765291", 315 | "000000BE-0000-1000-8000-0026BB765291": "TargetSlatState", 316 | "TargetSlatState": "000000BE-0000-1000-8000-0026BB765291", 317 | "00000035-0000-1000-8000-0026BB765291": "TargetTemperature", 318 | "TargetTemperature": "00000035-0000-1000-8000-0026BB765291", 319 | "000000C2-0000-1000-8000-0026BB765291": "TargetTiltAngle", 320 | "TargetTiltAngle": "000000C2-0000-1000-8000-0026BB765291", 321 | "0000007D-0000-1000-8000-0026BB765291": "TargetVerticalTiltAngle", 322 | "TargetVerticalTiltAngle": "0000007D-0000-1000-8000-0026BB765291", 323 | "00000036-0000-1000-8000-0026BB765291": "TemperatureDisplayUnits", 324 | "TemperatureDisplayUnits": "00000036-0000-1000-8000-0026BB765291", 325 | "000000D5-0000-1000-8000-0026BB765291": "ValveType", 326 | "ValveType": "000000D5-0000-1000-8000-0026BB765291", 327 | "00000037-0000-1000-8000-0026BB765291": "Version", 328 | "Version": "00000037-0000-1000-8000-0026BB765291", 329 | "000000C8-0000-1000-8000-0026BB765291": "VOCDensity", 330 | "VOCDensity": "000000C8-0000-1000-8000-0026BB765291", 331 | "00000119-0000-1000-8000-0026BB765291": "Volume", 332 | "Volume": "00000119-0000-1000-8000-0026BB765291", 333 | "000000B5-0000-1000-8000-0026BB765291": "WaterLevel", 334 | "WaterLevel": "000000B5-0000-1000-8000-0026BB765291", 335 | }; 336 | 337 | export interface HapAccessoriesRespType { 338 | accessories: Array<{ 339 | aid: number; 340 | services: Array<{ 341 | iid: number; 342 | type: string; 343 | primary: boolean; 344 | hidden: boolean; 345 | characteristics: Array<{ 346 | iid: number; 347 | type: string; 348 | description: string; 349 | value: number | string | boolean; 350 | format: "bool" | "int" | "float" | "string" | "uint8" | "uint16" | "uint32" | "uint64" | "data" | "tlv8" | "array" | "dictionary"; 351 | perms: Array<"pr" | "pw" | "ev" | "aa" | "tw" | "hd">; 352 | unit?: "unit" | "percentage" | "celsius" | "arcdegrees" | "lux" | "seconds"; 353 | maxValue?: number; 354 | minValue?: number; 355 | minStep?: number; 356 | }>; 357 | }>; 358 | }>; 359 | } 360 | 361 | export interface ServiceType { 362 | aid: number; 363 | iid: number; 364 | uuid: string; 365 | type: string; 366 | humanType: string; 367 | serviceName: string; 368 | serviceCharacteristics: CharacteristicType[]; 369 | accessoryInformation: any; 370 | refreshCharacteristics?: () => Promise; 371 | setCharacteristic?: (iid: number, value: number | string | boolean) => Promise; 372 | getCharacteristic?: (type: string) => CharacteristicType; 373 | values: any; 374 | } 375 | 376 | export interface CharacteristicType { 377 | aid: number; 378 | iid: number; 379 | uuid: string; 380 | type: string; 381 | serviceType: string; 382 | serviceName: string; 383 | description: string; 384 | value: number | string | boolean; 385 | format: "bool" | "int" | "float" | "string" | "uint8" | "uint16" | "uint32" | "uint64" | "data" | "tlv8" | "array" | "dictionary"; 386 | perms: Array<"pr" | "pw" | "ev" | "aa" | "tw" | "hd">; 387 | unit?: "unit" | "percentage" | "celsius" | "arcdegrees" | "lux" | "seconds"; 388 | maxValue?: number; 389 | minValue?: number; 390 | minStep?: number; 391 | canRead: boolean; 392 | canWrite: boolean; 393 | setValue?: (value: number | string | boolean) => Promise; 394 | getValue?: () => Promise; 395 | } 396 | -------------------------------------------------------------------------------- /services/gateway/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/json5@^0.0.29": 6 | version "0.0.29" 7 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 8 | 9 | "@types/node@^10.5.2": 10 | version "10.5.2" 11 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" 12 | 13 | "@types/strip-bom@^3.0.0": 14 | version "3.0.0" 15 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 16 | 17 | "@types/strip-json-comments@0.0.30": 18 | version "0.0.30" 19 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 20 | 21 | abstract-things@^0.9.0: 22 | version "0.9.0" 23 | resolved "https://registry.yarnpkg.com/abstract-things/-/abstract-things-0.9.0.tgz#934baefb890dbadc7701794b6e363ed71ed41fa6" 24 | dependencies: 25 | amounts "^0.5.0" 26 | appdirectory "^0.1.0" 27 | color-convert "^1.9.1" 28 | color-string "^1.5.2" 29 | color-temperature "^0.2.7" 30 | debug "^3.1.0" 31 | deep-equal "^1.0.1" 32 | dwaal "^0.1.4" 33 | foibles "^0.2.0" 34 | is-mergeable-object "^1.1.0" 35 | mkdirp "^0.5.1" 36 | tinkerhub-discovery "^0.3.1" 37 | 38 | accepts@~1.3.5: 39 | version "1.3.5" 40 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 41 | dependencies: 42 | mime-types "~2.1.18" 43 | negotiator "0.6.1" 44 | 45 | acorn-jsx@^4.1.1: 46 | version "4.1.1" 47 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" 48 | dependencies: 49 | acorn "^5.0.3" 50 | 51 | acorn@^5.0.3, acorn@^5.6.0: 52 | version "5.7.1" 53 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" 54 | 55 | ajv-keywords@^3.0.0: 56 | version "3.2.0" 57 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" 58 | 59 | ajv@^6.0.1, ajv@^6.5.0: 60 | version "6.5.2" 61 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" 62 | dependencies: 63 | fast-deep-equal "^2.0.1" 64 | fast-json-stable-stringify "^2.0.0" 65 | json-schema-traverse "^0.4.1" 66 | uri-js "^4.2.1" 67 | 68 | amounts@^0.5.0: 69 | version "0.5.0" 70 | resolved "https://registry.yarnpkg.com/amounts/-/amounts-0.5.0.tgz#3b7371b54226f509304444e69b6af5ad40dac943" 71 | 72 | ansi-escapes@^3.0.0: 73 | version "3.1.0" 74 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 75 | 76 | ansi-regex@^2.0.0: 77 | version "2.1.1" 78 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 79 | 80 | ansi-regex@^3.0.0: 81 | version "3.0.0" 82 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 83 | 84 | ansi-styles@^2.2.1: 85 | version "2.2.1" 86 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 87 | 88 | ansi-styles@^3.2.1: 89 | version "3.2.1" 90 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 91 | dependencies: 92 | color-convert "^1.9.0" 93 | 94 | ansicolors@~0.2.1: 95 | version "0.2.1" 96 | resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" 97 | 98 | appdirectory@^0.1.0: 99 | version "0.1.0" 100 | resolved "https://registry.yarnpkg.com/appdirectory/-/appdirectory-0.1.0.tgz#eb6c816320e7b2ab16f5ed997f28d8205df56375" 101 | 102 | argparse@^1.0.7: 103 | version "1.0.10" 104 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 105 | dependencies: 106 | sprintf-js "~1.0.2" 107 | 108 | array-find-index@^1.0.1: 109 | version "1.0.2" 110 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 111 | 112 | array-flatten@1.1.1: 113 | version "1.1.1" 114 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 115 | 116 | array-flatten@^2.1.0: 117 | version "2.1.1" 118 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" 119 | 120 | array-union@^1.0.1: 121 | version "1.0.2" 122 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 123 | dependencies: 124 | array-uniq "^1.0.1" 125 | 126 | array-uniq@^1.0.1: 127 | version "1.0.3" 128 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 129 | 130 | arrify@^1.0.0: 131 | version "1.0.1" 132 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 133 | 134 | async-limiter@~1.0.0: 135 | version "1.0.0" 136 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 137 | 138 | async@2.6.1: 139 | version "2.6.1" 140 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" 141 | dependencies: 142 | lodash "^4.17.10" 143 | 144 | axios@^0.18.0: 145 | version "0.18.0" 146 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" 147 | dependencies: 148 | follow-redirects "^1.3.0" 149 | is-buffer "^1.1.5" 150 | 151 | babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: 152 | version "6.26.0" 153 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 154 | dependencies: 155 | chalk "^1.1.3" 156 | esutils "^2.0.2" 157 | js-tokens "^3.0.2" 158 | 159 | balanced-match@^1.0.0: 160 | version "1.0.0" 161 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 162 | 163 | bindings@^1.2.1, bindings@~1.3.0: 164 | version "1.3.0" 165 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" 166 | 167 | bl@^1.2.1: 168 | version "1.2.2" 169 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 170 | dependencies: 171 | readable-stream "^2.3.5" 172 | safe-buffer "^5.1.1" 173 | 174 | bluebird@3.5.1: 175 | version "3.5.1" 176 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 177 | 178 | body-parser@1.18.2: 179 | version "1.18.2" 180 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 181 | dependencies: 182 | bytes "3.0.0" 183 | content-type "~1.0.4" 184 | debug "2.6.9" 185 | depd "~1.1.1" 186 | http-errors "~1.6.2" 187 | iconv-lite "0.4.19" 188 | on-finished "~2.3.0" 189 | qs "6.5.1" 190 | raw-body "2.3.2" 191 | type-is "~1.6.15" 192 | 193 | bonjour-hap@^3.5.1: 194 | version "3.5.1" 195 | resolved "https://registry.yarnpkg.com/bonjour-hap/-/bonjour-hap-3.5.1.tgz#2519201bd0b302e0d399f9d6619015d7d6d6443e" 196 | dependencies: 197 | array-flatten "^2.1.0" 198 | deep-equal "^1.0.1" 199 | dns-equal "^1.0.0" 200 | dns-txt "^2.0.2" 201 | multicast-dns "^6.0.1" 202 | multicast-dns-service-types "^1.1.0" 203 | 204 | brace-expansion@^1.1.7: 205 | version "1.1.11" 206 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 207 | dependencies: 208 | balanced-match "^1.0.0" 209 | concat-map "0.0.1" 210 | 211 | bson@^1.1.0: 212 | version "1.1.0" 213 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.0.tgz#bee57d1fb6a87713471af4e32bcae36de814b5b0" 214 | 215 | bson@~1.0.5: 216 | version "1.0.9" 217 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.9.tgz#12319f8323b1254739b7c6bef8d3e89ae05a2f57" 218 | 219 | buffer-from@^1.0.0, buffer-from@^1.1.0: 220 | version "1.1.0" 221 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" 222 | 223 | buffer-indexof@^1.0.0: 224 | version "1.1.1" 225 | resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" 226 | 227 | buffer-shims@^1.0.0: 228 | version "1.0.0" 229 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 230 | 231 | builtin-modules@^1.0.0, builtin-modules@^1.1.1: 232 | version "1.1.1" 233 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 234 | 235 | bytes@3.0.0: 236 | version "3.0.0" 237 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 238 | 239 | callback-stream@^1.0.2: 240 | version "1.1.0" 241 | resolved "https://registry.yarnpkg.com/callback-stream/-/callback-stream-1.1.0.tgz#4701a51266f06e06eaa71fc17233822d875f4908" 242 | dependencies: 243 | inherits "^2.0.1" 244 | readable-stream "> 1.0.0 < 3.0.0" 245 | 246 | caller-path@^0.1.0: 247 | version "0.1.0" 248 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 249 | dependencies: 250 | callsites "^0.2.0" 251 | 252 | callsites@^0.2.0: 253 | version "0.2.0" 254 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 255 | 256 | camelcase-keys@^2.0.0: 257 | version "2.1.0" 258 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 259 | dependencies: 260 | camelcase "^2.0.0" 261 | map-obj "^1.0.0" 262 | 263 | camelcase@^2.0.0: 264 | version "2.1.1" 265 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 266 | 267 | camelcase@^4.1.0: 268 | version "4.1.0" 269 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 270 | 271 | cardinal@^1.0.0: 272 | version "1.0.0" 273 | resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" 274 | dependencies: 275 | ansicolors "~0.2.1" 276 | redeyed "~1.0.0" 277 | 278 | chalk@^1.1.1, chalk@^1.1.3: 279 | version "1.1.3" 280 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 281 | dependencies: 282 | ansi-styles "^2.2.1" 283 | escape-string-regexp "^1.0.2" 284 | has-ansi "^2.0.0" 285 | strip-ansi "^3.0.0" 286 | supports-color "^2.0.0" 287 | 288 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: 289 | version "2.4.1" 290 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 291 | dependencies: 292 | ansi-styles "^3.2.1" 293 | escape-string-regexp "^1.0.5" 294 | supports-color "^5.3.0" 295 | 296 | chardet@^0.4.0: 297 | version "0.4.2" 298 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 299 | 300 | circular-json@^0.3.1: 301 | version "0.3.3" 302 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 303 | 304 | cli-cursor@^2.1.0: 305 | version "2.1.0" 306 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 307 | dependencies: 308 | restore-cursor "^2.0.0" 309 | 310 | cli-table@^0.3.1: 311 | version "0.3.1" 312 | resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" 313 | dependencies: 314 | colors "1.0.3" 315 | 316 | cli-usage@^0.1.1: 317 | version "0.1.7" 318 | resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.7.tgz#eaf1c9d5b91e22482333072a12127f05cd99a3ba" 319 | dependencies: 320 | marked "^0.3.12" 321 | marked-terminal "^2.0.0" 322 | 323 | cli-width@^2.0.0: 324 | version "2.2.0" 325 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 326 | 327 | cliui@^4.0.0: 328 | version "4.1.0" 329 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 330 | dependencies: 331 | string-width "^2.1.1" 332 | strip-ansi "^4.0.0" 333 | wrap-ansi "^2.0.0" 334 | 335 | code-point-at@^1.0.0: 336 | version "1.1.0" 337 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 338 | 339 | color-convert@^1.9.0: 340 | version "1.9.2" 341 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" 342 | dependencies: 343 | color-name "1.1.1" 344 | 345 | color-convert@^1.9.1: 346 | version "1.9.3" 347 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 348 | dependencies: 349 | color-name "1.1.3" 350 | 351 | color-name@1.1.1: 352 | version "1.1.1" 353 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" 354 | 355 | color-name@1.1.3, color-name@^1.0.0: 356 | version "1.1.3" 357 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 358 | 359 | color-string@^1.5.2: 360 | version "1.5.3" 361 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" 362 | dependencies: 363 | color-name "^1.0.0" 364 | simple-swizzle "^0.2.2" 365 | 366 | color-temperature@^0.2.7: 367 | version "0.2.7" 368 | resolved "https://registry.yarnpkg.com/color-temperature/-/color-temperature-0.2.7.tgz#6c32ad9dd9c0fe07ccf2d8680734781712332b40" 369 | 370 | colors@1.0.3: 371 | version "1.0.3" 372 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" 373 | 374 | commander@2.8.1: 375 | version "2.8.1" 376 | resolved "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" 377 | dependencies: 378 | graceful-readlink ">= 1.0.0" 379 | 380 | commander@^2.12.1: 381 | version "2.17.1" 382 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 383 | 384 | commist@^1.0.0: 385 | version "1.0.0" 386 | resolved "https://registry.yarnpkg.com/commist/-/commist-1.0.0.tgz#c0c352501cf6f52e9124e3ef89c9806e2022ebef" 387 | dependencies: 388 | leven "^1.0.0" 389 | minimist "^1.1.0" 390 | 391 | concat-map@0.0.1: 392 | version "0.0.1" 393 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 394 | 395 | concat-stream@^1.6.2: 396 | version "1.6.2" 397 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 398 | dependencies: 399 | buffer-from "^1.0.0" 400 | inherits "^2.0.3" 401 | readable-stream "^2.2.2" 402 | typedarray "^0.0.6" 403 | 404 | content-disposition@0.5.2: 405 | version "0.5.2" 406 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 407 | 408 | content-type@~1.0.4: 409 | version "1.0.4" 410 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 411 | 412 | cookie-signature@1.0.6: 413 | version "1.0.6" 414 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 415 | 416 | cookie@0.3.1: 417 | version "0.3.1" 418 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 419 | 420 | core-util-is@~1.0.0: 421 | version "1.0.2" 422 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 423 | 424 | cross-spawn@^5.0.1: 425 | version "5.1.0" 426 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 427 | dependencies: 428 | lru-cache "^4.0.1" 429 | shebang-command "^1.2.0" 430 | which "^1.2.9" 431 | 432 | cross-spawn@^6.0.5: 433 | version "6.0.5" 434 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 435 | dependencies: 436 | nice-try "^1.0.4" 437 | path-key "^2.0.1" 438 | semver "^5.5.0" 439 | shebang-command "^1.2.0" 440 | which "^1.2.9" 441 | 442 | currently-unhandled@^0.4.1: 443 | version "0.4.1" 444 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 445 | dependencies: 446 | array-find-index "^1.0.1" 447 | 448 | curve25519-n@^1.2.0: 449 | version "1.4.0" 450 | resolved "https://registry.yarnpkg.com/curve25519-n/-/curve25519-n-1.4.0.tgz#b1b419bdb5885f274efe87b2534713332b644172" 451 | dependencies: 452 | bindings "~1.3.0" 453 | nan "^2.10.0" 454 | 455 | dateformat@~1.0.4-1.2.3: 456 | version "1.0.12" 457 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 458 | dependencies: 459 | get-stdin "^4.0.1" 460 | meow "^3.3.0" 461 | 462 | debounce@^1.0.0: 463 | version "1.1.0" 464 | resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408" 465 | 466 | debug@2.6.9, debug@^2.2.0: 467 | version "2.6.9" 468 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 469 | dependencies: 470 | ms "2.0.0" 471 | 472 | debug@3.1.0, debug@=3.1.0, debug@^3.1.0: 473 | version "3.1.0" 474 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 475 | dependencies: 476 | ms "2.0.0" 477 | 478 | decamelize@^1.1.1, decamelize@^1.1.2: 479 | version "1.2.0" 480 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 481 | 482 | decamelize@^2.0.0: 483 | version "2.0.0" 484 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" 485 | dependencies: 486 | xregexp "4.0.0" 487 | 488 | decimal.js@^7.2.3: 489 | version "7.5.1" 490 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.5.1.tgz#cf4cf5eeb9faa24fc4ee6af361faebb7bfcca2ce" 491 | 492 | deep-equal@^1.0.1: 493 | version "1.0.1" 494 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 495 | 496 | deep-is@~0.1.3: 497 | version "0.1.3" 498 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 499 | 500 | deepmerge@^2.0.1: 501 | version "2.1.1" 502 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" 503 | 504 | define-properties@^1.1.2: 505 | version "1.1.2" 506 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 507 | dependencies: 508 | foreach "^2.0.5" 509 | object-keys "^1.0.8" 510 | 511 | del@^2.0.2: 512 | version "2.2.2" 513 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 514 | dependencies: 515 | globby "^5.0.0" 516 | is-path-cwd "^1.0.0" 517 | is-path-in-cwd "^1.0.0" 518 | object-assign "^4.0.1" 519 | pify "^2.0.0" 520 | pinkie-promise "^2.0.0" 521 | rimraf "^2.2.8" 522 | 523 | depd@1.1.1: 524 | version "1.1.1" 525 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 526 | 527 | depd@~1.1.1, depd@~1.1.2: 528 | version "1.1.2" 529 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 530 | 531 | destroy@~1.0.4: 532 | version "1.0.4" 533 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 534 | 535 | diff@^3.1.0, diff@^3.2.0: 536 | version "3.5.0" 537 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 538 | 539 | dns-equal@^1.0.0: 540 | version "1.0.0" 541 | resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" 542 | 543 | dns-packet@^1.3.1: 544 | version "1.3.1" 545 | resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" 546 | dependencies: 547 | ip "^1.1.0" 548 | safe-buffer "^5.0.1" 549 | 550 | dns-txt@^2.0.2: 551 | version "2.0.2" 552 | resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" 553 | dependencies: 554 | buffer-indexof "^1.0.0" 555 | 556 | doctrine@^2.1.0: 557 | version "2.1.0" 558 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 559 | dependencies: 560 | esutils "^2.0.2" 561 | 562 | dotenv@^6.0.0: 563 | version "6.0.0" 564 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.0.0.tgz#24e37c041741c5f4b25324958ebbc34bca965935" 565 | 566 | duplexify@^3.5.1, duplexify@^3.6.0: 567 | version "3.6.0" 568 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" 569 | dependencies: 570 | end-of-stream "^1.0.0" 571 | inherits "^2.0.1" 572 | readable-stream "^2.0.0" 573 | stream-shift "^1.0.0" 574 | 575 | dwaal@^0.1.4: 576 | version "0.1.4" 577 | resolved "https://registry.yarnpkg.com/dwaal/-/dwaal-0.1.4.tgz#5f182ff451645fec4df6181bff43c06e2ad0ae49" 578 | dependencies: 579 | debug "^3.1.0" 580 | deep-equal "^1.0.1" 581 | end-of-stream "^1.4.0" 582 | fs-write-stream-atomic "^1.0.10" 583 | msgpack-lite "^0.1.26" 584 | msgpack-sock "^1.1.0" 585 | unix-socket-leader "^0.1.2" 586 | 587 | dynamic-dedupe@^0.2.0: 588 | version "0.2.0" 589 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.2.0.tgz#50f7c28684831ecf1c170aab67a1d5311cdd76ce" 590 | dependencies: 591 | xtend "~2.0.6" 592 | 593 | ed25519-hap@^0.0.5: 594 | version "0.0.5" 595 | resolved "https://registry.yarnpkg.com/ed25519-hap/-/ed25519-hap-0.0.5.tgz#90325fd3d489efcc6a81a7948758a1ca644af0d8" 596 | dependencies: 597 | bindings "^1.2.1" 598 | nan "^2.10.0" 599 | 600 | ee-first@1.1.1: 601 | version "1.1.1" 602 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 603 | 604 | encodeurl@~1.0.2: 605 | version "1.0.2" 606 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 607 | 608 | end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1: 609 | version "1.4.1" 610 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 611 | dependencies: 612 | once "^1.4.0" 613 | 614 | error-ex@^1.2.0: 615 | version "1.3.2" 616 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 617 | dependencies: 618 | is-arrayish "^0.2.1" 619 | 620 | es-abstract@^1.10.0: 621 | version "1.12.0" 622 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" 623 | dependencies: 624 | es-to-primitive "^1.1.1" 625 | function-bind "^1.1.1" 626 | has "^1.0.1" 627 | is-callable "^1.1.3" 628 | is-regex "^1.0.4" 629 | 630 | es-to-primitive@^1.1.1: 631 | version "1.1.1" 632 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 633 | dependencies: 634 | is-callable "^1.1.1" 635 | is-date-object "^1.0.1" 636 | is-symbol "^1.0.1" 637 | 638 | escape-html@~1.0.3: 639 | version "1.0.3" 640 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 641 | 642 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 643 | version "1.0.5" 644 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 645 | 646 | eslint-plugin-typescript@^0.14.0: 647 | version "0.14.0" 648 | resolved "https://registry.yarnpkg.com/eslint-plugin-typescript/-/eslint-plugin-typescript-0.14.0.tgz#068549c3f4c7f3f85d88d398c29fa96bf500884c" 649 | dependencies: 650 | requireindex "~1.1.0" 651 | 652 | eslint-scope@^4.0.0: 653 | version "4.0.0" 654 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" 655 | dependencies: 656 | esrecurse "^4.1.0" 657 | estraverse "^4.1.1" 658 | 659 | eslint-utils@^1.3.1: 660 | version "1.3.1" 661 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" 662 | 663 | eslint-visitor-keys@^1.0.0: 664 | version "1.0.0" 665 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 666 | 667 | eslint@^5.1.0: 668 | version "5.1.0" 669 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.1.0.tgz#2ed611f1ce163c0fb99e1e0cda5af8f662dff645" 670 | dependencies: 671 | ajv "^6.5.0" 672 | babel-code-frame "^6.26.0" 673 | chalk "^2.1.0" 674 | cross-spawn "^6.0.5" 675 | debug "^3.1.0" 676 | doctrine "^2.1.0" 677 | eslint-scope "^4.0.0" 678 | eslint-utils "^1.3.1" 679 | eslint-visitor-keys "^1.0.0" 680 | espree "^4.0.0" 681 | esquery "^1.0.1" 682 | esutils "^2.0.2" 683 | file-entry-cache "^2.0.0" 684 | functional-red-black-tree "^1.0.1" 685 | glob "^7.1.2" 686 | globals "^11.7.0" 687 | ignore "^3.3.3" 688 | imurmurhash "^0.1.4" 689 | inquirer "^5.2.0" 690 | is-resolvable "^1.1.0" 691 | js-yaml "^3.11.0" 692 | json-stable-stringify-without-jsonify "^1.0.1" 693 | levn "^0.3.0" 694 | lodash "^4.17.5" 695 | minimatch "^3.0.4" 696 | mkdirp "^0.5.1" 697 | natural-compare "^1.4.0" 698 | optionator "^0.8.2" 699 | path-is-inside "^1.0.2" 700 | pluralize "^7.0.0" 701 | progress "^2.0.0" 702 | regexpp "^1.1.0" 703 | require-uncached "^1.0.3" 704 | semver "^5.5.0" 705 | string.prototype.matchall "^2.0.0" 706 | strip-ansi "^4.0.0" 707 | strip-json-comments "^2.0.1" 708 | table "^4.0.3" 709 | text-table "^0.2.0" 710 | 711 | espree@^4.0.0: 712 | version "4.0.0" 713 | resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" 714 | dependencies: 715 | acorn "^5.6.0" 716 | acorn-jsx "^4.1.1" 717 | 718 | esprima@^4.0.0: 719 | version "4.0.0" 720 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 721 | 722 | esprima@~3.0.0: 723 | version "3.0.0" 724 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" 725 | 726 | esquery@^1.0.1: 727 | version "1.0.1" 728 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 729 | dependencies: 730 | estraverse "^4.0.0" 731 | 732 | esrecurse@^4.1.0: 733 | version "4.2.1" 734 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 735 | dependencies: 736 | estraverse "^4.1.0" 737 | 738 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 739 | version "4.2.0" 740 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 741 | 742 | esutils@^2.0.2: 743 | version "2.0.2" 744 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 745 | 746 | etag@~1.8.1: 747 | version "1.8.1" 748 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 749 | 750 | event-lite@^0.1.1: 751 | version "0.1.1" 752 | resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.1.tgz#47cf08a8d37d0b694cdb7b3b17b51faac6576086" 753 | 754 | eventemitter3@^2.0.3: 755 | version "2.0.3" 756 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" 757 | 758 | execa@^0.7.0: 759 | version "0.7.0" 760 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 761 | dependencies: 762 | cross-spawn "^5.0.1" 763 | get-stream "^3.0.0" 764 | is-stream "^1.1.0" 765 | npm-run-path "^2.0.0" 766 | p-finally "^1.0.0" 767 | signal-exit "^3.0.0" 768 | strip-eof "^1.0.0" 769 | 770 | express@^4.16.3: 771 | version "4.16.3" 772 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" 773 | dependencies: 774 | accepts "~1.3.5" 775 | array-flatten "1.1.1" 776 | body-parser "1.18.2" 777 | content-disposition "0.5.2" 778 | content-type "~1.0.4" 779 | cookie "0.3.1" 780 | cookie-signature "1.0.6" 781 | debug "2.6.9" 782 | depd "~1.1.2" 783 | encodeurl "~1.0.2" 784 | escape-html "~1.0.3" 785 | etag "~1.8.1" 786 | finalhandler "1.1.1" 787 | fresh "0.5.2" 788 | merge-descriptors "1.0.1" 789 | methods "~1.1.2" 790 | on-finished "~2.3.0" 791 | parseurl "~1.3.2" 792 | path-to-regexp "0.1.7" 793 | proxy-addr "~2.0.3" 794 | qs "6.5.1" 795 | range-parser "~1.2.0" 796 | safe-buffer "5.1.1" 797 | send "0.16.2" 798 | serve-static "1.13.2" 799 | setprototypeof "1.1.0" 800 | statuses "~1.4.0" 801 | type-is "~1.6.16" 802 | utils-merge "1.0.1" 803 | vary "~1.1.2" 804 | 805 | extend@^3.0.0: 806 | version "3.0.1" 807 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 808 | 809 | external-editor@^2.1.0: 810 | version "2.2.0" 811 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 812 | dependencies: 813 | chardet "^0.4.0" 814 | iconv-lite "^0.4.17" 815 | tmp "^0.0.33" 816 | 817 | fast-deep-equal@^2.0.1: 818 | version "2.0.1" 819 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 820 | 821 | fast-json-stable-stringify@^2.0.0: 822 | version "2.0.0" 823 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 824 | 825 | fast-levenshtein@~2.0.4: 826 | version "2.0.6" 827 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 828 | 829 | fast-srp-hap@^1.0.1: 830 | version "1.0.1" 831 | resolved "https://registry.yarnpkg.com/fast-srp-hap/-/fast-srp-hap-1.0.1.tgz#377124d196bc6a5157aae5b37bf5fa35bb4ad2d9" 832 | 833 | figures@^2.0.0: 834 | version "2.0.0" 835 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 836 | dependencies: 837 | escape-string-regexp "^1.0.5" 838 | 839 | file-entry-cache@^2.0.0: 840 | version "2.0.0" 841 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 842 | dependencies: 843 | flat-cache "^1.2.1" 844 | object-assign "^4.0.1" 845 | 846 | filewatcher@~3.0.0: 847 | version "3.0.1" 848 | resolved "https://registry.yarnpkg.com/filewatcher/-/filewatcher-3.0.1.tgz#f4a1957355ddaf443ccd78a895f3d55e23c8a034" 849 | dependencies: 850 | debounce "^1.0.0" 851 | 852 | finalhandler@1.1.1: 853 | version "1.1.1" 854 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 855 | dependencies: 856 | debug "2.6.9" 857 | encodeurl "~1.0.2" 858 | escape-html "~1.0.3" 859 | on-finished "~2.3.0" 860 | parseurl "~1.3.2" 861 | statuses "~1.4.0" 862 | unpipe "~1.0.0" 863 | 864 | find-up@^1.0.0: 865 | version "1.1.2" 866 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 867 | dependencies: 868 | path-exists "^2.0.0" 869 | pinkie-promise "^2.0.0" 870 | 871 | find-up@^2.1.0: 872 | version "2.1.0" 873 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 874 | dependencies: 875 | locate-path "^2.0.0" 876 | 877 | flat-cache@^1.2.1: 878 | version "1.3.0" 879 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" 880 | dependencies: 881 | circular-json "^0.3.1" 882 | del "^2.0.2" 883 | graceful-fs "^4.1.2" 884 | write "^0.2.1" 885 | 886 | foibles@^0.2.0: 887 | version "0.2.0" 888 | resolved "https://registry.yarnpkg.com/foibles/-/foibles-0.2.0.tgz#8964f449ad8bca24fb5c9a225fba69d072027a28" 889 | 890 | follow-redirects@^1.3.0: 891 | version "1.6.1" 892 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb" 893 | dependencies: 894 | debug "=3.1.0" 895 | 896 | foreach@^2.0.5, foreach@~2.0.1: 897 | version "2.0.5" 898 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 899 | 900 | forwarded@~0.1.2: 901 | version "0.1.2" 902 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 903 | 904 | fresh@0.5.2: 905 | version "0.5.2" 906 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 907 | 908 | fs-write-stream-atomic@^1.0.10: 909 | version "1.0.10" 910 | resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" 911 | dependencies: 912 | graceful-fs "^4.1.2" 913 | iferr "^0.1.5" 914 | imurmurhash "^0.1.4" 915 | readable-stream "1 || 2" 916 | 917 | fs.realpath@^1.0.0: 918 | version "1.0.0" 919 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 920 | 921 | function-bind@^1.1.1: 922 | version "1.1.1" 923 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 924 | 925 | functional-red-black-tree@^1.0.1: 926 | version "1.0.1" 927 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 928 | 929 | get-caller-file@^1.0.1: 930 | version "1.0.3" 931 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 932 | 933 | get-stdin@^4.0.1: 934 | version "4.0.1" 935 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 936 | 937 | get-stream@^3.0.0: 938 | version "3.0.0" 939 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 940 | 941 | glob-parent@^3.1.0: 942 | version "3.1.0" 943 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 944 | dependencies: 945 | is-glob "^3.1.0" 946 | path-dirname "^1.0.0" 947 | 948 | glob-stream@^6.1.0: 949 | version "6.1.0" 950 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" 951 | dependencies: 952 | extend "^3.0.0" 953 | glob "^7.1.1" 954 | glob-parent "^3.1.0" 955 | is-negated-glob "^1.0.0" 956 | ordered-read-streams "^1.0.0" 957 | pumpify "^1.3.5" 958 | readable-stream "^2.1.5" 959 | remove-trailing-separator "^1.0.1" 960 | to-absolute-glob "^2.0.0" 961 | unique-stream "^2.0.2" 962 | 963 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: 964 | version "7.1.2" 965 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 966 | dependencies: 967 | fs.realpath "^1.0.0" 968 | inflight "^1.0.4" 969 | inherits "2" 970 | minimatch "^3.0.4" 971 | once "^1.3.0" 972 | path-is-absolute "^1.0.0" 973 | 974 | globals@^11.7.0: 975 | version "11.7.0" 976 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" 977 | 978 | globby@^5.0.0: 979 | version "5.0.0" 980 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 981 | dependencies: 982 | array-union "^1.0.1" 983 | arrify "^1.0.0" 984 | glob "^7.0.3" 985 | object-assign "^4.0.1" 986 | pify "^2.0.0" 987 | pinkie-promise "^2.0.0" 988 | 989 | graceful-fs@^4.1.2: 990 | version "4.1.11" 991 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 992 | 993 | "graceful-readlink@>= 1.0.0": 994 | version "1.0.1" 995 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 996 | 997 | growly@^1.2.0: 998 | version "1.3.0" 999 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 1000 | 1001 | hap-nodejs@0.4.47: 1002 | version "0.4.47" 1003 | resolved "https://registry.yarnpkg.com/hap-nodejs/-/hap-nodejs-0.4.47.tgz#77004b0e521d373cc20285d610d3ba619e2b7342" 1004 | dependencies: 1005 | bonjour-hap "^3.5.1" 1006 | buffer-shims "^1.0.0" 1007 | curve25519-n "^1.2.0" 1008 | debug "^2.2.0" 1009 | decimal.js "^7.2.3" 1010 | ed25519-hap "^0.0.5" 1011 | fast-srp-hap "^1.0.1" 1012 | ip "^1.1.3" 1013 | node-persist "^0.0.11" 1014 | 1015 | has-ansi@^2.0.0: 1016 | version "2.0.0" 1017 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1018 | dependencies: 1019 | ansi-regex "^2.0.0" 1020 | 1021 | has-flag@^3.0.0: 1022 | version "3.0.0" 1023 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1024 | 1025 | has-symbols@^1.0.0: 1026 | version "1.0.0" 1027 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1028 | 1029 | has@^1.0.1: 1030 | version "1.0.3" 1031 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1032 | dependencies: 1033 | function-bind "^1.1.1" 1034 | 1035 | help-me@^1.0.1: 1036 | version "1.1.0" 1037 | resolved "https://registry.yarnpkg.com/help-me/-/help-me-1.1.0.tgz#8f2d508d0600b4a456da2f086556e7e5c056a3c6" 1038 | dependencies: 1039 | callback-stream "^1.0.2" 1040 | glob-stream "^6.1.0" 1041 | through2 "^2.0.1" 1042 | xtend "^4.0.0" 1043 | 1044 | hoek@5.x.x: 1045 | version "5.0.3" 1046 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.3.tgz#b71d40d943d0a95da01956b547f83c4a5b4a34ac" 1047 | 1048 | homebridge@^0.4.45: 1049 | version "0.4.45" 1050 | resolved "https://registry.yarnpkg.com/homebridge/-/homebridge-0.4.45.tgz#d24008d048da573061b8b524f7161d4eb4f84563" 1051 | dependencies: 1052 | chalk "^1.1.1" 1053 | commander "2.8.1" 1054 | hap-nodejs "0.4.47" 1055 | node-persist "^0.0.8" 1056 | qrcode-terminal "^0.11.0" 1057 | semver "5.0.3" 1058 | 1059 | hosted-git-info@^2.1.4: 1060 | version "2.7.1" 1061 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1062 | 1063 | http-errors@1.6.2: 1064 | version "1.6.2" 1065 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 1066 | dependencies: 1067 | depd "1.1.1" 1068 | inherits "2.0.3" 1069 | setprototypeof "1.0.3" 1070 | statuses ">= 1.3.1 < 2" 1071 | 1072 | http-errors@~1.6.2: 1073 | version "1.6.3" 1074 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1075 | dependencies: 1076 | depd "~1.1.2" 1077 | inherits "2.0.3" 1078 | setprototypeof "1.1.0" 1079 | statuses ">= 1.4.0 < 2" 1080 | 1081 | iconv-lite@0.4.19: 1082 | version "0.4.19" 1083 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 1084 | 1085 | iconv-lite@^0.4.17: 1086 | version "0.4.23" 1087 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 1088 | dependencies: 1089 | safer-buffer ">= 2.1.2 < 3" 1090 | 1091 | ieee754@^1.1.8: 1092 | version "1.1.12" 1093 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" 1094 | 1095 | iferr@^0.1.5: 1096 | version "0.1.5" 1097 | resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" 1098 | 1099 | ignore@^3.3.3: 1100 | version "3.3.10" 1101 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 1102 | 1103 | imurmurhash@^0.1.4: 1104 | version "0.1.4" 1105 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1106 | 1107 | indent-string@^2.1.0: 1108 | version "2.1.0" 1109 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1110 | dependencies: 1111 | repeating "^2.0.0" 1112 | 1113 | indexof@~0.0.1: 1114 | version "0.0.1" 1115 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1116 | 1117 | inflection@^1.12.0: 1118 | version "1.12.0" 1119 | resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" 1120 | 1121 | inflight@^1.0.4: 1122 | version "1.0.6" 1123 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1124 | dependencies: 1125 | once "^1.3.0" 1126 | wrappy "1" 1127 | 1128 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 1129 | version "2.0.3" 1130 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1131 | 1132 | inquirer@^5.2.0: 1133 | version "5.2.0" 1134 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" 1135 | dependencies: 1136 | ansi-escapes "^3.0.0" 1137 | chalk "^2.0.0" 1138 | cli-cursor "^2.1.0" 1139 | cli-width "^2.0.0" 1140 | external-editor "^2.1.0" 1141 | figures "^2.0.0" 1142 | lodash "^4.3.0" 1143 | mute-stream "0.0.7" 1144 | run-async "^2.2.0" 1145 | rxjs "^5.5.2" 1146 | string-width "^2.1.0" 1147 | strip-ansi "^4.0.0" 1148 | through "^2.3.6" 1149 | 1150 | int64-buffer@^0.1.9: 1151 | version "0.1.10" 1152 | resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.1.10.tgz#277b228a87d95ad777d07c13832022406a473423" 1153 | 1154 | invert-kv@^1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1157 | 1158 | ip@^1.1.0, ip@^1.1.3: 1159 | version "1.1.5" 1160 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 1161 | 1162 | ipaddr.js@1.6.0: 1163 | version "1.6.0" 1164 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" 1165 | 1166 | is-absolute@^1.0.0: 1167 | version "1.0.0" 1168 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" 1169 | dependencies: 1170 | is-relative "^1.0.0" 1171 | is-windows "^1.0.1" 1172 | 1173 | is-arrayish@^0.2.1: 1174 | version "0.2.1" 1175 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1176 | 1177 | is-arrayish@^0.3.1: 1178 | version "0.3.2" 1179 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 1180 | 1181 | is-buffer@^1.1.5: 1182 | version "1.1.6" 1183 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1184 | 1185 | is-builtin-module@^1.0.0: 1186 | version "1.0.0" 1187 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1188 | dependencies: 1189 | builtin-modules "^1.0.0" 1190 | 1191 | is-callable@^1.1.1, is-callable@^1.1.3: 1192 | version "1.1.4" 1193 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1194 | 1195 | is-date-object@^1.0.1: 1196 | version "1.0.1" 1197 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1198 | 1199 | is-extglob@^2.1.0: 1200 | version "2.1.1" 1201 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1202 | 1203 | is-finite@^1.0.0: 1204 | version "1.0.2" 1205 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1206 | dependencies: 1207 | number-is-nan "^1.0.0" 1208 | 1209 | is-fullwidth-code-point@^1.0.0: 1210 | version "1.0.0" 1211 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1212 | dependencies: 1213 | number-is-nan "^1.0.0" 1214 | 1215 | is-fullwidth-code-point@^2.0.0: 1216 | version "2.0.0" 1217 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1218 | 1219 | is-glob@^3.1.0: 1220 | version "3.1.0" 1221 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1222 | dependencies: 1223 | is-extglob "^2.1.0" 1224 | 1225 | is-mergeable-object@^1.1.0: 1226 | version "1.1.0" 1227 | resolved "https://registry.yarnpkg.com/is-mergeable-object/-/is-mergeable-object-1.1.0.tgz#a846e8cf0e2bad6a8cf8b243b63b4c43b9907990" 1228 | 1229 | is-negated-glob@^1.0.0: 1230 | version "1.0.0" 1231 | resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" 1232 | 1233 | is-object@~0.1.2: 1234 | version "0.1.2" 1235 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" 1236 | 1237 | is-path-cwd@^1.0.0: 1238 | version "1.0.0" 1239 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1240 | 1241 | is-path-in-cwd@^1.0.0: 1242 | version "1.0.1" 1243 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" 1244 | dependencies: 1245 | is-path-inside "^1.0.0" 1246 | 1247 | is-path-inside@^1.0.0: 1248 | version "1.0.1" 1249 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1250 | dependencies: 1251 | path-is-inside "^1.0.1" 1252 | 1253 | is-promise@^2.1.0: 1254 | version "2.1.0" 1255 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1256 | 1257 | is-regex@^1.0.4: 1258 | version "1.0.4" 1259 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1260 | dependencies: 1261 | has "^1.0.1" 1262 | 1263 | is-relative@^1.0.0: 1264 | version "1.0.0" 1265 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" 1266 | dependencies: 1267 | is-unc-path "^1.0.0" 1268 | 1269 | is-resolvable@^1.1.0: 1270 | version "1.1.0" 1271 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 1272 | 1273 | is-stream@^1.1.0: 1274 | version "1.1.0" 1275 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1276 | 1277 | is-symbol@^1.0.1: 1278 | version "1.0.1" 1279 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 1280 | 1281 | is-unc-path@^1.0.0: 1282 | version "1.0.0" 1283 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" 1284 | dependencies: 1285 | unc-path-regex "^0.1.2" 1286 | 1287 | is-utf8@^0.2.0: 1288 | version "0.2.1" 1289 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1290 | 1291 | is-windows@^1.0.1: 1292 | version "1.0.2" 1293 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1294 | 1295 | is@~0.2.6: 1296 | version "0.2.7" 1297 | resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" 1298 | 1299 | isarray@^1.0.0, isarray@~1.0.0: 1300 | version "1.0.0" 1301 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1302 | 1303 | isemail@3.x.x: 1304 | version "3.1.2" 1305 | resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.2.tgz#937cf919002077999a73ea8b1951d590e84e01dd" 1306 | dependencies: 1307 | punycode "2.x.x" 1308 | 1309 | isexe@^2.0.0: 1310 | version "2.0.0" 1311 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1312 | 1313 | joi@^13.4.0: 1314 | version "13.4.0" 1315 | resolved "https://registry.yarnpkg.com/joi/-/joi-13.4.0.tgz#afc359ee3d8bc5f9b9ba6cdc31b46d44af14cecc" 1316 | dependencies: 1317 | hoek "5.x.x" 1318 | isemail "3.x.x" 1319 | topo "3.x.x" 1320 | 1321 | js-tokens@^3.0.2: 1322 | version "3.0.2" 1323 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1324 | 1325 | js-yaml@^3.11.0, js-yaml@^3.7.0: 1326 | version "3.12.0" 1327 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" 1328 | dependencies: 1329 | argparse "^1.0.7" 1330 | esprima "^4.0.0" 1331 | 1332 | json-schema-traverse@^0.4.1: 1333 | version "0.4.1" 1334 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1335 | 1336 | json-stable-stringify-without-jsonify@^1.0.1: 1337 | version "1.0.1" 1338 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1339 | 1340 | json-stable-stringify@^1.0.0: 1341 | version "1.0.1" 1342 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1343 | dependencies: 1344 | jsonify "~0.0.0" 1345 | 1346 | json5@^1.0.1: 1347 | version "1.0.1" 1348 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1349 | dependencies: 1350 | minimist "^1.2.0" 1351 | 1352 | jsonify@~0.0.0: 1353 | version "0.0.0" 1354 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1355 | 1356 | kareem@2.2.1: 1357 | version "2.2.1" 1358 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.2.1.tgz#9950809415aa3cde62ab43b4f7b919d99816e015" 1359 | 1360 | lcid@^1.0.0: 1361 | version "1.0.0" 1362 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1363 | dependencies: 1364 | invert-kv "^1.0.0" 1365 | 1366 | leven@^1.0.0: 1367 | version "1.0.2" 1368 | resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" 1369 | 1370 | levn@^0.3.0, levn@~0.3.0: 1371 | version "0.3.0" 1372 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1373 | dependencies: 1374 | prelude-ls "~1.1.2" 1375 | type-check "~0.3.2" 1376 | 1377 | load-json-file@^1.0.0: 1378 | version "1.1.0" 1379 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1380 | dependencies: 1381 | graceful-fs "^4.1.2" 1382 | parse-json "^2.2.0" 1383 | pify "^2.0.0" 1384 | pinkie-promise "^2.0.0" 1385 | strip-bom "^2.0.0" 1386 | 1387 | locate-path@^2.0.0: 1388 | version "2.0.0" 1389 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1390 | dependencies: 1391 | p-locate "^2.0.0" 1392 | path-exists "^3.0.0" 1393 | 1394 | lodash._arraycopy@^3.0.0: 1395 | version "3.0.0" 1396 | resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" 1397 | 1398 | lodash._arrayeach@^3.0.0: 1399 | version "3.0.0" 1400 | resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" 1401 | 1402 | lodash._baseassign@^3.0.0: 1403 | version "3.2.0" 1404 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 1405 | dependencies: 1406 | lodash._basecopy "^3.0.0" 1407 | lodash.keys "^3.0.0" 1408 | 1409 | lodash._baseclone@^3.0.0: 1410 | version "3.3.0" 1411 | resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" 1412 | dependencies: 1413 | lodash._arraycopy "^3.0.0" 1414 | lodash._arrayeach "^3.0.0" 1415 | lodash._baseassign "^3.0.0" 1416 | lodash._basefor "^3.0.0" 1417 | lodash.isarray "^3.0.0" 1418 | lodash.keys "^3.0.0" 1419 | 1420 | lodash._basecopy@^3.0.0: 1421 | version "3.0.1" 1422 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1423 | 1424 | lodash._basefor@^3.0.0: 1425 | version "3.0.3" 1426 | resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" 1427 | 1428 | lodash._bindcallback@^3.0.0: 1429 | version "3.0.1" 1430 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" 1431 | 1432 | lodash._getnative@^3.0.0: 1433 | version "3.9.1" 1434 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1435 | 1436 | lodash.assign@^4.2.0: 1437 | version "4.2.0" 1438 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 1439 | 1440 | lodash.clonedeep@^3.0.0: 1441 | version "3.0.2" 1442 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" 1443 | dependencies: 1444 | lodash._baseclone "^3.0.0" 1445 | lodash._bindcallback "^3.0.0" 1446 | 1447 | lodash.get@4.4.2: 1448 | version "4.4.2" 1449 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1450 | 1451 | lodash.isarguments@^3.0.0: 1452 | version "3.1.0" 1453 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 1454 | 1455 | lodash.isarray@^3.0.0: 1456 | version "3.0.4" 1457 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 1458 | 1459 | lodash.keys@^3.0.0: 1460 | version "3.1.2" 1461 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 1462 | dependencies: 1463 | lodash._getnative "^3.0.0" 1464 | lodash.isarguments "^3.0.0" 1465 | lodash.isarray "^3.0.0" 1466 | 1467 | lodash.toarray@^4.4.0: 1468 | version "4.4.0" 1469 | resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" 1470 | 1471 | lodash.unescape@4.0.1: 1472 | version "4.0.1" 1473 | resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" 1474 | 1475 | lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: 1476 | version "4.17.10" 1477 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" 1478 | 1479 | loud-rejection@^1.0.0: 1480 | version "1.6.0" 1481 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1482 | dependencies: 1483 | currently-unhandled "^0.4.1" 1484 | signal-exit "^3.0.0" 1485 | 1486 | lru-cache@^4.0.1: 1487 | version "4.1.3" 1488 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" 1489 | dependencies: 1490 | pseudomap "^1.0.2" 1491 | yallist "^2.1.2" 1492 | 1493 | make-error@^1.1.1: 1494 | version "1.3.4" 1495 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" 1496 | 1497 | map-obj@^1.0.0, map-obj@^1.0.1: 1498 | version "1.0.1" 1499 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1500 | 1501 | marked-terminal@^2.0.0: 1502 | version "2.0.0" 1503 | resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-2.0.0.tgz#5eaf568be66f686541afa52a558280310a31de2d" 1504 | dependencies: 1505 | cardinal "^1.0.0" 1506 | chalk "^1.1.3" 1507 | cli-table "^0.3.1" 1508 | lodash.assign "^4.2.0" 1509 | node-emoji "^1.4.1" 1510 | 1511 | marked@^0.3.12: 1512 | version "0.3.19" 1513 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 1514 | 1515 | media-typer@0.3.0: 1516 | version "0.3.0" 1517 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1518 | 1519 | mem@^1.1.0: 1520 | version "1.1.0" 1521 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 1522 | dependencies: 1523 | mimic-fn "^1.0.0" 1524 | 1525 | meow@^3.3.0: 1526 | version "3.7.0" 1527 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1528 | dependencies: 1529 | camelcase-keys "^2.0.0" 1530 | decamelize "^1.1.2" 1531 | loud-rejection "^1.0.0" 1532 | map-obj "^1.0.1" 1533 | minimist "^1.1.3" 1534 | normalize-package-data "^2.3.4" 1535 | object-assign "^4.0.1" 1536 | read-pkg-up "^1.0.1" 1537 | redent "^1.0.0" 1538 | trim-newlines "^1.0.0" 1539 | 1540 | merge-descriptors@1.0.1: 1541 | version "1.0.1" 1542 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1543 | 1544 | methods@~1.1.2: 1545 | version "1.1.2" 1546 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1547 | 1548 | miio@^0.15.6: 1549 | version "0.15.6" 1550 | resolved "https://registry.yarnpkg.com/miio/-/miio-0.15.6.tgz#0da26f7b25e16e35734fd8778ff3a280465e1a6c" 1551 | dependencies: 1552 | abstract-things "^0.9.0" 1553 | appdirectory "^0.1.0" 1554 | chalk "^2.3.0" 1555 | debug "^3.1.0" 1556 | deep-equal "^1.0.1" 1557 | mkdirp "^0.5.1" 1558 | tinkerhub-discovery "^0.3.1" 1559 | yargs "^10.1.1" 1560 | 1561 | mime-db@~1.33.0: 1562 | version "1.33.0" 1563 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 1564 | 1565 | mime-types@~2.1.18: 1566 | version "2.1.18" 1567 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 1568 | dependencies: 1569 | mime-db "~1.33.0" 1570 | 1571 | mime@1.4.1: 1572 | version "1.4.1" 1573 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 1574 | 1575 | mimic-fn@^1.0.0: 1576 | version "1.2.0" 1577 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1578 | 1579 | minimatch@^3.0.4: 1580 | version "3.0.4" 1581 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1582 | dependencies: 1583 | brace-expansion "^1.1.7" 1584 | 1585 | minimist@0.0.8: 1586 | version "0.0.8" 1587 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1588 | 1589 | minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: 1590 | version "1.2.0" 1591 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1592 | 1593 | mkdirp@^0.5.1, mkdirp@~0.5.1: 1594 | version "0.5.1" 1595 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1596 | dependencies: 1597 | minimist "0.0.8" 1598 | 1599 | mkdirp@~0.3.5: 1600 | version "0.3.5" 1601 | resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" 1602 | 1603 | mongodb-core@3.1.3: 1604 | version "3.1.3" 1605 | resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.1.3.tgz#b036bce5290b383fe507238965bef748dd8adb75" 1606 | dependencies: 1607 | bson "^1.1.0" 1608 | require_optional "^1.0.1" 1609 | safe-buffer "^5.1.2" 1610 | optionalDependencies: 1611 | saslprep "^1.0.0" 1612 | 1613 | mongodb@3.1.4: 1614 | version "3.1.4" 1615 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.1.4.tgz#0ff07a7409a4edf05e71f9ff8df3633bd278ed53" 1616 | dependencies: 1617 | mongodb-core "3.1.3" 1618 | safe-buffer "^5.1.2" 1619 | 1620 | mongoose-legacy-pluralize@1.0.2: 1621 | version "1.0.2" 1622 | resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" 1623 | 1624 | mongoose@^5.2.9: 1625 | version "5.2.10" 1626 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.2.10.tgz#01a652e68050ae9145b082a588e30b00589add7e" 1627 | dependencies: 1628 | async "2.6.1" 1629 | bson "~1.0.5" 1630 | kareem "2.2.1" 1631 | lodash.get "4.4.2" 1632 | mongodb "3.1.4" 1633 | mongodb-core "3.1.3" 1634 | mongoose-legacy-pluralize "1.0.2" 1635 | mpath "0.4.1" 1636 | mquery "3.2.0" 1637 | ms "2.0.0" 1638 | regexp-clone "0.0.1" 1639 | safe-buffer "5.1.2" 1640 | sliced "1.0.1" 1641 | 1642 | mpath@0.4.1: 1643 | version "0.4.1" 1644 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.4.1.tgz#ed10388430380bf7bbb5be1391e5d6969cb08e89" 1645 | 1646 | mqtt-packet@^5.6.0: 1647 | version "5.6.0" 1648 | resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-5.6.0.tgz#923fb704d0ce0bd6ac81c7e1cc09469b1512d2fd" 1649 | dependencies: 1650 | bl "^1.2.1" 1651 | inherits "^2.0.3" 1652 | process-nextick-args "^2.0.0" 1653 | safe-buffer "^5.1.0" 1654 | 1655 | mqtt@^2.18.2: 1656 | version "2.18.2" 1657 | resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-2.18.2.tgz#5c01b412d23db399aa5230e7d4e71a3fcef3e64a" 1658 | dependencies: 1659 | commist "^1.0.0" 1660 | concat-stream "^1.6.2" 1661 | end-of-stream "^1.4.1" 1662 | help-me "^1.0.1" 1663 | inherits "^2.0.3" 1664 | minimist "^1.2.0" 1665 | mqtt-packet "^5.6.0" 1666 | pump "^3.0.0" 1667 | readable-stream "^2.3.6" 1668 | reinterval "^1.1.0" 1669 | split2 "^2.1.1" 1670 | websocket-stream "^5.1.2" 1671 | xtend "^4.0.1" 1672 | 1673 | mquery@3.2.0: 1674 | version "3.2.0" 1675 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.0.tgz#e276472abd5109686a15eb2a8e0761db813c81cc" 1676 | dependencies: 1677 | bluebird "3.5.1" 1678 | debug "3.1.0" 1679 | regexp-clone "0.0.1" 1680 | safe-buffer "5.1.2" 1681 | sliced "1.0.1" 1682 | 1683 | ms@2.0.0: 1684 | version "2.0.0" 1685 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1686 | 1687 | msgpack-lite@^0.1.26: 1688 | version "0.1.26" 1689 | resolved "https://registry.yarnpkg.com/msgpack-lite/-/msgpack-lite-0.1.26.tgz#dd3c50b26f059f25e7edee3644418358e2a9ad89" 1690 | dependencies: 1691 | event-lite "^0.1.1" 1692 | ieee754 "^1.1.8" 1693 | int64-buffer "^0.1.9" 1694 | isarray "^1.0.0" 1695 | 1696 | msgpack-sock@^1.1.0: 1697 | version "1.1.0" 1698 | resolved "https://registry.yarnpkg.com/msgpack-sock/-/msgpack-sock-1.1.0.tgz#6023587b50aabd68ab9419d058068adca7fa1ef7" 1699 | dependencies: 1700 | msgpack-lite "^0.1.26" 1701 | 1702 | multicast-dns-service-types@^1.1.0: 1703 | version "1.1.0" 1704 | resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" 1705 | 1706 | multicast-dns@^6.0.1: 1707 | version "6.2.3" 1708 | resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" 1709 | dependencies: 1710 | dns-packet "^1.3.1" 1711 | thunky "^1.0.2" 1712 | 1713 | mute-stream@0.0.7: 1714 | version "0.0.7" 1715 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1716 | 1717 | nan@^2.10.0: 1718 | version "2.11.1" 1719 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" 1720 | 1721 | natural-compare@^1.4.0: 1722 | version "1.4.0" 1723 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1724 | 1725 | negotiator@0.6.1: 1726 | version "0.6.1" 1727 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1728 | 1729 | nice-try@^1.0.4: 1730 | version "1.0.4" 1731 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" 1732 | 1733 | node-emoji@^1.4.1: 1734 | version "1.8.1" 1735 | resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" 1736 | dependencies: 1737 | lodash.toarray "^4.4.0" 1738 | 1739 | node-notifier@^4.0.2: 1740 | version "4.6.1" 1741 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" 1742 | dependencies: 1743 | cli-usage "^0.1.1" 1744 | growly "^1.2.0" 1745 | lodash.clonedeep "^3.0.0" 1746 | minimist "^1.1.1" 1747 | semver "^5.1.0" 1748 | shellwords "^0.1.0" 1749 | which "^1.0.5" 1750 | 1751 | node-persist@^0.0.11: 1752 | version "0.0.11" 1753 | resolved "https://registry.yarnpkg.com/node-persist/-/node-persist-0.0.11.tgz#d66eba3ebef620f079530fa7b13076a906665874" 1754 | dependencies: 1755 | mkdirp "~0.5.1" 1756 | q "~1.1.1" 1757 | 1758 | node-persist@^0.0.8: 1759 | version "0.0.8" 1760 | resolved "https://registry.yarnpkg.com/node-persist/-/node-persist-0.0.8.tgz#a56c739bc6ffd9ceef19c0e8d89597917f089249" 1761 | dependencies: 1762 | mkdirp "~0.3.5" 1763 | q "~1.1.1" 1764 | 1765 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1766 | version "2.4.0" 1767 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1768 | dependencies: 1769 | hosted-git-info "^2.1.4" 1770 | is-builtin-module "^1.0.0" 1771 | semver "2 || 3 || 4 || 5" 1772 | validate-npm-package-license "^3.0.1" 1773 | 1774 | npm-run-path@^2.0.0: 1775 | version "2.0.2" 1776 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1777 | dependencies: 1778 | path-key "^2.0.0" 1779 | 1780 | number-is-nan@^1.0.0: 1781 | version "1.0.1" 1782 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1783 | 1784 | object-assign@^4.0.1: 1785 | version "4.1.1" 1786 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1787 | 1788 | object-keys@^1.0.8: 1789 | version "1.0.12" 1790 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" 1791 | 1792 | object-keys@~0.2.0: 1793 | version "0.2.0" 1794 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" 1795 | dependencies: 1796 | foreach "~2.0.1" 1797 | indexof "~0.0.1" 1798 | is "~0.2.6" 1799 | 1800 | on-finished@~2.3.0: 1801 | version "2.3.0" 1802 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1803 | dependencies: 1804 | ee-first "1.1.1" 1805 | 1806 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1807 | version "1.4.0" 1808 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1809 | dependencies: 1810 | wrappy "1" 1811 | 1812 | onetime@^2.0.0: 1813 | version "2.0.1" 1814 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1815 | dependencies: 1816 | mimic-fn "^1.0.0" 1817 | 1818 | optionator@^0.8.2: 1819 | version "0.8.2" 1820 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1821 | dependencies: 1822 | deep-is "~0.1.3" 1823 | fast-levenshtein "~2.0.4" 1824 | levn "~0.3.0" 1825 | prelude-ls "~1.1.2" 1826 | type-check "~0.3.2" 1827 | wordwrap "~1.0.0" 1828 | 1829 | ordered-read-streams@^1.0.0: 1830 | version "1.0.1" 1831 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" 1832 | dependencies: 1833 | readable-stream "^2.0.1" 1834 | 1835 | os-locale@^2.0.0: 1836 | version "2.1.0" 1837 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 1838 | dependencies: 1839 | execa "^0.7.0" 1840 | lcid "^1.0.0" 1841 | mem "^1.1.0" 1842 | 1843 | os-tmpdir@~1.0.2: 1844 | version "1.0.2" 1845 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1846 | 1847 | p-finally@^1.0.0: 1848 | version "1.0.0" 1849 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1850 | 1851 | p-limit@^1.1.0: 1852 | version "1.3.0" 1853 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1854 | dependencies: 1855 | p-try "^1.0.0" 1856 | 1857 | p-locate@^2.0.0: 1858 | version "2.0.0" 1859 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1860 | dependencies: 1861 | p-limit "^1.1.0" 1862 | 1863 | p-try@^1.0.0: 1864 | version "1.0.0" 1865 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1866 | 1867 | parse-json@^2.2.0: 1868 | version "2.2.0" 1869 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1870 | dependencies: 1871 | error-ex "^1.2.0" 1872 | 1873 | parseurl@~1.3.2: 1874 | version "1.3.2" 1875 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 1876 | 1877 | path-dirname@^1.0.0: 1878 | version "1.0.2" 1879 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1880 | 1881 | path-exists@^2.0.0: 1882 | version "2.1.0" 1883 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1884 | dependencies: 1885 | pinkie-promise "^2.0.0" 1886 | 1887 | path-exists@^3.0.0: 1888 | version "3.0.0" 1889 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1890 | 1891 | path-is-absolute@^1.0.0: 1892 | version "1.0.1" 1893 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1894 | 1895 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: 1896 | version "1.0.2" 1897 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1898 | 1899 | path-key@^2.0.0, path-key@^2.0.1: 1900 | version "2.0.1" 1901 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1902 | 1903 | path-parse@^1.0.5: 1904 | version "1.0.5" 1905 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1906 | 1907 | path-to-regexp@0.1.7: 1908 | version "0.1.7" 1909 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1910 | 1911 | path-type@^1.0.0: 1912 | version "1.1.0" 1913 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1914 | dependencies: 1915 | graceful-fs "^4.1.2" 1916 | pify "^2.0.0" 1917 | pinkie-promise "^2.0.0" 1918 | 1919 | pidlockfile@^1.1.1: 1920 | version "1.1.1" 1921 | resolved "https://registry.yarnpkg.com/pidlockfile/-/pidlockfile-1.1.1.tgz#d67312fb326deeb45e5419a47c141877bd3cc98c" 1922 | 1923 | pify@^2.0.0: 1924 | version "2.3.0" 1925 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1926 | 1927 | pinkie-promise@^2.0.0: 1928 | version "2.0.1" 1929 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1930 | dependencies: 1931 | pinkie "^2.0.0" 1932 | 1933 | pinkie@^2.0.0: 1934 | version "2.0.4" 1935 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1936 | 1937 | pluralize@^7.0.0: 1938 | version "7.0.0" 1939 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 1940 | 1941 | prelude-ls@~1.1.2: 1942 | version "1.1.2" 1943 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1944 | 1945 | process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: 1946 | version "2.0.0" 1947 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1948 | 1949 | progress@^2.0.0: 1950 | version "2.0.0" 1951 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 1952 | 1953 | proxy-addr@~2.0.3: 1954 | version "2.0.3" 1955 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" 1956 | dependencies: 1957 | forwarded "~0.1.2" 1958 | ipaddr.js "1.6.0" 1959 | 1960 | pseudomap@^1.0.2: 1961 | version "1.0.2" 1962 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1963 | 1964 | pump@^2.0.0: 1965 | version "2.0.1" 1966 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 1967 | dependencies: 1968 | end-of-stream "^1.1.0" 1969 | once "^1.3.1" 1970 | 1971 | pump@^3.0.0: 1972 | version "3.0.0" 1973 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1974 | dependencies: 1975 | end-of-stream "^1.1.0" 1976 | once "^1.3.1" 1977 | 1978 | pumpify@^1.3.5: 1979 | version "1.5.1" 1980 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" 1981 | dependencies: 1982 | duplexify "^3.6.0" 1983 | inherits "^2.0.3" 1984 | pump "^2.0.0" 1985 | 1986 | punycode@2.x.x, punycode@^2.1.0: 1987 | version "2.1.1" 1988 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1989 | 1990 | q@~1.1.1: 1991 | version "1.1.2" 1992 | resolved "https://registry.yarnpkg.com/q/-/q-1.1.2.tgz#6357e291206701d99f197ab84e57e8ad196f2a89" 1993 | 1994 | qrcode-terminal@^0.11.0: 1995 | version "0.11.0" 1996 | resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e" 1997 | 1998 | qs@6.5.1: 1999 | version "6.5.1" 2000 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 2001 | 2002 | ramda@^0.25.0: 2003 | version "0.25.0" 2004 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" 2005 | 2006 | range-parser@~1.2.0: 2007 | version "1.2.0" 2008 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2009 | 2010 | raw-body@2.3.2: 2011 | version "2.3.2" 2012 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 2013 | dependencies: 2014 | bytes "3.0.0" 2015 | http-errors "1.6.2" 2016 | iconv-lite "0.4.19" 2017 | unpipe "1.0.0" 2018 | 2019 | read-pkg-up@^1.0.1: 2020 | version "1.0.1" 2021 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2022 | dependencies: 2023 | find-up "^1.0.0" 2024 | read-pkg "^1.0.0" 2025 | 2026 | read-pkg@^1.0.0: 2027 | version "1.1.0" 2028 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2029 | dependencies: 2030 | load-json-file "^1.0.0" 2031 | normalize-package-data "^2.3.2" 2032 | path-type "^1.0.0" 2033 | 2034 | "readable-stream@1 || 2", "readable-stream@> 1.0.0 < 3.0.0", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: 2035 | version "2.3.6" 2036 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2037 | dependencies: 2038 | core-util-is "~1.0.0" 2039 | inherits "~2.0.3" 2040 | isarray "~1.0.0" 2041 | process-nextick-args "~2.0.0" 2042 | safe-buffer "~5.1.1" 2043 | string_decoder "~1.1.1" 2044 | util-deprecate "~1.0.1" 2045 | 2046 | redent@^1.0.0: 2047 | version "1.0.0" 2048 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2049 | dependencies: 2050 | indent-string "^2.1.0" 2051 | strip-indent "^1.0.1" 2052 | 2053 | redeyed@~1.0.0: 2054 | version "1.0.1" 2055 | resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" 2056 | dependencies: 2057 | esprima "~3.0.0" 2058 | 2059 | regexp-clone@0.0.1: 2060 | version "0.0.1" 2061 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" 2062 | 2063 | regexp.prototype.flags@^1.2.0: 2064 | version "1.2.0" 2065 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" 2066 | dependencies: 2067 | define-properties "^1.1.2" 2068 | 2069 | regexpp@^1.1.0: 2070 | version "1.1.0" 2071 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" 2072 | 2073 | reinterval@^1.1.0: 2074 | version "1.1.0" 2075 | resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" 2076 | 2077 | remove-trailing-separator@^1.0.1: 2078 | version "1.1.0" 2079 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2080 | 2081 | repeating@^2.0.0: 2082 | version "2.0.1" 2083 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2084 | dependencies: 2085 | is-finite "^1.0.0" 2086 | 2087 | require-directory@^2.1.1: 2088 | version "2.1.1" 2089 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2090 | 2091 | require-main-filename@^1.0.1: 2092 | version "1.0.1" 2093 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2094 | 2095 | require-uncached@^1.0.3: 2096 | version "1.0.3" 2097 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 2098 | dependencies: 2099 | caller-path "^0.1.0" 2100 | resolve-from "^1.0.0" 2101 | 2102 | require_optional@^1.0.1: 2103 | version "1.0.1" 2104 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" 2105 | dependencies: 2106 | resolve-from "^2.0.0" 2107 | semver "^5.1.0" 2108 | 2109 | requireindex@~1.1.0: 2110 | version "1.1.0" 2111 | resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" 2112 | 2113 | resolve-from@^1.0.0: 2114 | version "1.0.1" 2115 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 2116 | 2117 | resolve-from@^2.0.0: 2118 | version "2.0.0" 2119 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 2120 | 2121 | resolve@^1.0.0, resolve@^1.3.2: 2122 | version "1.8.1" 2123 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" 2124 | dependencies: 2125 | path-parse "^1.0.5" 2126 | 2127 | restore-cursor@^2.0.0: 2128 | version "2.0.0" 2129 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 2130 | dependencies: 2131 | onetime "^2.0.0" 2132 | signal-exit "^3.0.2" 2133 | 2134 | rimraf@^2.2.8, rimraf@^2.6.1: 2135 | version "2.6.2" 2136 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2137 | dependencies: 2138 | glob "^7.0.5" 2139 | 2140 | run-async@^2.2.0: 2141 | version "2.3.0" 2142 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 2143 | dependencies: 2144 | is-promise "^2.1.0" 2145 | 2146 | rxjs@^5.5.2: 2147 | version "5.5.11" 2148 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" 2149 | dependencies: 2150 | symbol-observable "1.0.1" 2151 | 2152 | rxjs@^6.2.2: 2153 | version "6.2.2" 2154 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" 2155 | dependencies: 2156 | tslib "^1.9.0" 2157 | 2158 | safe-buffer@5.1.1: 2159 | version "5.1.1" 2160 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 2161 | 2162 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2163 | version "5.1.2" 2164 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2165 | 2166 | "safer-buffer@>= 2.1.2 < 3": 2167 | version "2.1.2" 2168 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2169 | 2170 | saslprep@^1.0.0: 2171 | version "1.0.0" 2172 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.0.tgz#2c4968a0bfbf249530cd597bc62870ccd4b41a24" 2173 | 2174 | "semver@2 || 3 || 4 || 5", semver@5.5.0, semver@^5.1.0, semver@^5.5.0: 2175 | version "5.5.0" 2176 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 2177 | 2178 | semver@5.0.3: 2179 | version "5.0.3" 2180 | resolved "http://registry.npmjs.org/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 2181 | 2182 | semver@^5.3.0: 2183 | version "5.5.1" 2184 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 2185 | 2186 | send@0.16.2: 2187 | version "0.16.2" 2188 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 2189 | dependencies: 2190 | debug "2.6.9" 2191 | depd "~1.1.2" 2192 | destroy "~1.0.4" 2193 | encodeurl "~1.0.2" 2194 | escape-html "~1.0.3" 2195 | etag "~1.8.1" 2196 | fresh "0.5.2" 2197 | http-errors "~1.6.2" 2198 | mime "1.4.1" 2199 | ms "2.0.0" 2200 | on-finished "~2.3.0" 2201 | range-parser "~1.2.0" 2202 | statuses "~1.4.0" 2203 | 2204 | serve-static@1.13.2: 2205 | version "1.13.2" 2206 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 2207 | dependencies: 2208 | encodeurl "~1.0.2" 2209 | escape-html "~1.0.3" 2210 | parseurl "~1.3.2" 2211 | send "0.16.2" 2212 | 2213 | set-blocking@^2.0.0: 2214 | version "2.0.0" 2215 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2216 | 2217 | setprototypeof@1.0.3: 2218 | version "1.0.3" 2219 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 2220 | 2221 | setprototypeof@1.1.0: 2222 | version "1.1.0" 2223 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 2224 | 2225 | shebang-command@^1.2.0: 2226 | version "1.2.0" 2227 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2228 | dependencies: 2229 | shebang-regex "^1.0.0" 2230 | 2231 | shebang-regex@^1.0.0: 2232 | version "1.0.0" 2233 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2234 | 2235 | shellwords@^0.1.0: 2236 | version "0.1.1" 2237 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 2238 | 2239 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2240 | version "3.0.2" 2241 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2242 | 2243 | simple-swizzle@^0.2.2: 2244 | version "0.2.2" 2245 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 2246 | dependencies: 2247 | is-arrayish "^0.3.1" 2248 | 2249 | slice-ansi@1.0.0: 2250 | version "1.0.0" 2251 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 2252 | dependencies: 2253 | is-fullwidth-code-point "^2.0.0" 2254 | 2255 | sliced@1.0.1: 2256 | version "1.0.1" 2257 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 2258 | 2259 | source-map-support@^0.5.6: 2260 | version "0.5.6" 2261 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" 2262 | dependencies: 2263 | buffer-from "^1.0.0" 2264 | source-map "^0.6.0" 2265 | 2266 | source-map@^0.6.0: 2267 | version "0.6.1" 2268 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2269 | 2270 | spdx-correct@^3.0.0: 2271 | version "3.0.0" 2272 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" 2273 | dependencies: 2274 | spdx-expression-parse "^3.0.0" 2275 | spdx-license-ids "^3.0.0" 2276 | 2277 | spdx-exceptions@^2.1.0: 2278 | version "2.1.0" 2279 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" 2280 | 2281 | spdx-expression-parse@^3.0.0: 2282 | version "3.0.0" 2283 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 2284 | dependencies: 2285 | spdx-exceptions "^2.1.0" 2286 | spdx-license-ids "^3.0.0" 2287 | 2288 | spdx-license-ids@^3.0.0: 2289 | version "3.0.0" 2290 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" 2291 | 2292 | split2@^2.1.1: 2293 | version "2.2.0" 2294 | resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" 2295 | dependencies: 2296 | through2 "^2.0.2" 2297 | 2298 | sprintf-js@~1.0.2: 2299 | version "1.0.3" 2300 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2301 | 2302 | "statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": 2303 | version "1.5.0" 2304 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2305 | 2306 | statuses@~1.4.0: 2307 | version "1.4.0" 2308 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 2309 | 2310 | stream-shift@^1.0.0: 2311 | version "1.0.0" 2312 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 2313 | 2314 | string-width@^1.0.1: 2315 | version "1.0.2" 2316 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2317 | dependencies: 2318 | code-point-at "^1.0.0" 2319 | is-fullwidth-code-point "^1.0.0" 2320 | strip-ansi "^3.0.0" 2321 | 2322 | string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: 2323 | version "2.1.1" 2324 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2325 | dependencies: 2326 | is-fullwidth-code-point "^2.0.0" 2327 | strip-ansi "^4.0.0" 2328 | 2329 | string.prototype.matchall@^2.0.0: 2330 | version "2.0.0" 2331 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz#2af8fe3d2d6dc53ca2a59bd376b089c3c152b3c8" 2332 | dependencies: 2333 | define-properties "^1.1.2" 2334 | es-abstract "^1.10.0" 2335 | function-bind "^1.1.1" 2336 | has-symbols "^1.0.0" 2337 | regexp.prototype.flags "^1.2.0" 2338 | 2339 | string_decoder@~1.1.1: 2340 | version "1.1.1" 2341 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2342 | dependencies: 2343 | safe-buffer "~5.1.0" 2344 | 2345 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2346 | version "3.0.1" 2347 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2348 | dependencies: 2349 | ansi-regex "^2.0.0" 2350 | 2351 | strip-ansi@^4.0.0: 2352 | version "4.0.0" 2353 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2354 | dependencies: 2355 | ansi-regex "^3.0.0" 2356 | 2357 | strip-bom@^2.0.0: 2358 | version "2.0.0" 2359 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2360 | dependencies: 2361 | is-utf8 "^0.2.0" 2362 | 2363 | strip-bom@^3.0.0: 2364 | version "3.0.0" 2365 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2366 | 2367 | strip-eof@^1.0.0: 2368 | version "1.0.0" 2369 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2370 | 2371 | strip-indent@^1.0.1: 2372 | version "1.0.1" 2373 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2374 | dependencies: 2375 | get-stdin "^4.0.1" 2376 | 2377 | strip-json-comments@^2.0.0, strip-json-comments@^2.0.1: 2378 | version "2.0.1" 2379 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2380 | 2381 | supports-color@^2.0.0: 2382 | version "2.0.0" 2383 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2384 | 2385 | supports-color@^5.3.0: 2386 | version "5.4.0" 2387 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" 2388 | dependencies: 2389 | has-flag "^3.0.0" 2390 | 2391 | symbol-observable@1.0.1: 2392 | version "1.0.1" 2393 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" 2394 | 2395 | table@^4.0.3: 2396 | version "4.0.3" 2397 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" 2398 | dependencies: 2399 | ajv "^6.0.1" 2400 | ajv-keywords "^3.0.0" 2401 | chalk "^2.1.0" 2402 | lodash "^4.17.4" 2403 | slice-ansi "1.0.0" 2404 | string-width "^2.1.1" 2405 | 2406 | text-table@^0.2.0: 2407 | version "0.2.0" 2408 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2409 | 2410 | through2-filter@^2.0.0: 2411 | version "2.0.0" 2412 | resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" 2413 | dependencies: 2414 | through2 "~2.0.0" 2415 | xtend "~4.0.0" 2416 | 2417 | through2@^2.0.1, through2@^2.0.2, through2@~2.0.0: 2418 | version "2.0.3" 2419 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 2420 | dependencies: 2421 | readable-stream "^2.1.5" 2422 | xtend "~4.0.1" 2423 | 2424 | through@^2.3.6: 2425 | version "2.3.8" 2426 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2427 | 2428 | thunky@^1.0.2: 2429 | version "1.0.3" 2430 | resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" 2431 | 2432 | tinkerhub-discovery@^0.3.1: 2433 | version "0.3.1" 2434 | resolved "https://registry.yarnpkg.com/tinkerhub-discovery/-/tinkerhub-discovery-0.3.1.tgz#7518d284b0b395434c0282e3a03f748e59f47079" 2435 | dependencies: 2436 | debug "^3.1.0" 2437 | eventemitter3 "^2.0.3" 2438 | 2439 | tmp@^0.0.33: 2440 | version "0.0.33" 2441 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2442 | dependencies: 2443 | os-tmpdir "~1.0.2" 2444 | 2445 | to-absolute-glob@^2.0.0: 2446 | version "2.0.2" 2447 | resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" 2448 | dependencies: 2449 | is-absolute "^1.0.0" 2450 | is-negated-glob "^1.0.0" 2451 | 2452 | topo@3.x.x: 2453 | version "3.0.0" 2454 | resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.0.tgz#37e48c330efeac784538e0acd3e62ca5e231fe7a" 2455 | dependencies: 2456 | hoek "5.x.x" 2457 | 2458 | trim-newlines@^1.0.0: 2459 | version "1.0.0" 2460 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2461 | 2462 | ts-node-dev@^1.0.0-pre.26: 2463 | version "1.0.0-pre.26" 2464 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.26.tgz#3a8491921129dea89525c97e5212023207f6c1fc" 2465 | dependencies: 2466 | dateformat "~1.0.4-1.2.3" 2467 | dynamic-dedupe "^0.2.0" 2468 | filewatcher "~3.0.0" 2469 | minimist "^1.1.3" 2470 | mkdirp "^0.5.1" 2471 | node-notifier "^4.0.2" 2472 | resolve "^1.0.0" 2473 | rimraf "^2.6.1" 2474 | ts-node "*" 2475 | tsconfig "^7.0.0" 2476 | 2477 | ts-node@*: 2478 | version "7.0.0" 2479 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.0.tgz#a94a13c75e5e1aa6b82814b84c68deb339ba7bff" 2480 | dependencies: 2481 | arrify "^1.0.0" 2482 | buffer-from "^1.1.0" 2483 | diff "^3.1.0" 2484 | make-error "^1.1.1" 2485 | minimist "^1.2.0" 2486 | mkdirp "^0.5.1" 2487 | source-map-support "^0.5.6" 2488 | yn "^2.0.0" 2489 | 2490 | tsconfig-paths@^3.5.0: 2491 | version "3.5.0" 2492 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.5.0.tgz#a447c7721e49281af97343d9a850864e949a0b51" 2493 | dependencies: 2494 | "@types/json5" "^0.0.29" 2495 | deepmerge "^2.0.1" 2496 | json5 "^1.0.1" 2497 | minimist "^1.2.0" 2498 | strip-bom "^3.0.0" 2499 | 2500 | tsconfig@^7.0.0: 2501 | version "7.0.0" 2502 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 2503 | dependencies: 2504 | "@types/strip-bom" "^3.0.0" 2505 | "@types/strip-json-comments" "0.0.30" 2506 | strip-bom "^3.0.0" 2507 | strip-json-comments "^2.0.0" 2508 | 2509 | tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: 2510 | version "1.9.3" 2511 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 2512 | 2513 | tslint@^5.11.0: 2514 | version "5.11.0" 2515 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" 2516 | dependencies: 2517 | babel-code-frame "^6.22.0" 2518 | builtin-modules "^1.1.1" 2519 | chalk "^2.3.0" 2520 | commander "^2.12.1" 2521 | diff "^3.2.0" 2522 | glob "^7.1.1" 2523 | js-yaml "^3.7.0" 2524 | minimatch "^3.0.4" 2525 | resolve "^1.3.2" 2526 | semver "^5.3.0" 2527 | tslib "^1.8.0" 2528 | tsutils "^2.27.2" 2529 | 2530 | tsutils@^2.27.2: 2531 | version "2.29.0" 2532 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 2533 | dependencies: 2534 | tslib "^1.8.1" 2535 | 2536 | type-check@~0.3.2: 2537 | version "0.3.2" 2538 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2539 | dependencies: 2540 | prelude-ls "~1.1.2" 2541 | 2542 | type-is@~1.6.15, type-is@~1.6.16: 2543 | version "1.6.16" 2544 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 2545 | dependencies: 2546 | media-typer "0.3.0" 2547 | mime-types "~2.1.18" 2548 | 2549 | typedarray@^0.0.6: 2550 | version "0.0.6" 2551 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2552 | 2553 | typescript-eslint-parser@^18.0.0: 2554 | version "18.0.0" 2555 | resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-18.0.0.tgz#3e5055a44980d69e4154350fc5d8b1ab4e2332a8" 2556 | dependencies: 2557 | lodash.unescape "4.0.1" 2558 | semver "5.5.0" 2559 | 2560 | typescript@^2.9.2: 2561 | version "2.9.2" 2562 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" 2563 | 2564 | ultron@~1.1.0: 2565 | version "1.1.1" 2566 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 2567 | 2568 | unc-path-regex@^0.1.2: 2569 | version "0.1.2" 2570 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 2571 | 2572 | unique-stream@^2.0.2: 2573 | version "2.2.1" 2574 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" 2575 | dependencies: 2576 | json-stable-stringify "^1.0.0" 2577 | through2-filter "^2.0.0" 2578 | 2579 | unix-socket-leader@^0.1.2: 2580 | version "0.1.2" 2581 | resolved "https://registry.yarnpkg.com/unix-socket-leader/-/unix-socket-leader-0.1.2.tgz#8b4cec6d3d5c6c2c3023215ec210dba381229679" 2582 | dependencies: 2583 | end-of-stream "^1.1.0" 2584 | pidlockfile "^1.1.1" 2585 | 2586 | unpipe@1.0.0, unpipe@~1.0.0: 2587 | version "1.0.0" 2588 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2589 | 2590 | uri-js@^4.2.1: 2591 | version "4.2.2" 2592 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 2593 | dependencies: 2594 | punycode "^2.1.0" 2595 | 2596 | util-deprecate@~1.0.1: 2597 | version "1.0.2" 2598 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2599 | 2600 | utils-merge@1.0.1: 2601 | version "1.0.1" 2602 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2603 | 2604 | validate-npm-package-license@^3.0.1: 2605 | version "3.0.3" 2606 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" 2607 | dependencies: 2608 | spdx-correct "^3.0.0" 2609 | spdx-expression-parse "^3.0.0" 2610 | 2611 | vary@~1.1.2: 2612 | version "1.1.2" 2613 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2614 | 2615 | websocket-stream@^5.1.2: 2616 | version "5.1.2" 2617 | resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.1.2.tgz#1c31c627bcdf34f1a9bdacc9daa15bfa4816d9ad" 2618 | dependencies: 2619 | duplexify "^3.5.1" 2620 | inherits "^2.0.1" 2621 | readable-stream "^2.3.3" 2622 | safe-buffer "^5.1.1" 2623 | ws "^3.2.0" 2624 | xtend "^4.0.0" 2625 | 2626 | which-module@^2.0.0: 2627 | version "2.0.0" 2628 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2629 | 2630 | which@^1.0.5, which@^1.2.9: 2631 | version "1.3.1" 2632 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2633 | dependencies: 2634 | isexe "^2.0.0" 2635 | 2636 | wordwrap@~1.0.0: 2637 | version "1.0.0" 2638 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2639 | 2640 | wrap-ansi@^2.0.0: 2641 | version "2.1.0" 2642 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2643 | dependencies: 2644 | string-width "^1.0.1" 2645 | strip-ansi "^3.0.1" 2646 | 2647 | wrappy@1: 2648 | version "1.0.2" 2649 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2650 | 2651 | write@^0.2.1: 2652 | version "0.2.1" 2653 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 2654 | dependencies: 2655 | mkdirp "^0.5.1" 2656 | 2657 | ws@^3.2.0: 2658 | version "3.3.3" 2659 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" 2660 | dependencies: 2661 | async-limiter "~1.0.0" 2662 | safe-buffer "~5.1.0" 2663 | ultron "~1.1.0" 2664 | 2665 | xregexp@4.0.0: 2666 | version "4.0.0" 2667 | resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" 2668 | 2669 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: 2670 | version "4.0.1" 2671 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2672 | 2673 | xtend@~2.0.6: 2674 | version "2.0.6" 2675 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" 2676 | dependencies: 2677 | is-object "~0.1.2" 2678 | object-keys "~0.2.0" 2679 | 2680 | y18n@^3.2.1: 2681 | version "3.2.1" 2682 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 2683 | 2684 | yallist@^2.1.2: 2685 | version "2.1.2" 2686 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2687 | 2688 | yargs-parser@^8.1.0: 2689 | version "8.1.0" 2690 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" 2691 | dependencies: 2692 | camelcase "^4.1.0" 2693 | 2694 | yargs@^10.1.1: 2695 | version "10.1.2" 2696 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" 2697 | dependencies: 2698 | cliui "^4.0.0" 2699 | decamelize "^1.1.1" 2700 | find-up "^2.1.0" 2701 | get-caller-file "^1.0.1" 2702 | os-locale "^2.0.0" 2703 | require-directory "^2.1.1" 2704 | require-main-filename "^1.0.1" 2705 | set-blocking "^2.0.0" 2706 | string-width "^2.0.0" 2707 | which-module "^2.0.0" 2708 | y18n "^3.2.1" 2709 | yargs-parser "^8.1.0" 2710 | 2711 | yn@^2.0.0: 2712 | version "2.0.0" 2713 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 2714 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./frontend/tsconfig.json" 3 | } --------------------------------------------------------------------------------