From 8af05d1dcbc649791f83f10f62c11b7169b3c8b6 Mon Sep 17 00:00:00 2001 From: Timon G Date: Fri, 15 May 2020 21:19:50 +0200 Subject: [PATCH] merge master (#646) * Bump ts-node from 8.9.1 to 8.10.0 (#611) * Bump ts-node from 8.10.0 to 8.10.1 (#612) * Bump wait-on from 4.0.2 to 5.0.0 (#618) * Bump @types/node from 13.13.4 to 13.13.5 (#619) * Bump tslib from 1.11.1 to 1.11.2 (#621) * Bump @angular/language-service from 9.1.4 to 9.1.5 (#626) * Bump @angular/language-service from 9.1.5 to 9.1.6 (#628) * Bump @angular/cli from 9.1.4 to 9.1.5 (#629) * Bump @angular-devkit/build-angular from 0.901.4 to 0.901.5 (#630) * Bump tslib from 1.11.2 to 1.12.0 (#632) * Bump @types/node from 13.13.5 to 14.0.0 (#634) * Bump @types/node from 14.0.0 to 14.0.1 (#635) * Bump @angular/language-service from 9.1.6 to 9.1.7 (#636) * Bump tslib from 1.12.0 to 1.13.0 (#637) * Bump @angular/cli from 9.1.5 to 9.1.6 (#638) * Bump electron from 8.2.5 to 8.3.0 (#641) * Bump @angular-devkit/build-angular from 0.901.5 to 0.901.6 (#639) * Filament Change Process (#642) * basic pagination * styling filament list * load spools from FilamentManager * spool list almost done, some regex issues * Finished Spool Listing * Started working on heating screen * finish page 2 design * update config for extruder speed * add config parameter + update initial setup screen * progress on page 2 * finish filament unload * finished screen 3 * finish page 4 design * finish page 5 styling * some fixes * starting to add functionality * Should be all working now * make extruder movements works * some fixes * Add settings * naming and default values * CodeFactor issues * disable extruder after unloading filament * Bump @types/lodash from 4.14.150 to 4.14.151 (#644) * working (#643) * Update README * 1.5.0 * Update Changelog * fix config error Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- CHANGELOG.md | 120 ++ README.md | 7 +- package-lock.json | 1555 +++-------------- package.json | 20 +- sample.config.json | 8 +- src/app/app.service.ts | 20 +- src/app/config/config.service.ts | 32 +- .../config/no-config/no-config.component.html | 94 +- .../config/no-config/no-config.component.scss | 48 +- .../config/no-config/no-config.component.ts | 13 +- src/app/filament/filament.component.html | 138 +- src/app/filament/filament.component.scss | 311 ++++ src/app/filament/filament.component.ts | 309 +++- .../filament-manager.service.ts | 172 ++ .../print-control/print-control.component.ts | 11 +- src/app/printer.service.ts | 49 +- src/app/settings/settings.component.html | 16 +- src/app/settings/settings.component.scss | 7 + 18 files changed, 1554 insertions(+), 1376 deletions(-) create mode 100644 src/app/plugin-service/filament-manager.service.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 02901acc9..e11d25549 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,125 @@ # Changelog +## [v1.5.0](https://github.com/UnchartedBull/OctoDash/tree/v1.5.0) (2020-05-15) + +[Full Changelog](https://github.com/UnchartedBull/OctoDash/compare/v1.4.1...v1.5.0) + +**Implemented enhancements:** + +- Model thumbnails for PrusaSlicer [\#633](https://github.com/UnchartedBull/OctoDash/issues/633) +- Add custom actions on "sleep" screen. [\#631](https://github.com/UnchartedBull/OctoDash/issues/631) +- Webcam Viewer [\#625](https://github.com/UnchartedBull/OctoDash/issues/625) +- Support for Prusa Thumbnails plugin [\#614](https://github.com/UnchartedBull/OctoDash/issues/614) +- Display preview images from Prusaslicer gcode [\#566](https://github.com/UnchartedBull/OctoDash/issues/566) +- Add refresh button to file screen [\#565](https://github.com/UnchartedBull/OctoDash/issues/565) +- OctoDash on Android [\#448](https://github.com/UnchartedBull/OctoDash/issues/448) +- Use FilamentManager [\#183](https://github.com/UnchartedBull/OctoDash/issues/183) +- Implement Change Filament Screen [\#14](https://github.com/UnchartedBull/OctoDash/issues/14) + +**Fixed bugs:** + +- Current feedrate not correctly shown in the adjust menu [\#640](https://github.com/UnchartedBull/OctoDash/issues/640) +- Update Setup API for new OctoPrint version [\#594](https://github.com/UnchartedBull/OctoDash/issues/594) +- Layer indicator not found in file [\#578](https://github.com/UnchartedBull/OctoDash/issues/578) +- Waveshare 3.5in Screen Not Detected [\#562](https://github.com/UnchartedBull/OctoDash/issues/562) +- Add connection attempt delay in X seconds for PSU Control [\#559](https://github.com/UnchartedBull/OctoDash/issues/559) +- Errors received when printing from sd [\#541](https://github.com/UnchartedBull/OctoDash/issues/541) +- Error always received on startup [\#539](https://github.com/UnchartedBull/OctoDash/issues/539) + +**Closed issues:** + +- Can't Install Octodash [\#620](https://github.com/UnchartedBull/OctoDash/issues/620) +- screensaver with hyperpixel 4" \(gpio\) [\#617](https://github.com/UnchartedBull/OctoDash/issues/617) +- only one underline in the upper left corner of the screen [\#615](https://github.com/UnchartedBull/OctoDash/issues/615) +- Development question [\#613](https://github.com/UnchartedBull/OctoDash/issues/613) +- Getting errors and Octodash wont start [\#609](https://github.com/UnchartedBull/OctoDash/issues/609) +- OctoDash on my master controller can't connect to my printer [\#596](https://github.com/UnchartedBull/OctoDash/issues/596) +- Can't install Octodash [\#593](https://github.com/UnchartedBull/OctoDash/issues/593) +- Does OctoDash work with square aspect ratio [\#579](https://github.com/UnchartedBull/OctoDash/issues/579) +- OctoScreen Rebooting Constanly [\#575](https://github.com/UnchartedBull/OctoDash/issues/575) +- cannot open display [\#574](https://github.com/UnchartedBull/OctoDash/issues/574) +- Explain ports and host in Troubleshooting guide [\#560](https://github.com/UnchartedBull/OctoDash/issues/560) +- How to get thumbnail pictures [\#556](https://github.com/UnchartedBull/OctoDash/issues/556) +- Development Question [\#544](https://github.com/UnchartedBull/OctoDash/issues/544) +- Cannot connect to octoprint [\#536](https://github.com/UnchartedBull/OctoDash/issues/536) +- Unable to view SD CARD files plugged into Prusa MK3S [\#481](https://github.com/UnchartedBull/OctoDash/issues/481) +- no start -bach: xinit: command not found [\#479](https://github.com/UnchartedBull/OctoDash/issues/479) +- IP Address/Hostname of Octoprint instance should be shown [\#465](https://github.com/UnchartedBull/OctoDash/issues/465) +- XDOTOOL CLICK LOCATIONS [\#463](https://github.com/UnchartedBull/OctoDash/issues/463) +- Support Pi Zero W. [\#462](https://github.com/UnchartedBull/OctoDash/issues/462) +- I find developer to add function to octodash [\#344](https://github.com/UnchartedBull/OctoDash/issues/344) + +**Merged pull requests:** + +- Bump @types/lodash from 4.14.150 to 4.14.151 [\#644](https://github.com/UnchartedBull/OctoDash/pull/644) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Remember Feed- and Flow-Rate [\#643](https://github.com/UnchartedBull/OctoDash/pull/643) ([UnchartedBull](https://github.com/UnchartedBull)) +- Filament Change Process [\#642](https://github.com/UnchartedBull/OctoDash/pull/642) ([UnchartedBull](https://github.com/UnchartedBull)) +- Bump electron from 8.2.5 to 8.3.0 [\#641](https://github.com/UnchartedBull/OctoDash/pull/641) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.5 to 0.901.6 [\#639](https://github.com/UnchartedBull/OctoDash/pull/639) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.5 to 9.1.6 [\#638](https://github.com/UnchartedBull/OctoDash/pull/638) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump tslib from 1.12.0 to 1.13.0 [\#637](https://github.com/UnchartedBull/OctoDash/pull/637) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.6 to 9.1.7 [\#636](https://github.com/UnchartedBull/OctoDash/pull/636) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 14.0.0 to 14.0.1 [\#635](https://github.com/UnchartedBull/OctoDash/pull/635) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.5 to 14.0.0 [\#634](https://github.com/UnchartedBull/OctoDash/pull/634) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump tslib from 1.11.2 to 1.12.0 [\#632](https://github.com/UnchartedBull/OctoDash/pull/632) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.4 to 0.901.5 [\#630](https://github.com/UnchartedBull/OctoDash/pull/630) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.4 to 9.1.5 [\#629](https://github.com/UnchartedBull/OctoDash/pull/629) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.5 to 9.1.6 [\#628](https://github.com/UnchartedBull/OctoDash/pull/628) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.4 to 9.1.5 [\#626](https://github.com/UnchartedBull/OctoDash/pull/626) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump tslib from 1.11.1 to 1.11.2 [\#621](https://github.com/UnchartedBull/OctoDash/pull/621) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.4 to 13.13.5 [\#619](https://github.com/UnchartedBull/OctoDash/pull/619) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump wait-on from 4.0.2 to 5.0.0 [\#618](https://github.com/UnchartedBull/OctoDash/pull/618) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ts-node from 8.10.0 to 8.10.1 [\#612](https://github.com/UnchartedBull/OctoDash/pull/612) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ts-node from 8.9.1 to 8.10.0 [\#611](https://github.com/UnchartedBull/OctoDash/pull/611) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron from 8.2.4 to 8.2.5 [\#608](https://github.com/UnchartedBull/OctoDash/pull/608) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.3 to 0.901.4 [\#606](https://github.com/UnchartedBull/OctoDash/pull/606) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.3 to 9.1.4 [\#605](https://github.com/UnchartedBull/OctoDash/pull/605) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.3 to 9.1.4 [\#604](https://github.com/UnchartedBull/OctoDash/pull/604) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron-builder from 22.5.1 to 22.6.0 [\#603](https://github.com/UnchartedBull/OctoDash/pull/603) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron from 8.2.3 to 8.2.4 [\#602](https://github.com/UnchartedBull/OctoDash/pull/602) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Additional Thumbnail Support [\#601](https://github.com/UnchartedBull/OctoDash/pull/601) ([jneilliii](https://github.com/jneilliii)) +- Bump eslint-plugin-simple-import-sort from 5.0.2 to 5.0.3 [\#600](https://github.com/UnchartedBull/OctoDash/pull/600) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.3 to 13.13.4 [\#599](https://github.com/UnchartedBull/OctoDash/pull/599) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.2 to 13.13.3 [\#598](https://github.com/UnchartedBull/OctoDash/pull/598) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ts-node from 8.9.0 to 8.9.1 [\#597](https://github.com/UnchartedBull/OctoDash/pull/597) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.2 to 0.901.3 [\#592](https://github.com/UnchartedBull/OctoDash/pull/592) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.2 to 9.1.3 [\#591](https://github.com/UnchartedBull/OctoDash/pull/591) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.2 to 9.1.3 [\#590](https://github.com/UnchartedBull/OctoDash/pull/590) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.1 to 13.13.2 [\#589](https://github.com/UnchartedBull/OctoDash/pull/589) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump eslint-config-prettier from 6.10.1 to 6.11.0 [\#588](https://github.com/UnchartedBull/OctoDash/pull/588) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.1 to 0.901.2 [\#587](https://github.com/UnchartedBull/OctoDash/pull/587) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.1 to 9.1.2 [\#586](https://github.com/UnchartedBull/OctoDash/pull/586) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump prettier from 2.0.4 to 2.0.5 [\#585](https://github.com/UnchartedBull/OctoDash/pull/585) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ts-node from 8.8.2 to 8.9.0 [\#583](https://github.com/UnchartedBull/OctoDash/pull/583) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.13.0 to 13.13.1 [\#582](https://github.com/UnchartedBull/OctoDash/pull/582) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ajv from 6.12.1 to 6.12.2 [\#581](https://github.com/UnchartedBull/OctoDash/pull/581) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ajv from 6.12.0 to 6.12.1 [\#580](https://github.com/UnchartedBull/OctoDash/pull/580) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/lodash from 4.14.149 to 4.14.150 [\#577](https://github.com/UnchartedBull/OctoDash/pull/577) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.11.1 to 13.13.0 [\#576](https://github.com/UnchartedBull/OctoDash/pull/576) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron from 8.2.2 to 8.2.3 [\#573](https://github.com/UnchartedBull/OctoDash/pull/573) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron-builder from 22.4.1 to 22.5.1 [\#572](https://github.com/UnchartedBull/OctoDash/pull/572) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.1 to 9.1.2 [\#571](https://github.com/UnchartedBull/OctoDash/pull/571) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Show preview while printing \(click on percentage\) [\#570](https://github.com/UnchartedBull/OctoDash/pull/570) ([UnchartedBull](https://github.com/UnchartedBull)) +- Properly handle Connection Errors [\#569](https://github.com/UnchartedBull/OctoDash/pull/569) ([UnchartedBull](https://github.com/UnchartedBull)) +- ignore first 500 error from enclosure plugin [\#568](https://github.com/UnchartedBull/OctoDash/pull/568) ([UnchartedBull](https://github.com/UnchartedBull)) +- Bump electron from 8.2.1 to 8.2.2 [\#567](https://github.com/UnchartedBull/OctoDash/pull/567) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump eslint-plugin-prettier from 3.1.2 to 3.1.3 [\#564](https://github.com/UnchartedBull/OctoDash/pull/564) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Add sdcard support [\#563](https://github.com/UnchartedBull/OctoDash/pull/563) ([harleyg321](https://github.com/harleyg321)) +- Bump wait-on from 4.0.1 to 4.0.2 [\#555](https://github.com/UnchartedBull/OctoDash/pull/555) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.11.0 to 13.11.1 [\#554](https://github.com/UnchartedBull/OctoDash/pull/554) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular-devkit/build-angular from 0.901.0 to 0.901.1 [\#553](https://github.com/UnchartedBull/OctoDash/pull/553) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/cli from 9.1.0 to 9.1.1 [\#552](https://github.com/UnchartedBull/OctoDash/pull/552) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @angular/language-service from 9.1.0 to 9.1.1 [\#551](https://github.com/UnchartedBull/OctoDash/pull/551) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump electron from 8.2.0 to 8.2.1 [\#549](https://github.com/UnchartedBull/OctoDash/pull/549) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump prettier from 2.0.3 to 2.0.4 [\#548](https://github.com/UnchartedBull/OctoDash/pull/548) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump prettier from 2.0.2 to 2.0.3 [\#547](https://github.com/UnchartedBull/OctoDash/pull/547) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump ts-node from 8.8.1 to 8.8.2 [\#545](https://github.com/UnchartedBull/OctoDash/pull/545) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump rxjs from 6.5.4 to 6.5.5 [\#543](https://github.com/UnchartedBull/OctoDash/pull/543) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Fix errors and unnecessary data shown when printing from SD [\#542](https://github.com/UnchartedBull/OctoDash/pull/542) ([harleyg321](https://github.com/harleyg321)) +- Go into standby if unable to contact OctoPrint [\#540](https://github.com/UnchartedBull/OctoDash/pull/540) ([harleyg321](https://github.com/harleyg321)) +- Bump ngx-spinner from 9.0.1 to 9.0.2 [\#538](https://github.com/UnchartedBull/OctoDash/pull/538) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) +- Bump @types/node from 13.9.8 to 13.11.0 [\#537](https://github.com/UnchartedBull/OctoDash/pull/537) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview)) + ## [v1.4.1](https://github.com/UnchartedBull/OctoDash/tree/v1.4.1) (2020-03-31) [Full Changelog](https://github.com/UnchartedBull/OctoDash/compare/v1.4.0...v1.4.1) diff --git a/README.md b/README.md index 873429b42..1e7ab5de1 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,10 @@ For more info have a look at the [wiki](https://github.com/UnchartedBull/OctoDas ## Tips and Tricks -- OctoDash supports printing from your Raspberry and from the printers SD card, if configured in OctoPrint (v2.0.0 and up) -- OctoDash supports .ufp package preview images (v1.4.1 and up) -- You can also view the previews during print, if you press on the percentage inside the progress ring (v2.0.0 and up) +- OctoDash supports printing from your Raspberry and from the printers SD card, if configured in OctoPrint (v1.5.0 and up) +- OctoDash supports .ufp package and PrusaSlicer preview images (v1.5.0 and up) +- You can let OctoDash push out and pull in the filament during a filament change, if you setup your feed length correctly. (v1.5.0 and up) +- You can also view the previews during print, if you press on the percentage inside the progress ring (v1.5.0 and up) - You can press multiple arrows directly after another in the control view. All actions will be executed one after another, even if the prior didn't finish before pressing the button - The six actions on the right in the control view can be customized. They can either send GCode commands to your printer, restart OctoPrint or your Pi and even open iFrames so you can view your camera - You can adjust the temperatures in the home screen, by pressing on their icons (v1.4.1 and up) diff --git a/package-lock.json b/package-lock.json index e1b999b7c..ee1e4d586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "octodash", - "version": "1.4.1", + "version": "1.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -11,12 +11,12 @@ "dev": true }, "@angular-devkit/architect": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz", - "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.6.tgz", + "integrity": "sha512-0pWzn10gCZxMCrS62NlD38qE2R7l5fPfBuNylntNqvzw9L7iS1ARgqMlAKn8KLaNG6FrXONmgUWHsV987ZICIw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", + "@angular-devkit/core": "9.1.6", "rxjs": "6.5.4" }, "dependencies": { @@ -32,21 +32,21 @@ } }, "@angular-devkit/build-angular": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.4.tgz", - "integrity": "sha512-Vod4bc6d38fuvqauIDQxKMe9hKW9m4QNzPKxEc+Dv5Xkv95WaGzkbUVu8M8t4E//sDDMpmcPdYOXSdR27WBi2Q==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.901.6.tgz", + "integrity": "sha512-jgLFKRWSZIZZVb7fiGC0SHzBFYBkDOLTw/MRta8p81o8WzLe0uxGVP4RlIj6fZxv3Vvb1NZI4HHrgt/jASaj4A==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.4", - "@angular-devkit/build-optimizer": "0.901.4", - "@angular-devkit/build-webpack": "0.901.4", - "@angular-devkit/core": "9.1.4", + "@angular-devkit/architect": "0.901.6", + "@angular-devkit/build-optimizer": "0.901.6", + "@angular-devkit/build-webpack": "0.901.6", + "@angular-devkit/core": "9.1.6", "@babel/core": "7.9.0", "@babel/generator": "7.9.3", "@babel/preset-env": "7.9.0", "@babel/template": "7.8.6", "@jsdevtools/coverage-istanbul-loader": "3.0.3", - "@ngtools/webpack": "9.1.4", + "@ngtools/webpack": "9.1.6", "ajv": "6.12.0", "autoprefixer": "9.7.4", "babel-loader": "8.0.6", @@ -97,7 +97,7 @@ "webpack-merge": "4.2.2", "webpack-sources": "1.4.3", "webpack-subresource-integrity": "1.4.0", - "worker-plugin": "4.0.2" + "worker-plugin": "4.0.3" }, "dependencies": { "ajv": { @@ -150,9 +150,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.4.tgz", - "integrity": "sha512-iDMlNRwd8ICMBKnycfw55hdnL5kCiqUjQn+aK/4uOMJMz49tiYMNJAaznXX2BFKmYSmbapKjEbzx9yMYRi9Y7w==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.901.6.tgz", + "integrity": "sha512-M0H9SrOq4QOYqGCIguGQDWizf+XL7whJjBtYHxI7jEjtzar3zkTFgzZ/znv49R56Zch1niH0mBgtDxCFFWqarQ==", "dev": true, "requires": { "loader-utils": "2.0.0", @@ -162,6 +162,12 @@ "webpack-sources": "1.4.3" }, "dependencies": { + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, "typescript": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.5.tgz", @@ -171,13 +177,13 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.4.tgz", - "integrity": "sha512-YBOufI4TGAtIDCS6erFygYJX/fkd8xwI58d+7iFIBmtIJC4/fpGjX6qkHMCBgh8HXAkEPSORBCYQn9O44J1ZXQ==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.901.6.tgz", + "integrity": "sha512-jEk850AtIFK+xbXXiloVvueXTbJOL1mANR2UBrmWk7V4Bct+gHVerdXjn9vo1Tsd8BgemUYAcqvLldCx9MSDTg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.4", - "@angular-devkit/core": "9.1.4", + "@angular-devkit/architect": "0.901.6", + "@angular-devkit/core": "9.1.6", "rxjs": "6.5.4" }, "dependencies": { @@ -193,9 +199,9 @@ } }, "@angular-devkit/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", - "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz", + "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==", "dev": true, "requires": { "ajv": "6.12.0", @@ -238,20 +244,20 @@ } }, "@angular-devkit/schematics": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.4.tgz", - "integrity": "sha512-RAbdnUEZ3JTLmWSBiXT5trsVx8Fi72fxN9CiRaluM09Cytg6BUc1wC5XCO0YPvhI400+3Ro1nwjPXezjg7LXzQ==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.6.tgz", + "integrity": "sha512-twS8Sxc6NG4A0n7yITugP0snIMJ2Rm6aOGkckomWjZAP1fPo8pup8EFGc5wUBAtAOM3DJBphEnskpwEWCkBaLg==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", + "@angular-devkit/core": "9.1.6", "ora": "4.0.3", "rxjs": "6.5.4" }, "dependencies": { "@angular-devkit/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", - "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz", + "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==", "dev": true, "requires": { "ajv": "6.12.0", @@ -307,16 +313,16 @@ } }, "@angular/cli": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.4.tgz", - "integrity": "sha512-H9MqoT4zyIv+Yo3cvRVkzafWGHsqt7jUvtvGwMHIDMTfEX+Q8yiYlDLL6WM3Eb6/hDmLcRGC/GI495sKS1z5qA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-9.1.6.tgz", + "integrity": "sha512-hQnad0LQx0n+FiMRUV2RX9+L0dLsISu7uzimGLjgJVtW6Bc1cVnaTkKhOqHRQG2Q4Iv8adKWf5UL5tMZz/roDA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.901.4", - "@angular-devkit/core": "9.1.4", - "@angular-devkit/schematics": "9.1.4", - "@schematics/angular": "9.1.4", - "@schematics/update": "0.901.4", + "@angular-devkit/architect": "0.901.6", + "@angular-devkit/core": "9.1.6", + "@angular-devkit/schematics": "9.1.6", + "@schematics/angular": "9.1.6", + "@schematics/update": "0.901.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.1.1", @@ -335,19 +341,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz", - "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.6.tgz", + "integrity": "sha512-0pWzn10gCZxMCrS62NlD38qE2R7l5fPfBuNylntNqvzw9L7iS1ARgqMlAKn8KLaNG6FrXONmgUWHsV987ZICIw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", + "@angular-devkit/core": "9.1.6", "rxjs": "6.5.4" } }, "@angular-devkit/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", - "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz", + "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==", "dev": true, "requires": { "ajv": "6.12.0", @@ -529,9 +535,9 @@ "integrity": "sha512-PaHAmjMJDtg/3aGCPuq5BCRC1eZ/DBCpva9f7NrA1kqk0LcLdebm0v2uHwTOBtiz/VEgPvxiS4tXC4rjvUtfEg==" }, "@angular/language-service": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-9.1.4.tgz", - "integrity": "sha512-eyVxxiegdb4ESdFGfkuDN+YfUbOVHRQLjIl6ACFJQDNHzVXzbmuqpyr5hIJANIVady103/7+dqRxxJo1DdIdTQ==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-9.1.7.tgz", + "integrity": "sha512-p4WOZFCn6H5qgII9MbPjSu/AErt0rXpsXlMHC9KJl+JgfPI3YwQuX1dLdt3xTJlxuv8/fY9UbgmPJUqR/txRCg==", "dev": true }, "@angular/material": { @@ -1543,9 +1549,9 @@ } }, "@electron/get": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.10.0.tgz", - "integrity": "sha512-hlueNXU51c3CwQjBw/i5fwt+VfQgSQVUTdicpCHkhEjNZaa4CXJ5W1GaxSwtLE2dvRmAHjpIjUMHTqJ53uojfg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", + "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -1696,12 +1702,12 @@ } }, "@ngtools/webpack": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.4.tgz", - "integrity": "sha512-CDlQzMnWraxf/dT3G5L+0N0VniWHWdzjLRP8pWBoyV0xlzWS1yL/lj8Mas2jEIuaUxZ8bi29mE7xa8prqewtBQ==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.6.tgz", + "integrity": "sha512-W/9kENoiYARDGXqXSmOekQddUlQUVxfYP7JgQwqdg7JYktIpThicbV/iLBChZwWnmn9mb7MDw1IPeUTkZzrO2Q==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", + "@angular-devkit/core": "9.1.6", "enhanced-resolve": "4.1.1", "rxjs": "6.5.4", "webpack-sources": "1.4.3" @@ -1719,19 +1725,19 @@ } }, "@schematics/angular": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.4.tgz", - "integrity": "sha512-7nbiYBRgXc+f0sa5iXTcF6/VMy/Xq0wyKKnDFiLCb2aFYR7EXRHWF2GuwDIg2bvFugLuCBDoNnXeddLE1TXGWg==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.6.tgz", + "integrity": "sha512-Q9lPTf1/pXBWuFOLzwtrU88Gwkfn9JLiSb45xSQZ771cCD68tZyL4V9fH+u7139y3H3ID2xebMs7WiddAERLyw==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", - "@angular-devkit/schematics": "9.1.4" + "@angular-devkit/core": "9.1.6", + "@angular-devkit/schematics": "9.1.6" }, "dependencies": { "@angular-devkit/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", - "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz", + "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==", "dev": true, "requires": { "ajv": "6.12.0", @@ -1774,13 +1780,13 @@ } }, "@schematics/update": { - "version": "0.901.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.4.tgz", - "integrity": "sha512-jCtZY2Fbj502gKN5gdu1brnRy/ssyzTrWm69Ty73V+t8uL7nLr+/hny/VBJ8CiQnKQvxcgVl1xgvI1cXzpysVA==", + "version": "0.901.6", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.901.6.tgz", + "integrity": "sha512-fKDjD/nGOsrPglOeMVNW+/wa8t73XBrsVneaLg3qmWp6c80JQAxwryE+3MTnBP7apZCLR2YZlKySbY54gLRs6w==", "dev": true, "requires": { - "@angular-devkit/core": "9.1.4", - "@angular-devkit/schematics": "9.1.4", + "@angular-devkit/core": "9.1.6", + "@angular-devkit/schematics": "9.1.6", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "npm-package-arg": "^8.0.0", @@ -1791,9 +1797,9 @@ }, "dependencies": { "@angular-devkit/core": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", - "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.6.tgz", + "integrity": "sha512-lYXoRtsMsfyIrNAa49Hcx79FPRW6ZrWjK2yJ3avON1Q3WEHYb/DIUP+ItyOQAkNUsCVMyK4wkddsu8PsqEW6tg==", "dev": true, "requires": { "ajv": "6.12.0", @@ -1916,9 +1922,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.150", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", - "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==", + "version": "4.14.151", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.151.tgz", + "integrity": "sha512-Zst90IcBX5wnwSu7CAS0vvJkTjTELY4ssKbHiTnGcJgi170uiS8yQDdc3v6S77bRqYQIN1App5a1Pc2lceE5/g==", "dev": true }, "@types/minimatch": { @@ -1928,9 +1934,9 @@ "dev": true }, "@types/node": { - "version": "13.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", - "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", + "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", "dev": true }, "@types/q": { @@ -2617,6 +2623,14 @@ "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "assert": { @@ -2742,6 +2756,41 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "dev": true }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -2941,9 +2990,9 @@ } }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==", "dev": true }, "body-parser": { @@ -3196,21 +3245,43 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz", + "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "browserify-zlib": { @@ -3647,9 +3718,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001048", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", - "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", + "version": "1.0.30001059", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001059.tgz", + "integrity": "sha512-oOrc+jPJWooKIA0IrNZ5sYlsXc7NP7KLhNWrSGEJhnfSzDvDJ0zd3i6HXsslExY9bbu+x0FQ5C61LcqmPt7bOQ==", "dev": true }, "canonical-path": { @@ -4344,6 +4415,14 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "create-hash": { @@ -4977,6 +5056,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "dir-glob": { @@ -5179,9 +5266,9 @@ } }, "electron": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-8.2.5.tgz", - "integrity": "sha512-LxSCUwmlfJtRwthd3ofpYaZ+1C2hQSW8Ep1DD9K3VbnDItO+kb3t1z35daJgAab78j54aOwo9gMxJtvU0Ftj6w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-8.3.0.tgz", + "integrity": "sha512-XRjiIJICZCgUr2vKSUI2PTkfP0gPFqCtqJUaTJSfCTuE3nTrxBKOUNeRMuCzEqspKkpFQU3SB3MdbMSHmZARlQ==", "dev": true, "requires": { "@electron/get": "^1.0.1", @@ -5190,9 +5277,9 @@ }, "dependencies": { "@types/node": { - "version": "12.12.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", - "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==", + "version": "12.12.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.39.tgz", + "integrity": "sha512-pADGfwnDkr6zagDwEiCVE4yQrv7XDkoeVa4OfA9Ju/zRTk6YNDLGtQbkdL4/56mCQQCs4AhNrBIag6jrp7ZuOg==", "dev": true } } @@ -5549,9 +5636,9 @@ } }, "electron-to-chromium": { - "version": "1.3.423", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.423.tgz", - "integrity": "sha512-jXdnLcawJ/EMdN+j77TC3YyeAWiIjo1U63DFCKrjtLv4cu8ToyoF4HYXtFvkVVHhEtIl7lU1uDd307Xj1/YDjw==", + "version": "1.3.437", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.437.tgz", + "integrity": "sha512-PBQn2q68ErqMyBUABh9Gh8R6DunGky8aB5y3N5lPM7OVpldwyUbAK5AX9WcwE/5F6ceqvQ+iQLYkJYRysAs6Bg==", "dev": true }, "elliptic": { @@ -5567,6 +5654,14 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "emoji-regex": { @@ -5617,9 +5712,9 @@ } }, "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", + "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==", "dev": true }, "env-paths": { @@ -6169,9 +6264,9 @@ "dev": true }, "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "dev": true }, "events": { @@ -7143,13 +7238,33 @@ "dev": true }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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 + } } }, "hash.js": { @@ -8006,15 +8121,12 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz", - "integrity": "sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "requires": { "@babel/core": "^7.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.0.0", "semver": "^6.3.0" @@ -8789,6 +8901,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "mime": { @@ -8908,9 +9028,9 @@ "dev": true }, "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -8935,9 +9055,9 @@ } }, "minipass-pipeline": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", - "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", + "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -9183,9 +9303,9 @@ } }, "node-releases": { - "version": "1.1.53", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", - "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "version": "1.1.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz", + "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==", "dev": true }, "normalize-package-data": { @@ -9367,9 +9487,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "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 }, "semver": { @@ -10994,6 +11114,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } } }, "pump": { @@ -11509,26 +11637,6 @@ "uuid": "^3.3.2" } }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -12393,9 +12501,9 @@ } }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -12583,12 +12691,6 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -13249,9 +13351,9 @@ } }, "ts-node": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.1.tgz", - "integrity": "sha512-yrq6ODsxEFTLz0R3BX2myf0WBCSQh9A+py8PBo1dCzWIOcvisbyH6akNKqDHMgXePF2kir5mm5JXJTH3OUJYOQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", + "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", "dev": true, "requires": { "arg": "^4.1.0", @@ -13280,9 +13382,9 @@ } }, "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "tsutils": { "version": "3.17.1", @@ -13779,16 +13881,15 @@ "dev": true }, "wait-on": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-4.0.2.tgz", - "integrity": "sha512-Qpmgm3Hw/sXm7xK68FBsYy5r+Uid94/QymwnEjn9GTpfiWTUVYm0bccivVwY/BXGYO2r+5Cd8S/DzrRZqHK/9w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.0.0.tgz", + "integrity": "sha512-6v9lttmGGRT7Lr16E/0rISTBIV1DN72n9+77Bpt1iBfzmhBI+75RDlacFe0Q+JizkmwWXmgHUcFG5cgx3Bwqzw==", "dev": true, "requires": { "@hapi/joi": "^17.1.1", + "axios": "^0.19.2", "lodash": "^4.17.15", "minimist": "^1.2.5", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", "rxjs": "^6.5.5" } }, @@ -13890,554 +13991,14 @@ } }, "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "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" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "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", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } + "nan": "^2.12.1" } }, "is-binary-path": { @@ -14703,9 +14264,9 @@ } }, "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", "dev": true } } @@ -14838,554 +14399,14 @@ } }, "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "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" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "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", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } + "nan": "^2.12.1" } }, "is-absolute-url": { @@ -15607,9 +14628,9 @@ } }, "worker-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.2.tgz", - "integrity": "sha512-V+1zSZMOOKk+uBzKyNIODLQLsx59zSIOaI75J1EMS0iR1qy+KQR3y/pQ3T0vIhvPfDFapGRMsoMvQNEL3okqSA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", + "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", "dev": true, "requires": { "loader-utils": "^1.1.0" diff --git a/package.json b/package.json index ee9909ff6..68404d57c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "octodash", "description": "OctoDash is a simple, but beautiful dashboard for Octoprint.", - "version": "1.4.1", + "version": "1.5.0", "license": "Apache 2.0", "homepage": "https://github.com/UnchartedBull/OctoDash", "author": { @@ -82,23 +82,23 @@ "lodash": "^4.17.15", "ngx-spinner": "^9.0.2", "rxjs": "~6.5.5", - "tslib": "^1.11.1", + "tslib": "^1.13.0", "zone.js": "~0.10.3" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.901.4", - "@angular/cli": "~9.1.4", + "@angular-devkit/build-angular": "~0.901.6", + "@angular/cli": "~9.1.6", "@angular/compiler-cli": "^9.0.7", - "@angular/language-service": "~9.1.4", + "@angular/language-service": "~9.1.7", "@types/ajv": "^1.0.0", - "@types/lodash": "^4.14.150", - "@types/node": "^13.13.4", + "@types/lodash": "^4.14.151", + "@types/node": "^14.0.1", "@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0", "codelyzer": "^5.2.2", "electron-builder": "^22.6.0", "electron-reload": "^1.5.0", - "electron": "^8.2.5", + "electron": "^8.3.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.20.2", "eslint-plugin-prettier": "^3.1.3", @@ -106,8 +106,8 @@ "eslint": "^5.16.0", "npm-run-all": "^4.1.5", "prettier": "^2.0.5", - "ts-node": "~8.9.1", + "ts-node": "~8.10.1", "typescript": "~3.7.5", - "wait-on": "^4.0.2" + "wait-on": "^5.0.0" } } diff --git a/sample.config.json b/sample.config.json index 218cef434..300330e35 100644 --- a/sample.config.json +++ b/sample.config.json @@ -1,11 +1,11 @@ { "config": { "octoprint": { - "accessToken": "INSERT API KEY HERE", + "accessToken": "", "url": "http://localhost:5000/api/" }, "printer": { - "name": "NAME HERE", + "name": "", "xySpeed": 100, "zSpeed": 5, "defaultTemperatureFanSpeed": { @@ -18,7 +18,9 @@ "density": 0, "thickness": 0, "feedLength": 470, - "feedSpeed": 100 + "feedSpeed": 30, + "feedSpeedSlow": 3, + "purgeDistance": 30 }, "plugins": { "displayLayerProgress": { diff --git a/src/app/app.service.ts b/src/app/app.service.ts index dc21ed07a..4d4ec6004 100644 --- a/src/app/app.service.ts +++ b/src/app/app.service.ts @@ -34,25 +34,27 @@ export class AppService { } } - this.updateError = [".printer should have required property 'defaultTemperatureFanSpeed'"]; + this.updateError = [ + ".filament should have required property 'feedSpeedSlow'", + ".filament should have required property 'purgeDistance'", + ]; } // If the errors can be automatically fixed return true here public autoFixError(): boolean { let config = this.configService.getCurrentConfig(); - config.printer.defaultTemperatureFanSpeed = { - hotend: 200, - heatbed: 60, - fan: 100, - }; + config.filament.feedLength = 0; + config.filament.feedSpeed = 30; + config.filament.feedSpeedSlow = 5; + config.filament.purgeDistance = 30; this.configService.saveConfig(config); this.configService.updateConfig(); - return true; + return false; } private checkUpdate(): void { this.http.get('https://api.github.com/repos/UnchartedBull/OctoDash/releases/latest').subscribe( - (data: GitHubRealeaseInformation): void => { + (data: GitHubReleaseInformation): void => { if (this.version !== data.name.replace('v', '')) { this.notificationService.setUpdate( "It's time for an update", @@ -132,7 +134,7 @@ interface VersionInformation { version: string; } -interface GitHubRealeaseInformation { +interface GitHubReleaseInformation { name: string; [key: string]: string; } diff --git a/src/app/config/config.service.ts b/src/app/config/config.service.ts index f3bf158af..bc86c7dd3 100644 --- a/src/app/config/config.service.ts +++ b/src/app/config/config.service.ts @@ -236,6 +236,26 @@ export class ConfigService { public isPreheatPluginEnabled(): boolean { return this.config.plugins.preheatButton.enabled; } + + public isFilamentManagerEnabled(): boolean { + return this.config.plugins.filamentManager.enabled; + } + + public getFeedLength(): number { + return this.config.filament.feedLength; + } + + public getFeedSpeed(): number { + return this.config.filament.feedSpeed; + } + + public getFeedSpeedSlow(): number { + return this.config.filament.feedSpeedSlow; + } + + public getPurgeDistance(): number { + return this.config.filament.purgeDistance; + } } export interface Config { @@ -273,6 +293,8 @@ interface Filament { density: number; feedLength: number; feedSpeed: number; + feedSpeedSlow: number; + purgeDistance: number; } interface Plugins { @@ -385,7 +407,7 @@ const schema = { filament: { $id: '#/properties/filament', type: 'object', - required: ['density', 'thickness', 'feedLength', 'feedSpeed'], + required: ['density', 'thickness', 'feedLength', 'feedSpeed', 'feedSpeedSlow', 'purgeDistance'], properties: { density: { $id: '#/properties/filament/properties/density', @@ -403,6 +425,14 @@ const schema = { $id: '#/properties/filament/properties/feedSpeed', type: 'integer', }, + feedSpeedSlow: { + $id: '#/properties/filament/properties/feedSpeedSlow', + type: 'integer', + }, + purgeDistance: { + $id: '#/properties/filament/properties/purgeDistance', + type: 'integer', + }, }, }, plugins: { diff --git a/src/app/config/no-config/no-config.component.html b/src/app/config/no-config/no-config.component.html index 912bf4368..d5dbbdb07 100644 --- a/src/app/config/no-config/no-config.component.html +++ b/src/app/config/no-config/no-config.component.html @@ -19,40 +19,55 @@
Hey there! - It looks like this is the first time starting OctoDash!
- I'll help you setting up your config. If you encounter any issues please create an issue in - GitHub.

- Thanks for choosing OctoDash :) + It looks like this is the first start of OctoDash.
+ I'll help you set up your config and get you started.
+ If you encounter any issues please check the troubleshooting guide in the GitHub Wiki.

