├── .gitignore ├── LICENSE.md ├── README.md ├── bin └── firmata-party.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2015 Suz Hinton 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :balloon: :tada: firmata-party :tada: :balloon: 2 | 3 | This CLI tool provides a quick way to flash Standard Firmata to your Arduino board. 4 | 5 | ## Install 6 | 7 | 1. Install NodeJS from [nodejs.org](http://nodejs.org) 8 | 2. Run `npm install -g firmata-party` in your shell of choice 9 | 10 | ## Usage 11 | 12 | ```bash 13 | usage: firmata-party [ | list] [--party] [--debug] 14 | 15 | firmata-party list # list all supported boards 16 | firmata-party uno [port] # flash Standard Firmata to an Arduino Uno 17 | firmata-party uno [port] --debug # show debug info 18 | firmata-party uno [port] --party # keep flashing firmata on new arduinos until you quit the program with ctrl+c! 19 | firmata-party help # show usage info 20 | ``` 21 | 22 | Note that the port will be auto-detected except in the case of the Pro Mini (see [avrgirl-arduino](https://github.com/noopkat/avrgirl-arduino) for more info). 23 | 24 | ## Supported boards: 25 | 26 | + **Arduino Uno** 27 | + **Arduino Mega** 28 | + **Arduino ADK** 29 | + **Arduino Leonardo** 30 | + **Arduino Micro** 31 | + **Arduino Nano** 32 | + **Arduino Duemilanove (168)** 33 | + **Arduino Duemilanove (328)** 34 | + **Arduino Pro Mini** 35 | + **Arduino Lilypad USB** 36 | + **Arduino Yun** 37 | + **Arduino Esplora** 38 | + **Femtoduino IMUduino** 39 | + **RedBearLab Blend Micro** 40 | + **Tinycircuits Tinyduino** 41 | + **Sparkfun Pro Micro** 42 | + **Qtechknow Qduino** 43 | + **Pinoccio Scout** 44 | + **Adafruit Feather 32u4 Basic Proto** 45 | + **Arduboy** 46 | + **Adafruit Circuit Playground Classic** 47 | + **littleBits Arduino Bit** 48 | + **bqZum** 49 | -------------------------------------------------------------------------------- /bin/firmata-party.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var Avrgirl = require('avrgirl-arduino'); 3 | var path = require('path'); 4 | var keypress = require('keypress'); 5 | var argv = require('minimist')(process.argv.slice(2), opts = { 6 | boolean: ['party', 'debug', 'help'] 7 | }); 8 | var fs = require('fs'); 9 | 10 | var debugMode = argv.debug; 11 | var partyMode = argv.party; 12 | var helpMsg = `usage: firmata-party [ | ] [--party] [--debug] 13 | 14 | firmata-party list # list all supported boards 15 | firmata-party uno # flash Standard Firmata to an Arduino Uno 16 | firmata-party uno --debug # show debug info 17 | firmata-party uno --party # keep flashing firmata on new arduinos until you quit the program with ctrl+c! 18 | firmata-party help # show usage info 19 | `; 20 | 21 | var supportedBoards = Avrgirl.listKnownBoards(); 22 | var supportedBoardsString = supportedBoards.join(', '); 23 | 24 | function showHelp() { 25 | console.log(helpMsg); 26 | } 27 | 28 | function showSupported() { 29 | console.log('supported board flags: \n' + supportedBoardsString); 30 | } 31 | 32 | handleArgs(argv); 33 | 34 | function handleArgs(argv) { 35 | var board = argv._[0]; 36 | var args = argv._; 37 | if (!argv || args.length == 0 || args.indexOf('help') > -1 || args.indexOf('man') > -1) { 38 | var status = board ? 0 : 1; 39 | showHelp(); 40 | return process.exit(status); 41 | } else if (args.indexOf('list') > -1) { 42 | showSupported(); 43 | return process.exit(0); 44 | } else { 45 | 46 | var options = {board: board, debug: debugMode}; 47 | 48 | if (supportedBoards.indexOf(options.board) < 0) { 49 | var error = new Error("oops! Sorry, the board '" + options.board + "'' is not currently supported"); 50 | return console.error(error); 51 | } 52 | 53 | if (args.length > 1) { 54 | options["port"] = args[1] 55 | } 56 | 57 | if (partyMode) { 58 | party(options); 59 | } else { 60 | flashAndQuit(options); 61 | } 62 | } 63 | } 64 | 65 | function flash(options, callback) { 66 | var avrgirl = new Avrgirl(options); 67 | 68 | var avrgirlDir = path.dirname(require.resolve('avrgirl-arduino')); 69 | var firmataDir = path.resolve(avrgirlDir, 'junk', 'hex', options.board); 70 | var firmataPath; 71 | 72 | fs.readdir(firmataDir, function(err, files) { 73 | if (err) { return console.error(err); } 74 | 75 | for (var i = 0, len = files.length; i < len; i++) { 76 | var filename = files[i]; 77 | if (filename.indexOf('StandardFirmata') > -1) { 78 | firmataPath = path.join(firmataDir, filename); 79 | break; 80 | } 81 | }; 82 | 83 | if (typeof firmataPath === 'undefined') { 84 | var error = new Error("oops! Couldn't find Standard Firmata file for " + options.board + " board."); 85 | return console.error(error); 86 | } 87 | 88 | avrgirl.flash(firmataPath, callback); 89 | }); 90 | } 91 | 92 | function flashAndQuit(options) { 93 | flash(options, function(error) { 94 | if (error) { 95 | console.error(error); 96 | return process.exit(1); 97 | } else { 98 | return process.exit(); 99 | } 100 | }); 101 | } 102 | 103 | function party(options) { 104 | var boardsFlashed = 0; 105 | keypress(process.stdin); 106 | process.stdin.setRawMode(true); 107 | process.stdin.resume(); 108 | var flashing = false; 109 | 110 | console.log("Press any key to start the party! or q to go home!"); 111 | 112 | process.stdin.on('keypress', function (ch, key) { 113 | if (!key ) { return; } 114 | if ((key.ctrl && key.name == 'c') || key.name == 'q') { 115 | return process.exit(); 116 | } 117 | 118 | if (flashing) { return; } 119 | 120 | flashing = true; 121 | console.log('Starting the Party!'); 122 | flash(options, function(error) { 123 | if (error) { 124 | console.error("Oh no! Party foul!", error); 125 | } else{ 126 | console.error("Success! Party legend! Press any key to keep partying!"); 127 | } 128 | flashing = false; 129 | }); 130 | }); 131 | } 132 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "firmata-party", 3 | "version": "2.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@serialport/binding-abstract": { 8 | "version": "8.0.6", 9 | "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-8.0.6.tgz", 10 | "integrity": "sha512-1swwUVoRyQ9ubxrkJ8JPppykohUpTAP4jkGr36e9NjbVocSPfqeX6tFZFwl/IdUlwJwxGdbKDqq7FvXniCQUMw==", 11 | "requires": { 12 | "debug": "^4.1.1" 13 | } 14 | }, 15 | "@serialport/binding-mock": { 16 | "version": "8.0.6", 17 | "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-8.0.6.tgz", 18 | "integrity": "sha512-BIbY5/PsDDo0QWDNCCxDgpowAdks+aZR8BOsEtK2GoASTTcJCy1fBwPIfH870o7rnbH901wY3C+yuTfdOvSO9A==", 19 | "requires": { 20 | "@serialport/binding-abstract": "^8.0.6", 21 | "debug": "^4.1.1" 22 | } 23 | }, 24 | "@serialport/bindings": { 25 | "version": "8.0.8", 26 | "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-8.0.8.tgz", 27 | "integrity": "sha512-xMJHr7CyOPq+wwC/S2RNI+tY+WZW4gXY3tE8QUOIRp0K7lSyLYOzKdyGUtk2uI0ohDMV3OcB+TEhhffT2S2DHQ==", 28 | "requires": { 29 | "@serialport/binding-abstract": "^8.0.6", 30 | "@serialport/parser-readline": "^8.0.6", 31 | "bindings": "^1.5.0", 32 | "debug": "^4.1.1", 33 | "nan": "^2.14.0", 34 | "prebuild-install": "^5.3.0" 35 | } 36 | }, 37 | "@serialport/parser-byte-length": { 38 | "version": "8.0.6", 39 | "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-8.0.6.tgz", 40 | "integrity": "sha512-92mrFxFEvq3gRvSM7ANK/jfbmHslz91a5oYJy/nbSn4H/MCRXjxR2YOkQgVXuN+zLt+iyDoW3pcOP4Sc1nWdqQ==" 41 | }, 42 | "@serialport/parser-cctalk": { 43 | "version": "8.0.6", 44 | "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-8.0.6.tgz", 45 | "integrity": "sha512-pqtCYQPgxnxHygiXUPCfgX7sEx+fdR/ObjpscidynEULUq2fFrC5kBkrxRbTfHRtTaU2ii9DyjFq0JVRCbhI0Q==" 46 | }, 47 | "@serialport/parser-delimiter": { 48 | "version": "8.0.6", 49 | "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-8.0.6.tgz", 50 | "integrity": "sha512-ogKOcPisPMlVtirkuDu3SFTF0+xT0ijxoH7XjpZiYL41EVi367MwuCnEmXG+dEKKnF0j9EPqOyD2LGSJxaFmhQ==" 51 | }, 52 | "@serialport/parser-readline": { 53 | "version": "8.0.6", 54 | "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-8.0.6.tgz", 55 | "integrity": "sha512-OYBT2mpczh9QUI3MTw8j0A0tIlPVjpVipvuVnjRkYwxrxPeq04RaLFhaDpuRzua5rTKMt89c1y3btYeoDXMjAA==", 56 | "requires": { 57 | "@serialport/parser-delimiter": "^8.0.6" 58 | } 59 | }, 60 | "@serialport/parser-ready": { 61 | "version": "8.0.6", 62 | "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-8.0.6.tgz", 63 | "integrity": "sha512-xcEqv4rc119WR5JzAuu8UeJOlAwET2PTdNb6aIrrLlmTxhvuBbuRFcsnF3BpH9jUL30Kh7a6QiNXIwVG+WR/1Q==" 64 | }, 65 | "@serialport/parser-regex": { 66 | "version": "8.0.6", 67 | "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-8.0.6.tgz", 68 | "integrity": "sha512-J8KY75Azz5ZyExmyM5YfUxbXOWBkZCytKgCCmZ966ttwZS0bUZOuoCaZj2Zp4VILJAiLuxHoqc0foi67Fri5+g==" 69 | }, 70 | "@serialport/stream": { 71 | "version": "8.0.6", 72 | "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-8.0.6.tgz", 73 | "integrity": "sha512-ym1PwM0rwLrj90vRBB66I1hwMXbuMw9wGTxqns75U3N/tuNFOH85mxXaYVF2TpI66aM849NoI1jMm50fl9equg==", 74 | "requires": { 75 | "debug": "^4.1.1" 76 | } 77 | }, 78 | "ansi-regex": { 79 | "version": "2.1.1", 80 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 81 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 82 | }, 83 | "aproba": { 84 | "version": "1.2.0", 85 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 86 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 87 | }, 88 | "are-we-there-yet": { 89 | "version": "1.1.5", 90 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 91 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 92 | "requires": { 93 | "delegates": "^1.0.0", 94 | "readable-stream": "^2.0.6" 95 | } 96 | }, 97 | "async": { 98 | "version": "2.6.3", 99 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", 100 | "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", 101 | "requires": { 102 | "lodash": "^4.17.14" 103 | } 104 | }, 105 | "avrgirl-arduino": { 106 | "version": "4.2.3", 107 | "resolved": "https://registry.npmjs.org/avrgirl-arduino/-/avrgirl-arduino-4.2.3.tgz", 108 | "integrity": "sha512-VieaZC2rVOfEKKu/CvRgjweValsdgH7TzgpfUROj80k8blURZ04CdfWpSSbD2SfYaa7Y8Lfocy9Bljr/SD8R8g==", 109 | "requires": { 110 | "async": "^2.1.2", 111 | "awty": "^0.1.0", 112 | "browser-serialport": "git+https://github.com/noopkat/browser-serialport.git#c8628c41c11890d3058875994c15f83f2df8185b", 113 | "chip.avr.avr109": "^1.1.0", 114 | "colors": "^1.1.2", 115 | "graceful-fs": "^4.1.2", 116 | "intel-hex": "^0.1.2", 117 | "jscs-loader": "^0.3.0", 118 | "minimist": "^1.2.0", 119 | "serialport": "^8.0.5", 120 | "stk500": "^2.0.2", 121 | "stk500-v2": "^1.0.4" 122 | } 123 | }, 124 | "awty": { 125 | "version": "0.1.0", 126 | "resolved": "https://registry.npmjs.org/awty/-/awty-0.1.0.tgz", 127 | "integrity": "sha1-i3BcHuMTn41unylAnZC3T5PoQLo=", 128 | "requires": { 129 | "isval": "0.0.2" 130 | } 131 | }, 132 | "base64-js": { 133 | "version": "1.3.1", 134 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 135 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" 136 | }, 137 | "big.js": { 138 | "version": "3.2.0", 139 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", 140 | "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" 141 | }, 142 | "bindings": { 143 | "version": "1.5.0", 144 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 145 | "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 146 | "requires": { 147 | "file-uri-to-path": "1.0.0" 148 | } 149 | }, 150 | "bl": { 151 | "version": "4.0.2", 152 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", 153 | "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", 154 | "requires": { 155 | "buffer": "^5.5.0", 156 | "inherits": "^2.0.4", 157 | "readable-stream": "^3.4.0" 158 | }, 159 | "dependencies": { 160 | "readable-stream": { 161 | "version": "3.6.0", 162 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 163 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 164 | "requires": { 165 | "inherits": "^2.0.3", 166 | "string_decoder": "^1.1.1", 167 | "util-deprecate": "^1.0.1" 168 | } 169 | } 170 | } 171 | }, 172 | "browser-serialport": { 173 | "version": "git+https://github.com/noopkat/browser-serialport.git#c8628c41c11890d3058875994c15f83f2df8185b", 174 | "from": "git+https://github.com/noopkat/browser-serialport.git#c8628c41c11890d3058875994c15f83f2df8185b" 175 | }, 176 | "buffer": { 177 | "version": "5.6.0", 178 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", 179 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", 180 | "requires": { 181 | "base64-js": "^1.0.2", 182 | "ieee754": "^1.1.4" 183 | } 184 | }, 185 | "chip.avr.avr109": { 186 | "version": "1.1.1", 187 | "resolved": "https://registry.npmjs.org/chip.avr.avr109/-/chip.avr.avr109-1.1.1.tgz", 188 | "integrity": "sha512-+0+cvkHDsy/gizui/zFirTtDpvTQumJSs2SE9lT2BAzyE+CslXWQN9blfjMjhChcyNdZT8mFUQjETVne1gxBBQ==", 189 | "requires": { 190 | "intel-hex": "*" 191 | } 192 | }, 193 | "chownr": { 194 | "version": "1.1.4", 195 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 196 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 197 | }, 198 | "code-point-at": { 199 | "version": "1.1.0", 200 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 201 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 202 | }, 203 | "colors": { 204 | "version": "1.4.0", 205 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 206 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" 207 | }, 208 | "console-control-strings": { 209 | "version": "1.1.0", 210 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 211 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 212 | }, 213 | "core-util-is": { 214 | "version": "1.0.2", 215 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 216 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 217 | }, 218 | "debug": { 219 | "version": "4.1.1", 220 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 221 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 222 | "requires": { 223 | "ms": "^2.1.1" 224 | } 225 | }, 226 | "decompress-response": { 227 | "version": "4.2.1", 228 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 229 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 230 | "requires": { 231 | "mimic-response": "^2.0.0" 232 | } 233 | }, 234 | "deep-extend": { 235 | "version": "0.6.0", 236 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 237 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 238 | }, 239 | "delegates": { 240 | "version": "1.0.0", 241 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 242 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 243 | }, 244 | "detect-libc": { 245 | "version": "1.0.3", 246 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 247 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 248 | }, 249 | "emojis-list": { 250 | "version": "2.1.0", 251 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", 252 | "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" 253 | }, 254 | "end-of-stream": { 255 | "version": "1.4.4", 256 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 257 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 258 | "requires": { 259 | "once": "^1.4.0" 260 | } 261 | }, 262 | "expand-template": { 263 | "version": "2.0.3", 264 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 265 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" 266 | }, 267 | "file-uri-to-path": { 268 | "version": "1.0.0", 269 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 270 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 271 | }, 272 | "fs-constants": { 273 | "version": "1.0.0", 274 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 275 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 276 | }, 277 | "gauge": { 278 | "version": "2.7.4", 279 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 280 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 281 | "requires": { 282 | "aproba": "^1.0.3", 283 | "console-control-strings": "^1.0.0", 284 | "has-unicode": "^2.0.0", 285 | "object-assign": "^4.1.0", 286 | "signal-exit": "^3.0.0", 287 | "string-width": "^1.0.1", 288 | "strip-ansi": "^3.0.1", 289 | "wide-align": "^1.1.0" 290 | } 291 | }, 292 | "github-from-package": { 293 | "version": "0.0.0", 294 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 295 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" 296 | }, 297 | "graceful-fs": { 298 | "version": "4.2.4", 299 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 300 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 301 | }, 302 | "has-unicode": { 303 | "version": "2.0.1", 304 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 305 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 306 | }, 307 | "ieee754": { 308 | "version": "1.1.13", 309 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 310 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 311 | }, 312 | "inherits": { 313 | "version": "2.0.4", 314 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 315 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 316 | }, 317 | "ini": { 318 | "version": "1.3.5", 319 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 320 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 321 | }, 322 | "intel-hex": { 323 | "version": "0.1.2", 324 | "resolved": "https://registry.npmjs.org/intel-hex/-/intel-hex-0.1.2.tgz", 325 | "integrity": "sha512-BHdANJX9xz74E1IeaRklWDnUEgVuWKD6HQ6ESklElF+4O9/8UtLzuEYoFOiSWcYZV7I40Xwv6c/BKhJqu0w6lQ==" 326 | }, 327 | "is-fullwidth-code-point": { 328 | "version": "1.0.0", 329 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 330 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 331 | "requires": { 332 | "number-is-nan": "^1.0.0" 333 | } 334 | }, 335 | "isarray": { 336 | "version": "1.0.0", 337 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 338 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 339 | }, 340 | "isval": { 341 | "version": "0.0.2", 342 | "resolved": "https://registry.npmjs.org/isval/-/isval-0.0.2.tgz", 343 | "integrity": "sha1-HOsBcciRE+P1CYpPczbKrzO+8D8=" 344 | }, 345 | "jscs-loader": { 346 | "version": "0.3.0", 347 | "resolved": "https://registry.npmjs.org/jscs-loader/-/jscs-loader-0.3.0.tgz", 348 | "integrity": "sha1-NkOw38sHfrY9N/7TW/Am86zv1IE=", 349 | "requires": { 350 | "loader-utils": "^0.2.5", 351 | "rcfinder": "^0.1.8", 352 | "strip-json-comments": "^2.0.0" 353 | } 354 | }, 355 | "json5": { 356 | "version": "0.5.1", 357 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 358 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" 359 | }, 360 | "keypress": { 361 | "version": "0.2.1", 362 | "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.2.1.tgz", 363 | "integrity": "sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc=" 364 | }, 365 | "loader-utils": { 366 | "version": "0.2.17", 367 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", 368 | "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", 369 | "requires": { 370 | "big.js": "^3.1.3", 371 | "emojis-list": "^2.0.0", 372 | "json5": "^0.5.0", 373 | "object-assign": "^4.0.1" 374 | } 375 | }, 376 | "lodash": { 377 | "version": "4.17.15", 378 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 379 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" 380 | }, 381 | "lodash.clonedeep": { 382 | "version": "4.5.0", 383 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", 384 | "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" 385 | }, 386 | "mimic-response": { 387 | "version": "2.1.0", 388 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 389 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 390 | }, 391 | "minimist": { 392 | "version": "1.2.0", 393 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 394 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 395 | }, 396 | "mkdirp": { 397 | "version": "0.5.5", 398 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 399 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 400 | "requires": { 401 | "minimist": "^1.2.5" 402 | }, 403 | "dependencies": { 404 | "minimist": { 405 | "version": "1.2.5", 406 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 407 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 408 | } 409 | } 410 | }, 411 | "mkdirp-classic": { 412 | "version": "0.5.3", 413 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 414 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" 415 | }, 416 | "ms": { 417 | "version": "2.1.2", 418 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 419 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 420 | }, 421 | "nan": { 422 | "version": "2.14.1", 423 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", 424 | "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" 425 | }, 426 | "napi-build-utils": { 427 | "version": "1.0.2", 428 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 429 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" 430 | }, 431 | "node-abi": { 432 | "version": "2.16.0", 433 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz", 434 | "integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==", 435 | "requires": { 436 | "semver": "^5.4.1" 437 | } 438 | }, 439 | "noop-logger": { 440 | "version": "0.1.1", 441 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", 442 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" 443 | }, 444 | "npmlog": { 445 | "version": "4.1.2", 446 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 447 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 448 | "requires": { 449 | "are-we-there-yet": "~1.1.2", 450 | "console-control-strings": "~1.1.0", 451 | "gauge": "~2.7.3", 452 | "set-blocking": "~2.0.0" 453 | } 454 | }, 455 | "number-is-nan": { 456 | "version": "1.0.1", 457 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 458 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 459 | }, 460 | "object-assign": { 461 | "version": "4.1.1", 462 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 463 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 464 | }, 465 | "once": { 466 | "version": "1.4.0", 467 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 468 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 469 | "requires": { 470 | "wrappy": "1" 471 | } 472 | }, 473 | "prebuild-install": { 474 | "version": "5.3.3", 475 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz", 476 | "integrity": "sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g==", 477 | "requires": { 478 | "detect-libc": "^1.0.3", 479 | "expand-template": "^2.0.3", 480 | "github-from-package": "0.0.0", 481 | "minimist": "^1.2.0", 482 | "mkdirp": "^0.5.1", 483 | "napi-build-utils": "^1.0.1", 484 | "node-abi": "^2.7.0", 485 | "noop-logger": "^0.1.1", 486 | "npmlog": "^4.0.1", 487 | "pump": "^3.0.0", 488 | "rc": "^1.2.7", 489 | "simple-get": "^3.0.3", 490 | "tar-fs": "^2.0.0", 491 | "tunnel-agent": "^0.6.0", 492 | "which-pm-runs": "^1.0.0" 493 | } 494 | }, 495 | "process-nextick-args": { 496 | "version": "2.0.1", 497 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 498 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 499 | }, 500 | "pump": { 501 | "version": "3.0.0", 502 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 503 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 504 | "requires": { 505 | "end-of-stream": "^1.1.0", 506 | "once": "^1.3.1" 507 | } 508 | }, 509 | "rc": { 510 | "version": "1.2.8", 511 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 512 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 513 | "requires": { 514 | "deep-extend": "^0.6.0", 515 | "ini": "~1.3.0", 516 | "minimist": "^1.2.0", 517 | "strip-json-comments": "~2.0.1" 518 | } 519 | }, 520 | "rcfinder": { 521 | "version": "0.1.9", 522 | "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", 523 | "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", 524 | "requires": { 525 | "lodash.clonedeep": "^4.3.2" 526 | } 527 | }, 528 | "readable-stream": { 529 | "version": "2.3.7", 530 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 531 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 532 | "requires": { 533 | "core-util-is": "~1.0.0", 534 | "inherits": "~2.0.3", 535 | "isarray": "~1.0.0", 536 | "process-nextick-args": "~2.0.0", 537 | "safe-buffer": "~5.1.1", 538 | "string_decoder": "~1.1.1", 539 | "util-deprecate": "~1.0.1" 540 | } 541 | }, 542 | "safe-buffer": { 543 | "version": "5.1.2", 544 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 545 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 546 | }, 547 | "semver": { 548 | "version": "5.7.1", 549 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 550 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 551 | }, 552 | "serialport": { 553 | "version": "8.0.8", 554 | "resolved": "https://registry.npmjs.org/serialport/-/serialport-8.0.8.tgz", 555 | "integrity": "sha512-GEaMYbAk9chfGyxoVC27PHnKMUMOQOCAg+9umOhAgk88vH0H6DbQ9/Tj3lRwoj7lE+TLra75P/0l1RXMfX4yQg==", 556 | "requires": { 557 | "@serialport/binding-mock": "^8.0.6", 558 | "@serialport/bindings": "^8.0.8", 559 | "@serialport/parser-byte-length": "^8.0.6", 560 | "@serialport/parser-cctalk": "^8.0.6", 561 | "@serialport/parser-delimiter": "^8.0.6", 562 | "@serialport/parser-readline": "^8.0.6", 563 | "@serialport/parser-ready": "^8.0.6", 564 | "@serialport/parser-regex": "^8.0.6", 565 | "@serialport/stream": "^8.0.6", 566 | "debug": "^4.1.1" 567 | } 568 | }, 569 | "set-blocking": { 570 | "version": "2.0.0", 571 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 572 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 573 | }, 574 | "signal-exit": { 575 | "version": "3.0.3", 576 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 577 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 578 | }, 579 | "simple-concat": { 580 | "version": "1.0.0", 581 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 582 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 583 | }, 584 | "simple-get": { 585 | "version": "3.1.0", 586 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 587 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 588 | "requires": { 589 | "decompress-response": "^4.2.0", 590 | "once": "^1.3.1", 591 | "simple-concat": "^1.0.0" 592 | } 593 | }, 594 | "stk500": { 595 | "version": "2.0.2", 596 | "resolved": "https://registry.npmjs.org/stk500/-/stk500-2.0.2.tgz", 597 | "integrity": "sha512-7tkhBdcyQimPyXGtsAqxy56a/3FsryxXcX6p+/M6n8A0mEJF9fgNiNbUprX6A8pe21qGdhzIM+okTORIFKoS9A==", 598 | "requires": { 599 | "async": "^0.9.0" 600 | }, 601 | "dependencies": { 602 | "async": { 603 | "version": "0.9.2", 604 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 605 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" 606 | } 607 | } 608 | }, 609 | "stk500-v2": { 610 | "version": "1.0.4", 611 | "resolved": "https://registry.npmjs.org/stk500-v2/-/stk500-v2-1.0.4.tgz", 612 | "integrity": "sha512-5j7aYxA4S1YbwxQrEoefqtHoPCFCbv267aYdE7WDw4YAO9H4SpL4gg8YfuKoi+jGq+0wBP52D72FJNDTeVxB7Q==", 613 | "requires": { 614 | "async": "^0.9.0" 615 | }, 616 | "dependencies": { 617 | "async": { 618 | "version": "0.9.2", 619 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 620 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" 621 | } 622 | } 623 | }, 624 | "string-width": { 625 | "version": "1.0.2", 626 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 627 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 628 | "requires": { 629 | "code-point-at": "^1.0.0", 630 | "is-fullwidth-code-point": "^1.0.0", 631 | "strip-ansi": "^3.0.0" 632 | } 633 | }, 634 | "string_decoder": { 635 | "version": "1.1.1", 636 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 637 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 638 | "requires": { 639 | "safe-buffer": "~5.1.0" 640 | } 641 | }, 642 | "strip-ansi": { 643 | "version": "3.0.1", 644 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 645 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 646 | "requires": { 647 | "ansi-regex": "^2.0.0" 648 | } 649 | }, 650 | "strip-json-comments": { 651 | "version": "2.0.1", 652 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 653 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 654 | }, 655 | "tar-fs": { 656 | "version": "2.1.0", 657 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", 658 | "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", 659 | "requires": { 660 | "chownr": "^1.1.1", 661 | "mkdirp-classic": "^0.5.2", 662 | "pump": "^3.0.0", 663 | "tar-stream": "^2.0.0" 664 | } 665 | }, 666 | "tar-stream": { 667 | "version": "2.1.2", 668 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", 669 | "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", 670 | "requires": { 671 | "bl": "^4.0.1", 672 | "end-of-stream": "^1.4.1", 673 | "fs-constants": "^1.0.0", 674 | "inherits": "^2.0.3", 675 | "readable-stream": "^3.1.1" 676 | }, 677 | "dependencies": { 678 | "readable-stream": { 679 | "version": "3.6.0", 680 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 681 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 682 | "requires": { 683 | "inherits": "^2.0.3", 684 | "string_decoder": "^1.1.1", 685 | "util-deprecate": "^1.0.1" 686 | } 687 | } 688 | } 689 | }, 690 | "tunnel-agent": { 691 | "version": "0.6.0", 692 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 693 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 694 | "requires": { 695 | "safe-buffer": "^5.0.1" 696 | } 697 | }, 698 | "util-deprecate": { 699 | "version": "1.0.2", 700 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 701 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 702 | }, 703 | "which-pm-runs": { 704 | "version": "1.0.0", 705 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", 706 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" 707 | }, 708 | "wide-align": { 709 | "version": "1.1.3", 710 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 711 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 712 | "requires": { 713 | "string-width": "^1.0.2 || 2" 714 | } 715 | }, 716 | "wrappy": { 717 | "version": "1.0.2", 718 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 719 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 720 | } 721 | } 722 | } 723 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "firmata-party", 3 | "version": "2.0.1", 4 | "description": "set up your arduino with firmata and party on, robot friends.", 5 | "main": "firmata-party.js", 6 | "bin": { 7 | "firmata-party": "./bin/firmata-party.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/noopkat/firmata-party.git" 12 | }, 13 | "scripts": { 14 | "test": "echo \"Error: no test specified\" && exit 1" 15 | }, 16 | "keywords": [ 17 | "arduino", 18 | "firmata" 19 | ], 20 | "author": "Suz Hinton", 21 | "license": "MIT", 22 | "dependencies": { 23 | "avrgirl-arduino": "^4.2.3", 24 | "keypress": "^0.2.1", 25 | "minimist": "^1.2.0" 26 | } 27 | } 28 | --------------------------------------------------------------------------------