From a67870ee5b7cd8b5ec93871997a3c9c51179341d Mon Sep 17 00:00:00 2001 From: MasonBone <78284872+MasonBone@users.noreply.github.com> Date: Tue, 30 Nov 2021 12:04:26 -0600 Subject: [PATCH 1/4] Masonbone (#13) * added initial webpage * Added webpage * Update package.json * Update package.json * Updating stuff * Update src/commands.ts Co-authored-by: Jake Grossman * updated extension.ts * Added Key binding pages * Read html from file Co-authored-by: Jake Grossman --- media/html/mackeys.html | 33 +++++++++++++++++++++++++++++ media/html/main.html | 43 +++++++++++++++++++++++++++++++++++++ media/html/winkeys.html | 33 +++++++++++++++++++++++++++++ package.json | 39 +++++++++++++++++++++++++++++++++- src/commands.ts | 47 +++++++++++++++++++++++++++++++++++++++++ src/extension.ts | 2 +- 6 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 media/html/mackeys.html create mode 100644 media/html/main.html create mode 100644 media/html/winkeys.html diff --git a/media/html/mackeys.html b/media/html/mackeys.html new file mode 100644 index 0000000..5f4cd71 --- /dev/null +++ b/media/html/mackeys.html @@ -0,0 +1,33 @@ + + + + + + Mind Reader Key Bindings for Mac + + +

Here is a list of all the Mind Reader commands and their keybindings on Mac systems

+

+

Editor Settings

+ Increase Font Scale -
+ Decrease Font Scale -
+ Increase Editor Scale -
+ Decrease Editor Scale -
+ Reset Editor Scale -
+ Select Theme -
+

Navigation

+ Get Indent -
+ Show All Symbols -
+ Go To Line -
+ Quick Open -
+ Go To Symbol -
+ Show Problems -
+ Next In File -
+ Previous In File -
+ Open Previous Editor Group -
+ Navigate Forward -
+ Navigate Back -
+ Get Quick Input Back - +

+ + diff --git a/media/html/main.html b/media/html/main.html new file mode 100644 index 0000000..afd1508 --- /dev/null +++ b/media/html/main.html @@ -0,0 +1,43 @@ + + + + + + Mind Reader + + + +

+

Welcome to Mind_Reader!

+

We are the Single Semester Snobs and this is our tool to Help Blind Students Program Lego Mindstorms Robots in Python.

+ +

Use the following key binding to bring up a page for all key bindings for windows +
+ Control and Shift and 8 +

+

Use this key binding to do the same for mac computers: +
+ Command and Shift and 9 +

+

This is the Lego Spike Prime! +

+ +

+ Get the robot! + + diff --git a/media/html/winkeys.html b/media/html/winkeys.html new file mode 100644 index 0000000..fd89cfa --- /dev/null +++ b/media/html/winkeys.html @@ -0,0 +1,33 @@ + + + + + + Mind Reader Key Bindings for Windows + + +

Here is a list of all Mind Reader's commands and their keybindings on windows and linux systems

+

+

Editor Settings

+ Increase Font Scale - Number Pad Add
+ Decrease Font Scale - Number Pad Subtract
+ Increase Editor Scale - Shift and Number Pad Add
+ Decrease Editor Scale - Shift and Number Pad Subtract
+ Reset Editor Scale - Shift and Enter
+ Select Theme - Control and Shift and 1
+

Navigation

+ Get Indent - Shift and Tab
+ Show All Symbols - Control and T
+ Go To Line - Control and G
+ Quick Open - Control and P
+ Go To Symbol - Control and Shift and 0
+ Show Problems - Control and Shift and M
+ Next In File - F8
+ Previous In File - Shift and F8
+ Open Previous Editor Group - Control and Tab
+ Navigate Forward - Control and Shift and Minus
+ Navigate Back - Control and Alt and Minus
+ Get Quick Input Back - Control and Alt and Minus +

+ + diff --git a/package.json b/package.json index 8fd1068..d8436df 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,18 @@ "command": "mind-reader.selectTheme", "title": "Select Theme" }, - + { + "command": "mind-reader.openWebview", + "title": "Mind Reader Webview" + }, + { + "command": "mind-reader.openKeyBindWin", + "title": "Key Bindings for Windows" + }, + { + "command": "mind-reader.openKeyBindMac", + "title": "Key Bindings for Mac" + }, { "command": "mind-reader.runLineContext", "title": "Run Line Context" @@ -169,6 +180,16 @@ "command": "mind-reader.getIndent", "key": "Shift+Tab", "mac": "" + }, + { + "command": "mind-reader.openKeyBindWin", + "key": "Ctrl+Shift+8", + "mac": "Cmd+Shift+8" + }, + { + "command": "mind-reader.openKeyBindMac", + "key": "Ctrl+Shift+9", + "mac": "Cmd+Shift+9" } ], "menus": { @@ -213,7 +234,23 @@ "command": "mind-reader.selectTheme", "group": "mind-reader", "when": "activeEditor" + }, + { + "command": "mind-reader.openWebview", + "group": "mind-reader", + "when": "activeEditor" + }, + { + "command": "mind-reader.openKeyBindWin", + "group": "mind-reader", + "when": "activeEditor" + }, + { + "command": "mind-reader.openKeyBindMac", + "group": "mind-reader", + "when": "activeEditor" } + ] }, "submenus": [ diff --git a/src/commands.ts b/src/commands.ts index 596c082..64aa0c9 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,5 +1,6 @@ import * as vscode from 'vscode'; import * as pl from './pylex'; +import * as fs from 'fs'; /** * @type {Object} Command // Command to register with the VS Code Extension API @@ -50,6 +51,20 @@ const commands: Command[] = [ callback: resetEditorScale, }, + { + name: 'mind-reader.openWebview', + callback: openWebview, + }, + + { + name: 'mind-reader.openKeyBindWin', + callback: () => openKeyBindWin('Windows') + }, + { + name: 'mind-reader.openKeyBindMac', + callback: () => openKeyBindWin('Mac'), + }, + //Navigation Keys...... { name: 'mind-reader.showAllSymbols', @@ -150,6 +165,38 @@ function resetEditorScale(): void { vscode.commands.executeCommand('workbench.action.zoomReset'); } +function openWebview(): void { + //vscode.commands.executeCommand('workbench.action.zoomOut'); + const panel = vscode.window.createWebviewPanel( + 'mindReader', // Identifies the type of the webview. Used internally + 'Mind Reader', // Title of the panel displayed to the user + vscode.ViewColumn.One, // Editor column to show the new webview panel in. + {} + ); // Webview options. More on these later. + + panel.webview.html = getWebviewContent('media/html/main.html'); +} + +function getWebviewContent(filepath: string) { + return fs.readFileSync(filepath, {encoding: 'utf-8'}); +} + +function openKeyBindWin(os: 'Mac' | 'Windows'): void { + //vscode.commands.executeCommand('workbench.action.zoomOut'); + const panel = vscode.window.createWebviewPanel( + 'mindReader', // Identifies the type of the webview. Used internally + 'MR Key Bindings', // Title of the panel displayed to the user + vscode.ViewColumn.One, // Editor column to show the new webview panel in. + {} + ); // Webview options. More on these later. + + if (os === 'Windows') { + panel.webview.html = getWebviewContent('media/html/winkeys.html'); + } else if (os === 'Mac') { + panel.webview.html = getWebviewContent('media/html/mackeys.html'); + } +} + function getIndent(): void { let editor = vscode.window.activeTextEditor; if(editor) diff --git a/src/extension.ts b/src/extension.ts index ffeab0f..1fece80 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,7 +3,7 @@ import * as vscode from 'vscode'; import * as pl from './pylex'; import commands from './commands'; -import AccessNodeProvider from './accessNodeProvider' +import AccessNodeProvider from './accessNodeProvider'; let parser: pl.Parser = new pl.Parser(); From bdc6c4d0509a5d7ab6195a099181412f373a1ab7 Mon Sep 17 00:00:00 2001 From: JosiahMoses <32985363+JosiahMoses@users.noreply.github.com> Date: Tue, 30 Nov 2021 12:18:58 -0600 Subject: [PATCH 2/4] Update package.json Added Navigation Keys for Mac --- package.json | 49 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index d8436df..ee4ef32 100644 --- a/package.json +++ b/package.json @@ -74,122 +74,113 @@ } ], - "keybindings": [ + "keybindings": [ { "command": "mind-reader.decreaseFontScale", "key": "numpad_subtract", - "mac": "" + "mac": "d" }, { "command": "mind-reader.increaseFontScale", "key": "numpad_add", - "mac": "" + "mac": "[NumpadAdd]" }, { "command": "mind-reader.increaseEditorScale", - "key": "shift+numpad_add" + "key": "shift+numpad_add", + "mac": "Shift+[NumpadAdd]" }, { "command": "mind-reader.decreaseEditorScale", "key": "shift+numpad_subtract", - "mac": "" + "mac": "Shift+[NumpadSubtract]" }, { "command": "mind-reader.resetEditorScale", "key": "shift+enter", - "mac": "" + "mac": "Shift+[Enter]" }, { "command": "mind-reader.showAllSymbols", "key": "Ctrl+T", - "mac": "" + "mac": "Ctrl+[KeyT]" }, { "command": "mind-reader.gotoLine", "key": "CTRL+G", - "mac": "" + "mac": "Ctrl+[KeyG]" }, { "command": "mind-reader.quickOpen", "key": "CTRL+P", - "mac": "" + "mac": "Ctrl+[KeyP]" }, { "command": "mind-reader.gotoSymbol", "key": "Ctrl+Shift+O", - "mac": "" + "mac": "Ctrl+Shift+[KeyO]" }, { "command": "mind-reader.showProblems", "key": "Ctrl+Shift+M", - "mac": "" + "mac": "Ctrl+Shift+[KeyM]" }, { "command": "mind-reader.nextInFiles", "key": "F8", - "mac": "" + "mac": "[F8]" }, { "command": "mind-reader.prevInFiles", "key": "Shift+F8", - "mac": "" + "mac": "Shift+[F8]" }, { "command": "mind-reader.quickOpenPreviousRecentlyUsedEditorInGroup", "key": "Ctrl+Tab", - "mac": "" + "mac": "Ctrl+[Tab]" }, { "command": "mind-reader.navigateBack", "key": "Ctrl+Alt+-", - "mac": "" + "mac": "Ctrl+Alt+[Minus]" }, { "command": "mind-reader.getuickInputBack", "key": "Ctrl+Alt+-", - "mac": "" + "mac": "Ctrl+Alt+[Minus]" }, { "command": "mind-reader.navigateForward", "key": "Ctrl+Shift+-", - "mac": "" + "mac": "Ctrl+Shift+[Minus]" }, { "command": "mind-reader.selectTheme", "key": "Ctrl+Shift+1", - "mac": "" + "mac": "Ctrl+Shift+[Digit1]" }, { "command": "mind-reader.getIndent", "key": "Shift+Tab", - "mac": "" - }, - { - "command": "mind-reader.openKeyBindWin", - "key": "Ctrl+Shift+8", - "mac": "Cmd+Shift+8" - }, - { - "command": "mind-reader.openKeyBindMac", - "key": "Ctrl+Shift+9", - "mac": "Cmd+Shift+9" + "mac": "Shift+[Tab]" } ], "menus": { From 913be402b1b2c697a34be7ec0f41c405caf0e70f Mon Sep 17 00:00:00 2001 From: JosiahMoses <32985363+JosiahMoses@users.noreply.github.com> Date: Tue, 30 Nov 2021 12:27:11 -0600 Subject: [PATCH 3/4] Update package.json Had to fix a few typos --- package.json | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index ee4ef32..0c54c41 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ } ], - "keybindings": [ + "keybindings": [ { "command": "mind-reader.decreaseFontScale", "key": "numpad_subtract", @@ -108,31 +108,31 @@ { "command": "mind-reader.showAllSymbols", "key": "Ctrl+T", - "mac": "Ctrl+[KeyT]" + "mac": "Cmd+[KeyT]" }, { "command": "mind-reader.gotoLine", "key": "CTRL+G", - "mac": "Ctrl+[KeyG]" + "mac": "Cmd+[KeyG]" }, { "command": "mind-reader.quickOpen", "key": "CTRL+P", - "mac": "Ctrl+[KeyP]" + "mac": "Cmd+[KeyP]" }, { "command": "mind-reader.gotoSymbol", "key": "Ctrl+Shift+O", - "mac": "Ctrl+Shift+[KeyO]" + "mac": "Cmd+Shift+[KeyO]" }, { "command": "mind-reader.showProblems", "key": "Ctrl+Shift+M", - "mac": "Ctrl+Shift+[KeyM]" + "mac": "Cmd+Shift+[KeyM]" }, { @@ -150,38 +150,48 @@ { "command": "mind-reader.quickOpenPreviousRecentlyUsedEditorInGroup", "key": "Ctrl+Tab", - "mac": "Ctrl+[Tab]" + "mac": "Cmd+[Tab]" }, { "command": "mind-reader.navigateBack", "key": "Ctrl+Alt+-", - "mac": "Ctrl+Alt+[Minus]" + "mac": "Cmd+Alt+[Minus]" }, { "command": "mind-reader.getuickInputBack", "key": "Ctrl+Alt+-", - "mac": "Ctrl+Alt+[Minus]" + "mac": "Cmd+Alt+[Minus]" }, { "command": "mind-reader.navigateForward", "key": "Ctrl+Shift+-", - "mac": "Ctrl+Shift+[Minus]" + "mac": "Cmd+Shift+[Minus]" }, { "command": "mind-reader.selectTheme", "key": "Ctrl+Shift+1", - "mac": "Ctrl+Shift+[Digit1]" + "mac": "Cmd+Shift+[Digit1]" }, { "command": "mind-reader.getIndent", "key": "Shift+Tab", "mac": "Shift+[Tab]" - } + }, + { + "command": "mind-reader.openKeyBindWin", + "key": "Ctrl+Shift+8", + "mac": "Cmd+Shift+8" + }, + { + "command": "mind-reader.openKeyBindMac", + "key": "Ctrl+Shift+9", + "mac": "Cmd+Shift+9" + } ], "menus": { "editor/context": [ From b3984daad5089a59c6b4e47eb35af14ed84c0202 Mon Sep 17 00:00:00 2001 From: Jake Grossman Date: Wed, 1 Dec 2021 21:40:01 -0600 Subject: [PATCH 4/4] Hub communication (#12) * Add persistent accessibility pane This will facilitate more extensive usage of the menu than the context menu. * Fixed missing files * Add missing semicolon * Implement HubController * Parse messages on arrival Rather than queuing inbound messages, the HubController now saves pending promises/rejects for each pending request. Each inbound packet is checked at the time of arrival, and if the ID matches a pending response, the corresponding promise is called. This fixes a problem where the longer the time between reads, the more garbage responses queue up that are guaranteed to get thrown away the next time the next response was gathered. * Add clarification comment to send * Add logger, output * Use stat+stream instead of reading entire file on upload * Split MindReader view into accessability and hub sub-views * Add missing comma from conflict resolution * Fix issues, split commands into sub-lists * Add rebuild instructions * More accurate * Add tools for native modules instructions to README.md * Move commands to correct spot * Remove automatic connection I did not heed the warning where 'only the path is guaranteed' when listing open serial ports and made the assumption that the manufacturer would be known (hint: it wasn't). * Use device specific language for output title --- README.md | 72 ++- media/missing_actions.png | Bin 0 -> 93103 bytes media/nodejs_setup.png | Bin 0 -> 20445 bytes media/vscode_info.png | Bin 0 -> 101704 bytes package-lock.json | 1214 +++++++++++++++++++++++++++++++++--- package.json | 205 +++--- src/commandNodeProvider.ts | 43 ++ src/commands.ts | 206 +++++- src/extension.ts | 23 +- src/hubManager.ts | 391 ++++++++++++ src/log.ts | 23 + 11 files changed, 1982 insertions(+), 195 deletions(-) create mode 100644 media/missing_actions.png create mode 100644 media/nodejs_setup.png create mode 100644 media/vscode_info.png create mode 100644 src/commandNodeProvider.ts create mode 100644 src/hubManager.ts create mode 100644 src/log.ts diff --git a/README.md b/README.md index 874a6ff..ef81dc4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

-Mind Reader Logo +Mind Reader Logo

Mind_Reader

@@ -27,21 +27,77 @@ Python programming with LEGO Mindstorms. Our goal is to: - [JAWS](https://www.freedomscientific.com/products/software/jaws/) - [Apple VoiceOver](https://support.apple.com/guide/voiceover-guide/welcome/web/) - -- Play audio alerts for syntax and runtime errors. - - Present a summary of the scope for an individual line of code. - Save and load programs directly onto the LEGO Hub from within Visual Studio Code -# For Developers - ## Dependencies - - - [Git](https://git-scm.com/) - [Node.js](https://nodejs.org/en/) +**NOTE**: While installing Node.js, there will be a section titled "Tools for Native Modules". Make sure that +'Automatically install the necessary tools' is checked: + +

+tools for native modules page with tool installation checked +

+ +If the compiled serial port version is incompatible, you may see no options presented in the Mind_Reader actions panel: + +

+mind reader actions panel with no items: +

+ +In this case, you will also need to rebuild the serial port component with `electron-rebuild`. This is a one-time setup +for each version of Visual Studio Code. You may need to repeat this process if you update your version of Visual Studio +Code. + +## Installing `electron-rebuild` +**Use Git Bash on Windows, and the terminal on MacOS/Linux. These steps will refer to this as 'the terminal'** + +### 1 Install the `electron-rebuild` tool +In the terminal install electron rebuild with `npm` that is included with [Node.js](https://nodejs.org/en/): + +```console +$ npm install -g electron-rebuild +``` + +### 2 Finding your electron version +On MacOS, go to Code > About Visual Studio Code. + +On Windows and Linux, go to Help > About. + +The electron version should be listed, e.g.: `Electron: 13.5.2` + +

+vscode information +

+ +### 3 Finding the Mind_Reader extension directory +On MacOS and Linux this is `~/.vscode/extensions`. + +On Windows this is `C:\\.vscode\extensions\`. However, in Git Bash, it will appear like on MacOS and Linux +e.g.: `~/.vscode/extensions`. + +--- + +Find the Mind_Reader extension folder, this should look like `xxx.mind-reader-x.x.x`. + +Navigate to the found folder in the terminal. + +```console +$ cd ~/.vscode/extensions/ +``` + +### 4 Running `electron-rebuild` + +Then, run `electron-rebuild` with `ELECTRON_VERSION` replaced with the electron version found in step 2: + +```console +$ electron-rebuild --version=ELECTRON_VERSION +``` + +# For Developers ## Development Quick Start Use the following to set up the extension for development. diff --git a/media/missing_actions.png b/media/missing_actions.png new file mode 100644 index 0000000000000000000000000000000000000000..6fcd5ca7726edd43d0577e6b379348064bf2a2f4 GIT binary patch literal 93103 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 literal 0 HcmV?d00001 diff --git a/media/nodejs_setup.png b/media/nodejs_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..5cc9782e7b2e2f781cf29068f2464cdeefe0b1d3 GIT binary patch literal 20445 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

J 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 L9#wkUFBxL)RcJ5<^G{(kTrJs346rC<-Wz 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 P@b8tZ>dR_rvylG= 8" } }, + "node_modules/@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "dependencies": { + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/binding-mock": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", + "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "dependencies": { + "@serialport/binding-abstract": "9.2.3", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.5.tgz", + "integrity": "sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg==", + "hasInstallScript": true, + "dependencies": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^6.1.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", + "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", + "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", + "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "dependencies": { + "@serialport/parser-delimiter": "9.2.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", + "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", + "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==", + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", + "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "dependencies": { + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -202,11 +349,20 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", "dev": true }, + "node_modules/@types/serialport": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/serialport/-/serialport-8.0.2.tgz", + "integrity": "sha512-z4b1I8/vdZE3upgCcAL9VAWlVVFUVn5uo3faAHavkVfK/Hb1LUxKwp9YCtA5AZqEUCWoSWl20SRTOvAI/5fQWQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/vscode": { "version": "1.60.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", @@ -482,6 +638,20 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -515,6 +685,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/big-integer": { "version": "1.6.49", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", @@ -546,6 +735,37 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -580,6 +800,29 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -722,6 +965,11 @@ "fsevents": "~2.3.1" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -733,6 +981,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -754,11 +1010,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -778,7 +1038,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -803,12 +1062,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -857,6 +1151,14 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -1116,6 +1418,14 @@ "node": ">=0.10.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1171,6 +1481,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1227,6 +1542,11 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1280,6 +1600,64 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1289,6 +1667,11 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1380,6 +1763,11 @@ "node": ">=4" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -1416,6 +1804,25 @@ "node": ">= 6" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -1463,8 +1870,12 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -1529,8 +1940,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/isexe": { "version": "2.0.0", @@ -1667,6 +2077,17 @@ "node": ">=8.6" } }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1682,8 +2103,7 @@ "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/mkdirp": { "version": "0.5.5", @@ -1697,6 +2117,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", @@ -1835,8 +2260,12 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "node_modules/nanoid": { "version": "3.1.20", @@ -1850,12 +2279,33 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1865,11 +2315,37 @@ "node": ">=0.10.0" } }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -1981,6 +2457,32 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -1993,8 +2495,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", @@ -2005,6 +2506,15 @@ "node": ">=0.4.0" } }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -2043,11 +2553,32 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2061,8 +2592,7 @@ "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/readdirp": { "version": "3.5.0", @@ -2167,7 +2697,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -2207,6 +2736,35 @@ "randombytes": "^2.1.0" } }, + "node_modules/serialport": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.5.tgz", + "integrity": "sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg==", + "dependencies": { + "@serialport/binding-mock": "9.2.4", + "@serialport/bindings": "9.2.5", + "@serialport/parser-byte-length": "9.2.4", + "@serialport/parser-cctalk": "9.2.4", + "@serialport/parser-delimiter": "9.2.4", + "@serialport/parser-inter-byte-timeout": "9.2.4", + "@serialport/parser-readline": "9.2.4", + "@serialport/parser-ready": "9.2.4", + "@serialport/parser-regex": "9.2.4", + "@serialport/stream": "9.2.4", + "debug": "^4.3.2" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -2234,6 +2792,40 @@ "node": ">=8" } }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2303,7 +2895,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -2311,8 +2902,7 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/string-width": { "version": "4.2.3", @@ -2403,6 +2993,45 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2451,6 +3080,17 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2518,8 +3158,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/v8-compile-cache": { "version": "2.3.0", @@ -2561,7 +3200,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "dependencies": { "string-width": "^1.0.2 || 2" } @@ -2570,7 +3208,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, "engines": { "node": ">=4" } @@ -2579,7 +3216,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, "engines": { "node": ">=4" } @@ -2588,7 +3224,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -2601,7 +3236,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, @@ -2677,8 +3311,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/y18n": { "version": "5.0.8", @@ -2864,6 +3497,82 @@ "fastq": "^1.6.0" } }, + "@serialport/binding-abstract": { + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/@serialport/binding-abstract/-/binding-abstract-9.2.3.tgz", + "integrity": "sha512-cQs9tbIlG3P0IrOWyVirqlhWuJ7Ms2Zh9m2108z6Y5UW/iVj6wEOiW8EmK9QX9jmJXYllE7wgGgvVozP5oCj3w==", + "requires": { + "debug": "^4.3.2" + } + }, + "@serialport/binding-mock": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-9.2.4.tgz", + "integrity": "sha512-dpEhACCs44oQhh6ajJfJdvQdK38Vq0N4W6iD/gdplglDCK7qXRQCMUjJIeKdS/HSEiWkC3bwumUhUufdsOyT4g==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "debug": "^4.3.2" + } + }, + "@serialport/bindings": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/@serialport/bindings/-/bindings-9.2.5.tgz", + "integrity": "sha512-fyabNg56gWbOMuYJc5c45z94sANC/WzTnGeML7Nr1IYVk0SJ1uksN4ETI8Nea9ZAtr4DhNiIMQ3/IOkyof6Tqg==", + "requires": { + "@serialport/binding-abstract": "9.2.3", + "@serialport/parser-readline": "9.2.4", + "bindings": "^1.5.0", + "debug": "^4.3.2", + "nan": "^2.15.0", + "prebuild-install": "^6.1.4" + } + }, + "@serialport/parser-byte-length": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-9.2.4.tgz", + "integrity": "sha512-sQD/iw4ZMU3xW9PLi0/GlvU6Y623jGeWecbMkO7izUo/6P7gtfv1c9ikd5h0kwL8AoAOpQA1lxdHIKox+umBUg==" + }, + "@serialport/parser-cctalk": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-9.2.4.tgz", + "integrity": "sha512-T4TU5vQMwmo9AB3gQLFDWbfJXlW5jd9guEsB/nqKjFHTv0FXPdZ7DQ2TpSp8RnHWxU3GX6kYTaDO20BKzc8GPQ==" + }, + "@serialport/parser-delimiter": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-9.2.4.tgz", + "integrity": "sha512-4nvTAoYAgkxFiXrkI+3CA49Yd43CODjeszh89EK+I9c8wOZ+etZduRCzINYPiy26g7zO+GRAb9FoPCsY+sYcbQ==" + }, + "@serialport/parser-inter-byte-timeout": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-9.2.4.tgz", + "integrity": "sha512-SOAdvr0oBQIOCXX198hiTlxs4JTKg9j5piapw5tNq52fwDOWdbYrFneT/wN04UTMKaDrJuEvXq6T4rv4j7nJ5A==" + }, + "@serialport/parser-readline": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-9.2.4.tgz", + "integrity": "sha512-Z1/qrZTQUVhNSJP1hd9YfDvq0o7d87rNwAjjRKbVpa7Qi51tG5BnKt43IV3NFMyBlVcRe0rnIb3tJu57E0SOwg==", + "requires": { + "@serialport/parser-delimiter": "9.2.4" + } + }, + "@serialport/parser-ready": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-9.2.4.tgz", + "integrity": "sha512-Pyi94Itjl6qAURwIZr/gmZpMAyTmKXThm6vL5DoAWGQjcRHWB0gwv2TY2v7N+mQLJYUKU3cMnvnATXxHm7xjxw==" + }, + "@serialport/parser-regex": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-9.2.4.tgz", + "integrity": "sha512-sI/cVvPOYz+Dbv4ZdnW16qAwvXiFf/1pGASQdbveRTlgJDdz7sRNlCBifzfTN2xljwvCTZYqiudKvDdC1TepRQ==" + }, + "@serialport/stream": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-9.2.4.tgz", + "integrity": "sha512-bLye8Ub4vUFQGmkh8qEqehr7SE7EJs2yDs0h9jzuL5oKi+F34CFmWkEErO8GAOQ8YNn7p6b3GxUgs+0BrHHDZQ==", + "requires": { + "debug": "^4.3.2" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -2899,11 +3608,20 @@ "dev": true }, "@types/node": { - "version": "14.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.19.tgz", - "integrity": "sha512-jjYI6NkyfXykucU6ELEoT64QyKOdvaA6enOqKtP4xUsGY0X0ZUZz29fUmrTRo+7v7c6TgDu82q3GHHaCEkqZwA==", + "version": "16.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", + "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", "dev": true }, + "@types/serialport": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@types/serialport/-/serialport-8.0.2.tgz", + "integrity": "sha512-z4b1I8/vdZE3upgCcAL9VAWlVVFUVn5uo3faAHavkVfK/Hb1LUxKwp9YCtA5AZqEUCWoSWl20SRTOvAI/5fQWQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/vscode": { "version": "1.60.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", @@ -3075,6 +3793,20 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3102,6 +3834,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "big-integer": { "version": "1.6.49", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", @@ -3124,6 +3861,36 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -3155,6 +3922,15 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", @@ -3255,6 +4031,11 @@ "readdirp": "~3.5.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3266,6 +4047,11 @@ "wrap-ansi": "^7.0.0" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3287,11 +4073,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cross-spawn": { "version": "7.0.3", @@ -3308,7 +4098,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -3319,12 +4108,35 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -3364,6 +4176,14 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -3554,6 +4374,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3603,6 +4428,11 @@ "flat-cache": "^3.0.4" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3644,6 +4474,11 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3686,12 +4521,65 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -3756,6 +4644,11 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3783,6 +4676,11 @@ "debug": "4" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -3818,8 +4716,12 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "is-binary-path": { "version": "2.1.0", @@ -3866,8 +4768,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -3980,6 +4881,11 @@ "picomatch": "^2.2.3" } }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3992,8 +4898,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { "version": "0.5.5", @@ -4004,6 +4909,11 @@ "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "mocha": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", @@ -4109,8 +5019,12 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "nanoid": { "version": "3.1.20", @@ -4118,23 +5032,63 @@ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -4210,6 +5164,26 @@ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4219,8 +5193,7 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", @@ -4228,6 +5201,15 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4249,11 +5231,28 @@ "safe-buffer": "^5.1.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4267,8 +5266,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -4332,8 +5330,7 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { "version": "7.3.5", @@ -4353,6 +5350,29 @@ "randombytes": "^2.1.0" } }, + "serialport": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-9.2.5.tgz", + "integrity": "sha512-nsDsD2GN/43T2a8jQYr1HH76gmDZ575Ts8FOdcBRUY8ecaI16BPbXa612cPPkQjOfg28+KL5qtQL9c0vvTaidg==", + "requires": { + "@serialport/binding-mock": "9.2.4", + "@serialport/bindings": "9.2.5", + "@serialport/parser-byte-length": "9.2.4", + "@serialport/parser-cctalk": "9.2.4", + "@serialport/parser-delimiter": "9.2.4", + "@serialport/parser-inter-byte-timeout": "9.2.4", + "@serialport/parser-readline": "9.2.4", + "@serialport/parser-ready": "9.2.4", + "@serialport/parser-regex": "9.2.4", + "@serialport/stream": "9.2.4", + "debug": "^4.3.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -4374,6 +5394,26 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -4427,7 +5467,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" }, @@ -4435,8 +5474,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -4509,6 +5547,41 @@ } } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4545,6 +5618,14 @@ "tslib": "^1.8.1" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -4596,8 +5677,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "v8-compile-cache": { "version": "2.3.0", @@ -4630,7 +5710,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, "requires": { "string-width": "^1.0.2 || 2" }, @@ -4638,20 +5717,17 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -4661,7 +5737,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -4720,8 +5795,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "y18n": { "version": "5.0.8", diff --git a/package.json b/package.json index 0c54c41..5e3c59d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "mind-reader", "displayName": "Mind_Reader", + "repository": "https://github.com/SingleSemesterSnobs/Mind_Reader", "description": "", "version": "0.0.1", "engines": { @@ -63,7 +64,6 @@ "command": "mind-reader.runLineContext", "title": "Run Line Context" }, - { "command": "mind-reader.runCursorContext", "title": "Run Cursor Context" @@ -71,128 +71,134 @@ { "command": "mind-reader.getIndent", "title": "Get Line Indentation" + }, + { + "command": "mind-reader.connectHub", + "title": "Connect LEGO Hub" + }, + { + "command": "mind-reader.disconnectHub", + "title": "Disconnect LEGO Hub" + }, + { + "command": "mind-reader.uploadCurrentFile", + "title": "Upload current file to LEGO Hub" + }, + { + "command": "mind-reader.runProgram", + "title": "Run a program from the LEGO Hub" + }, + { + "command": "mind-reader.stopExecution", + "title": "Stop running program on the LEGO Hub" + }, + { + "command": "mind-reader.deleteProgram", + "title": "Delete a program from the LEGO Hub" } - ], - "keybindings": [ - { - "command": "mind-reader.decreaseFontScale", - "key": "numpad_subtract", - "mac": "d" - }, - - { - "command": "mind-reader.increaseFontScale", - "key": "numpad_add", - "mac": "[NumpadAdd]" - }, - - { - "command": "mind-reader.increaseEditorScale", - "key": "shift+numpad_add", + "keybindings": [ + { + "command": "mind-reader.decreaseFontScale", + "key": "numpad_subtract", + "mac": "d" + }, + { + "command": "mind-reader.increaseFontScale", + "key": "numpad_add", + "mac": "[NumpadAdd]" + }, + { + "command": "mind-reader.increaseEditorScale", + "key": "shift+numpad_add", "mac": "Shift+[NumpadAdd]" - }, - - { - "command": "mind-reader.decreaseEditorScale", - "key": "shift+numpad_subtract", - "mac": "Shift+[NumpadSubtract]" - }, - - { - "command": "mind-reader.resetEditorScale", - "key": "shift+enter", - "mac": "Shift+[Enter]" - }, - + }, + { + "command": "mind-reader.decreaseEditorScale", + "key": "shift+numpad_subtract", + "mac": "Shift+[NumpadSubtract]" + }, + { + "command": "mind-reader.resetEditorScale", + "key": "shift+enter", + "mac": "Shift+[Enter]" + }, { "command": "mind-reader.showAllSymbols", "key": "Ctrl+T", "mac": "Cmd+[KeyT]" }, - { "command": "mind-reader.gotoLine", "key": "CTRL+G", "mac": "Cmd+[KeyG]" }, - { "command": "mind-reader.quickOpen", "key": "CTRL+P", "mac": "Cmd+[KeyP]" - }, - + }, { "command": "mind-reader.gotoSymbol", "key": "Ctrl+Shift+O", "mac": "Cmd+Shift+[KeyO]" }, - { "command": "mind-reader.showProblems", "key": "Ctrl+Shift+M", "mac": "Cmd+Shift+[KeyM]" }, - { "command": "mind-reader.nextInFiles", "key": "F8", "mac": "[F8]" }, - { "command": "mind-reader.prevInFiles", "key": "Shift+F8", "mac": "Shift+[F8]" }, - { "command": "mind-reader.quickOpenPreviousRecentlyUsedEditorInGroup", "key": "Ctrl+Tab", "mac": "Cmd+[Tab]" }, - { "command": "mind-reader.navigateBack", "key": "Ctrl+Alt+-", "mac": "Cmd+Alt+[Minus]" }, - { - "command": "mind-reader.getuickInputBack", + "command": "mind-reader.getQuickInputBack", "key": "Ctrl+Alt+-", "mac": "Cmd+Alt+[Minus]" }, - { "command": "mind-reader.navigateForward", "key": "Ctrl+Shift+-", "mac": "Cmd+Shift+[Minus]" }, - { "command": "mind-reader.selectTheme", "key": "Ctrl+Shift+1", "mac": "Cmd+Shift+[Digit1]" }, - { "command": "mind-reader.getIndent", "key": "Shift+Tab", "mac": "Shift+[Tab]" }, - { - "command": "mind-reader.openKeyBindWin", - "key": "Ctrl+Shift+8", - "mac": "Cmd+Shift+8" - }, - { - "command": "mind-reader.openKeyBindMac", - "key": "Ctrl+Shift+9", - "mac": "Cmd+Shift+9" - } - ], + { + "command": "mind-reader.openKeyBindWin", + "key": "Ctrl+Shift+8", + "mac": "Cmd+Shift+8" + }, + { + "command": "mind-reader.openKeyBindMac", + "key": "Ctrl+Shift+9", + "mac": "Cmd+Shift+9" + } + ], "menus": { "editor/context": [ { @@ -251,7 +257,6 @@ "group": "mind-reader", "when": "activeEditor" } - ] }, "submenus": [ @@ -263,20 +268,20 @@ "configuration": { "title": "Mind_Reader", "properties": { - "mindreader.productType": { + "mindReader.productType": { "type": "string", "description": "Specifies the LEGO® product.", - "default": "MINDSTORMS® EV3", + "default": "MINDSTORMS EV3", "enum": [ - "MINDSTORMS® EV3", - "SPIKE™ Prime" + "MINDSTORMS EV3", + "SPIKE Prime" ], "enumDescriptions": [ "LEGO® MINDSTORMS® EV3 (31313)", "LEGO® Education SPIKE™ Prime Set (45678)" ] }, - "mindreader.reader.screenReader": { + "mindReader.reader.screenReader": { "type": "string", "description": "Specifies which screen reader to optimize for.", "default": "NVDA", @@ -291,41 +296,47 @@ "Apple VoiceOver (macOS)" ] }, - "mindreader.reader.contextWindow": { + "mindReader.reader.contextWindow": { "type": "number", "description": "The number of words around the cursor to use when reading the cursor context", "default": 1 }, - "mindreader.connection.connectAutomatically": { - "type": "boolean", - "description": "Specifies whether to try to automatically detect and communicate with a connected Hub.", - "default": "true" - }, - "mindreader.connection.portPath": { + "mindReader.connection.portPath": { "type": "string", - "markdownDescription": "Specifies the serial port path to use if `#mindreader.connectAutomatically#` is not set." + "markdownDescription": "Specifies the serial port path to use if `#mindReader.connectAutomatically#` is not set." + }, + "mindReader.connection.clearOutputOnRun": { + "type": "boolean", + "description": "Whether to clear the output each time the program is run", + "default": "true" } } }, - "views": { - "accessActions": [ - { - "id": "accessActions", - "name": "Access Actions", - "icon": "media/dep.svg", - "contextualTitle": "Accessibility Menu Actions" - } - ] - }, - "viewsContainers": { - "activitybar": [ - { - "id": "accessActions", - "title": "Access Actions", - "icon": "media/dep.svg" - } - ] - } + "views": { + "MindReader": [ + { + "id": "accessActions", + "name": "Access Actions", + "icon": "media/dep.svg", + "contextualTitle": "Accessibility Menu Actions" + }, + { + "id": "hubActions", + "name": "Hub Actions", + "icon": "media/dep.svg", + "contextualTitle": "Hub Connection Actions" + } + ] + }, + "viewsContainers": { + "activitybar": [ + { + "id": "MindReader", + "title": "MindReader Actions", + "icon": "media/dep.svg" + } + ] + } }, "scripts": { "vscode:prepublish": "npm run compile", @@ -336,17 +347,21 @@ "test": "node ./out/test/runTest.js" }, "devDependencies": { - "@types/vscode": "^1.60.0", "@types/glob": "^7.1.3", "@types/mocha": "^8.2.2", - "@types/node": "14.x", - "eslint": "^7.27.0", + "@types/node": "16.x", + "@types/serialport": "^8.0.2", + "@types/vscode": "^1.60.0", "@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/parser": "^4.26.0", + "@vscode/test-electron": "^1.6.2", + "eslint": "^7.27.0", "glob": "^7.1.7", "mocha": "^8.4.0", "typescript": "^4.3.2", - "vscode-test": "^1.5.2", - "@vscode/test-electron": "^1.6.2" + "vscode-test": "^1.5.2" + }, + "dependencies": { + "serialport": "^9.2.5" } } diff --git a/src/commandNodeProvider.ts b/src/commandNodeProvider.ts new file mode 100644 index 0000000..3d90c0e --- /dev/null +++ b/src/commandNodeProvider.ts @@ -0,0 +1,43 @@ +import * as vscode from 'vscode'; + +import { CommandEntry } from './commands'; + +export class CommandItem extends vscode.TreeItem { + constructor( + public readonly label: string, + public readonly command: vscode.Command + ) { + super(label, vscode.TreeItemCollapsibleState.None); + } +}; + +export default class CommandNodeProvider implements vscode.TreeDataProvider { + private items: CommandItem[] = []; + + public constructor(commands: CommandEntry[]) { + // build and cache command items + for (const c of commands) { + let humanReadable = c.name.replace(/^mind-reader\./, ''); // strip extensions name + // Convert camelCaseText to Title Case Text + humanReadable = humanReadable.replace(/([A-Z])/g, ' $1'); + humanReadable = humanReadable.charAt(0).toUpperCase() + humanReadable.slice(1); + + this.items.push(new CommandItem( + humanReadable, + { + title: humanReadable, + command: c.name, + tooltip: humanReadable + } + )); + } + } + + public getTreeItem(item: CommandItem): vscode.TreeItem { + return item; + } + + public async getChildren(): Promise { + return Promise.resolve(this.items); + } +} diff --git a/src/commands.ts b/src/commands.ts index 64aa0c9..4aa8b0c 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,19 +1,22 @@ import * as vscode from 'vscode'; import * as pl from './pylex'; +import * as path from 'path'; import * as fs from 'fs'; +import HubManager from './hubManager'; + /** * @type {Object} Command // Command to register with the VS Code Extension API * @prop {string} command // Name of the command; e.g., 'mind-reader.selectTheme' * @prop {callback} callback // Callback to register when `command` is invoked */ -type Command = { +export type CommandEntry = { name: string, callback: () => void }; -// The list of commands to register in the extension -const commands: Command[] = [ +// Accessibility Commands +export const accessCommands: CommandEntry[] = [ { name: 'mind-reader.selectTheme', @@ -51,6 +54,23 @@ const commands: Command[] = [ callback: resetEditorScale, }, + { + name: 'mind-reader.getIndent', + callback: getIndent, + }, + + { + name: 'mind-reader.runLineContext', + callback: runLineContext, + }, + + { + name: 'mind-reader.runCursorContext', + callback: runCursorContext + } +]; + +export const navCommands: CommandEntry[] = [ { name: 'mind-reader.openWebview', callback: openWebview, @@ -117,7 +137,7 @@ const commands: Command[] = [ }, { - name: 'mind-reader.getuickInputBack', + name: 'mind-reader.getQuickInputBack', callback: () => vscode.commands.executeCommand('workbench.action.quickInputBack'), }, @@ -125,18 +145,38 @@ const commands: Command[] = [ name: 'mind-reader.navigateForward', callback: () => vscode.commands.executeCommand('workbench.action.navigateForward'), }, +]; + +export const hubCommands: CommandEntry[] = [ { - name: 'mind-reader.runLineContext', - callback: runLineContext, + name: 'mind-reader.connectHub', + callback: connectHub }, + { - name: 'mind-reader.runCursorContext', - callback: runCursorContext + name: 'mind-reader.disconnectHub', + callback: disconnectHub }, + { - name: 'mind-reader.getIndent', - callback: getIndent - } + name: 'mind-reader.uploadCurrentFile', + callback: uploadCurrentFile + }, + + { + name: 'mind-reader.runProgram', + callback: runProgram + }, + + { + name: 'mind-reader.stopExecution', + callback: stopExecution + }, + + { + name: 'mind-reader.deleteProgram', + callback: deleteProgram + }, ]; // COMMAND CALLBACK IMPLEMENTATIONS @@ -278,17 +318,17 @@ function createContextString(context: pl.LexNode[], line: number): string { } // find up to `n` words around the cursor, where `n` is -// the value of `#mindreader.reader.contextWindow` +// the value of `#mindReader.reader.contextWindow` function runCursorContext(): void { let editor = vscode.window.activeTextEditor; if (!editor) { - vscode.window.showErrorMessage("RunCursorContext: No Active Editor"); + vscode.window.showErrorMessage('RunCursorContext: No Active Editor'); return; } const cursorPos: vscode.Position = editor.selection.active; const text: string = editor.document.lineAt(cursorPos).text; - const windowSize: number = vscode.workspace.getConfiguration('mindreader').get('reader.contextWindow')!; + const windowSize: number = vscode.workspace.getConfiguration('mindReader').get('reader.contextWindow')!; let trimmedText = text.trimStart(); // trim leading whitespace let leadingWS = text.length - trimmedText.length; // # of characters of leading whitespace @@ -343,4 +383,140 @@ function runCursorContext(): void { } } -export default commands; +// Current connected hub +let hub: HubManager | null = null; + +// TODO: port option +async function connectHub(): Promise { + if (hub) { + vscode.window.showWarningMessage('LEGO Hub is already connected, reconnecting...'); + disconnectHub(); + } + + try { + const ports = await HubManager.queryPorts(); + + if (ports.length === 0) { + vscode.window.showErrorMessage('No ports found. Is the LEGO Hub connected?'); + return; + } + + let portPath: string | undefined = vscode.workspace.getConfiguration('mindReader.connection').get('portPath'); + + if (!portPath) { + let slots: vscode.QuickPickItem[] = []; + for (const port of ports) { + slots.push({ label: port.path }); + } + + let picked = await vscode.window.showQuickPick(slots); + + if (!picked) { + return; + } + + portPath = picked.label; + } + hub = await HubManager.create(portPath); + vscode.window.showInformationMessage('LEGO Hub connected'); + } catch (err) { + vscode.window.showErrorMessage('Could not connect to LEGO Hub'); + } +} + +async function disconnectHub(): Promise { + if (!hub || !hub.isOpen()) { + vscode.window.showErrorMessage('LEGO Hub is not connected'); + return; + } + + await hub.close(); + hub = null; + vscode.window.showInformationMessage('LEGO Hub disconnected'); +} + +async function uploadCurrentFile(): Promise { + if (!hub || !hub.isOpen()) { + vscode.window.showErrorMessage('LEGO Hub is not connected!'); + return; + } + + if (!vscode.window.activeTextEditor) { + vscode.window.showErrorMessage('No active text editor'); + return; + } + + const currentFilePath = vscode.window.activeTextEditor.document.fileName; + + if (currentFilePath) { + // construct quickpick + const slots: vscode.QuickPickItem[] = []; + for (let i = 0; i < 10; i++) { + slots.push({ label: i.toString() }); + } + const slotID = await vscode.window.showQuickPick(slots, { canPickMany: false }); + + if (!slotID) { + return; + } + + // TODO: progress bar? + vscode.window.showInformationMessage('Uploading current file'); + await hub.uploadFile(currentFilePath, parseInt(slotID.label), path.basename(currentFilePath)); + vscode.window.showInformationMessage(path.basename(currentFilePath) + ' uploaded to slot ' + slotID.label); + } +} + +// TODO: find empty slots +async function runProgram(): Promise { + if (!hub || !hub.isOpen()) { + vscode.window.showErrorMessage('LEGO Hub is not connected!'); + return; + } + + const slots: vscode.QuickPickItem[] = []; + // construct quickpick + for (let i = 0; i < 10; i++) { + slots.push({ label: i.toString() }); + } + const slotID = await vscode.window.showQuickPick(slots, { canPickMany: false }); + + if (!slotID) { + return; + } + + vscode.window.showInformationMessage('Running program ' + slotID.label); + await hub.programExecute(parseInt(slotID.label)); +} + +async function stopExecution(): Promise { + if (!hub || !hub.isOpen()) { + vscode.window.showErrorMessage('LEGO Hub is not connected!'); + return; + } + + await hub.programTerminate(); + vscode.window.showInformationMessage('Execution stopped'); +} + +// TODO: find slots from status +async function deleteProgram(): Promise { + if (!hub || !hub.isOpen()) { + vscode.window.showErrorMessage('LEGO Hub is not connected!'); + return; + } + + const slots: vscode.QuickPickItem[] = []; + // construct quickpick + for (let i = 0; i < 10; i++) { + slots.push({ label: i.toString() }); + } + const slotID = await vscode.window.showQuickPick(slots, { canPickMany: false }); + + if (!slotID) { + return; + } + + await hub.deleteProgram(parseInt(slotID.label)); + vscode.window.showInformationMessage('Deleted program ' + slotID.label); +} diff --git a/src/extension.ts b/src/extension.ts index 1fece80..ebcdb92 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,20 +1,27 @@ import * as vscode from 'vscode'; - import * as pl from './pylex'; -import commands from './commands'; -import AccessNodeProvider from './accessNodeProvider'; +import { accessCommands, hubCommands, navCommands } from './commands'; + +import CommandNodeProvider from './commandNodeProvider'; +import Logger from './log'; + +// Output Logger +const product: string = vscode.workspace.getConfiguration('mindReader').get('productType')!; +const outputChannel = vscode.window.createOutputChannel(product + " Output"); +export const logger = new Logger(outputChannel); let parser: pl.Parser = new pl.Parser(); export function activate(context: vscode.ExtensionContext) { - console.log('Congratulations, your extension "mind-reader" is now active!'); vscode.window.showInformationMessage('Mind_Reader is loaded!'); parser.parse('Beep Boop'); + let allCommands = accessCommands.concat(hubCommands).concat(navCommands); + // Register Commands - commands.forEach(command => { + allCommands.forEach(command => { let disposable = vscode.commands.registerCommand( command.name, command.callback @@ -22,9 +29,11 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(disposable); }); - let provider = new AccessNodeProvider(); - vscode.window.registerTreeDataProvider('accessActions', provider); + let accessProvider = new CommandNodeProvider(accessCommands); + vscode.window.registerTreeDataProvider('accessActions', accessProvider); + let hubProvider = new CommandNodeProvider(hubCommands); + vscode.window.registerTreeDataProvider('hubActions', hubProvider); } export function deactivate() {} diff --git a/src/hubManager.ts b/src/hubManager.ts new file mode 100644 index 0000000..0bf29a1 --- /dev/null +++ b/src/hubManager.ts @@ -0,0 +1,391 @@ +import * as SerialPort from 'serialport'; +import * as fs from 'fs'; + +import { logger } from './extension'; + +/** + * @type RPCRequest an RPC request message + * + * @prop {string} `'m'` method to invoke. + * @prop {Object?} `'p'` optional parameters for method. + * @prop {string|null?} `'i'` optional request ID. + */ +type RPCRequest = { + 'm': string; + 'p'?: Object; + 'i'?: string; +}; + +/** + * @type RPCResponse an RPC response message + * + * @prop {any?} `'r'` RPC response body + * @prop {Object?} `'e'` RPC error body + * @prop {string|null} `'i'` required response ID. + */ +type RPCResponse = { + 'r'?: any; + 'e'?: Object; + 'i': string | null; +}; + +/** + * Manages sending and receiving of JSON Remote Procedure Call (JSON-RPC) protocol messages + * to the Hub. + */ +export default class HubManager { + private port: SerialPort; + private receiveBuffer: string = ''; // buffer for in-flight messages + private pendingRequests = new Map void, (error: string) => void]>(); // lists of requests that are still pending + + // ======================== INSTANCE METHODS ======================== + + /** + * Private constructor, use static `create` + `init` + */ + private constructor(public portPath: string) { } + + public isOpen(): boolean { + return this.port.isOpen; + } + + /** + * Handle a received data chunk from the serial port + * + * @param `data` Data received from serial port + */ + private async receiveData(data: string) { + // add data to buffer + this.receiveBuffer += data; + + // get full lines in buffer + + let msgs = this.receiveBuffer.split(/\r/); // split by newline + this.receiveBuffer = msgs.pop()!; // store unhandled data + + msgs = msgs.filter(x => !x.startsWith('{"m":0,"p":')); // drop sensor broadcast response spam + + for (const msg of msgs) { + // check if this msg is a response to a pending request + try { + let json: { [key: string]: any }; + + json = JSON.parse(msg); + + let id = json['i']; + if (id && this.pendingRequests.has(id)) { + // a request is waiting on this response + let [resolve, reject] = this.pendingRequests.get(id) ?? []; + + if (json['e'] && reject) { + // error + reject(Buffer.from(json['e'], 'base64').toString()); + } else if (resolve) { + resolve(json['r']); + } + + this.pendingRequests.delete(id); + } else if (json['m']) { + // Print errors + const params = json['p']; + switch (json['m']) { + case 'user_program_error': + logger.error(Buffer.from(params[3], 'base64').toString()); + logger.error(Buffer.from(params[4], 'base64').toString()); + break; + case 'runtime_error': + logger.error(Buffer.from(params[3], 'base64').toString()); + break; + } + } + } catch (err) { + console.log('Could not parse JSON:', msg); + } + } + } + + /** + * Initializes a created HubManager with the current option settings + */ + public async init(): Promise { + try { + this.port = new SerialPort( + this.portPath, + { + autoOpen: true, + baudRate: 112500, + } + ); + } catch (err) { + // error during port opening + throw err; + } + + this.port.setEncoding('utf-8'); + + // push lines received to data queue + + let mgr = this; + this.port.on('data', data => { + mgr.receiveData(data); + }); + } + + public async close(): Promise { + this.port.close(console.error); + } + + /** + * Send an RPC message. The corresponding Promise resolve + * is saved into the `pendingRequests` map. When an inbound + * message is found that matches an ID in `pendingRequests`, + * the corresponding resolve is called. So, even though + * the `resolve` call does not appear explicitly here, it *does* + * get resolved at the appropriate time. + * + * @param `proc` Procedure to execute + * @param `params` Optional parameters for the procedure + * @param `id` The ID to use for the RPC message. Use null to indicate no ID/notification message. + * If neither a string or `null` is passed, an ID is automatically generated. + */ + public async send(request: RPCRequest): Promise { + return new Promise((resolve, reject) => { + if (request['i'] === undefined) { + // generate an ID + request['i'] = 'mind-reader-' + HubManager.randomID(); + } + + // write JSON to port + + this.pendingRequests.set(request['i'], [resolve, reject]); + this.port.write(JSON.stringify(request)); + this.port.write('\r'); + this.port.drain(); + }); + } + + public async uploadFile(file: string, slotid: number, name?: string, autoStart: boolean = false) { + const fileStats = fs.statSync(file); + name = name || file; + + const ack: {[key: string]: any} = await this.startWriteProgram( + name, + fileStats.size, + slotid, + fileStats.birthtime.getTime(), + fileStats.mtime.getTime() + ); + + const blockSize = ack.blocksize; + const transferid = ack.transferid; + + let dataStream = fs.createReadStream(file, { highWaterMark: blockSize }); + for await (const data of dataStream) { + await this.writePackage(data, transferid); + } + + if (autoStart) { + return Promise.resolve(await this.programExecute(slotid)); + } + } + + // ========================= Hub Methods ========================= + // + // These methods each handle a single RPC method's communication. + + /** + * Execute a program that is saved on the hub + * + * @param `slotid` Slot ID of the program to run + */ + public async programExecute(slotid: number): Promise { + return new Promise(async (resolve) => { + let response = await this.send({ + 'm': 'program_execute', + 'p': { + 'slotid': slotid + } + }); + + + resolve(response); + }); + } + + /** + * Terminate a currently running program + */ + public async programTerminate(): Promise { + return Promise.resolve( + await this.send({ 'm': 'program_terminate' }) + ); + } + + /** + * Get the storage status of the hub + * + * TODO: fill with actual example + * slot + * decoded name + * size + * last modified + * project_id + * type + */ + public async getStorageStatus(): Promise { + return Promise.resolve( + await this.send({ 'm': 'get_storage_status' }) + ); + } + + /** + * Notify the Hub that a program write is about to occur. + * + * @param `name` Name of the program. + * @param `name` Size of the program TODO: in bytes? + * @param `slotID` Slot ID to write the program to + * @param `created` Creation timestamp + * @param `modified` Modified timestamp + */ + public async startWriteProgram( + name: string, + size: number, + slotID: number, + created: number, + modified: number + ): Promise { + // file meta data + let stat = { + 'created': created, + 'modified': modified, + 'name': name, + 'type': 'python', // always python + // eslint-disable-next-line @typescript-eslint/naming-convention + 'project_id': HubManager.randomID(16), + }; + + return Promise.resolve( + await this.send({ + 'm': 'start_write_program', + 'p': { + 'slotid': slotID, + 'size': size, + 'meta': stat + } + }) + ); + } + + /** + * Write a package chunk of a file + * + * @param `data` Chunk of data to write + * @param `transferID` The transfer id for the current transfer + */ + public async writePackage(data: string, transferID: string): Promise { + return Promise.resolve( + await this.send({ + 'm': 'write_package', + 'p': { + 'data': Buffer.from(data, 'utf-8').toString('base64'), + 'transferid': transferID + } + }) + ); + } + + /** + * Move a program from slot `fromSlot` to slot `toSlot`. + * TODO: verify + * If the destination already has a program stored in it, the two programs + * are swapped + * + * @param `fromSlot` slot to move from + * @param `toSlot` slot to move to + */ + public async moveProgram(oldSlotID: number, newSlotID: number) { + return Promise.resolve( + await this.send({ + 'm': 'move_project', + 'p': { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'old_slotid': oldSlotID, + // eslint-disable-next-line @typescript-eslint/naming-convention + 'new_slotid': newSlotID + } + }) + ); + } + + /** + * Delete a program from the slot on the Hub + * + * @param `slotID` the slot to delete + */ + public async deleteProgram(slotID: number) { + return Promise.resolve( + await this.send({ + 'm': 'remove_project', + 'p': { + 'slotid': slotID + } + }) + ); + } + + /** + * Get firmware info for the connected device + */ + public async getHubInfo() { + return Promise.resolve( + await this.send({ + 'm': 'get_hub_info' + }) + ); + } + + // ======================== INSTANCE METHODS ======================== + + public static async create(portPath: string): Promise { + return new Promise(async (resolve) => { + try { + let mgr = new HubManager(portPath); + await mgr.init(); + + return resolve(mgr); + } catch (err) { + + // could not connect to port + throw err; + } + + }); + } + + /** + * Returns a list of serial devices + */ + public static async queryPorts() { + // get all ports + let ports = await SerialPort.list(); + + // filter by manufacturer + return Promise.resolve(ports); + } + + /** + * Generate a random identifier consisting of lowercase + * letters, numbers, and underscores + * + * @param `len` The length of the string to generate + */ + static randomID(len: number = 4): string { + let result = ''; + let characters = 'abcdefghijklmnopqrstuvwxyz0123456789_'; + for (let i = 0; i < len; i++) { + result += characters[Math.floor(Math.random() * characters.length)]; + } + + return result; + }; +} diff --git a/src/log.ts b/src/log.ts new file mode 100644 index 0000000..a774776 --- /dev/null +++ b/src/log.ts @@ -0,0 +1,23 @@ +import * as vscode from 'vscode'; + +export default class Logger { + constructor( + public readonly outputChannel: vscode.OutputChannel + ) { } + + public log(text: string): void { + this.outputChannel.appendLine(text); + } + + public info(text: string): void { + this.outputChannel.appendLine('[INFO]\r' + text); + } + + public warn(text: string): void { + this.outputChannel.appendLine('[WARNING]\r' + text); + } + + public error(text: string): void { + this.outputChannel.appendLine('[ERROR]\r' + text); + } +}