+ Thanks for choosing OctoDash
Sorry for bothering you again ...
We've released an update, so awesome, we needed to change the config. Please review your new config!

- Thanks for choosing OctoDash :) + Thanks for choosing OctoDash
- First, tell me some facts about your printer and filament so I can personalize OctoDash. + First, tell me some facts about your printer so I can personalize OctoDash for you.
- +
+
+ If you're unsure about any values during setup, just stick with the defaults. You can change all values (and + even more stuff) in the settings menu anytime. There is also a description of each attribute available in + the GitHub Wiki. +
- Filament - - +
+
+ + I also need some information about your extruder. + +
+ + mm - - - - g/cm³ +
+ + + mm/s +
+ These values will be used during the Filament Change Process. Be sure to have your Feed Length (length + between Extruder and Hotend) and Feed Speed configured correctly. +
-
+
Now I need to know something about your OctoPrint setup, so I can talk to your printer. @@ -70,7 +85,7 @@ name="accessToken" style="width: 67vw" required>
-
+
And now personalize me to your liking. @@ -85,14 +100,13 @@ ms -
- If you're unsure about what values to use, just use the default. You can change all values (and even - more stuff, like defining custom actions) later in the settings menu. +
+ Don't set your Value Refresh Interval too low (und 1000ms) as this may effect the performance of the + Raspberry Pi.
-
-
+
What plugins are you running? @@ -133,39 +147,39 @@ PSU Control
-
- Enclosure and PSU Control Plugin can be configured further in the settings! +
+ Enclosure and PSU Control Plugin can be configured further in the settings.
-
+
Great! I'll check everything. -
- - - +
+ + + Config Validation - {{ error }} + {{ error }}
- - - + + + Octoprint Connection - {{ octoprintConnectionError }} + {{ octoprintConnectionError }}
- - - + + + Saving Config - {{ configSaved }} + {{ configSaved }}
- done
diff --git a/src/app/config/no-config/no-config.component.scss b/src/app/config/no-config/no-config.component.scss index 73b5e52f3..8afc5fe1c 100644 --- a/src/app/config/no-config/no-config.component.scss +++ b/src/app/config/no-config/no-config.component.scss @@ -5,6 +5,11 @@ margin-left: 2vh; margin-right: 3vh; font-size: 3.6vw; + + fa-icon { + display: block; + margin-top: 2vh; + } } &__progress-bar { @@ -12,7 +17,7 @@ border-radius: 2vh; background-color: #44bd32; width: 0; - transition: width .7s ease-in-out; + transition: width 0.7s ease-in-out; &-wrapper { background-color: #718093; @@ -56,7 +61,7 @@ &-prefix { font-size: 3vw; - opacity: .7; + opacity: 0.7; padding-right: 1vw; } } @@ -83,16 +88,16 @@ } &-checked { - background-color: #2196F3; + background-color: #2196f3; width: 2.4vw; height: 2.4vw; display: block; - margin-left: .75vw; - margin-top: .75vw; - border-radius: .7vw; + margin-left: 0.75vw; + margin-top: 0.75vw; + border-radius: 0.7vw; &-disabled { - background-color: rgba(255, 255, 255, .5) + background-color: rgba(255, 255, 255, 0.5); } } } @@ -103,6 +108,15 @@ text-align: center; } + &-explanation { + font-size: 3vw; + font-style: italic; + opacity: 0.7; + margin-top: 4vh; + padding: 2vh 4vw; + text-align: center; + } + &__1 { &-welcome { display: block; @@ -115,27 +129,17 @@ } &__2 { - &-filament-divider { - display: block; + &-form { text-align: left; - margin-left: 4.3vw; - margin-top: 7vh; - margin-bottom: -7vh; - font-weight: 500; + margin-left: 4vw; } - } - &__3 { - &-explanation { - font-size: 3vw; - font-style: italic; - opacity: .7; - margin-top: 4vh; - padding: 2vh 4vw; + &-input { + margin-top: 5vh; } } - &__5 { + &__6 { &-check-wrapper { width: 100%; text-align: center; diff --git a/src/app/config/no-config/no-config.component.ts b/src/app/config/no-config/no-config.component.ts index cf129b5df..6c92ca9b9 100644 --- a/src/app/config/no-config/no-config.component.ts +++ b/src/app/config/no-config/no-config.component.ts @@ -11,7 +11,7 @@ import { Config, ConfigService } from '../config.service'; }) export class NoConfigComponent implements OnInit { public page = 0; - public totalPages = 5; + public totalPages = 6; private configUpdate: boolean; public config: Config; @@ -24,6 +24,7 @@ export class NoConfigComponent implements OnInit { public constructor(private configService: ConfigService, private http: HttpClient, private router: Router) { this.configUpdate = this.configService.isUpdate(); + console.log(this.configUpdate); if (this.configUpdate) { this.config = configService.getCurrentConfig(); } else { @@ -45,8 +46,10 @@ export class NoConfigComponent implements OnInit { filament: { thickness: 1.75, density: 1.25, - feedLength: 470, - feedSpeed: 100, + feedLength: 0, + feedSpeed: 30, + feedSpeedSlow: 3, + purgeDistance: 30, }, plugins: { displayLayerProgress: { @@ -140,7 +143,7 @@ export class NoConfigComponent implements OnInit { 'x-api-key': this.config.octoprint.accessToken, }), }; - this.http.get(this.config.octoprint.url + 'version', httpHeaders).subscribe( + this.http.get(this.config.octoprint.url + 'connection', httpHeaders).subscribe( (): void => { this.octoprintConnection = true; this.saveConfig(); @@ -188,7 +191,7 @@ export class NoConfigComponent implements OnInit { } public decreasePage(): void { - if (this.page === 4) { + if (this.page === 5) { this.config = this.configService.revertConfigForInput(this.config); } this.page -= 1; diff --git a/src/app/filament/filament.component.html b/src/app/filament/filament.component.html index 54e28528c..dd68c16b7 100644 --- a/src/app/filament/filament.component.html +++ b/src/app/filament/filament.component.html @@ -1,5 +1,133 @@ -:( - - This feature has not been implemented yet. - If you really, really want it before anything else - go to GitHub and like issue #14. -
back
+ + + + + + +
+ back + + +
+
+
+
+ skip +
+
+
+ select your new filament + + + + + + +
+ {{ spool.profile.material }} + + {{ spool.displayName }} + {{ getSpoolWeightLeft(spool.weight, spool.used) }}g left
+
+ no filament spools found +
+
+ loading spools ... +
+
+
+
+ heating the nozzle +
+
+
+
+1 +
+
+10 +
+
+
+ {{ hotendTarget }} + °C + /{{ hotendTemperature }} + °C +
+
+
-1 +
+
-10 +
+
+
+
+
+
+ {{ selectedSpool.profile.vendor }} +
+ + {{ getSpoolTemperatureOffset() }} + + °C +
+
+
+
+ wait {{ automaticHeatingStartSeconds }}s or - + start +
+
+
+ unloading filament +
+
+
+ {{ getFeedSpeed() }} mm/s +
+ stop +
+
+
+ load new filament + Only put a little filament in, I'll pull in the rest. +
+
+
+ {{ selectedSpool.displayName }} +
+
+ I'll wait for you. +
+
+ done +
+
+
+ loading filament +
+
+
+ {{ getFeedSpeed() }} mm/s +
+ stop +
+
+
+ purging filament +
{{ purgeAmount }}mm
+
+ +10mm + done +
+
+
diff --git a/src/app/filament/filament.component.scss b/src/app/filament/filament.component.scss index e69de29bb..f22c770a4 100644 --- a/src/app/filament/filament.component.scss +++ b/src/app/filament/filament.component.scss @@ -0,0 +1,311 @@ +.filament { + padding: 2vh 2vw 0; + + &__progress-bar { + height: 4vh; + border-radius: 2vh; + background-color: #44bd32; + width: 0; + transition: width 0.7s ease-in-out; + + &-wrapper { + background-color: #718093; + height: 4vh; + width: 20vw; + display: inline-block; + border-radius: 2vh; + + &-wide { + width: 50vw; + margin: 14vh auto 3vh; + display: block; + height: 7vh; + background-color: transparent; + border: 3px solid #f5f6fa; + border-radius: 3vh; + + > div { + height: 7vh; + width: 50vw; + background-color: transparent; + } + } + } + } + + &-heading { + display: block; + text-align: center; + font-size: 1rem; + } + + &-filaments { + margin-top: 2vh; + width: 94vw; + display: block; + height: 67vh; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + padding-right: 1.5vw; + + &::before { + content: ''; + width: 92vw; + height: 69.2vh; + position: fixed; + left: 1vw; + top: 31.5vh; + z-index: 2; + pointer-events: none; + background: linear-gradient(#353b48, transparent 6%, transparent 94%, #353b48); + } + + td { + font-size: 3.2vw; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + line-height: 9vh; + + &:last-of-type { + line-height: 7vh; + } + } + + tr { + background-color: #718093; + border-radius: 1vw; + padding: 0 1vw; + display: block; + margin-bottom: 2vh; + height: 10.5vh; + + &:first-of-type { + margin-top: 3.5vh; + } + + &:last-of-type { + margin-bottom: 3.5vh; + } + } + + &__type { + width: 15vw; + text-align: center; + margin-left: -2vw; + + &-box { + font-size: 2vw; + border: 3px solid; + width: auto; + padding: 1.3vh 1.5vw; + border-radius: 0.15rem; + font-weight: 500; + } + } + + &__name { + width: 62vw; + } + + &__weight-left { + width: 14vw; + text-align: right; + } + } + + &-no-filaments { + text-align: center; + font-size: 0.9rem; + margin-top: 20vh; + } + + &-heating { + &__center { + text-align: center; + } + + &__information { + display: inline-block; + width: 27vw; + font-size: 0.65rem; + text-align: left; + margin-left: 7vw; + line-height: 1rem; + overflow: visible; + vertical-align: top; + margin-top: 8vh; + margin-right: -5vw; + + &-color { + width: 5vw; + height: 5vw; + border-radius: 100%; + margin: 0 auto; + margin-bottom: 3vh; + border: 3px solid #f5f6fa; + } + + &-name { + text-align: center; + font-size: 0.8rem; + opacity: 0.7; + display: block; + } + + &-offset { + &-wrapper { + text-align: center; + margin-top: 6vh; + line-height: 2rem; + } + + &-indicator { + opacity: 0.7; + vertical-align: 0.5rem; + } + + &-value { + font-size: 2.5rem; + } + } + } + + &__controller { + display: inline-block; + width: 35vw; + border: solid 0.4vw; + border-radius: 2vw; + margin-top: 6vh; + + &-row { + display: flex; + } + + &-value { + padding: 3vh 6vw; + font-size: 6vw; + font-weight: 500; + text-align: center; + border-top: solid 0.4vw rgba(255, 255, 255, 0.5); + border-bottom: solid 0.4vw rgba(255, 255, 255, 0.5); + + &-unit { + text-align: center; + font-size: 4vw; + font-weight: 400; + } + } + + &-current { + display: block; + margin-top: 1vh; + font-size: 4vw; + + > span { + font-size: 2.8vw; + } + } + + &-control { + padding: 2vh 6vw; + font-size: 0.9rem; + flex: 1; + + &:first-of-type { + border-right: solid 0.4vw rgba(255, 255, 255, 0.5); + } + } + } + + &__start { + &-wrapper { + text-align: center; + margin-top: 4.5vh; + + > span { + font-size: 50%; + display: inline-block; + margin-left: -1vw; + margin-right: 1vw; + vertical-align: 1.2vw; + + > span { + font-size: 120%; + } + } + } + + &-heating { + display: inline-block; + background-color: #44bd32; + padding: 1vh 2vw; + border-radius: 1vw; + font-size: 0.8rem; + box-shadow: 0 10px 19px -8px rgba(0, 0, 0, 0.75); + } + } + } + + &-move { + &__speed { + font-size: 60%; + opacity: 0.8; + font-style: italic; + display: block; + text-align: center; + } + + &__wrapper { + text-align: center; + position: absolute; + width: 96vw; + bottom: 5vh; + } + + &__cancel { + display: inline-block; + background-color: #c23616; + padding: 2vh 2vw; + border-radius: 8px; + } + } + + &__done { + display: inline-block; + background-color: #44bd32; + padding: 2vh 2vw; + border-radius: 8px; + } + + &-purge { + &__amount { + text-align: center; + margin-top: 12vh; + font-size: 250%; + } + + &__more, + &__done { + display: inline-block; + padding: 2vh 2vw; + border-radius: 8px; + } + + &__more { + background-color: #7f8fa6; + margin-right: 10vw; + } + + &__done { + background-color: #44bd32; + } + } +} + +.scroll__thumb-inactive { + right: 2.5vw; + top: 36vh; + height: 57.2vh; +} diff --git a/src/app/filament/filament.component.ts b/src/app/filament/filament.component.ts index 48d61208c..56f528061 100644 --- a/src/app/filament/filament.component.ts +++ b/src/app/filament/filament.component.ts @@ -1,10 +1,313 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { ConfigService } from '../config/config.service'; +import { FilamentManagerService, FilamentSpool, FilamentSpoolList } from '../plugin-service/filament-manager.service'; +import { PrinterService, PrinterStatusAPI } from '../printer.service'; @Component({ selector: 'app-filament', templateUrl: './filament.component.html', styleUrls: ['./filament.component.scss'], }) -export class FilamentComponent { - public constructor() {} +export class FilamentComponent implements OnInit { + private selectedSpool: FilamentSpool; + private currentSpool: FilamentSpool; + private totalPages = 5; + + public page: number; + private timeout: number; + private timeout2: number; + + public filamentSpools: FilamentSpoolList; + public isLoadingSpools = true; + + public hotendTarget: number; + public hotendTemperature: number; + public automaticHeatingStartSeconds: number; + public isHeating: boolean; + + private feedSpeedSlow = false; + + public purgeAmount: number; + + public constructor( + private router: Router, + private configService: ConfigService, + private filamentManagerService: FilamentManagerService, + private printerService: PrinterService, + ) {} + + public ngOnInit(): void { + if (this.configService.isFilamentManagerEnabled()) { + this.setPage(0); + } else { + this.setPage(1); + } + this.hotendTarget = this.configService.getDefaultHotendTemperature(); + this.automaticHeatingStartSeconds = 6; + this.printerService.getObservable().subscribe((printerStatus: PrinterStatusAPI): void => { + this.hotendTemperature = printerStatus.nozzle.current; + }); + } + + public increasePage(): void { + if (this.page < this.totalPages) { + if ( + (this.page === 1 && this.configService.getFeedLength() === 0) || + (this.page === 3 && this.configService.getFeedLength() === 0) + ) { + this.setPage(this.page + 2); + } else { + this.setPage(this.page + 1); + } + } else if (this.page === this.totalPages) { + this.router.navigate(['/main-screen']); + } + } + + // PAGINATION + + public decreasePage(): void { + if (this.page === 0) { + this.router.navigate(['/main-screen']); + } else if (this.page === 1 && this.configService.isFilamentManagerEnabled()) { + this.setPage(0); + } else if (this.page === 2 || this.page === 3) { + this.setPage(1); + } else if (this.page === 4 || this.page === 5) { + this.setPage(3); + } + } + + private setPage(page: number): void { + clearTimeout(this.timeout); + clearTimeout(this.timeout2); + if (this.page === 4) { + this.feedSpeedSlow = false; + } + if (page === 0) { + this.selectedSpool = null; + this.getSpools(); + } else if (page === 1) { + this.isHeating = false; + this.automaticHeatingStartSeconds = 6; + this.automaticHeatingStartTimer(); + } else if (page === 2) { + this.unloadSpool(); + } else if (page === 3) { + this.disableExtruderStepper(); + } else if (page === 4) { + this.loadSpool(); + } else if (page === 5) { + this.purgeAmount = this.configService.getPurgeDistance(); + this.purgeFilament(this.purgeAmount); + } + this.page = page; + if (this.page > 0) { + setTimeout((): void => { + document.getElementById('progressBar').style.width = this.page * (20 / this.totalPages) + 'vw'; + }, 200); + } + } + + // FILAMENT MANAGEMENT + + private getSpools(): void { + this.isLoadingSpools = true; + this.filamentManagerService + .getSpoolList() + .then((spools: FilamentSpoolList): void => { + this.filamentSpools = spools; + }) + .catch((): void => { + this.filamentSpools = null; + }) + .finally((): void => { + this.filamentManagerService + .getCurrentSpool() + .then((spool: FilamentSpool): void => { + this.currentSpool = spool; + }) + .catch((): void => { + this.currentSpool = null; + }) + .finally((): void => { + this.isLoadingSpools = false; + }); + }); + } + + public getSpoolWeightLeft(weight: number, used: number): number { + return Math.floor(weight - used); + } + + public getSpoolTemperatureOffset(): string { + return `${ + this.selectedSpool.temp_offset === 0 ? '±' : this.selectedSpool.temp_offset > 0 ? '+' : '-' + }${Math.abs(this.selectedSpool.temp_offset)}`; + } + + public getCurrentSpoolColor(): string { + if (this.currentSpool) { + return this.currentSpool.color; + } else { + return '#44bd32'; + } + } + + public getSelectedSpoolColor(): string { + if (this.selectedSpool) { + return this.selectedSpool.color; + } else { + return '#44bd32'; + } + } + + public getFeedSpeed(): number { + if (this.feedSpeedSlow) { + return this.configService.getFeedSpeedSlow(); + } else { + return this.configService.getFeedSpeed(); + } + } + + public setSpool(spool: FilamentSpool): void { + this.selectedSpool = spool; + this.hotendTarget = this.hotendTarget + spool.temp_offset; + this.increasePage(); + } + + private unloadSpool(): void { + this.printerService.extrude(this.configService.getFeedLength() * -1, this.configService.getFeedSpeed()); + setTimeout((): void => { + const unloadingProgressBar = document.getElementById('filamentUnloadBar'); + unloadingProgressBar.style.backgroundColor = this.getCurrentSpoolColor(); + const unloadTime = this.configService.getFeedLength() / this.configService.getFeedSpeed() + 0.5; + unloadingProgressBar.style.transition = 'width ' + unloadTime + 's ease-in'; + setTimeout((): void => { + unloadingProgressBar.style.width = '0vw'; + this.timeout = setTimeout((): void => { + this.increasePage(); + }, unloadTime * 1000 + 500); + }, 200); + }, 0); + } + + private loadSpool(): void { + const loadTimeFast = (this.configService.getFeedLength() * 0.8) / this.configService.getFeedSpeed(); + const loadTimeSlow = (this.configService.getFeedLength() * 0.1) / this.configService.getFeedSpeedSlow(); + const loadTime = loadTimeFast + loadTimeSlow + 0.5; + this.printerService.extrude(this.configService.getFeedLength() * 0.75, this.configService.getFeedSpeed()); + setTimeout((): void => { + const loadingProgressBar = document.getElementById('filamentLoadBar'); + loadingProgressBar.style.backgroundColor = this.getSelectedSpoolColor(); + + loadingProgressBar.style.transition = 'width ' + loadTime + 's ease-in'; + setTimeout((): void => { + loadingProgressBar.style.width = '50vw'; + this.timeout = setTimeout((): void => { + this.printerService.extrude( + this.configService.getFeedLength() * 0.17, + this.configService.getFeedSpeedSlow(), + ); + this.feedSpeedSlow = true; + this.timeout2 = setTimeout((): void => { + this.increasePage(); + }, loadTimeSlow * 1000 + 400); + }, loadTimeFast * 1000 + 200); + }, 200); + }, 0); + } + + public setSpoolSelection(): void { + this.printerService.setTemperatureHotend(0); + if (this.selectedSpool) { + this.filamentManagerService.setCurrentSpool(this.selectedSpool).finally(this.increasePage.bind(this)); + } else { + this.increasePage(); + } + } + + public stopExtruderMovement(): void { + this.printerService.stopMotors(); + clearTimeout(this.timeout); + clearTimeout(this.timeout2); + + let bar: HTMLElement; + const wrapper = (document.getElementsByClassName( + 'filament__progress-bar-wrapper-wide', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + )[0] as any) as HTMLElement; + + if (document.getElementById('filamentLoadBar')) { + bar = document.getElementById('filamentLoadBar'); + } else { + bar = document.getElementById('filamentUnloadBar'); + } + + bar.style.width = Math.floor(bar.getBoundingClientRect().width) + 'px'; + wrapper.style.borderColor = '#c23616'; + } + + private disableExtruderStepper(): void { + this.printerService.executeGCode('M18 E '); + } + + // NOZZLE HEATING + + public changeHotendTarget(value: number): void { + this.hotendTarget = this.hotendTarget + value; + if (this.hotendTarget < 0) { + this.hotendTarget = 0; + } + if (this.hotendTarget > 999) { + this.hotendTarget = 999; + } + if (!this.isHeating) { + this.automaticHeatingStartSeconds = 5; + } else { + this.setNozzleTemperature(); + } + } + + private automaticHeatingStartTimer(): void { + this.automaticHeatingStartSeconds--; + if (this.automaticHeatingStartSeconds === 0) { + this.setNozzleTemperature(); + } else { + this.timeout = setTimeout(this.automaticHeatingStartTimer.bind(this), 1000); + } + } + + public setNozzleTemperature(): void { + if (this.page === 1) { + this.isHeating = true; + this.printerService.setTemperatureHotend(this.hotendTarget); + if (this.timeout) { + clearTimeout(this.timeout); + } + if (this.timeout2) { + clearTimeout(this.timeout2); + } + this.timeout2 = setTimeout(this.checkTemperature.bind(this), 1500); + } + } + + private checkTemperature(): void { + if (this.hotendTemperature >= this.hotendTarget) { + this.increasePage(); + } else { + this.timeout2 = setTimeout(this.checkTemperature.bind(this), 1500); + } + } + + public increasePurgeAmount(length: number): void { + this.purgeAmount += length; + this.purgeFilament(length); + } + + public purgeFilament(length: number): void { + this.printerService.extrude(length, this.configService.getFeedSpeedSlow()); + } } diff --git a/src/app/plugin-service/filament-manager.service.ts b/src/app/plugin-service/filament-manager.service.ts new file mode 100644 index 000000000..20dd32b94 --- /dev/null +++ b/src/app/plugin-service/filament-manager.service.ts @@ -0,0 +1,172 @@ +import { HttpClient, HttpErrorResponse } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Subscription } from 'rxjs'; + +import { ConfigService } from '../config/config.service'; +import { NotificationService } from '../notification/notification.service'; + +const colorRegexp = /\((.*)\)$/g; + +@Injectable({ + providedIn: 'root', +}) +export class FilamentManagerService { + private httpGETRequest: Subscription; + private httpPOSTRequest: Subscription; + + public constructor( + private configService: ConfigService, + private notificationService: NotificationService, + private http: HttpClient, + ) {} + + public getSpoolList(): Promise { + return new Promise((resolve, reject): void => { + if (this.httpGETRequest) { + this.httpGETRequest.unsubscribe(); + } + this.httpGETRequest = this.http + .get( + this.configService.getURL('plugin/filamentmanager/spools').replace('/api', ''), + this.configService.getHTTPHeaders(), + ) + .subscribe( + (spools: FilamentSpoolList): void => { + spools.spools.forEach((spool): void => { + let match = colorRegexp.exec(spool.name); + if (match) { + spool.color = match[1]; + spool.displayName = `${spool.profile.vendor} - ${spool.name.replace(match[0], '')}`; + } else { + spool.color = '#f5f6fa'; + spool.displayName = `${spool.profile.vendor} - ${spool.name}`; + } + colorRegexp.lastIndex = 0; + }); + resolve(spools); + }, + (error: HttpErrorResponse): void => { + this.notificationService.setError("Can't load filament spools!", error.message); + reject(); + }, + ); + }); + } + + public getCurrentSpool(): Promise { + return new Promise((resolve, reject): void => { + if (this.httpGETRequest) { + this.httpGETRequest.unsubscribe(); + } + this.httpGETRequest = this.http + .get( + this.configService.getURL('plugin/filamentmanager/selections').replace('/api', ''), + this.configService.getHTTPHeaders(), + ) + .subscribe( + (selections: FilamentSelections): void => { + if (selections.selections.length > 0) { + let match = colorRegexp.exec(selections.selections[0].spool.name); + if (match) { + selections.selections[0].spool.color = match[1]; + selections.selections[0].spool.displayName = `${ + selections.selections[0].spool.profile.vendor + } - ${selections.selections[0].spool.name.replace(match[0], '')}`; + } else { + selections.selections[0].spool.color = '#f5f6fa'; + selections.selections[0].spool.displayName = `${selections.selections[0].spool.profile.vendor} - ${selections.selections[0].spool.name}`; + } + colorRegexp.lastIndex = 0; + resolve(selections.selections[0].spool); + } + resolve(null); + }, + (error: HttpErrorResponse): void => { + this.notificationService.setError("Can't load filament spools!", error.message); + reject(); + }, + ); + }); + } + + public setCurrentSpool(spool: FilamentSpool): Promise { + return new Promise((resolve, reject): void => { + let setSpoolBody: FilamentSelectionPatch = { + selection: { + tool: 0, + spool: spool, + }, + }; + this.httpPOSTRequest = this.http + .patch( + this.configService.getURL('plugin/filamentmanager/selections/0').replace('/api', ''), + setSpoolBody, + this.configService.getHTTPHeaders(), + ) + .subscribe( + (selection: FilamentSelectionConfirm): void => { + if (selection.selection.spool.id === spool.id) { + resolve(); + } else { + this.notificationService.setError( + `Spool IDs didn't match`, + `Can't change spool. Please change spool manually in the OctoPrint UI.`, + ); + reject(); + } + }, + (error: HttpErrorResponse): void => { + this.notificationService.setError("Can't set new spool!", error.message); + reject(); + }, + ); + }); + } +} + +export interface FilamentSpoolList { + spools: FilamentSpool[]; +} + +export interface FilamentSelections { + selections: FilamentSelection[]; +} + +interface FilamentSelectionPatch { + selection: { + tool: number; + spool: FilamentSpool; + }; +} + +interface FilamentSelectionConfirm { + selection: FilamentSelection; +} + +interface FilamentSelection { + // eslint-disable-next-line camelcase + client_id: string; + spool: FilamentSpool; + tool: number; +} + +export interface FilamentSpool { + /* eslint-disable camelcase */ + cost: number; + id: number; + name: string; + displayName?: string; + color?: string; + profile: FilamentProfile; + temp_offset: number; + used: number; + weight: number; +} + +interface FilamentProfile { + density: number; + diameter: number; + id: number; + material: string; + vendor: string; +} diff --git a/src/app/print-control/print-control.component.ts b/src/app/print-control/print-control.component.ts index e1c5b7135..c52437f44 100644 --- a/src/app/print-control/print-control.component.ts +++ b/src/app/print-control/print-control.component.ts @@ -19,7 +19,12 @@ export class PrintControlComponent { public feedrate: number; public flowrate: number; - public constructor(private jobService: JobService, private printerService: PrinterService) {} + public constructor(private jobService: JobService, private printerService: PrinterService) { + this.temperatureHotend = 0; + this.temperatureHeatbed = 0; + this.flowrate = 100; + this.feedrate = 100; + } public isClickOnPreview(event: MouseEvent): boolean { const previewSwitchMin = window.innerWidth * 0.08; @@ -99,10 +104,6 @@ export class PrintControlComponent { } private loadData(): void { - this.temperatureHotend = 0; - this.temperatureHeatbed = 0; - this.flowrate = 100; - this.feedrate = 100; this.printerService .getObservable() .pipe(take(1)) diff --git a/src/app/printer.service.ts b/src/app/printer.service.ts index 847f5ce27..59b9f99c9 100644 --- a/src/app/printer.service.ts +++ b/src/app/printer.service.ts @@ -96,6 +96,10 @@ export class PrinterService { return this.observable; } + public stopMotors(): void { + this.executeGCode('M410'); + } + public jog(x: number, y: number, z: number): void { const jogPayload: JogCommand = { command: 'jog', @@ -114,6 +118,43 @@ export class PrinterService { ); } + public extrude(amount: number, speed: number): void { + let multiplier = 1; + let toBeExtruded: number; + if (amount < 0) { + multiplier = -1; + toBeExtruded = amount * -1; + } else { + toBeExtruded = amount; + } + + while (toBeExtruded > 0) { + if (toBeExtruded >= 100) { + toBeExtruded -= 100; + this.moveExtruder(100 * multiplier, speed); + } else { + this.moveExtruder(toBeExtruded * multiplier, speed); + toBeExtruded = 0; + } + } + } + + private moveExtruder(amount: number, speed: number): void { + const extrudePayload: ExtrudeCommand = { + command: 'extrude', + amount, + speed: speed * 60, + }; + this.httpPOSTRequest = this.http + .post(this.configService.getURL('printer/tool'), extrudePayload, this.configService.getHTTPHeaders()) + .subscribe( + (): void => null, + (error: HttpErrorResponse): void => { + this.notificationService.setError("Can't extrude Filament!", error.message); + }, + ); + } + public executeGCode(gCode: string): void { if (this.httpPOSTRequest) { this.httpPOSTRequest.unsubscribe(); @@ -238,13 +279,19 @@ export interface PrinterValue { } interface JogCommand { - command: string; + command: 'jog'; x: number; y: number; z: number; speed: number; } +interface ExtrudeCommand { + command: 'extrude'; + amount: number; + speed: number; +} + interface GCodeCommand { commands: string[]; } diff --git a/src/app/settings/settings.component.html b/src/app/settings/settings.component.html index 29c0307aa..638b4d03c 100644 --- a/src/app/settings/settings.component.html +++ b/src/app/settings/settings.component.html @@ -114,7 +114,7 @@ - + + + + + + +
Please set these values carefully, as they possibly + can destroy parts of your printer, just don't set your Feed Speed to high and your Feed + Length to long.

diff --git a/src/app/settings/settings.component.scss b/src/app/settings/settings.component.scss index d8ad46537..9be117af0 100644 --- a/src/app/settings/settings.component.scss +++ b/src/app/settings/settings.component.scss @@ -265,6 +265,13 @@ } } +.filament-feed-speed-info { + font-size: 1.7vw; + text-align: justify; + opacity: 0.7; + font-style: italic; +} + @keyframes fadein { from { opacity: 0;