├── .editorconfig ├── .gitignore ├── .nvmrc ├── LICENSE ├── README.md ├── assets ├── led-button-piezo.fzz ├── led-button-piezo.svg ├── led-button.fzz ├── led-button.svg ├── led.fzz ├── led.svg ├── memory-game.fzz └── memory-game.svg ├── package-lock.json ├── package.json ├── src ├── first-example.js ├── memory-game.js ├── memory-game.template.js ├── second-example.js └── third-example.js └── workshop-steps.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | max_line_length = 120 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | coverage/ 3 | reporter/ 4 | .DS_Store 5 | *.swp 6 | *.swo 7 | *.log 8 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v8.11.4 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Will Mendes 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nodebots Workshop 2 | 3 | > Nodebots Workshop using NodeJS and Johnny-five 4 | 5 | [![slides-badge][slides-badge]][slides] 6 | [![MIT License][license-badge]][LICENSE] 7 | [![PRs Welcome][prs-badge]][prs] 8 | [![Watch on GitHub][github-watch-badge]][github-watch] 9 | [![Star on GitHub][github-star-badge]][github-star] 10 | [![Tweet][twitter-badge]][twitter] 11 | 12 | 13 | ## How to install 14 | 15 | Make sure that you are using the NodeJS version is the same as `.nvmrc` file version. If you don't have this version please use a version manager such as `nvm` or `n` to manage your local nodejs versions. 16 | 17 | Assuming that you are using `nvm`, please run the commands inside this folder: 18 | 19 | ```bash 20 | $ nvm install $(cat .nvmrc); # install required nodejs version 21 | $ nvm use $(cat .nvmrc); # use nodejs version 22 | $ npm install # or `yarn install` 23 | ``` 24 | 25 | In Windows, please install NodeJS using one of these options: 26 | 27 | Via `NVM Windows` package: Dowload via [this link](https://github.com/coreybutler/nvm-windows). After that, run the commands: 28 | 29 | ```bash 30 | $ nvm install $(cat .nvmrc); # install required nodejs version 31 | $ nvm use $(cat .nvmrc); # use nodejs version 32 | $ npm install # or `yarn install` 33 | ``` 34 | 35 | Via Chocolatey: 36 | 37 | ```bash 38 | $ choco install nodejs.install -version 6.9.4 39 | ``` 40 | 41 | 42 | ## Introduction 43 | 44 | Repository using Arduino + Johnny Five + NodeJS used in my Nodebots Workshop. 45 | 46 | Slides: [https://slides.com/willmendesneto/nodebots-workshop](https://slides.com/willmendesneto/nodebots-workshop); 47 | 48 | Workshop steps, circuit diagram and images: [workshop-steps.md](workshop-steps.md); 49 | 50 | ## First steps 51 | 52 | - [Install Arduino](https://www.arduino.cc/en/Main/Software) 53 | - [Install NodeJS](https://nodejs.org/en/download/) 54 | - [Setup your board](http://johnny-five.io/platform-support/) 55 | - (Optional) Install Johnny-Five Package using ```npm install johnny-five <--global|--save>``` 56 | 57 | 58 | ## Usage 59 | 60 | ```bash 61 | $ git clone && cd $_ 62 | $ npm install 63 | $ node src/ 64 | ``` 65 | 66 | 67 | ## Author 68 | 69 | **Wilson Mendes (willmendesneto)** 70 | + 71 | + 72 | + 73 | 74 | 75 | [slides]: http://slides.com/willmendesneto/nodebots-workshop 76 | [slides-badge]: https://cdn.rawgit.com/kentcdodds/custom-badges/2/badges/slides.svg 77 | 78 | [license-badge]: https://img.shields.io/badge/license-MIT%20License-blue.svg?style=flat-square 79 | [license]: https://github.com/willmendesneto/nodebots-workshop/blob/master/LICENSE 80 | 81 | [prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square 82 | [prs]: http://makeapullrequest.com 83 | 84 | [github-watch-badge]: https://img.shields.io/github/watchers/willmendesneto/nodebots-workshop.svg?style=social 85 | [github-watch]: https://github.com/willmendesneto/nodebots-workshop/watchers 86 | 87 | [github-star-badge]: https://img.shields.io/github/stars/willmendesneto/nodebots-workshop.svg?style=social 88 | [github-star]: https://github.com/willmendesneto/nodebots-workshop/stargazers 89 | 90 | [twitter]: https://twitter.com/intent/tweet?text=Check%20out%20nodebots-workshop%20by%20@willmendesneto%20https://goo.gl/sqZ8dh%20%F0%9F%91%8D 91 | [twitter-badge]: https://img.shields.io/twitter/url/https/github.com/willmendesneto/nodebots-workshop.svg?style=social 92 | 93 | -------------------------------------------------------------------------------- /assets/led-button-piezo.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willmendesneto/nodebots-workshop/6c9c2c858a4c6cf9532c5cd187fc2dddab17353a/assets/led-button-piezo.fzz -------------------------------------------------------------------------------- /assets/led-button.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willmendesneto/nodebots-workshop/6c9c2c858a4c6cf9532c5cd187fc2dddab17353a/assets/led-button.fzz -------------------------------------------------------------------------------- /assets/led.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willmendesneto/nodebots-workshop/6c9c2c858a4c6cf9532c5cd187fc2dddab17353a/assets/led.fzz -------------------------------------------------------------------------------- /assets/memory-game.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/willmendesneto/nodebots-workshop/6c9c2c858a4c6cf9532c5cd187fc2dddab17353a/assets/memory-game.fzz -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodebots-workshop", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "ansi-bgblack": { 8 | "version": "0.1.1", 9 | "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", 10 | "integrity": "sha1-poulAHiHcBtqr74/oNrf36juPKI=", 11 | "requires": { 12 | "ansi-wrap": "0.1.0" 13 | } 14 | }, 15 | "ansi-bgblue": { 16 | "version": "0.1.1", 17 | "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", 18 | "integrity": "sha1-Z73ATtybm1J4lp2hlt6j11yMNhM=", 19 | "requires": { 20 | "ansi-wrap": "0.1.0" 21 | } 22 | }, 23 | "ansi-bgcyan": { 24 | "version": "0.1.1", 25 | "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", 26 | "integrity": "sha1-WEiUJWAL3p9VBwaN2Wnr/bUP52g=", 27 | "requires": { 28 | "ansi-wrap": "0.1.0" 29 | } 30 | }, 31 | "ansi-bggreen": { 32 | "version": "0.1.1", 33 | "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", 34 | "integrity": "sha1-TjGRJIUplD9DIelr8THRwTgWr0k=", 35 | "requires": { 36 | "ansi-wrap": "0.1.0" 37 | } 38 | }, 39 | "ansi-bgmagenta": { 40 | "version": "0.1.1", 41 | "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", 42 | "integrity": "sha1-myhDLAduqpmUGGcqPvvhk5HCx6E=", 43 | "requires": { 44 | "ansi-wrap": "0.1.0" 45 | } 46 | }, 47 | "ansi-bgred": { 48 | "version": "0.1.1", 49 | "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", 50 | "integrity": "sha1-p2+Sg4OCukMpCmwXeEJPmE1vEEE=", 51 | "requires": { 52 | "ansi-wrap": "0.1.0" 53 | } 54 | }, 55 | "ansi-bgwhite": { 56 | "version": "0.1.1", 57 | "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", 58 | "integrity": "sha1-ZQRlE3elim7OzQMxmU5IAljhG6g=", 59 | "requires": { 60 | "ansi-wrap": "0.1.0" 61 | } 62 | }, 63 | "ansi-bgyellow": { 64 | "version": "0.1.1", 65 | "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", 66 | "integrity": "sha1-w/4usIzUdmSAKeaHTRWgs49h1E8=", 67 | "requires": { 68 | "ansi-wrap": "0.1.0" 69 | } 70 | }, 71 | "ansi-black": { 72 | "version": "0.1.1", 73 | "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", 74 | "integrity": "sha1-9hheiJNgslRaHsUMC/Bj/EMDJFM=", 75 | "requires": { 76 | "ansi-wrap": "0.1.0" 77 | } 78 | }, 79 | "ansi-blue": { 80 | "version": "0.1.1", 81 | "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", 82 | "integrity": "sha1-FbgEmQ6S/JyoxUds6PaZd3wh7b8=", 83 | "requires": { 84 | "ansi-wrap": "0.1.0" 85 | } 86 | }, 87 | "ansi-bold": { 88 | "version": "0.1.1", 89 | "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", 90 | "integrity": "sha1-PmOVCvWswq4uZw5vZ96xFdGl9QU=", 91 | "requires": { 92 | "ansi-wrap": "0.1.0" 93 | } 94 | }, 95 | "ansi-colors": { 96 | "version": "0.2.0", 97 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", 98 | "integrity": "sha1-csMd4qDZoszQysMMyYI+6y9kNLU=", 99 | "requires": { 100 | "ansi-bgblack": "0.1.1", 101 | "ansi-bgblue": "0.1.1", 102 | "ansi-bgcyan": "0.1.1", 103 | "ansi-bggreen": "0.1.1", 104 | "ansi-bgmagenta": "0.1.1", 105 | "ansi-bgred": "0.1.1", 106 | "ansi-bgwhite": "0.1.1", 107 | "ansi-bgyellow": "0.1.1", 108 | "ansi-black": "0.1.1", 109 | "ansi-blue": "0.1.1", 110 | "ansi-bold": "0.1.1", 111 | "ansi-cyan": "0.1.1", 112 | "ansi-dim": "0.1.1", 113 | "ansi-gray": "0.1.1", 114 | "ansi-green": "0.1.1", 115 | "ansi-grey": "0.1.1", 116 | "ansi-hidden": "0.1.1", 117 | "ansi-inverse": "0.1.1", 118 | "ansi-italic": "0.1.1", 119 | "ansi-magenta": "0.1.1", 120 | "ansi-red": "0.1.1", 121 | "ansi-reset": "0.1.1", 122 | "ansi-strikethrough": "0.1.1", 123 | "ansi-underline": "0.1.1", 124 | "ansi-white": "0.1.1", 125 | "ansi-yellow": "0.1.1", 126 | "lazy-cache": "2.0.2" 127 | } 128 | }, 129 | "ansi-cyan": { 130 | "version": "0.1.1", 131 | "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", 132 | "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", 133 | "requires": { 134 | "ansi-wrap": "0.1.0" 135 | } 136 | }, 137 | "ansi-dim": { 138 | "version": "0.1.1", 139 | "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", 140 | "integrity": "sha1-QN5MYDqoCG2Oeoa4/5mNXDbu/Ww=", 141 | "requires": { 142 | "ansi-wrap": "0.1.0" 143 | } 144 | }, 145 | "ansi-gray": { 146 | "version": "0.1.1", 147 | "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", 148 | "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", 149 | "requires": { 150 | "ansi-wrap": "0.1.0" 151 | } 152 | }, 153 | "ansi-green": { 154 | "version": "0.1.1", 155 | "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", 156 | "integrity": "sha1-il2al55FjVfEDjNYCzc5C44Q0Pc=", 157 | "requires": { 158 | "ansi-wrap": "0.1.0" 159 | } 160 | }, 161 | "ansi-grey": { 162 | "version": "0.1.1", 163 | "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", 164 | "integrity": "sha1-WdmLasK6GfilF5jphT+6eDOaM8E=", 165 | "requires": { 166 | "ansi-wrap": "0.1.0" 167 | } 168 | }, 169 | "ansi-hidden": { 170 | "version": "0.1.1", 171 | "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", 172 | "integrity": "sha1-7WpMSY0rt8uyidvyqNHcyFZ/rg8=", 173 | "requires": { 174 | "ansi-wrap": "0.1.0" 175 | } 176 | }, 177 | "ansi-inverse": { 178 | "version": "0.1.1", 179 | "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", 180 | "integrity": "sha1-tq9Fgm/oJr+1KKbHmIV5Q1XM0mk=", 181 | "requires": { 182 | "ansi-wrap": "0.1.0" 183 | } 184 | }, 185 | "ansi-italic": { 186 | "version": "0.1.1", 187 | "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", 188 | "integrity": "sha1-EEdDRj9iXBQqA2c5z4XtpoiYbyM=", 189 | "requires": { 190 | "ansi-wrap": "0.1.0" 191 | } 192 | }, 193 | "ansi-magenta": { 194 | "version": "0.1.1", 195 | "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", 196 | "integrity": "sha1-BjtboW+z8j4c/aKwfAqJ3hHkMK4=", 197 | "requires": { 198 | "ansi-wrap": "0.1.0" 199 | } 200 | }, 201 | "ansi-red": { 202 | "version": "0.1.1", 203 | "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", 204 | "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", 205 | "requires": { 206 | "ansi-wrap": "0.1.0" 207 | } 208 | }, 209 | "ansi-regex": { 210 | "version": "2.1.1", 211 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 212 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 213 | }, 214 | "ansi-reset": { 215 | "version": "0.1.1", 216 | "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", 217 | "integrity": "sha1-5+cSksPH3c1NYu9KbHwFmAkRw7c=", 218 | "requires": { 219 | "ansi-wrap": "0.1.0" 220 | } 221 | }, 222 | "ansi-strikethrough": { 223 | "version": "0.1.1", 224 | "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", 225 | "integrity": "sha1-2Eh3FAss/wfRyT685pkE9oiF5Wg=", 226 | "requires": { 227 | "ansi-wrap": "0.1.0" 228 | } 229 | }, 230 | "ansi-styles": { 231 | "version": "3.2.1", 232 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 233 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 234 | "requires": { 235 | "color-convert": "1.9.2" 236 | }, 237 | "dependencies": { 238 | "color-convert": { 239 | "version": "1.9.2", 240 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 241 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 242 | "requires": { 243 | "color-name": "1.1.1" 244 | } 245 | } 246 | } 247 | }, 248 | "ansi-underline": { 249 | "version": "0.1.1", 250 | "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", 251 | "integrity": "sha1-38kg9Ml7WXfqFi34/7mIMIqqcaQ=", 252 | "requires": { 253 | "ansi-wrap": "0.1.0" 254 | } 255 | }, 256 | "ansi-white": { 257 | "version": "0.1.1", 258 | "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", 259 | "integrity": "sha1-nHe3wZPF7pkuYBHTbsTJIbRXiUQ=", 260 | "requires": { 261 | "ansi-wrap": "0.1.0" 262 | } 263 | }, 264 | "ansi-wrap": { 265 | "version": "0.1.0", 266 | "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", 267 | "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" 268 | }, 269 | "ansi-yellow": { 270 | "version": "0.1.1", 271 | "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", 272 | "integrity": "sha1-y5NW8vRscy8OMZnmEClVp32oPB0=", 273 | "requires": { 274 | "ansi-wrap": "0.1.0" 275 | } 276 | }, 277 | "aproba": { 278 | "version": "1.2.0", 279 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 280 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 281 | "optional": true 282 | }, 283 | "are-we-there-yet": { 284 | "version": "1.1.5", 285 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 286 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 287 | "optional": true, 288 | "requires": { 289 | "delegates": "1.0.0", 290 | "readable-stream": "2.3.6" 291 | } 292 | }, 293 | "arr-flatten": { 294 | "version": "1.1.0", 295 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 296 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" 297 | }, 298 | "arr-swap": { 299 | "version": "1.0.1", 300 | "resolved": "https://registry.npmjs.org/arr-swap/-/arr-swap-1.0.1.tgz", 301 | "integrity": "sha1-FHWQ7WX8gVvAf+8Jl8Llgj1kNTQ=", 302 | "optional": true, 303 | "requires": { 304 | "is-number": "3.0.0" 305 | }, 306 | "dependencies": { 307 | "is-number": { 308 | "version": "3.0.0", 309 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 310 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 311 | "optional": true, 312 | "requires": { 313 | "kind-of": "3.2.2" 314 | } 315 | } 316 | } 317 | }, 318 | "bindings": { 319 | "version": "1.3.0", 320 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", 321 | "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" 322 | }, 323 | "bl": { 324 | "version": "1.2.2", 325 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", 326 | "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", 327 | "optional": true, 328 | "requires": { 329 | "readable-stream": "2.3.6", 330 | "safe-buffer": "5.1.2" 331 | } 332 | }, 333 | "board-io": { 334 | "version": "3.0.5", 335 | "resolved": "https://registry.npmjs.org/board-io/-/board-io-3.0.5.tgz", 336 | "integrity": "sha1-uYAaqBrIvV3XodBmJ+T3nW+jGoQ=", 337 | "dev": true, 338 | "requires": { 339 | "check-types": "1.4.0" 340 | } 341 | }, 342 | "browser-serialport": { 343 | "version": "2.1.0", 344 | "resolved": "https://registry.npmjs.org/browser-serialport/-/browser-serialport-2.1.0.tgz", 345 | "integrity": "sha1-+4QHfoS5u7uEk1quH8rJzmEF3H8=" 346 | }, 347 | "buffer-alloc": { 348 | "version": "1.2.0", 349 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 350 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 351 | "optional": true, 352 | "requires": { 353 | "buffer-alloc-unsafe": "1.1.0", 354 | "buffer-fill": "1.0.0" 355 | } 356 | }, 357 | "buffer-alloc-unsafe": { 358 | "version": "1.1.0", 359 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 360 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 361 | "optional": true 362 | }, 363 | "buffer-fill": { 364 | "version": "1.0.0", 365 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 366 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", 367 | "optional": true 368 | }, 369 | "chalk": { 370 | "version": "2.4.1", 371 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 372 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 373 | "requires": { 374 | "ansi-styles": "3.2.1", 375 | "escape-string-regexp": "1.0.5", 376 | "supports-color": "5.4.0" 377 | } 378 | }, 379 | "check-types": { 380 | "version": "1.4.0", 381 | "resolved": "https://registry.npmjs.org/check-types/-/check-types-1.4.0.tgz", 382 | "integrity": "sha1-7tY7usnqSaDiagljFAWLA7CN1is=", 383 | "dev": true 384 | }, 385 | "choices-separator": { 386 | "version": "2.0.0", 387 | "resolved": "https://registry.npmjs.org/choices-separator/-/choices-separator-2.0.0.tgz", 388 | "integrity": "sha1-kv0XYxgteQM/XFxR0Lo1LlVnxpY=", 389 | "optional": true, 390 | "requires": { 391 | "ansi-dim": "0.1.1", 392 | "debug": "2.6.9", 393 | "strip-color": "0.1.0" 394 | }, 395 | "dependencies": { 396 | "debug": { 397 | "version": "2.6.9", 398 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 399 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 400 | "optional": true, 401 | "requires": { 402 | "ms": "2.0.0" 403 | } 404 | } 405 | } 406 | }, 407 | "chownr": { 408 | "version": "1.0.1", 409 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", 410 | "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", 411 | "optional": true 412 | }, 413 | "clone-deep": { 414 | "version": "1.0.0", 415 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz", 416 | "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==", 417 | "optional": true, 418 | "requires": { 419 | "for-own": "1.0.0", 420 | "is-plain-object": "2.0.4", 421 | "kind-of": "5.1.0", 422 | "shallow-clone": "1.0.0" 423 | }, 424 | "dependencies": { 425 | "kind-of": { 426 | "version": "5.1.0", 427 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 428 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 429 | "optional": true 430 | } 431 | } 432 | }, 433 | "code-point-at": { 434 | "version": "1.1.0", 435 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 436 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 437 | }, 438 | "collection-visit": { 439 | "version": "1.0.0", 440 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 441 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 442 | "optional": true, 443 | "requires": { 444 | "map-visit": "1.0.0", 445 | "object-visit": "1.0.1" 446 | } 447 | }, 448 | "color-convert": { 449 | "version": "1.2.2", 450 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.2.2.tgz", 451 | "integrity": "sha1-776VaX3TfX7s+uH9LPvrhMwlBk4=" 452 | }, 453 | "color-name": { 454 | "version": "1.1.1", 455 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 456 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=" 457 | }, 458 | "commander": { 459 | "version": "2.17.1", 460 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 461 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" 462 | }, 463 | "component-emitter": { 464 | "version": "1.2.1", 465 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 466 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 467 | }, 468 | "console-control-strings": { 469 | "version": "1.1.0", 470 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 471 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 472 | }, 473 | "copy-descriptor": { 474 | "version": "0.1.1", 475 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 476 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 477 | "optional": true 478 | }, 479 | "core-util-is": { 480 | "version": "1.0.2", 481 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 482 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 483 | }, 484 | "debug": { 485 | "version": "3.1.0", 486 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 487 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 488 | "requires": { 489 | "ms": "2.0.0" 490 | } 491 | }, 492 | "decompress-response": { 493 | "version": "3.3.0", 494 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 495 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 496 | "optional": true, 497 | "requires": { 498 | "mimic-response": "1.0.1" 499 | } 500 | }, 501 | "deep-extend": { 502 | "version": "0.6.0", 503 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 504 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 505 | "optional": true 506 | }, 507 | "define-properties": { 508 | "version": "1.1.3", 509 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 510 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 511 | "requires": { 512 | "object-keys": "1.0.12" 513 | } 514 | }, 515 | "define-property": { 516 | "version": "1.0.0", 517 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 518 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 519 | "requires": { 520 | "is-descriptor": "1.0.2" 521 | } 522 | }, 523 | "delegates": { 524 | "version": "1.0.0", 525 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 526 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 527 | "optional": true 528 | }, 529 | "detect-libc": { 530 | "version": "1.0.3", 531 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 532 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 533 | "optional": true 534 | }, 535 | "ease-component": { 536 | "version": "1.0.0", 537 | "resolved": "https://registry.npmjs.org/ease-component/-/ease-component-1.0.0.tgz", 538 | "integrity": "sha1-s3VybbC1sEWVt3RAOW/sfapdd8k=" 539 | }, 540 | "end-of-stream": { 541 | "version": "1.4.1", 542 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 543 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 544 | "requires": { 545 | "once": "1.4.0" 546 | } 547 | }, 548 | "error-symbol": { 549 | "version": "0.1.0", 550 | "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", 551 | "integrity": "sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y=" 552 | }, 553 | "es6-shim": { 554 | "version": "0.35.3", 555 | "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz", 556 | "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=" 557 | }, 558 | "escape-string-regexp": { 559 | "version": "1.0.5", 560 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 561 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 562 | }, 563 | "expand-template": { 564 | "version": "1.1.1", 565 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", 566 | "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", 567 | "optional": true 568 | }, 569 | "extend-shallow": { 570 | "version": "2.0.1", 571 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 572 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 573 | "requires": { 574 | "is-extendable": "0.1.1" 575 | } 576 | }, 577 | "firmata": { 578 | "version": "0.15.0", 579 | "resolved": "https://registry.npmjs.org/firmata/-/firmata-0.15.0.tgz", 580 | "integrity": "sha1-jaBi4sw7Gfmb4OM6nThbDurp+pA=", 581 | "dev": true, 582 | "requires": { 583 | "browser-serialport": "2.1.0", 584 | "es6-shim": "0.35.3", 585 | "serialport": "4.0.7" 586 | } 587 | }, 588 | "for-in": { 589 | "version": "1.0.2", 590 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 591 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 592 | "optional": true 593 | }, 594 | "for-own": { 595 | "version": "1.0.0", 596 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 597 | "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", 598 | "optional": true, 599 | "requires": { 600 | "for-in": "1.0.2" 601 | } 602 | }, 603 | "fs-constants": { 604 | "version": "1.0.0", 605 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 606 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 607 | "optional": true 608 | }, 609 | "function-bind": { 610 | "version": "1.1.1", 611 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 612 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 613 | }, 614 | "gauge": { 615 | "version": "2.7.4", 616 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 617 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 618 | "optional": true, 619 | "requires": { 620 | "aproba": "1.2.0", 621 | "console-control-strings": "1.1.0", 622 | "has-unicode": "2.0.1", 623 | "object-assign": "4.1.1", 624 | "signal-exit": "3.0.2", 625 | "string-width": "1.0.2", 626 | "strip-ansi": "3.0.1", 627 | "wide-align": "1.1.3" 628 | } 629 | }, 630 | "github-from-package": { 631 | "version": "0.0.0", 632 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 633 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", 634 | "optional": true 635 | }, 636 | "has-flag": { 637 | "version": "3.0.0", 638 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 639 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 640 | }, 641 | "has-symbols": { 642 | "version": "1.0.0", 643 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 644 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" 645 | }, 646 | "has-unicode": { 647 | "version": "2.0.1", 648 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 649 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", 650 | "optional": true 651 | }, 652 | "immediate": { 653 | "version": "3.0.6", 654 | "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", 655 | "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" 656 | }, 657 | "info-symbol": { 658 | "version": "0.1.0", 659 | "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", 660 | "integrity": "sha1-J4QdcoZ920JCzWEtecEGM4gcang=" 661 | }, 662 | "inherits": { 663 | "version": "2.0.3", 664 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 665 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 666 | }, 667 | "ini": { 668 | "version": "1.3.5", 669 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 670 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 671 | "optional": true 672 | }, 673 | "is-accessor-descriptor": { 674 | "version": "1.0.0", 675 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 676 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 677 | "requires": { 678 | "kind-of": "6.0.2" 679 | }, 680 | "dependencies": { 681 | "kind-of": { 682 | "version": "6.0.2", 683 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 684 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 685 | } 686 | } 687 | }, 688 | "is-buffer": { 689 | "version": "1.1.6", 690 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 691 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 692 | }, 693 | "is-data-descriptor": { 694 | "version": "1.0.0", 695 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 696 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 697 | "requires": { 698 | "kind-of": "6.0.2" 699 | }, 700 | "dependencies": { 701 | "kind-of": { 702 | "version": "6.0.2", 703 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 704 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 705 | } 706 | } 707 | }, 708 | "is-descriptor": { 709 | "version": "1.0.2", 710 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 711 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 712 | "requires": { 713 | "is-accessor-descriptor": "1.0.0", 714 | "is-data-descriptor": "1.0.0", 715 | "kind-of": "6.0.2" 716 | }, 717 | "dependencies": { 718 | "kind-of": { 719 | "version": "6.0.2", 720 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 721 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 722 | } 723 | } 724 | }, 725 | "is-extendable": { 726 | "version": "0.1.1", 727 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 728 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" 729 | }, 730 | "is-fullwidth-code-point": { 731 | "version": "1.0.0", 732 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 733 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 734 | "requires": { 735 | "number-is-nan": "1.0.1" 736 | } 737 | }, 738 | "is-number": { 739 | "version": "6.0.0", 740 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz", 741 | "integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==", 742 | "optional": true 743 | }, 744 | "is-plain-object": { 745 | "version": "2.0.4", 746 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 747 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 748 | "requires": { 749 | "isobject": "3.0.1" 750 | } 751 | }, 752 | "is-windows": { 753 | "version": "1.0.2", 754 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 755 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" 756 | }, 757 | "isarray": { 758 | "version": "1.0.0", 759 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 760 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 761 | }, 762 | "isobject": { 763 | "version": "3.0.1", 764 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 765 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 766 | }, 767 | "johnny-five": { 768 | "version": "0.10.13", 769 | "resolved": "https://registry.npmjs.org/johnny-five/-/johnny-five-0.10.13.tgz", 770 | "integrity": "sha1-kjukMx24AaNncMEl/6NGRDWqOms=", 771 | "requires": { 772 | "browser-serialport": "2.1.0", 773 | "chalk": "2.4.1", 774 | "color-convert": "1.2.2", 775 | "ease-component": "1.0.0", 776 | "es6-shim": "0.35.3", 777 | "firmata": "0.19.1", 778 | "lodash.clonedeep": "4.5.0", 779 | "lodash.debounce": "4.0.8", 780 | "nanotimer": "0.3.10", 781 | "serialport": "4.0.7", 782 | "temporal": "0.7.1" 783 | }, 784 | "dependencies": { 785 | "firmata": { 786 | "version": "0.19.1", 787 | "resolved": "https://registry.npmjs.org/firmata/-/firmata-0.19.1.tgz", 788 | "integrity": "sha1-nq5vYYR6k+oyOrGKYRrfnzZqWio=", 789 | "optional": true, 790 | "requires": { 791 | "browser-serialport": "2.1.0", 792 | "serialport": "6.0.5" 793 | }, 794 | "dependencies": { 795 | "serialport": { 796 | "version": "6.0.5", 797 | "resolved": "https://registry.npmjs.org/serialport/-/serialport-6.0.5.tgz", 798 | "integrity": "sha512-ZYof3a9m08LTgDU82TFAbjRADIZ1GQTrqXY6JYnCHk8NFv0bEU0qL/MMX8F4wB9oNVbtkaYYeJc6E+gl2bSXpw==", 799 | "optional": true, 800 | "requires": { 801 | "bindings": "1.3.0", 802 | "commander": "2.17.1", 803 | "debug": "3.1.0", 804 | "nan": "2.10.0", 805 | "prebuild-install": "2.5.3", 806 | "promirepl": "1.0.1", 807 | "prompt-list": "3.2.0", 808 | "safe-buffer": "5.1.2" 809 | } 810 | } 811 | } 812 | } 813 | } 814 | }, 815 | "kind-of": { 816 | "version": "3.2.2", 817 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 818 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 819 | "requires": { 820 | "is-buffer": "1.1.6" 821 | } 822 | }, 823 | "koalas": { 824 | "version": "1.0.2", 825 | "resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz", 826 | "integrity": "sha1-MYQz8HQjXbePrlZhoCqMpT7ilc0=" 827 | }, 828 | "lazy-cache": { 829 | "version": "2.0.2", 830 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", 831 | "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", 832 | "requires": { 833 | "set-getter": "0.1.0" 834 | } 835 | }, 836 | "lie": { 837 | "version": "3.3.0", 838 | "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", 839 | "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", 840 | "requires": { 841 | "immediate": "3.0.6" 842 | } 843 | }, 844 | "lodash.clonedeep": { 845 | "version": "4.5.0", 846 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 847 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 848 | }, 849 | "lodash.debounce": { 850 | "version": "4.0.8", 851 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 852 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" 853 | }, 854 | "log-ok": { 855 | "version": "0.1.1", 856 | "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", 857 | "integrity": "sha1-vqPdNqzQuKckDXhza1uXxlREozQ=", 858 | "requires": { 859 | "ansi-green": "0.1.1", 860 | "success-symbol": "0.1.0" 861 | } 862 | }, 863 | "log-utils": { 864 | "version": "0.2.1", 865 | "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", 866 | "integrity": "sha1-pMIXoN2aUFFdm5ICBgkas9TgMc8=", 867 | "requires": { 868 | "ansi-colors": "0.2.0", 869 | "error-symbol": "0.1.0", 870 | "info-symbol": "0.1.0", 871 | "log-ok": "0.1.1", 872 | "success-symbol": "0.1.0", 873 | "time-stamp": "1.1.0", 874 | "warning-symbol": "0.1.0" 875 | } 876 | }, 877 | "map-visit": { 878 | "version": "1.0.0", 879 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 880 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 881 | "optional": true, 882 | "requires": { 883 | "object-visit": "1.0.1" 884 | } 885 | }, 886 | "mimic-response": { 887 | "version": "1.0.1", 888 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 889 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 890 | "optional": true 891 | }, 892 | "minimist": { 893 | "version": "1.2.0", 894 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 895 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 896 | }, 897 | "mixin-object": { 898 | "version": "2.0.1", 899 | "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", 900 | "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", 901 | "optional": true, 902 | "requires": { 903 | "for-in": "0.1.8", 904 | "is-extendable": "0.1.1" 905 | }, 906 | "dependencies": { 907 | "for-in": { 908 | "version": "0.1.8", 909 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", 910 | "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", 911 | "optional": true 912 | } 913 | } 914 | }, 915 | "mkdirp": { 916 | "version": "0.5.1", 917 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 918 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 919 | "requires": { 920 | "minimist": "0.0.8" 921 | }, 922 | "dependencies": { 923 | "minimist": { 924 | "version": "0.0.8", 925 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 926 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 927 | } 928 | } 929 | }, 930 | "ms": { 931 | "version": "2.0.0", 932 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 933 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 934 | }, 935 | "mute-stream": { 936 | "version": "0.0.7", 937 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 938 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" 939 | }, 940 | "nan": { 941 | "version": "2.10.0", 942 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", 943 | "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" 944 | }, 945 | "nanotimer": { 946 | "version": "0.3.10", 947 | "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.10.tgz", 948 | "integrity": "sha1-6C7g0AWCsj5wa9wA/znIfaqt24M=" 949 | }, 950 | "node-abi": { 951 | "version": "2.4.3", 952 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.3.tgz", 953 | "integrity": "sha512-b656V5C0628gOOA2kwcpNA/bxdlqYF9FvxJ+qqVX0ctdXNVZpS8J6xEUYir3WAKc7U0BH/NRlSpNbGsy+azjeg==", 954 | "optional": true, 955 | "requires": { 956 | "semver": "5.5.0" 957 | } 958 | }, 959 | "noop-logger": { 960 | "version": "0.1.1", 961 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 962 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", 963 | "optional": true 964 | }, 965 | "npmlog": { 966 | "version": "4.1.2", 967 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 968 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 969 | "optional": true, 970 | "requires": { 971 | "are-we-there-yet": "1.1.5", 972 | "console-control-strings": "1.1.0", 973 | "gauge": "2.7.4", 974 | "set-blocking": "2.0.0" 975 | } 976 | }, 977 | "number-is-nan": { 978 | "version": "1.0.1", 979 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 980 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 981 | }, 982 | "object-assign": { 983 | "version": "4.1.1", 984 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 985 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 986 | "optional": true 987 | }, 988 | "object-copy": { 989 | "version": "0.1.0", 990 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 991 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 992 | "optional": true, 993 | "requires": { 994 | "copy-descriptor": "0.1.1", 995 | "define-property": "0.2.5", 996 | "kind-of": "3.2.2" 997 | }, 998 | "dependencies": { 999 | "define-property": { 1000 | "version": "0.2.5", 1001 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1002 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1003 | "optional": true, 1004 | "requires": { 1005 | "is-descriptor": "0.1.6" 1006 | } 1007 | }, 1008 | "is-accessor-descriptor": { 1009 | "version": "0.1.6", 1010 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 1011 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 1012 | "optional": true, 1013 | "requires": { 1014 | "kind-of": "3.2.2" 1015 | } 1016 | }, 1017 | "is-data-descriptor": { 1018 | "version": "0.1.4", 1019 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 1020 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 1021 | "optional": true, 1022 | "requires": { 1023 | "kind-of": "3.2.2" 1024 | } 1025 | }, 1026 | "is-descriptor": { 1027 | "version": "0.1.6", 1028 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 1029 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 1030 | "optional": true, 1031 | "requires": { 1032 | "is-accessor-descriptor": "0.1.6", 1033 | "is-data-descriptor": "0.1.4", 1034 | "kind-of": "5.1.0" 1035 | }, 1036 | "dependencies": { 1037 | "kind-of": { 1038 | "version": "5.1.0", 1039 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1040 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 1041 | "optional": true 1042 | } 1043 | } 1044 | } 1045 | } 1046 | }, 1047 | "object-keys": { 1048 | "version": "1.0.12", 1049 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", 1050 | "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" 1051 | }, 1052 | "object-visit": { 1053 | "version": "1.0.1", 1054 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 1055 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 1056 | "requires": { 1057 | "isobject": "3.0.1" 1058 | } 1059 | }, 1060 | "object.assign": { 1061 | "version": "4.1.0", 1062 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1063 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1064 | "requires": { 1065 | "define-properties": "1.1.3", 1066 | "function-bind": "1.1.1", 1067 | "has-symbols": "1.0.0", 1068 | "object-keys": "1.0.12" 1069 | } 1070 | }, 1071 | "once": { 1072 | "version": "1.4.0", 1073 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1074 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1075 | "requires": { 1076 | "wrappy": "1.0.2" 1077 | } 1078 | }, 1079 | "os-homedir": { 1080 | "version": "1.0.2", 1081 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1082 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1083 | "optional": true 1084 | }, 1085 | "pointer-symbol": { 1086 | "version": "1.0.0", 1087 | "resolved": "https://registry.npmjs.org/pointer-symbol/-/pointer-symbol-1.0.0.tgz", 1088 | "integrity": "sha1-YPkRAgTqepKbYmRKITFVQ8uz1Ec=", 1089 | "optional": true 1090 | }, 1091 | "prebuild-install": { 1092 | "version": "2.5.3", 1093 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", 1094 | "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", 1095 | "optional": true, 1096 | "requires": { 1097 | "detect-libc": "1.0.3", 1098 | "expand-template": "1.1.1", 1099 | "github-from-package": "0.0.0", 1100 | "minimist": "1.2.0", 1101 | "mkdirp": "0.5.1", 1102 | "node-abi": "2.4.3", 1103 | "noop-logger": "0.1.1", 1104 | "npmlog": "4.1.2", 1105 | "os-homedir": "1.0.2", 1106 | "pump": "2.0.1", 1107 | "rc": "1.2.8", 1108 | "simple-get": "2.8.1", 1109 | "tar-fs": "1.16.3", 1110 | "tunnel-agent": "0.6.0", 1111 | "which-pm-runs": "1.0.0" 1112 | } 1113 | }, 1114 | "process-nextick-args": { 1115 | "version": "2.0.0", 1116 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1117 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 1118 | }, 1119 | "promirepl": { 1120 | "version": "1.0.1", 1121 | "resolved": "https://registry.npmjs.org/promirepl/-/promirepl-1.0.1.tgz", 1122 | "integrity": "sha1-KVGq66K/P+InT/Y6FtlMBMpghy4=", 1123 | "optional": true 1124 | }, 1125 | "prompt-actions": { 1126 | "version": "3.0.2", 1127 | "resolved": "https://registry.npmjs.org/prompt-actions/-/prompt-actions-3.0.2.tgz", 1128 | "integrity": "sha512-dhz2Fl7vK+LPpmnQ/S/eSut4BnH4NZDLyddHKi5uTU/2PDn3grEMGkgsll16V5RpVUh/yxdiam0xsM0RD4xvtg==", 1129 | "optional": true, 1130 | "requires": { 1131 | "debug": "2.6.9" 1132 | }, 1133 | "dependencies": { 1134 | "debug": { 1135 | "version": "2.6.9", 1136 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1137 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1138 | "optional": true, 1139 | "requires": { 1140 | "ms": "2.0.0" 1141 | } 1142 | } 1143 | } 1144 | }, 1145 | "prompt-base": { 1146 | "version": "4.1.0", 1147 | "resolved": "https://registry.npmjs.org/prompt-base/-/prompt-base-4.1.0.tgz", 1148 | "integrity": "sha512-svGzgLUKZoqomz9SGMkf1hBG8Wl3K7JGuRCXc/Pv7xw8239hhaTBXrmjt7EXA9P/QZzdyT8uNWt9F/iJTXq75g==", 1149 | "optional": true, 1150 | "requires": { 1151 | "component-emitter": "1.2.1", 1152 | "debug": "3.1.0", 1153 | "koalas": "1.0.2", 1154 | "log-utils": "0.2.1", 1155 | "prompt-actions": "3.0.2", 1156 | "prompt-question": "5.0.2", 1157 | "readline-ui": "2.2.3", 1158 | "readline-utils": "2.2.3", 1159 | "static-extend": "0.1.2" 1160 | } 1161 | }, 1162 | "prompt-checkbox": { 1163 | "version": "2.2.0", 1164 | "resolved": "https://registry.npmjs.org/prompt-checkbox/-/prompt-checkbox-2.2.0.tgz", 1165 | "integrity": "sha512-T/QWgkdUmKjRSr0FQlV8O+LfgmBk8PwDbWhzllm7mwWNAjs3qOVuru5Y1gV4/14L73zCncqcuwGwvnDyVcVgvA==", 1166 | "optional": true, 1167 | "requires": { 1168 | "ansi-cyan": "0.1.1", 1169 | "debug": "2.6.9", 1170 | "prompt-base": "4.1.0" 1171 | }, 1172 | "dependencies": { 1173 | "debug": { 1174 | "version": "2.6.9", 1175 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1176 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1177 | "optional": true, 1178 | "requires": { 1179 | "ms": "2.0.0" 1180 | } 1181 | } 1182 | } 1183 | }, 1184 | "prompt-choices": { 1185 | "version": "4.1.0", 1186 | "resolved": "https://registry.npmjs.org/prompt-choices/-/prompt-choices-4.1.0.tgz", 1187 | "integrity": "sha512-ZNYLv6rW9z9n0WdwCkEuS+w5nUAGzRgtRt6GQ5aFNFz6MIcU7nHFlHOwZtzy7RQBk80KzUGPSRQphvMiQzB8pg==", 1188 | "optional": true, 1189 | "requires": { 1190 | "arr-flatten": "1.1.0", 1191 | "arr-swap": "1.0.1", 1192 | "choices-separator": "2.0.0", 1193 | "clone-deep": "4.0.0", 1194 | "collection-visit": "1.0.0", 1195 | "define-property": "2.0.2", 1196 | "is-number": "6.0.0", 1197 | "kind-of": "6.0.2", 1198 | "koalas": "1.0.2", 1199 | "log-utils": "0.2.1", 1200 | "pointer-symbol": "1.0.0", 1201 | "radio-symbol": "2.0.0", 1202 | "set-value": "3.0.0", 1203 | "strip-color": "0.1.0", 1204 | "terminal-paginator": "2.0.2", 1205 | "toggle-array": "1.0.1" 1206 | }, 1207 | "dependencies": { 1208 | "clone-deep": { 1209 | "version": "4.0.0", 1210 | "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.0.tgz", 1211 | "integrity": "sha512-aNJ5/7Bz2IYBb7nIj34TLGk78lBXpXUgV9qsLngtTvJ9+scsZNnlU0OX2S2N4ax/sUQt7sDBkXiGjGJEmNbXOQ==", 1212 | "optional": true, 1213 | "requires": { 1214 | "kind-of": "6.0.2", 1215 | "shallow-clone": "3.0.0" 1216 | } 1217 | }, 1218 | "define-property": { 1219 | "version": "2.0.2", 1220 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 1221 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 1222 | "optional": true, 1223 | "requires": { 1224 | "is-descriptor": "1.0.2", 1225 | "isobject": "3.0.1" 1226 | } 1227 | }, 1228 | "kind-of": { 1229 | "version": "6.0.2", 1230 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1231 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" 1232 | }, 1233 | "shallow-clone": { 1234 | "version": "3.0.0", 1235 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.0.tgz", 1236 | "integrity": "sha512-Drg+nOI+ofeuslBf0nulyWLZhK1BZprqNvPJaiB4VvES+9gC6GG+qOVAfuO12zVSgxq9SKevcme7S3uDT6Be8w==", 1237 | "optional": true, 1238 | "requires": { 1239 | "kind-of": "6.0.2" 1240 | } 1241 | } 1242 | } 1243 | }, 1244 | "prompt-list": { 1245 | "version": "3.2.0", 1246 | "resolved": "https://registry.npmjs.org/prompt-list/-/prompt-list-3.2.0.tgz", 1247 | "integrity": "sha512-PDao47cmC9+m2zEUghH+WIIascd8SuyyWO+akuUubd0XxOQyUH96HMdIcL3YnNS8kJUHwddH1rHVgL9vZA1QsQ==", 1248 | "optional": true, 1249 | "requires": { 1250 | "ansi-cyan": "0.1.1", 1251 | "ansi-dim": "0.1.1", 1252 | "prompt-radio": "1.2.1" 1253 | } 1254 | }, 1255 | "prompt-question": { 1256 | "version": "5.0.2", 1257 | "resolved": "https://registry.npmjs.org/prompt-question/-/prompt-question-5.0.2.tgz", 1258 | "integrity": "sha512-wreaLbbu8f5+7zXds199uiT11Ojp59Z4iBi6hONlSLtsKGTvL2UY8VglcxQ3t/X4qWIxsNCg6aT4O8keO65v6Q==", 1259 | "optional": true, 1260 | "requires": { 1261 | "clone-deep": "1.0.0", 1262 | "debug": "3.1.0", 1263 | "define-property": "1.0.0", 1264 | "isobject": "3.0.1", 1265 | "kind-of": "5.1.0", 1266 | "koalas": "1.0.2", 1267 | "prompt-choices": "4.1.0" 1268 | }, 1269 | "dependencies": { 1270 | "kind-of": { 1271 | "version": "5.1.0", 1272 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1273 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 1274 | "optional": true 1275 | } 1276 | } 1277 | }, 1278 | "prompt-radio": { 1279 | "version": "1.2.1", 1280 | "resolved": "https://registry.npmjs.org/prompt-radio/-/prompt-radio-1.2.1.tgz", 1281 | "integrity": "sha512-vH1iAkgbWyvZBC1BTajydiHmwJP4F1b684gq0fm2wOjPVW1zaDo01OXWr/Dske0XdoHhtZFNMOXNj/ZUSRBywg==", 1282 | "optional": true, 1283 | "requires": { 1284 | "debug": "2.6.9", 1285 | "prompt-checkbox": "2.2.0" 1286 | }, 1287 | "dependencies": { 1288 | "debug": { 1289 | "version": "2.6.9", 1290 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1291 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1292 | "optional": true, 1293 | "requires": { 1294 | "ms": "2.0.0" 1295 | } 1296 | } 1297 | } 1298 | }, 1299 | "pump": { 1300 | "version": "2.0.1", 1301 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", 1302 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", 1303 | "optional": true, 1304 | "requires": { 1305 | "end-of-stream": "1.4.1", 1306 | "once": "1.4.0" 1307 | } 1308 | }, 1309 | "radio-symbol": { 1310 | "version": "2.0.0", 1311 | "resolved": "https://registry.npmjs.org/radio-symbol/-/radio-symbol-2.0.0.tgz", 1312 | "integrity": "sha1-eqm/xQSFY21S3XbWqOYxspB5muE=", 1313 | "optional": true, 1314 | "requires": { 1315 | "ansi-gray": "0.1.1", 1316 | "ansi-green": "0.1.1", 1317 | "is-windows": "1.0.2" 1318 | } 1319 | }, 1320 | "rc": { 1321 | "version": "1.2.8", 1322 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1323 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1324 | "optional": true, 1325 | "requires": { 1326 | "deep-extend": "0.6.0", 1327 | "ini": "1.3.5", 1328 | "minimist": "1.2.0", 1329 | "strip-json-comments": "2.0.1" 1330 | } 1331 | }, 1332 | "readable-stream": { 1333 | "version": "2.3.6", 1334 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1335 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1336 | "requires": { 1337 | "core-util-is": "1.0.2", 1338 | "inherits": "2.0.3", 1339 | "isarray": "1.0.0", 1340 | "process-nextick-args": "2.0.0", 1341 | "safe-buffer": "5.1.2", 1342 | "string_decoder": "1.1.1", 1343 | "util-deprecate": "1.0.2" 1344 | } 1345 | }, 1346 | "readline-ui": { 1347 | "version": "2.2.3", 1348 | "resolved": "https://registry.npmjs.org/readline-ui/-/readline-ui-2.2.3.tgz", 1349 | "integrity": "sha512-ix7jz0PxqQqcIuq3yQTHv1TOhlD2IHO74aNO+lSuXsRYm1d+pdyup1yF3zKyLK1wWZrVNGjkzw5tUegO2IDy+A==", 1350 | "optional": true, 1351 | "requires": { 1352 | "component-emitter": "1.2.1", 1353 | "debug": "2.6.9", 1354 | "readline-utils": "2.2.3", 1355 | "string-width": "2.1.1" 1356 | }, 1357 | "dependencies": { 1358 | "ansi-regex": { 1359 | "version": "3.0.0", 1360 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1361 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1362 | "optional": true 1363 | }, 1364 | "debug": { 1365 | "version": "2.6.9", 1366 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1367 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1368 | "optional": true, 1369 | "requires": { 1370 | "ms": "2.0.0" 1371 | } 1372 | }, 1373 | "is-fullwidth-code-point": { 1374 | "version": "2.0.0", 1375 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1376 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1377 | "optional": true 1378 | }, 1379 | "string-width": { 1380 | "version": "2.1.1", 1381 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1382 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1383 | "optional": true, 1384 | "requires": { 1385 | "is-fullwidth-code-point": "2.0.0", 1386 | "strip-ansi": "4.0.0" 1387 | } 1388 | }, 1389 | "strip-ansi": { 1390 | "version": "4.0.0", 1391 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1392 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1393 | "optional": true, 1394 | "requires": { 1395 | "ansi-regex": "3.0.0" 1396 | } 1397 | } 1398 | } 1399 | }, 1400 | "readline-utils": { 1401 | "version": "2.2.3", 1402 | "resolved": "https://registry.npmjs.org/readline-utils/-/readline-utils-2.2.3.tgz", 1403 | "integrity": "sha1-b4R9a48ZFcORtYHDZ81HhzhiNRo=", 1404 | "requires": { 1405 | "arr-flatten": "1.1.0", 1406 | "extend-shallow": "2.0.1", 1407 | "is-buffer": "1.1.6", 1408 | "is-number": "3.0.0", 1409 | "is-windows": "1.0.2", 1410 | "koalas": "1.0.2", 1411 | "mute-stream": "0.0.7", 1412 | "strip-color": "0.1.0", 1413 | "window-size": "1.1.1" 1414 | }, 1415 | "dependencies": { 1416 | "is-number": { 1417 | "version": "3.0.0", 1418 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1419 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1420 | "requires": { 1421 | "kind-of": "3.2.2" 1422 | } 1423 | } 1424 | } 1425 | }, 1426 | "safe-buffer": { 1427 | "version": "5.1.2", 1428 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1429 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1430 | }, 1431 | "semver": { 1432 | "version": "5.5.0", 1433 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1434 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 1435 | "optional": true 1436 | }, 1437 | "serialport": { 1438 | "version": "4.0.7", 1439 | "resolved": "https://registry.npmjs.org/serialport/-/serialport-4.0.7.tgz", 1440 | "integrity": "sha1-QhxhiophK9QM+kYbSkYVTa8iKaU=", 1441 | "requires": { 1442 | "bindings": "1.2.1", 1443 | "commander": "2.17.1", 1444 | "debug": "2.6.9", 1445 | "lie": "3.3.0", 1446 | "nan": "2.10.0", 1447 | "node-pre-gyp": "0.6.32", 1448 | "object.assign": "4.1.0" 1449 | }, 1450 | "dependencies": { 1451 | "bindings": { 1452 | "version": "1.2.1", 1453 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", 1454 | "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" 1455 | }, 1456 | "debug": { 1457 | "version": "2.6.9", 1458 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1459 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1460 | "requires": { 1461 | "ms": "2.0.0" 1462 | } 1463 | }, 1464 | "node-pre-gyp": { 1465 | "version": "0.6.32", 1466 | "bundled": true, 1467 | "requires": { 1468 | "mkdirp": "0.5.1", 1469 | "nopt": "3.0.6", 1470 | "npmlog": "4.0.1", 1471 | "rc": "1.1.6", 1472 | "request": "2.79.0", 1473 | "rimraf": "2.5.4", 1474 | "semver": "5.3.0", 1475 | "tar": "2.2.1", 1476 | "tar-pack": "3.3.0" 1477 | }, 1478 | "dependencies": { 1479 | "mkdirp": { 1480 | "version": "0.5.1", 1481 | "bundled": true, 1482 | "requires": { 1483 | "minimist": "0.0.8" 1484 | }, 1485 | "dependencies": { 1486 | "minimist": { 1487 | "version": "0.0.8", 1488 | "bundled": true 1489 | } 1490 | } 1491 | }, 1492 | "nopt": { 1493 | "version": "3.0.6", 1494 | "bundled": true, 1495 | "requires": { 1496 | "abbrev": "1.0.9" 1497 | }, 1498 | "dependencies": { 1499 | "abbrev": { 1500 | "version": "1.0.9", 1501 | "bundled": true 1502 | } 1503 | } 1504 | }, 1505 | "npmlog": { 1506 | "version": "4.0.1", 1507 | "bundled": true, 1508 | "requires": { 1509 | "are-we-there-yet": "1.1.2", 1510 | "console-control-strings": "1.1.0", 1511 | "gauge": "2.7.2", 1512 | "set-blocking": "2.0.0" 1513 | }, 1514 | "dependencies": { 1515 | "are-we-there-yet": { 1516 | "version": "1.1.2", 1517 | "bundled": true, 1518 | "requires": { 1519 | "delegates": "1.0.0", 1520 | "readable-stream": "2.2.2" 1521 | }, 1522 | "dependencies": { 1523 | "delegates": { 1524 | "version": "1.0.0", 1525 | "bundled": true 1526 | }, 1527 | "readable-stream": { 1528 | "version": "2.2.2", 1529 | "bundled": true, 1530 | "requires": { 1531 | "buffer-shims": "1.0.0", 1532 | "core-util-is": "1.0.2", 1533 | "inherits": "2.0.3", 1534 | "isarray": "1.0.0", 1535 | "process-nextick-args": "1.0.7", 1536 | "string_decoder": "0.10.31", 1537 | "util-deprecate": "1.0.2" 1538 | }, 1539 | "dependencies": { 1540 | "buffer-shims": { 1541 | "version": "1.0.0", 1542 | "bundled": true 1543 | }, 1544 | "core-util-is": { 1545 | "version": "1.0.2", 1546 | "bundled": true 1547 | }, 1548 | "inherits": { 1549 | "version": "2.0.3", 1550 | "bundled": true 1551 | }, 1552 | "isarray": { 1553 | "version": "1.0.0", 1554 | "bundled": true 1555 | }, 1556 | "process-nextick-args": { 1557 | "version": "1.0.7", 1558 | "bundled": true 1559 | }, 1560 | "string_decoder": { 1561 | "version": "0.10.31", 1562 | "bundled": true 1563 | }, 1564 | "util-deprecate": { 1565 | "version": "1.0.2", 1566 | "bundled": true 1567 | } 1568 | } 1569 | } 1570 | } 1571 | }, 1572 | "console-control-strings": { 1573 | "version": "1.1.0", 1574 | "bundled": true 1575 | }, 1576 | "gauge": { 1577 | "version": "2.7.2", 1578 | "bundled": true, 1579 | "requires": { 1580 | "aproba": "1.0.4", 1581 | "console-control-strings": "1.1.0", 1582 | "has-unicode": "2.0.1", 1583 | "object-assign": "4.1.0", 1584 | "signal-exit": "3.0.2", 1585 | "string-width": "1.0.2", 1586 | "strip-ansi": "3.0.1", 1587 | "supports-color": "0.2.0", 1588 | "wide-align": "1.1.0" 1589 | }, 1590 | "dependencies": { 1591 | "aproba": { 1592 | "version": "1.0.4", 1593 | "bundled": true 1594 | }, 1595 | "has-unicode": { 1596 | "version": "2.0.1", 1597 | "bundled": true 1598 | }, 1599 | "object-assign": { 1600 | "version": "4.1.0", 1601 | "bundled": true 1602 | }, 1603 | "signal-exit": { 1604 | "version": "3.0.2", 1605 | "bundled": true 1606 | }, 1607 | "string-width": { 1608 | "version": "1.0.2", 1609 | "bundled": true, 1610 | "requires": { 1611 | "code-point-at": "1.1.0", 1612 | "is-fullwidth-code-point": "1.0.0", 1613 | "strip-ansi": "3.0.1" 1614 | }, 1615 | "dependencies": { 1616 | "code-point-at": { 1617 | "version": "1.1.0", 1618 | "bundled": true 1619 | }, 1620 | "is-fullwidth-code-point": { 1621 | "version": "1.0.0", 1622 | "bundled": true, 1623 | "requires": { 1624 | "number-is-nan": "1.0.1" 1625 | }, 1626 | "dependencies": { 1627 | "number-is-nan": { 1628 | "version": "1.0.1", 1629 | "bundled": true 1630 | } 1631 | } 1632 | } 1633 | } 1634 | }, 1635 | "strip-ansi": { 1636 | "version": "3.0.1", 1637 | "bundled": true, 1638 | "requires": { 1639 | "ansi-regex": "2.0.0" 1640 | }, 1641 | "dependencies": { 1642 | "ansi-regex": { 1643 | "version": "2.0.0", 1644 | "bundled": true 1645 | } 1646 | } 1647 | }, 1648 | "supports-color": { 1649 | "version": "0.2.0", 1650 | "bundled": true 1651 | }, 1652 | "wide-align": { 1653 | "version": "1.1.0", 1654 | "bundled": true, 1655 | "requires": { 1656 | "string-width": "1.0.2" 1657 | } 1658 | } 1659 | } 1660 | }, 1661 | "set-blocking": { 1662 | "version": "2.0.0", 1663 | "bundled": true 1664 | } 1665 | } 1666 | }, 1667 | "rc": { 1668 | "version": "1.1.6", 1669 | "bundled": true, 1670 | "requires": { 1671 | "deep-extend": "0.4.1", 1672 | "ini": "1.3.4", 1673 | "minimist": "1.2.0", 1674 | "strip-json-comments": "1.0.4" 1675 | }, 1676 | "dependencies": { 1677 | "deep-extend": { 1678 | "version": "0.4.1", 1679 | "bundled": true 1680 | }, 1681 | "ini": { 1682 | "version": "1.3.4", 1683 | "bundled": true 1684 | }, 1685 | "minimist": { 1686 | "version": "1.2.0", 1687 | "bundled": true 1688 | }, 1689 | "strip-json-comments": { 1690 | "version": "1.0.4", 1691 | "bundled": true 1692 | } 1693 | } 1694 | }, 1695 | "request": { 1696 | "version": "2.79.0", 1697 | "bundled": true, 1698 | "requires": { 1699 | "aws-sign2": "0.6.0", 1700 | "aws4": "1.5.0", 1701 | "caseless": "0.11.0", 1702 | "combined-stream": "1.0.5", 1703 | "extend": "3.0.0", 1704 | "forever-agent": "0.6.1", 1705 | "form-data": "2.1.2", 1706 | "har-validator": "2.0.6", 1707 | "hawk": "3.1.3", 1708 | "http-signature": "1.1.1", 1709 | "is-typedarray": "1.0.0", 1710 | "isstream": "0.1.2", 1711 | "json-stringify-safe": "5.0.1", 1712 | "mime-types": "2.1.13", 1713 | "oauth-sign": "0.8.2", 1714 | "qs": "6.3.0", 1715 | "stringstream": "0.0.5", 1716 | "tough-cookie": "2.3.2", 1717 | "tunnel-agent": "0.4.3", 1718 | "uuid": "3.0.1" 1719 | }, 1720 | "dependencies": { 1721 | "aws-sign2": { 1722 | "version": "0.6.0", 1723 | "bundled": true 1724 | }, 1725 | "aws4": { 1726 | "version": "1.5.0", 1727 | "bundled": true 1728 | }, 1729 | "caseless": { 1730 | "version": "0.11.0", 1731 | "bundled": true 1732 | }, 1733 | "combined-stream": { 1734 | "version": "1.0.5", 1735 | "bundled": true, 1736 | "requires": { 1737 | "delayed-stream": "1.0.0" 1738 | }, 1739 | "dependencies": { 1740 | "delayed-stream": { 1741 | "version": "1.0.0", 1742 | "bundled": true 1743 | } 1744 | } 1745 | }, 1746 | "extend": { 1747 | "version": "3.0.0", 1748 | "bundled": true 1749 | }, 1750 | "forever-agent": { 1751 | "version": "0.6.1", 1752 | "bundled": true 1753 | }, 1754 | "form-data": { 1755 | "version": "2.1.2", 1756 | "bundled": true, 1757 | "requires": { 1758 | "asynckit": "0.4.0", 1759 | "combined-stream": "1.0.5", 1760 | "mime-types": "2.1.13" 1761 | }, 1762 | "dependencies": { 1763 | "asynckit": { 1764 | "version": "0.4.0", 1765 | "bundled": true 1766 | } 1767 | } 1768 | }, 1769 | "har-validator": { 1770 | "version": "2.0.6", 1771 | "bundled": true, 1772 | "requires": { 1773 | "chalk": "1.1.3", 1774 | "commander": "2.17.1", 1775 | "is-my-json-valid": "2.15.0", 1776 | "pinkie-promise": "2.0.1" 1777 | }, 1778 | "dependencies": { 1779 | "chalk": { 1780 | "version": "1.1.3", 1781 | "bundled": true, 1782 | "requires": { 1783 | "ansi-styles": "2.2.1", 1784 | "escape-string-regexp": "1.0.5", 1785 | "has-ansi": "2.0.0", 1786 | "strip-ansi": "3.0.1", 1787 | "supports-color": "2.0.0" 1788 | }, 1789 | "dependencies": { 1790 | "ansi-styles": { 1791 | "version": "2.2.1", 1792 | "bundled": true 1793 | }, 1794 | "escape-string-regexp": { 1795 | "version": "1.0.5", 1796 | "bundled": true 1797 | }, 1798 | "has-ansi": { 1799 | "version": "2.0.0", 1800 | "bundled": true, 1801 | "requires": { 1802 | "ansi-regex": "2.0.0" 1803 | }, 1804 | "dependencies": { 1805 | "ansi-regex": { 1806 | "version": "2.0.0", 1807 | "bundled": true 1808 | } 1809 | } 1810 | }, 1811 | "strip-ansi": { 1812 | "version": "3.0.1", 1813 | "bundled": true, 1814 | "requires": { 1815 | "ansi-regex": "2.0.0" 1816 | }, 1817 | "dependencies": { 1818 | "ansi-regex": { 1819 | "version": "2.0.0", 1820 | "bundled": true 1821 | } 1822 | } 1823 | }, 1824 | "supports-color": { 1825 | "version": "2.0.0", 1826 | "bundled": true 1827 | } 1828 | } 1829 | }, 1830 | "is-my-json-valid": { 1831 | "version": "2.15.0", 1832 | "bundled": true, 1833 | "requires": { 1834 | "generate-function": "2.0.0", 1835 | "generate-object-property": "1.2.0", 1836 | "jsonpointer": "4.0.0", 1837 | "xtend": "4.0.1" 1838 | }, 1839 | "dependencies": { 1840 | "generate-function": { 1841 | "version": "2.0.0", 1842 | "bundled": true 1843 | }, 1844 | "generate-object-property": { 1845 | "version": "1.2.0", 1846 | "bundled": true, 1847 | "requires": { 1848 | "is-property": "1.0.2" 1849 | }, 1850 | "dependencies": { 1851 | "is-property": { 1852 | "version": "1.0.2", 1853 | "bundled": true 1854 | } 1855 | } 1856 | }, 1857 | "jsonpointer": { 1858 | "version": "4.0.0", 1859 | "bundled": true 1860 | }, 1861 | "xtend": { 1862 | "version": "4.0.1", 1863 | "bundled": true 1864 | } 1865 | } 1866 | }, 1867 | "pinkie-promise": { 1868 | "version": "2.0.1", 1869 | "bundled": true, 1870 | "requires": { 1871 | "pinkie": "2.0.4" 1872 | }, 1873 | "dependencies": { 1874 | "pinkie": { 1875 | "version": "2.0.4", 1876 | "bundled": true 1877 | } 1878 | } 1879 | } 1880 | } 1881 | }, 1882 | "hawk": { 1883 | "version": "3.1.3", 1884 | "bundled": true, 1885 | "requires": { 1886 | "boom": "2.10.1", 1887 | "cryptiles": "2.0.5", 1888 | "hoek": "2.16.3", 1889 | "sntp": "1.0.9" 1890 | }, 1891 | "dependencies": { 1892 | "boom": { 1893 | "version": "2.10.1", 1894 | "bundled": true, 1895 | "requires": { 1896 | "hoek": "2.16.3" 1897 | } 1898 | }, 1899 | "cryptiles": { 1900 | "version": "2.0.5", 1901 | "bundled": true, 1902 | "requires": { 1903 | "boom": "2.10.1" 1904 | } 1905 | }, 1906 | "hoek": { 1907 | "version": "2.16.3", 1908 | "bundled": true 1909 | }, 1910 | "sntp": { 1911 | "version": "1.0.9", 1912 | "bundled": true, 1913 | "requires": { 1914 | "hoek": "2.16.3" 1915 | } 1916 | } 1917 | } 1918 | }, 1919 | "http-signature": { 1920 | "version": "1.1.1", 1921 | "bundled": true, 1922 | "requires": { 1923 | "assert-plus": "0.2.0", 1924 | "jsprim": "1.3.1", 1925 | "sshpk": "1.10.1" 1926 | }, 1927 | "dependencies": { 1928 | "assert-plus": { 1929 | "version": "0.2.0", 1930 | "bundled": true 1931 | }, 1932 | "jsprim": { 1933 | "version": "1.3.1", 1934 | "bundled": true, 1935 | "requires": { 1936 | "extsprintf": "1.0.2", 1937 | "json-schema": "0.2.3", 1938 | "verror": "1.3.6" 1939 | }, 1940 | "dependencies": { 1941 | "extsprintf": { 1942 | "version": "1.0.2", 1943 | "bundled": true 1944 | }, 1945 | "json-schema": { 1946 | "version": "0.2.3", 1947 | "bundled": true 1948 | }, 1949 | "verror": { 1950 | "version": "1.3.6", 1951 | "bundled": true, 1952 | "requires": { 1953 | "extsprintf": "1.0.2" 1954 | } 1955 | } 1956 | } 1957 | }, 1958 | "sshpk": { 1959 | "version": "1.10.1", 1960 | "bundled": true, 1961 | "requires": { 1962 | "asn1": "0.2.3", 1963 | "assert-plus": "1.0.0", 1964 | "bcrypt-pbkdf": "1.0.0", 1965 | "dashdash": "1.14.1", 1966 | "ecc-jsbn": "0.1.1", 1967 | "getpass": "0.1.6", 1968 | "jodid25519": "1.0.2", 1969 | "jsbn": "0.1.0", 1970 | "tweetnacl": "0.14.4" 1971 | }, 1972 | "dependencies": { 1973 | "asn1": { 1974 | "version": "0.2.3", 1975 | "bundled": true 1976 | }, 1977 | "assert-plus": { 1978 | "version": "1.0.0", 1979 | "bundled": true 1980 | }, 1981 | "bcrypt-pbkdf": { 1982 | "version": "1.0.0", 1983 | "bundled": true, 1984 | "optional": true, 1985 | "requires": { 1986 | "tweetnacl": "0.14.4" 1987 | } 1988 | }, 1989 | "dashdash": { 1990 | "version": "1.14.1", 1991 | "bundled": true, 1992 | "requires": { 1993 | "assert-plus": "1.0.0" 1994 | } 1995 | }, 1996 | "ecc-jsbn": { 1997 | "version": "0.1.1", 1998 | "bundled": true, 1999 | "optional": true, 2000 | "requires": { 2001 | "jsbn": "0.1.0" 2002 | } 2003 | }, 2004 | "getpass": { 2005 | "version": "0.1.6", 2006 | "bundled": true, 2007 | "requires": { 2008 | "assert-plus": "1.0.0" 2009 | } 2010 | }, 2011 | "jodid25519": { 2012 | "version": "1.0.2", 2013 | "bundled": true, 2014 | "optional": true, 2015 | "requires": { 2016 | "jsbn": "0.1.0" 2017 | } 2018 | }, 2019 | "jsbn": { 2020 | "version": "0.1.0", 2021 | "bundled": true, 2022 | "optional": true 2023 | }, 2024 | "tweetnacl": { 2025 | "version": "0.14.4", 2026 | "bundled": true, 2027 | "optional": true 2028 | } 2029 | } 2030 | } 2031 | } 2032 | }, 2033 | "is-typedarray": { 2034 | "version": "1.0.0", 2035 | "bundled": true 2036 | }, 2037 | "isstream": { 2038 | "version": "0.1.2", 2039 | "bundled": true 2040 | }, 2041 | "json-stringify-safe": { 2042 | "version": "5.0.1", 2043 | "bundled": true 2044 | }, 2045 | "mime-types": { 2046 | "version": "2.1.13", 2047 | "bundled": true, 2048 | "requires": { 2049 | "mime-db": "1.25.0" 2050 | }, 2051 | "dependencies": { 2052 | "mime-db": { 2053 | "version": "1.25.0", 2054 | "bundled": true 2055 | } 2056 | } 2057 | }, 2058 | "oauth-sign": { 2059 | "version": "0.8.2", 2060 | "bundled": true 2061 | }, 2062 | "qs": { 2063 | "version": "6.3.0", 2064 | "bundled": true 2065 | }, 2066 | "stringstream": { 2067 | "version": "0.0.5", 2068 | "bundled": true 2069 | }, 2070 | "tough-cookie": { 2071 | "version": "2.3.2", 2072 | "bundled": true, 2073 | "requires": { 2074 | "punycode": "1.4.1" 2075 | }, 2076 | "dependencies": { 2077 | "punycode": { 2078 | "version": "1.4.1", 2079 | "bundled": true 2080 | } 2081 | } 2082 | }, 2083 | "tunnel-agent": { 2084 | "version": "0.4.3", 2085 | "bundled": true 2086 | }, 2087 | "uuid": { 2088 | "version": "3.0.1", 2089 | "bundled": true 2090 | } 2091 | } 2092 | }, 2093 | "rimraf": { 2094 | "version": "2.5.4", 2095 | "bundled": true, 2096 | "requires": { 2097 | "glob": "7.1.1" 2098 | }, 2099 | "dependencies": { 2100 | "glob": { 2101 | "version": "7.1.1", 2102 | "bundled": true, 2103 | "requires": { 2104 | "fs.realpath": "1.0.0", 2105 | "inflight": "1.0.6", 2106 | "inherits": "2.0.3", 2107 | "minimatch": "3.0.3", 2108 | "once": "1.4.0", 2109 | "path-is-absolute": "1.0.1" 2110 | }, 2111 | "dependencies": { 2112 | "fs.realpath": { 2113 | "version": "1.0.0", 2114 | "bundled": true 2115 | }, 2116 | "inflight": { 2117 | "version": "1.0.6", 2118 | "bundled": true, 2119 | "requires": { 2120 | "once": "1.4.0", 2121 | "wrappy": "1.0.2" 2122 | }, 2123 | "dependencies": { 2124 | "wrappy": { 2125 | "version": "1.0.2", 2126 | "bundled": true 2127 | } 2128 | } 2129 | }, 2130 | "inherits": { 2131 | "version": "2.0.3", 2132 | "bundled": true 2133 | }, 2134 | "minimatch": { 2135 | "version": "3.0.3", 2136 | "bundled": true, 2137 | "requires": { 2138 | "brace-expansion": "1.1.6" 2139 | }, 2140 | "dependencies": { 2141 | "brace-expansion": { 2142 | "version": "1.1.6", 2143 | "bundled": true, 2144 | "requires": { 2145 | "balanced-match": "0.4.2", 2146 | "concat-map": "0.0.1" 2147 | }, 2148 | "dependencies": { 2149 | "balanced-match": { 2150 | "version": "0.4.2", 2151 | "bundled": true 2152 | }, 2153 | "concat-map": { 2154 | "version": "0.0.1", 2155 | "bundled": true 2156 | } 2157 | } 2158 | } 2159 | } 2160 | }, 2161 | "once": { 2162 | "version": "1.4.0", 2163 | "bundled": true, 2164 | "requires": { 2165 | "wrappy": "1.0.2" 2166 | }, 2167 | "dependencies": { 2168 | "wrappy": { 2169 | "version": "1.0.2", 2170 | "bundled": true 2171 | } 2172 | } 2173 | }, 2174 | "path-is-absolute": { 2175 | "version": "1.0.1", 2176 | "bundled": true 2177 | } 2178 | } 2179 | } 2180 | } 2181 | }, 2182 | "semver": { 2183 | "version": "5.3.0", 2184 | "bundled": true 2185 | }, 2186 | "tar": { 2187 | "version": "2.2.1", 2188 | "bundled": true, 2189 | "requires": { 2190 | "block-stream": "0.0.9", 2191 | "fstream": "1.0.10", 2192 | "inherits": "2.0.3" 2193 | }, 2194 | "dependencies": { 2195 | "block-stream": { 2196 | "version": "0.0.9", 2197 | "bundled": true, 2198 | "requires": { 2199 | "inherits": "2.0.3" 2200 | } 2201 | }, 2202 | "fstream": { 2203 | "version": "1.0.10", 2204 | "bundled": true, 2205 | "requires": { 2206 | "graceful-fs": "4.1.11", 2207 | "inherits": "2.0.3", 2208 | "mkdirp": "0.5.1", 2209 | "rimraf": "2.5.4" 2210 | }, 2211 | "dependencies": { 2212 | "graceful-fs": { 2213 | "version": "4.1.11", 2214 | "bundled": true 2215 | } 2216 | } 2217 | }, 2218 | "inherits": { 2219 | "version": "2.0.3", 2220 | "bundled": true 2221 | } 2222 | } 2223 | }, 2224 | "tar-pack": { 2225 | "version": "3.3.0", 2226 | "bundled": true, 2227 | "requires": { 2228 | "debug": "2.2.0", 2229 | "fstream": "1.0.10", 2230 | "fstream-ignore": "1.0.5", 2231 | "once": "1.3.3", 2232 | "readable-stream": "2.1.5", 2233 | "rimraf": "2.5.4", 2234 | "tar": "2.2.1", 2235 | "uid-number": "0.0.6" 2236 | }, 2237 | "dependencies": { 2238 | "debug": { 2239 | "version": "2.2.0", 2240 | "bundled": true, 2241 | "requires": { 2242 | "ms": "0.7.1" 2243 | }, 2244 | "dependencies": { 2245 | "ms": { 2246 | "version": "0.7.1", 2247 | "bundled": true 2248 | } 2249 | } 2250 | }, 2251 | "fstream": { 2252 | "version": "1.0.10", 2253 | "bundled": true, 2254 | "requires": { 2255 | "graceful-fs": "4.1.11", 2256 | "inherits": "2.0.3", 2257 | "mkdirp": "0.5.1", 2258 | "rimraf": "2.5.4" 2259 | }, 2260 | "dependencies": { 2261 | "graceful-fs": { 2262 | "version": "4.1.11", 2263 | "bundled": true 2264 | }, 2265 | "inherits": { 2266 | "version": "2.0.3", 2267 | "bundled": true 2268 | } 2269 | } 2270 | }, 2271 | "fstream-ignore": { 2272 | "version": "1.0.5", 2273 | "bundled": true, 2274 | "requires": { 2275 | "fstream": "1.0.10", 2276 | "inherits": "2.0.3", 2277 | "minimatch": "3.0.3" 2278 | }, 2279 | "dependencies": { 2280 | "inherits": { 2281 | "version": "2.0.3", 2282 | "bundled": true 2283 | }, 2284 | "minimatch": { 2285 | "version": "3.0.3", 2286 | "bundled": true, 2287 | "requires": { 2288 | "brace-expansion": "1.1.6" 2289 | }, 2290 | "dependencies": { 2291 | "brace-expansion": { 2292 | "version": "1.1.6", 2293 | "bundled": true, 2294 | "requires": { 2295 | "balanced-match": "0.4.2", 2296 | "concat-map": "0.0.1" 2297 | }, 2298 | "dependencies": { 2299 | "balanced-match": { 2300 | "version": "0.4.2", 2301 | "bundled": true 2302 | }, 2303 | "concat-map": { 2304 | "version": "0.0.1", 2305 | "bundled": true 2306 | } 2307 | } 2308 | } 2309 | } 2310 | } 2311 | } 2312 | }, 2313 | "once": { 2314 | "version": "1.3.3", 2315 | "bundled": true, 2316 | "requires": { 2317 | "wrappy": "1.0.2" 2318 | }, 2319 | "dependencies": { 2320 | "wrappy": { 2321 | "version": "1.0.2", 2322 | "bundled": true 2323 | } 2324 | } 2325 | }, 2326 | "readable-stream": { 2327 | "version": "2.1.5", 2328 | "bundled": true, 2329 | "requires": { 2330 | "buffer-shims": "1.0.0", 2331 | "core-util-is": "1.0.2", 2332 | "inherits": "2.0.3", 2333 | "isarray": "1.0.0", 2334 | "process-nextick-args": "1.0.7", 2335 | "string_decoder": "0.10.31", 2336 | "util-deprecate": "1.0.2" 2337 | }, 2338 | "dependencies": { 2339 | "buffer-shims": { 2340 | "version": "1.0.0", 2341 | "bundled": true 2342 | }, 2343 | "core-util-is": { 2344 | "version": "1.0.2", 2345 | "bundled": true 2346 | }, 2347 | "inherits": { 2348 | "version": "2.0.3", 2349 | "bundled": true 2350 | }, 2351 | "isarray": { 2352 | "version": "1.0.0", 2353 | "bundled": true 2354 | }, 2355 | "process-nextick-args": { 2356 | "version": "1.0.7", 2357 | "bundled": true 2358 | }, 2359 | "string_decoder": { 2360 | "version": "0.10.31", 2361 | "bundled": true 2362 | }, 2363 | "util-deprecate": { 2364 | "version": "1.0.2", 2365 | "bundled": true 2366 | } 2367 | } 2368 | }, 2369 | "uid-number": { 2370 | "version": "0.0.6", 2371 | "bundled": true 2372 | } 2373 | } 2374 | } 2375 | } 2376 | } 2377 | } 2378 | }, 2379 | "set-blocking": { 2380 | "version": "2.0.0", 2381 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2382 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2383 | "optional": true 2384 | }, 2385 | "set-getter": { 2386 | "version": "0.1.0", 2387 | "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", 2388 | "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", 2389 | "requires": { 2390 | "to-object-path": "0.3.0" 2391 | } 2392 | }, 2393 | "set-value": { 2394 | "version": "3.0.0", 2395 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.0.tgz", 2396 | "integrity": "sha512-tqkg9wJ2TOsxbzIMG5NMAmzjdbDTAD0in7XuUzmFpJE4Ipi2QFBfgC2Z1/gfxcAmWCPsuutiEJyDIMRsrjrMOQ==", 2397 | "optional": true, 2398 | "requires": { 2399 | "is-plain-object": "2.0.4" 2400 | } 2401 | }, 2402 | "shallow-clone": { 2403 | "version": "1.0.0", 2404 | "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", 2405 | "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", 2406 | "optional": true, 2407 | "requires": { 2408 | "is-extendable": "0.1.1", 2409 | "kind-of": "5.1.0", 2410 | "mixin-object": "2.0.1" 2411 | }, 2412 | "dependencies": { 2413 | "kind-of": { 2414 | "version": "5.1.0", 2415 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 2416 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 2417 | "optional": true 2418 | } 2419 | } 2420 | }, 2421 | "signal-exit": { 2422 | "version": "3.0.2", 2423 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2424 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2425 | "optional": true 2426 | }, 2427 | "simple-concat": { 2428 | "version": "1.0.0", 2429 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2430 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", 2431 | "optional": true 2432 | }, 2433 | "simple-get": { 2434 | "version": "2.8.1", 2435 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", 2436 | "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", 2437 | "optional": true, 2438 | "requires": { 2439 | "decompress-response": "3.3.0", 2440 | "once": "1.4.0", 2441 | "simple-concat": "1.0.0" 2442 | } 2443 | }, 2444 | "static-extend": { 2445 | "version": "0.1.2", 2446 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 2447 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 2448 | "optional": true, 2449 | "requires": { 2450 | "define-property": "0.2.5", 2451 | "object-copy": "0.1.0" 2452 | }, 2453 | "dependencies": { 2454 | "define-property": { 2455 | "version": "0.2.5", 2456 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2457 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2458 | "optional": true, 2459 | "requires": { 2460 | "is-descriptor": "0.1.6" 2461 | } 2462 | }, 2463 | "is-accessor-descriptor": { 2464 | "version": "0.1.6", 2465 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 2466 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 2467 | "optional": true, 2468 | "requires": { 2469 | "kind-of": "3.2.2" 2470 | }, 2471 | "dependencies": { 2472 | "kind-of": { 2473 | "version": "3.2.2", 2474 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2475 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2476 | "optional": true, 2477 | "requires": { 2478 | "is-buffer": "1.1.6" 2479 | } 2480 | } 2481 | } 2482 | }, 2483 | "is-data-descriptor": { 2484 | "version": "0.1.4", 2485 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 2486 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 2487 | "optional": true, 2488 | "requires": { 2489 | "kind-of": "3.2.2" 2490 | }, 2491 | "dependencies": { 2492 | "kind-of": { 2493 | "version": "3.2.2", 2494 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2495 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2496 | "optional": true, 2497 | "requires": { 2498 | "is-buffer": "1.1.6" 2499 | } 2500 | } 2501 | } 2502 | }, 2503 | "is-descriptor": { 2504 | "version": "0.1.6", 2505 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 2506 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 2507 | "optional": true, 2508 | "requires": { 2509 | "is-accessor-descriptor": "0.1.6", 2510 | "is-data-descriptor": "0.1.4", 2511 | "kind-of": "5.1.0" 2512 | } 2513 | }, 2514 | "kind-of": { 2515 | "version": "5.1.0", 2516 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 2517 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 2518 | "optional": true 2519 | } 2520 | } 2521 | }, 2522 | "string-width": { 2523 | "version": "1.0.2", 2524 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2525 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2526 | "requires": { 2527 | "code-point-at": "1.1.0", 2528 | "is-fullwidth-code-point": "1.0.0", 2529 | "strip-ansi": "3.0.1" 2530 | } 2531 | }, 2532 | "string_decoder": { 2533 | "version": "1.1.1", 2534 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2535 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2536 | "requires": { 2537 | "safe-buffer": "5.1.2" 2538 | } 2539 | }, 2540 | "strip-ansi": { 2541 | "version": "3.0.1", 2542 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2543 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2544 | "requires": { 2545 | "ansi-regex": "2.1.1" 2546 | } 2547 | }, 2548 | "strip-color": { 2549 | "version": "0.1.0", 2550 | "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", 2551 | "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=" 2552 | }, 2553 | "strip-json-comments": { 2554 | "version": "2.0.1", 2555 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2556 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2557 | "optional": true 2558 | }, 2559 | "success-symbol": { 2560 | "version": "0.1.0", 2561 | "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", 2562 | "integrity": "sha1-JAIuSG878c3KCUKDt2nEctO3KJc=" 2563 | }, 2564 | "supports-color": { 2565 | "version": "5.4.0", 2566 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 2567 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 2568 | "requires": { 2569 | "has-flag": "3.0.0" 2570 | } 2571 | }, 2572 | "tar-fs": { 2573 | "version": "1.16.3", 2574 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", 2575 | "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", 2576 | "optional": true, 2577 | "requires": { 2578 | "chownr": "1.0.1", 2579 | "mkdirp": "0.5.1", 2580 | "pump": "1.0.3", 2581 | "tar-stream": "1.6.1" 2582 | }, 2583 | "dependencies": { 2584 | "pump": { 2585 | "version": "1.0.3", 2586 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", 2587 | "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", 2588 | "optional": true, 2589 | "requires": { 2590 | "end-of-stream": "1.4.1", 2591 | "once": "1.4.0" 2592 | } 2593 | } 2594 | } 2595 | }, 2596 | "tar-stream": { 2597 | "version": "1.6.1", 2598 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", 2599 | "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", 2600 | "optional": true, 2601 | "requires": { 2602 | "bl": "1.2.2", 2603 | "buffer-alloc": "1.2.0", 2604 | "end-of-stream": "1.4.1", 2605 | "fs-constants": "1.0.0", 2606 | "readable-stream": "2.3.6", 2607 | "to-buffer": "1.1.1", 2608 | "xtend": "4.0.1" 2609 | } 2610 | }, 2611 | "temporal": { 2612 | "version": "0.7.1", 2613 | "resolved": "https://registry.npmjs.org/temporal/-/temporal-0.7.1.tgz", 2614 | "integrity": "sha512-6Xd3c2llgkjGP7kn2LXuiHZ8/cRiIX5EsPcvn8slkAcayWEzf7xuXxd7BcgUm2djmI1DPFUSMFeFwQcLVMLsOw==" 2615 | }, 2616 | "terminal-paginator": { 2617 | "version": "2.0.2", 2618 | "resolved": "https://registry.npmjs.org/terminal-paginator/-/terminal-paginator-2.0.2.tgz", 2619 | "integrity": "sha512-IZMT5ECF9p4s+sNCV8uvZSW9E1+9zy9Ji9xz2oee8Jfo7hUFpauyjxkhfRcIH6Lu3Wdepv5D1kVRc8Hx74/LfQ==", 2620 | "optional": true, 2621 | "requires": { 2622 | "debug": "2.6.9", 2623 | "extend-shallow": "2.0.1", 2624 | "log-utils": "0.2.1" 2625 | }, 2626 | "dependencies": { 2627 | "debug": { 2628 | "version": "2.6.9", 2629 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2630 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2631 | "optional": true, 2632 | "requires": { 2633 | "ms": "2.0.0" 2634 | } 2635 | } 2636 | } 2637 | }, 2638 | "time-stamp": { 2639 | "version": "1.1.0", 2640 | "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", 2641 | "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" 2642 | }, 2643 | "to-buffer": { 2644 | "version": "1.1.1", 2645 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 2646 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", 2647 | "optional": true 2648 | }, 2649 | "to-object-path": { 2650 | "version": "0.3.0", 2651 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 2652 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 2653 | "requires": { 2654 | "kind-of": "3.2.2" 2655 | } 2656 | }, 2657 | "toggle-array": { 2658 | "version": "1.0.1", 2659 | "resolved": "https://registry.npmjs.org/toggle-array/-/toggle-array-1.0.1.tgz", 2660 | "integrity": "sha1-y/WEB5K9UJfzMReugkyTKv/ofVg=", 2661 | "optional": true, 2662 | "requires": { 2663 | "isobject": "3.0.1" 2664 | } 2665 | }, 2666 | "tunnel-agent": { 2667 | "version": "0.6.0", 2668 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2669 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2670 | "optional": true, 2671 | "requires": { 2672 | "safe-buffer": "5.1.2" 2673 | } 2674 | }, 2675 | "util-deprecate": { 2676 | "version": "1.0.2", 2677 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2678 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2679 | }, 2680 | "warning-symbol": { 2681 | "version": "0.1.0", 2682 | "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", 2683 | "integrity": "sha1-uzHdEbeg+dZ6su2V9Fe2WCW7rSE=" 2684 | }, 2685 | "which-pm-runs": { 2686 | "version": "1.0.0", 2687 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 2688 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", 2689 | "optional": true 2690 | }, 2691 | "wide-align": { 2692 | "version": "1.1.3", 2693 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2694 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2695 | "optional": true, 2696 | "requires": { 2697 | "string-width": "1.0.2" 2698 | } 2699 | }, 2700 | "window-size": { 2701 | "version": "1.1.1", 2702 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", 2703 | "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", 2704 | "requires": { 2705 | "define-property": "1.0.0", 2706 | "is-number": "3.0.0" 2707 | }, 2708 | "dependencies": { 2709 | "is-number": { 2710 | "version": "3.0.0", 2711 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2712 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2713 | "requires": { 2714 | "kind-of": "3.2.2" 2715 | } 2716 | } 2717 | } 2718 | }, 2719 | "wrappy": { 2720 | "version": "1.0.2", 2721 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2722 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2723 | }, 2724 | "xtend": { 2725 | "version": "4.0.1", 2726 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2727 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 2728 | "optional": true 2729 | } 2730 | } 2731 | } 2732 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodebots-workshop", 3 | "version": "1.0.0", 4 | "description": "Nodebots Workshop using NodeJS and Johnny-five", 5 | "repository": "https://github.com/willmendesneto/nodebots-workshop", 6 | "author": { 7 | "name": "Will Mendes", 8 | "email": "willmendesneto@gmail.com", 9 | "url": "https://github.com/willmendesneto" 10 | }, 11 | "scripts": { 12 | "first-example": "node src/first-example.js", 13 | "second-example": "node src/second-example.js", 14 | "third-example": "node src/third-example.js", 15 | "memory-game": "node src/memory-game.js" 16 | }, 17 | "homepage": "https://github.com/willmendesneto/nodebots-workshop#readme", 18 | "main": "index.js", 19 | "license": "MIT", 20 | "dependencies": { 21 | "johnny-five": "^0.10.0" 22 | }, 23 | "devDependencies": { 24 | "bindings": "^1.2.1", 25 | "board-io": "^3.0.5", 26 | "firmata": "^0.15.0", 27 | "serialport": "^4.0.1" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/first-example.js: -------------------------------------------------------------------------------- 1 | // Blink a LED 2 | var five = require('johnny-five'); 3 | var board = new five.Board(); 4 | 5 | board.on('ready', function() { 6 | 7 | // Number of the pin connected on the board 8 | var pinNumbers = [12]; 9 | 10 | // Starting the LED 11 | var leds = new five.Leds(pinNumbers); 12 | 13 | // And here is the magic! \o/ 14 | leds.blink(); 15 | // leds.on(); 16 | 17 | // How make the LED blink every second? 18 | // Blink accepts a number as timer parameter 19 | // The number value is based on miliseconds 20 | // So that, 1000 miliseconds = 1 seconds 21 | 22 | // leds.blink(1000); 23 | }); 24 | -------------------------------------------------------------------------------- /src/memory-game.js: -------------------------------------------------------------------------------- 1 | var five = require('johnny-five'); 2 | var board = new five.Board(); 3 | 4 | var buttonCounter = 0; 5 | var piezoSongs = ['C4', 'E4']; 6 | var buttonsSequence = []; 7 | var leds = []; 8 | var piezo = {}; 9 | var timeoutIds = []; 10 | 11 | /** 12 | * Returns randomic integer based on a range 13 | * min: minimum value 14 | * max: maximum value 15 | */ 16 | function getRandomInt(min, max) { 17 | return Math.floor(Math.random() * (max - min + 1) + min); 18 | } 19 | 20 | /** 21 | * Generates a random number 22 | */ 23 | function generateRandomNumber() { 24 | return getRandomInt(0, 1); 25 | } 26 | 27 | /** 28 | * Starts the simon game 29 | */ 30 | function startGame() { 31 | console.log('STARTING...'); 32 | buttonCounter = 0; 33 | buttonsSequence = []; 34 | 35 | // starts with 3 choices 36 | buttonsSequence.push(generateRandomNumber()); 37 | buttonsSequence.push(generateRandomNumber()); 38 | buttonsSequence.push(generateRandomNumber()); 39 | 40 | blinkLedsInSequence(); 41 | } 42 | 43 | /** 44 | * Makes the LED Blink in sequence and Piezo emit a sound based on 45 | * the order added in memory 46 | */ 47 | function blinkLedsInSequence() { 48 | var sequenceLength = buttonsSequence.length; 49 | var currentButtonSequenceCounter = 0; 50 | 51 | timeoutIds.push( 52 | setTimeout(function() { 53 | 54 | currentButtonSequenceCounter = buttonsSequence[buttonCounter]; 55 | // This console shows you the current sequence in the memory game 56 | buttonCounter++; 57 | console.log('SEQUENCE NUMBER', buttonCounter, ': CLICK BUTTON', currentButtonSequenceCounter); 58 | if(buttonCounter < sequenceLength) { 59 | // turning turn led 60 | blinkLedsInSequence(); 61 | } else { 62 | // This console shows you the current sequence in the memory game 63 | console.log('START GAME: ', buttonsSequence); 64 | buttonCounter = 0; 65 | } 66 | 67 | leds[currentButtonSequenceCounter].on(); 68 | piezo.play({ song: piezoSongs[currentButtonSequenceCounter] }); 69 | 70 | // turning off led 71 | timeoutIds.push( 72 | setTimeout(function() { 73 | leds.off(); 74 | piezo.off(); 75 | }, 1000)); 76 | 77 | }, 2000)); 78 | }; 79 | 80 | board.on('ready', function() { 81 | 82 | leds = new five.Leds([12, 3]); 83 | var buttons = new five.Buttons([13, 2]); 84 | 85 | piezo = new five.Piezo(11); 86 | 87 | buttons.on('press', function(button) { 88 | if (buttonsSequence.length) { 89 | var index = buttons.indexOf(button); 90 | leds[index].on(); 91 | console.log('Pressed: button', button.pin, 'led', leds[index].pin); 92 | piezo.play({ song: piezoSongs[index] }); 93 | } 94 | }); 95 | 96 | buttons.on('release', function(button) { 97 | if (buttonsSequence.length) { 98 | var index = buttons.indexOf(button); 99 | 100 | console.log('Released: button', button.pin, 'led', leds[index].pin); 101 | 102 | leds.off(); 103 | piezo.off(); 104 | 105 | if(buttonsSequence[buttonCounter] === index) { 106 | buttonCounter++; 107 | if(buttonCounter === buttonsSequence.length) { 108 | console.log('>>> You won!'); 109 | buttonCounter = 0; 110 | buttonsSequence.push(generateRandomNumber()); 111 | blinkLedsInSequence(); 112 | } 113 | } else { 114 | timeoutIds.forEach(function(timeoutId) { 115 | clearTimeout(timeoutId); 116 | }); 117 | 118 | console.log('>>> Error in sequence. try again!'); 119 | setTimeout(startGame, 3000); 120 | } 121 | } 122 | }); 123 | 124 | // Starting the game 125 | setTimeout(startGame, 100); 126 | 127 | }); 128 | -------------------------------------------------------------------------------- /src/memory-game.template.js: -------------------------------------------------------------------------------- 1 | var five = require('johnny-five'); 2 | var board = new five.Board(); 3 | 4 | var buttonCounter = 0; 5 | var piezoSongs = ['C4', 'E4']; 6 | var buttonsSequence = []; 7 | var leds = []; 8 | var piezo = {}; 9 | var timeoutIds = []; 10 | 11 | /** 12 | * Returns randomic integer based on a range 13 | * min: minimum value 14 | * max: maximum value 15 | */ 16 | function getRandomInt(min, max) { 17 | return Math.floor(Math.random() * (max - min + 1) + min); 18 | } 19 | 20 | /** 21 | * Generates a random number 22 | */ 23 | function generateRandomNumber() { 24 | return getRandomInt(0, 1); 25 | } 26 | 27 | /** 28 | * Starts the simon game 29 | */ 30 | function startGame() { 31 | console.log('STARTING...'); 32 | buttonCounter = 0; 33 | buttonsSequence = []; 34 | 35 | // starts with 3 choices 36 | buttonsSequence.push(generateRandomNumber()); 37 | buttonsSequence.push(generateRandomNumber()); 38 | buttonsSequence.push(generateRandomNumber()); 39 | 40 | blinkLedsInSequence(); 41 | } 42 | 43 | /** 44 | * Makes the LED Blink in sequence and Piezo emit a sound based on 45 | * the order added in memory 46 | */ 47 | function blinkLedsInSequence() { 48 | var sequenceLength = buttonsSequence.length; 49 | var currentButtonSequenceCounter = 0; 50 | 51 | timeoutIds.push( 52 | setTimeout(function() { 53 | 54 | currentButtonSequenceCounter = buttonsSequence[buttonCounter]; 55 | // This console shows you the current sequence in the memory game 56 | buttonCounter++; 57 | console.log('SEQUENCE NUMBER', buttonCounter, ': CLICK BUTTON', currentButtonSequenceCounter); 58 | if(buttonCounter < sequenceLength) { 59 | // turning turn led 60 | blinkLedsInSequence(); 61 | } else { 62 | // This console shows you the current sequence in the memory game 63 | console.log('START GAME: ', buttonsSequence); 64 | buttonCounter = 0; 65 | } 66 | 67 | leds[currentButtonSequenceCounter].on(); 68 | piezo.play({ song: piezoSongs[currentButtonSequenceCounter] }); 69 | 70 | // turning off led 71 | timeoutIds.push( 72 | setTimeout(function() { 73 | leds.off(); 74 | piezo.off(); 75 | }, 1000)); 76 | 77 | }, 2000)); 78 | }; 79 | 80 | board.on('ready', function() { 81 | 82 | leds = new five.Leds([12, 3]); 83 | var buttons = new five.Buttons([13, 2]); 84 | 85 | piezo = new five.Piezo(11); 86 | 87 | buttons.on('press', function(button) { 88 | if (buttonsSequence.length) { 89 | var index = buttons.indexOf(button); 90 | 91 | console.log('Pressed: button', button.pin, 'led', leds[index].pin); 92 | 93 | // How can I turn on a specific LED? 94 | 95 | piezo.play({ song: piezoSongs[index] }); 96 | } 97 | }); 98 | 99 | buttons.on('release', function(button) { 100 | if (buttonsSequence.length) { 101 | var index = buttons.indexOf(button); 102 | 103 | console.log('Released: button', button.pin, 'led', leds[index].pin); 104 | 105 | // How can I turn off LEDS and Piezo? 106 | 107 | if(buttonsSequence[buttonCounter] === index) { 108 | buttonCounter++; 109 | if(buttonCounter === buttonsSequence.length) { 110 | console.log('>>> You won!'); 111 | buttonCounter = 0; 112 | buttonsSequence.push(generateRandomNumber()); 113 | blinkLedsInSequence(); 114 | } 115 | } else { 116 | timeoutIds.forEach(function(timeoutId) { 117 | clearTimeout(timeoutId); 118 | }); 119 | 120 | console.log('>>> Error in sequence. try again!'); 121 | setTimeout(startGame, 3000); 122 | } 123 | } 124 | }); 125 | 126 | // Starting the game 127 | setTimeout(startGame, 100); 128 | 129 | }); 130 | -------------------------------------------------------------------------------- /src/second-example.js: -------------------------------------------------------------------------------- 1 | // Make button controls the LED 2 | var five = require('johnny-five'); 3 | var board = new five.Board(); 4 | 5 | board.on('ready', function() { 6 | var leds = new five.Leds([12]); 7 | var buttons = new five.Buttons({ 8 | pins: [13], 9 | // In case your buttons are responding to different events 10 | // they are probably receiving the eletricity in different points. 11 | // To solve that via code you can uncomment the option `invert` 12 | // invert: true 13 | }); 14 | 15 | buttons.on('press', function(button) { 16 | var index = buttons.indexOf(button); 17 | leds[index].on(); 18 | console.log('presssed', leds[index].pin); 19 | }); 20 | 21 | buttons.on('release', function(button) { 22 | var index = buttons.indexOf(button); 23 | leds.off(); 24 | console.log('released'); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /src/third-example.js: -------------------------------------------------------------------------------- 1 | // Make button controls the LED and PIEZO 2 | var five = require('johnny-five'); 3 | var board = new five.Board(); 4 | 5 | board.on('ready', function() { 6 | var leds = new five.Leds([12]); 7 | var buttons = new five.Buttons({ 8 | pins: [13], 9 | // In case your buttons are responding to different events 10 | // they are probably receiving the eletricity in different points. 11 | // To solve that via code you can uncomment the option `invert` 12 | // invert: true 13 | }); 14 | var piezo = new five.Piezo(11); 15 | 16 | buttons.on('press', function(button) { 17 | var index = buttons.indexOf(button); 18 | leds[index].on(); 19 | piezo.play({ song: 'C4' }); 20 | }); 21 | 22 | buttons.on('release', function(button) { 23 | var index = buttons.indexOf(button); 24 | leds[index].off(); 25 | piezo.off(); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /workshop-steps.md: -------------------------------------------------------------------------------- 1 | # First example 2 | ============== 3 | 4 | [Back to README.md](README.md) 5 | 6 | ## Hello world: make a LED blink 7 | 8 | > Because we always have to do our first step :) 9 | 10 | The first example is the default hello world in a hardware world, which means that your first goal is make a LED turn on and blink. 11 | 12 | Fritzing diagram: [assets/led.fzz](assets/led.fzz) 13 | 14 | ![First example: make a LED blink](assets/led.svg) 15 | 16 | ### Steps 17 | 18 | - Explain the challenge; 19 | - Explain about breadboard, resistor, LED and jumpers; 20 | - Explain johnny-five classes and events; 21 | 22 | ### Challenges 23 | 24 | - First contact with `johnny-five` package; 25 | - Start using `johnny-five` events; 26 | - Start using `johnny-five` components; 27 | - First sensor integration and interaction; 28 | - First contact with jumper wires; 29 | 30 | ### Experiments 31 | 32 | - How to change the blink time? 33 | 34 | 35 | # Second example 36 | ============== 37 | 38 | ## Click the button, turn on the lights: magic happens! 39 | 40 | > Because we always can make it better! 41 | 42 | The second example is based on the first one, but now you need to integrate a new component in the game. The main idea here is turn on the light in your LED when you click the button and turn off the LED light when you release the button. 43 | 44 | 45 | Fritzing diagram: [assets/led-button.fzz](assets/led-button.fzz) 46 | 47 | ![Second example: Click the button, turn on the lights: magic happens](assets/led-button.svg) 48 | 49 | ### Steps 50 | 51 | - Explain the challenge; 52 | - Explain about the button, behaviors and how it works; 53 | 54 | ### Challenges 55 | 56 | - Start using `johnny-five` button class; 57 | - First contact with resistors; 58 | - First integration and interaction with physical buttons; 59 | - Understand how to make communication between different components; 60 | 61 | ### Experiments 62 | 63 | - How to change the order of the commands. EX: turn on the LED by default and turn off when the button is clicked? 64 | 65 | 66 | # Third example 67 | ============== 68 | 69 | ## Turn on the lights + beep when​ a button is clicked 70 | 71 | > Let me introduce a new friend called `Piezo`, but his nickname is `Buzzer` 72 | 73 | In the third example you will know a new component called piezo/buzzer and add another user iteraction in your game. When you click the button, you need to turn on the LED and make the piezo emit a sound and when you release the button you should turn off the LED and stop the piezo song. 74 | 75 | 76 | Fritzing diagram: [assets/led-button-piezo.fzz](assets/led-button-piezo.fzz) 77 | 78 | ![Third example: Turn on the lights + beep when​ a button is clicked](assets/led-button-piezo.svg) 79 | 80 | ### Steps 81 | 82 | - Explain the challenge; 83 | - Explain about the piezo, behaviors and how it works; 84 | - Show some different sounds that we can use inside Piezo; 85 | 86 | ### Challenges 87 | 88 | - Start using `johnny-five` piezo class; 89 | - How to organize jumpers in the breadboard; 90 | - First integration and interaction with piezo and how to change the sounds; 91 | 92 | ### Experiments 93 | 94 | - How to add this integration for each button and LED? 95 | - How to make a piezo emit a different sound? 96 | 97 | 98 | # Forth example 99 | ============== 100 | 101 | ## Simon game: make a LED blink 102 | 103 | > And right now, I want to play a memory game with you :) 104 | 105 | In the last step you should make a simon game using all the concepts which you are learning. The main goal is integrate the components in the downloaded javascript template. We have some questions, such as: 106 | 107 | - How can I turn on a specific LED? 108 | - How can I turn off LEDS and Piezo? 109 | - How to start the game again, if user pressed the wrong button? 110 | 111 | 112 | Fritzing diagram: [assets/memory-game.fzz](assets/memory-game.fzz) 113 | 114 | ![Forth example: Simon game](assets/memory-game.svg) 115 | 116 | PS: 117 | ** Yes, they are the same components as the third example; 118 | *** We already have the template file. So that we can keep focusing in the game integration steps 119 | **** In this step, you already know everything you want 120 | 121 | ### Steps 122 | 123 | - Explain the challenge and the idea of simon game; 124 | - Explain the memory game template, current behaviour and the areas to implement the code; 125 | 126 | ### Challenges 127 | 128 | - Start integration between different components; 129 | - Manage behaviours in different components; 130 | - Reuse ground integration for components; 131 | 132 | 133 | [Back to README.md](README.md) 134 | --------------------------------------------------------------------------------