From 0d1502e03d1e37f0725575c18546218a20abbbc4 Mon Sep 17 00:00:00 2001 From: Scavanger Date: Sun, 21 Apr 2024 20:46:16 -0300 Subject: [PATCH] Fixes, Readme, Makers --- README.md | 36 +- assets/linux/inav-configurator.desktop | 2 +- assets/windows/background.jpg | Bin 0 -> 14180 bytes assets/windows/banner.jpg | Bin 0 -> 4571 bytes assets/windows/inav_installer.bmp | Bin 154544 -> 0 bytes assets/windows/inav_installer_small.bmp | Bin 32824 -> 0 bytes assets/windows/installer.iss | 169 ----- assets/windows/wix.xml | 162 +++++ forge.config.js | 78 ++- js/appUpdater.js | 2 +- js/configurator_main.js | 26 +- js/defaults_dialog.js | 10 +- js/fc.js | 6 +- js/groundstation.js | 3 +- js/serial_backend.js | 12 +- js/sitl.js | 2 +- js/waypointCollection.js | 2 +- package-lock.json | 887 ++++++++++++++++++++---- package.json | 3 +- src/css/tabs/onboard_logging.css | 2 +- tabs/calibration.js | 4 +- tabs/cli.js | 2 +- tabs/gps.js | 10 +- tabs/mission_control.js | 27 +- tabs/mixer.js | 2 +- tabs/osd.js | 2 +- tabs/outputs.js | 12 +- tabs/sitl.js | 4 +- 28 files changed, 1056 insertions(+), 409 deletions(-) create mode 100644 assets/windows/background.jpg create mode 100644 assets/windows/banner.jpg delete mode 100644 assets/windows/inav_installer.bmp delete mode 100644 assets/windows/inav_installer_small.bmp delete mode 100644 assets/windows/installer.iss create mode 100644 assets/windows/wix.xml diff --git a/README.md b/README.md index 1bf8efa1..7f07253b 100644 --- a/README.md +++ b/README.md @@ -25,25 +25,25 @@ Depending on the target operating system, _INAV Configurator_ is distributed as ### Windows 1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases) -1. Download Configurator for Windows platform (win32 or win64 is present) -1. Extract ZIP archive -1. Run the INAV Configurator app from the unpacked folder -1. Configurator is not signed, so you have to allow Windows to run untrusted applications. There might be a monit for it during the first run +2. Download Configurator for Windows platform (win32 or win64 is present) +3. Install + * Extract ZIP archive and run the INAV Configurator app from the unpacked folder + * OR just use the setup program `INAV Configurator.msi` -### Linux +4. Configurator is not signed, so you have to allow Windows to run untrusted applications. There might be a monit for it during the first run -### Outdated, TODO: Update for Electron +### Linux 1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases) 2. Download Configurator for Linux platform (linux32 and linux64 are present) * **.rpm** is the Fedora installation file. Just download and install using `sudo dnf localinstall /path/to/INAV-Configurator_linux64-x.y.z-x86_64.rpm` or open it with a package manager (e.g. via Files) * **.deb** is the Debian/Ubuntu installation file. Just download and install using `sudo apt install /path/to/INAV-Configurator_linux64_x.y.z.deb` or open it with a package manager (e.g. via the File Manager) - * **.tar.gz** is a universal archive. Download and continue with these instructions to install -3. Change to the directory containing the downloaded **tar.gz** file + * **.zip** is a universal archive. Download and continue with these instructions to install +3. Change to the directory containing the downloaded **zip** file 4. download [this](https://raw.githubusercontent.com/iNavFlight/inav-configurator/master/assets/linux/inav-configurator.desktop) file to the same directory. Its filename should be `inav-configurator.desktop`. -5. Extract **tar.gz** archive +5. Extract **zip** archive ``` -tar -C /tmp/ -xf INAV-Configurator_linuxNN_x.y.z.tar.gz +unzip INAV-Configurator_linuxNN_x.y.z.tar.gz -d /tmp/ ``` **NN** is the bits of your OS. **x.y.z** is the INAV Configurator version number. @@ -72,9 +72,10 @@ sudo mv inav-configurator.desktop /usr/share/applications/ ### Mac 1. Visit [release page](https://github.com/iNavFlight/inav-configurator/releases) -1. Download Configurator for the Mac platform -1. Extract ZIP archive -1. Run INAV Configurator +2. Download Configurator for the Mac platform +3. Install + * Extract ZIP archive and run INAV Configurator + * OR use the DMG package for installation ## Building and running INAV Configurator locally (for development) @@ -92,6 +93,13 @@ Options: See [Electron Forge CLI Documentation](https://www.electronforge.io/cli#options-2) for details +To build the setup program for windows, you have to install [WiX Toolset V3](https://github.com/wixtoolset/wix3/releases) and add the `bin` folder to you `PATH`, e.g. +```C:\Program Files (x86)\WiX Toolset v3.14\bin``` + +To build deb and rpm packages for Linux, you have to install the following packages: +- Ubuntu/Debian: `dpkg, fakeroot, rpmbuild, build-essential, libudev-dev` +- OpenSuse/Fedora: `dpkg, fakeroot, rpmbuild, systemd-devel, devel-basis (zypper install -t pattern devel_basis), zip` + Example (note the double -- ): ``` npm run make -- --arch="x64" ``` @@ -99,7 +107,7 @@ Example (note the double -- ): To be able to open Inspector, set envorinment variable `NODE_ENV` to `develpoment` or set the flag directly when run `npm start`: -``` NODE_ENV=development npm start ``` +```NODE_ENV=development npm start``` Or use vscode and start a debug session `Debug Configurator` (Just hit F5!) diff --git a/assets/linux/inav-configurator.desktop b/assets/linux/inav-configurator.desktop index 40b0c778..3b8124bc 100644 --- a/assets/linux/inav-configurator.desktop +++ b/assets/linux/inav-configurator.desktop @@ -2,7 +2,7 @@ Name=INAV Configurator Comment=Crossplatform configuration tool for the INAV flight control system Exec=/opt/inav/inav-configurator/inav-configurator -Icon=/opt/inav/inav-configurator/icon/inav_icon_128.png +Icon=/opt/inav/inav-configurator/resources/app/assets/linux/icon/inav_icon_128.png Terminal=false Type=Application Categories=Utility \ No newline at end of file diff --git a/assets/windows/background.jpg b/assets/windows/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e044d5b6acccae158add96642c5e3eb55a71dd6 GIT binary patch literal 14180 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 H;Naf?w(9pB literal 0 HcmV?d00001 diff --git a/assets/windows/inav_installer.bmp b/assets/windows/inav_installer.bmp deleted file mode 100644 index d65f394074f8eb2ce18ae797fad5885659e645ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154544 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 diff --git a/assets/windows/inav_installer_small.bmp b/assets/windows/inav_installer_small.bmp deleted file mode 100644 index 535303fb42b17485732b46b3d3a31c82bc91673c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32824 zcmeHPOK;*z7S7Ce)Y1g$I>@nDut1|MSY&}9mvl>MDUmvw&VohaB#1>8ELdd00zqWu z{*CJ>{ES(|5z{vZZ5{p#KVb&^d%52{8xL$e5PINleA8|no*tgO$>+4)8sEI! zrPcN1wt3?1*=D`aDAeI;@JFOEkCjo3(O_DpM-JqdONmDCQz_;UpC~6ysD!13Owy1f zi8SGnL@cpQZ?AbWxlQuG3l840&8ls|LA)0@ora;(yy=wTT&aD) z-+$Bg@{vr~=0#loA&<}YdG7cP5sLr$oAD+ES0U_^#8Y5!`U`%>R ziiNM+Pwx}H$gKoqK5q~A7bE{&17wCEKA~P=j>tnBlr(9FVW=IWTHB%L#E$)Gw_|MzBEt!AZYjfno*0?K|G|!*68_cpL9~lG2za_aD{qrAA zq{*Z|KN^)(lu^k#ney@A<-UFM{D)eeo_hYHeM9<9`__q$JePW$)6I`8WD-7xB0q0z z$8aJYt&?=F<|#>PcXo2s(@vq?A)e-GI_RL;%L()CBY7^X`}E-4l)-aco8r@dqv z%Jr(V0ZIuz!y9pdru9Pb8L4LjubNH$v`5HRYcaBlwVwTd^Yer0z%8q|Nh!BNdJY#@ zWE;aOS?^You+%)aJmtRqdtWVClv>CBqCq1woEI;sPb~MiRg>F#CVkzY_uZnpC%N7p zS~BSuGm(j&!gcKbc7)tkM(-p!6gJP0=jniQlESA0q-vfel_uv|e1!RSlw6*iySn`i zUPqI@Z6;$U<&I2jsgJ!zYCScK$MCH=9gLPhwoPn}liPG;U8B|QAMzGAPw;o6umiJ# zaL%h)N%b^L?bpK!YL(Qk*j)H|dxy=YHRL&OkHeh3ks+*Ze{hVv@wc*V6btpr?%DMf zjPn(k^Tzaa%gE;^_zh`&ZpTO)QyFsb`TA=2ED3qUPcwt#xXkqQ>h|M%|FIj#ZWuH! zFzl!IjhOwmfpfy^t2ig6uftRMagWjzHVRMgg}&d8^fvGq&cvJ>;#eFCJQiC_FDS6L zHCrMFWAx@CWWAl^Y+1LDkkCKPb4pW4{USov-lENLHUcA(=JT{1!oo0(Dk&fDjs#jO zR@VYA_qvC01egwzP+1<1kb3V&>x9O-hXU+5cWKCazCdF!y*xb!IsNx>3T%S{S8t7| z2%qQOs3+!^j6N3<2d(gw&Xl`s~BRP ziCWL!%M>iW8_uq#gLr;=dUg9zn>N%z96jCwoEzB#Hn+p+#Q7+V{0_WXC?~W&T4$op zI=^k;iqYv3-{Np}`>_^hca2C(ACFaX_;6jp15|38m}i|*&ZPmj?xONbgJwv! zNfc1`+vZdp=5h2(13VCp<}dfx z9rVD+VC{R_A8{^b{p@abCp<7R*nW}IL5dyY8tBryX*s(6q?gVS zFQK)ZTN8ChT!I$%J>niPoes5r+o+dtB%KcGuycm|)+tyYTA^6aTa3UK(rm-!wcpf6 zWJaa)Ag^lw2uuB>t ztd@H)tiqde&pik}i;B2;1E_eI zV)NfP2feM5=wI<AW_Y0FyY{Eqb5C`4**Bv_;feoOm$q)`Rs5>I z?^n5YF;tuHfU2_NDZ8AcMK*F0M|PenHJkQzN^K*)L#FCLDYm=yIuf%`NE(J&l&@8m zulAWf$t~cu^gx^+Z-4Mfl?mg+$^2k`&^)2JB$WrBUf0$nG?Im362|7iPNeqzq#j=L^f=P8d{l3Rhhua>@k>POpeMf0R^wyxNY z)`=Abtmay;Z?TH_qwU9&T_)A~sA?io)<@Fnu_toBPmCmC_<{+=((AuNdi|>Q00qb=*qmGwS+K%p3LHpNyl#EQg%ZB7<4438B z=^L=)12^8w_8#nG?bXZSEf~pCaUXWb_CgXLx>*A=1Zn(FLas~5$ykeWU(fza6LzP{ z!7=PbD(he8#y=J_c{($Io3QX(6G_@N_$eOKta(NhcG*9MQBg(i2FLYsv2dB_MdHj3 zU(0^jm#ffzt%}J~;~SUjC`Q1Sd$_@(c|g5AL%rY4*#CeN*vjhdK-G0*GClDlVk{^A z5EX_+L(J<`#L#+}=OX_I(BL2D2BnL!6|QnPVgC@6TTz3Hp;v>F2icU4x6N7 zJkI2j6edeNDw4?09~+q$WpyVK?x=rYyB|T#`p`aiuE=`ZynveWqFb;`_G8bj?Z7R6 zxYGtFSYmbv``!Z&s9~>@v@JPT?Q`oxP-A;5fZUSTO5@uLm?`Afnkd(`A8M^a`|s?` z(ytP7JcL`4a2DF`)Qy0j)Ct+sf!IT*+@My6kpOPVz;7|du_*0Jdyeo%fxR#)$s3Y1 z4D)gk9n^h^te^J%eahEEw4O@no2g_!6!%Po&LbDm{rJJ#S>v`Q4=Vz(=?w>XBwW8`B<2ho^KuL})P^9G*Ti98S- zXVK}}3CS#`muKbJ{QR4ZROxg{*2CKpttriG?AO>Py-AP#=G?r7VrGU2xpEA(E286Y1aXzYJVeN#U1Z;8M=fIPrYzhFlcZj^_}3F92yJbbFftxQj^ zZa>|BBfEr*y5S!^_ND{&;dS2?{%Zx2yVeu!p&i2B&`k9hx(TTuzy zTC=6%Wu;cPAMac^Ftb-5Y~M2OShAkcKH@F)j>;!e_}+i)iX0c-7V^F@Ly!80Bp>&U z9EDRx(c`k7%Z>k7w@q!d@ndtF$C&l5d40~LPHuH=FbC(g*XL^aLkayRH1-cv3fIKd zC43uA@=11Fps`psty+ql)`^?qcw|y0-!1kT4C3;rxA8i;nVGFD6N zSUYx2tp8bRE5%u1Lj8yRMraHx%a{lGd^FXwaeA>Ihp2jadJe98^s#mxTixj^!hHR| zsrk+4??v(e%obzz<2z~6kLRbS32S-#u{ElrG|D-QzUvG-SlajicLu{7pL*{lEphxG z-;QF|!T84eH`Deo;r+?qEZRGXko9nN`)QXKQf=1{@xk4|riT2L?ebhuq795NckuZ$gFEAIz_|6CHyKpTR zasVBj|HFzog9}%)?EF8AN-c}N|Jr{jsU=ydHSCXiBU^K4$q;2DGg>o#6uElL;wQkn zu>Y->Cgq5|h~`OBd0O5&_IoAT!(nF`X%a*}tc9cRzb~kx676jc;eLofNQ<#mHd-?6 zdrQ>*Lv$X6+<;HqETlNbD5nJZ>;b*3Ke^NaJK^B;QK^IgdEr`^uZQL}UWPb`ETjQ4 zy+voR;**eN8O$#s4%XzT@IlA>5BA1GQ2-xATA^@_fAb0a43k}F}3`PDjF|SO$08t*hRx3F6 zkAmZ7>yhtFV~KO_<*a*@@0A>7&i~kJa%8K8b3M}Exmv~g*QkHg)cTfvWemaSiJ{QFrJtS5J4zwCkaeEBPK%hqq&|F2ks>*>6yf7t`;`SMrfmaX6P z|6j2N*V9?8e{bbA+Im|2EN(Bh{{v?dzm*5*q=i~R`|S6!Up}d1K7gBixp(J&eNTC1 z+NYrUhdtEJuWwgg3&tH`w}_29ze5{ '' then - begin - - UninstPath := RemoveQuotes(UninstPath); - - // Add this parameter to not return until uninstall finished. The drawback is that the uninstaller file is not deleted - ParameterStr := '_?=' + ExtractFilePath(UninstPath); - - if Exec(UninstPath, ParameterStr, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then - begin - // Delete the unistaller file and empty folders. Not deleting the files. - DeleteFile(UninstPath); - DelTree(ExtractFilePath(UninstPath), True, False, True); - end - else begin - Result := False; - MsgBox('Error uninstalling old Configurator ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); - end; - end - else begin - - // Search for new Inno Setup installations - UninstPath := GetQuietUninstallerPath(); - if UninstPath <> '' then - begin - if not Exec('>', UninstPath, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then - begin - Result := False; - MsgBox('Error uninstalling Configurator ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); - end; - end; - end; -end; \ No newline at end of file diff --git a/assets/windows/wix.xml b/assets/windows/wix.xml new file mode 100644 index 00000000..acace5f6 --- /dev/null +++ b/assets/windows/wix.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge.config.js b/forge.config.js index 8867a4d4..d09abc9c 100644 --- a/forge.config.js +++ b/forge.config.js @@ -1,27 +1,81 @@ +const path = require('path'); +const fs = require('fs'); + module.exports = { packagerConfig: { + executableName: "inav-configurator", asar: false, - icon: 'images/inav' + icon: 'images/inav', + ignore: [ + "^(\/\.vscode$)", + "^(\/support$)", + ".gitattributes", + ".gitignore", + "3D_model_creation.md", + "LICENSE", + "MAPPROXY.md", + "package-lock.json", + "README.md", + "inav_icon_128.psd", + ] }, rebuildConfig: {}, makers: [ { - name: '@electron-forge/maker-squirrel', + name: '@electron-forge/maker-wix', config: { - iconUrl: "https://raw.githubusercontent.com/iNavFlight/inav-configurator/master/images/inav.ico", - loadingGif: "images/inav-installing.gif" - }, + name: "INAV Configurator", + shortName: "INAV", + description: "Configurator for the open source flight controller software INAV.", + programFilesFolderName: "inav-configurator", + shortcutFolderName: "INAV", + manufacturer: "The INAV open source project", + appUserModelId: "com.inav.configurator", + icon: path.join(__dirname, "./assets/windows/inav_installer_icon.ico"), + upgradeCode: "13606ff3-b0bc-4dde-8fac-805bc8aed2f8", + ui : { + enabled: false, + chooseDirectory: true, + images: { + background: path.join(__dirname, "./assets/windows/background.jpg"), + banner: path.join(__dirname, "./assets/windows/banner.jpg") + } + }, + beforeCreate: (msiCreator) => { + return new Promise((resolve, reject) => { + fs.readFile(path.join(__dirname,"./assets/windows/wix.xml"), "utf8" , (err, content) => { + if (err) { + reject (err); + } + msiCreator.wixTemplate = content; + resolve(); + }); + }); + } + } + }, + { + name: '@electron-forge/maker-dmg', + config: { + name: "INAV Configurator", + background: "./assets/osx/dmg-background.png" + } }, - { name: '@electron-forge/maker-zip', - platforms: ['win32', 'darwin'], + platforms: ['win32', 'linux', 'darwin'], }, { name: '@electron-forge/maker-deb', config: { options: { - icon: "images/inav_icon_128.png" + name: "inav-configurator", + productName: "INAV Configurator", + categories: ["Utility"], + icon: "./assets/linux/icon/inav_icon_128.png", + description: "Configurator for the open source flight controller software INAV.", + homepage: "https://github.com/inavflight/", + } }, }, @@ -29,7 +83,13 @@ module.exports = { name: '@electron-forge/maker-rpm', config: { options: { - icon: "images/inav_icon_128.png" + name: "inav-configurator", + productName: "INAV Configurator", + license: "GPL-3.0", + categories: ["Utility"], + icon: "./assets/linux/icon/inav_icon_128.png", + description: "Configurator for the open source flight controller software INAV.", + homepage: "https://github.com/inavflight/", } }, }, diff --git a/js/appUpdater.js b/js/appUpdater.js index bf8a7821..0e92ec36 100644 --- a/js/appUpdater.js +++ b/js/appUpdater.js @@ -3,7 +3,7 @@ const semver = require('semver'); const { GUI } = require('./gui'); -const jBox = require('./libraries/jBox/jBox.min.js'); +const jBox = require('./libraries/jBox/jBox.min'); const i18n = require('./localization'); var appUpdater = appUpdater || {}; diff --git a/js/configurator_main.js b/js/configurator_main.js index 3d22ac06..458605d4 100644 --- a/js/configurator_main.js +++ b/js/configurator_main.js @@ -1,12 +1,12 @@ window.$ = window.jQuery = require('jquery'), require('jquery-ui-dist/jquery-ui'), require('jquery-textcomplete'), - require('./libraries/jquery.flightindicators.js'), - require('./libraries/jquery.nouislider.all.min.js'), - require('./libraries/jquery.ba-throttle-debounce.js'); + require('./libraries/jquery.flightindicators'), + require('./libraries/jquery.nouislider.all.min'), + require('./libraries/jquery.ba-throttle-debounce'); const { app } = require('@electron/remote'); -const d3 = require('./libraries/d3.min.js'); +const d3 = require('./libraries/d3.min'); const Store = require('electron-store'); const store = new Store(); @@ -14,15 +14,15 @@ const { GUI, TABS } = require('./gui'); const CONFIGURATOR = require('./data_storage'); const FC = require('./fc'); const { globalSettings, UnitType } = require('./globalSettings'); -const { PLATFORM } = require('./model.js') +const { PLATFORM } = require('./model') const i18n = require('./localization'); const SerialBackend = require('./serial_backend'); const MSP = require('./msp'); const MSPCodes = require('./../js/msp/MSPCodes'); -const mspHelper = require('./msp/MSPHelper.js'); -const update = require('./globalUpdates.js'); -const appUpdater = require('./appUpdater.js'); -const CliAutoComplete = require('./CliAutoComplete.js'); +const mspHelper = require('./msp/MSPHelper'); +const update = require('./globalUpdates'); +const appUpdater = require('./appUpdater'); +const CliAutoComplete = require('./CliAutoComplete'); const { SITLProcess } = require('./sitl'); ; process.on('uncaughtException', function (error) { @@ -229,19 +229,19 @@ $(function() { TABS.modes.initialize(content_ready); break; case 'gps': - require('./../tabs/gps.js'); + require('./../tabs/gps'); TABS.gps.initialize(content_ready); break; case 'magnetometer': - require('./../tabs/magnetometer.js'); + require('./../tabs/magnetometer'); TABS.magnetometer.initialize(content_ready); break; case 'mission_control': - require('./../tabs/mission_control.js'); + require('./../tabs/mission_control'); TABS.mission_control.initialize(content_ready); break; case 'mixer': - require('./../tabs/mixer.js'); + require('./../tabs/mixer'); TABS.mixer.initialize(content_ready); break; case 'outputs': diff --git a/js/defaults_dialog.js b/js/defaults_dialog.js index 5b3f521e..da345350 100644 --- a/js/defaults_dialog.js +++ b/js/defaults_dialog.js @@ -1,16 +1,16 @@ 'use strict'; const { GUI } = require('./../js/gui'); -const FC = require('./fc.js'); +const FC = require('./fc'); const MSP = require('./msp'); const MSPCodes = require('./../js/msp/MSPCodes'); const mspHelper = require('./msp/MSPHelper'); -const MSPChainerClass = require('./msp/MSPchainer.js'); +const MSPChainerClass = require('./msp/MSPchainer'); const features = require('./feature_framework'); -const periodicStatusUpdater = require('./periodicStatusUpdater.js'); +const periodicStatusUpdater = require('./periodicStatusUpdater'); const { mixer } = require('./model'); -const jBox = require('./libraries/jBox/jBox.min.js'); -const i18n = require('./localization.js'); +const jBox = require('./libraries/jBox/jBox.min'); +const i18n = require('./localization'); var savingDefaultsModal; diff --git a/js/fc.js b/js/fc.js index 791d10d8..366d6e46 100644 --- a/js/fc.js +++ b/js/fc.js @@ -10,8 +10,8 @@ const ProgrammingPidStatus = require('./programmingPidStatus'); const WaypointCollection = require('./waypointCollection'); const OutputMappingCollection = require('./outputMapping'); const SafehomeCollection = require('./safehomeCollection'); -const FwApproachCollection = require('./fwApproachCollection.js') -const { PLATFORM } = require('./model.js') +const FwApproachCollection = require('./fwApproachCollection') +const { PLATFORM } = require('./model') const VTX = require('./vtx'); const BitHelper = require('./bitHelper'); @@ -94,7 +94,7 @@ var FC = { return (this.MIXER_CONFIG.platformType == PLATFORM.AIRPLANE); }, isMultirotor: function () { - return (this.MIXER_CONFIG.platformType == PLATFORM.MULTIROTOR || MIXER_CONFIG.platformType == PLATFORM.TRICOPTER); + return (this.MIXER_CONFIG.platformType == PLATFORM.MULTIROTOR || this.MIXER_CONFIG.platformType == PLATFORM.TRICOPTER); }, isRpyFfComponentUsed: function () { return true; // Currently all planes have roll, pitch and yaw FF diff --git a/js/groundstation.js b/js/groundstation.js index 8787ced3..f9166972 100644 --- a/js/groundstation.js +++ b/js/groundstation.js @@ -1,5 +1,6 @@ 'use strict'; +const path = require('path'); const ol = require('openlayers'); const { GUI } = require('./gui'); @@ -139,7 +140,7 @@ const groundstation = (function () { anchor: [0.5, 0.5], opacity: 1, scale: 0.6, - src: '../images/icons/icon_mission_airplane.png' + src: path.join(__dirname, './../images/icons/icon_mission_airplane.png') })) }); privateScope.cursorPosition = new ol.geom.Point(ol.proj.fromLonLat([lon, lat])); diff --git a/js/serial_backend.js b/js/serial_backend.js index e9ef6e2d..3589ed92 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -21,12 +21,12 @@ const timeout = require('./timeouts'); const mspBalancedInterval = require('./msp_balanced_interval'); const defaultsDialog = require('./defaults_dialog'); const { SITLProcess } = require('./sitl'); -const update = require('./globalUpdates.js'); -const BitHelper = require('./bitHelper.js'); -const BOARD = require('./boards.js'); -const jBox = require('./libraries/jBox/jBox.min.js'); -const groundstation = require('./groundstation.js'); -const ltmDecoder = require('./ltmDecoder.js'); +const update = require('./globalUpdates'); +const BitHelper = require('./bitHelper'); +const BOARD = require('./boards'); +const jBox = require('./libraries/jBox/jBox.min'); +const groundstation = require('./groundstation'); +const ltmDecoder = require('./ltmDecoder'); var SerialBackend = (function () { diff --git a/js/sitl.js b/js/sitl.js index c3981001..f80e0e9e 100644 --- a/js/sitl.js +++ b/js/sitl.js @@ -211,7 +211,7 @@ var SITLProcess = { sitlExePath = path.join(__dirname, './../resources/sitl/windows/inav_SITL.exe'); eepromPath = `${app.getPath('userData')}\\${eepromFileName}` } else if (GUI.operating_system == 'Linux') { - sitlExePath = './../resources/sitl/linux/inav_SITL'; + sitlExePath = path.join(__dirname, './../resources/sitl/linux/inav_SITL'); eepromPath = `${app.getPath('userData')}/${eepromFileName}` chmod(sitlExePath, 0o755, err => { if (err) diff --git a/js/waypointCollection.js b/js/waypointCollection.js index 58a8fa1e..77e88861 100644 --- a/js/waypointCollection.js +++ b/js/waypointCollection.js @@ -421,7 +421,7 @@ let WaypointCollection = function () { self.getElevation = async function(globalSettings) { const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure(true); let lengthMission = self.getDistance(true); - let totalMissionDistance = lengthMission[lengthMission.length -1].toFixed(1); + let totalMissionDistance = lengthMission.length >= 1 ? lengthMission[lengthMission.length -1].toFixed(1) : 0; let samples; let sampleMaxNum; let sampleDistance; diff --git a/package-lock.json b/package-lock.json index d45855cd..b36efd28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,8 +35,10 @@ "devDependencies": { "@electron-forge/cli": "^7.2.0", "@electron-forge/maker-deb": "^7.2.0", + "@electron-forge/maker-dmg": "^7.2.0", + "@electron-forge/maker-flatpak": "^7.2.0", "@electron-forge/maker-rpm": "^7.2.0", - "@electron-forge/maker-squirrel": "^7.2.0", + "@electron-forge/maker-wix": "^7.2.0", "@electron-forge/maker-zip": "^7.2.0", "electron": "28.1.4" } @@ -52,6 +54,14 @@ "node": ">=6.9.0" } }, + "node_modules/@bitdisaster/exe-icon-extractor": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@bitdisaster/exe-icon-extractor/-/exe-icon-extractor-1.0.10.tgz", + "integrity": "sha512-iTZ8cVGZ5dglNRyFdSj8U60mHIrC8XNIuOHN/NkM5/dQP4nsmpyqeQTAADLLQgoFCNJD+DiwQCv8dR2cCeWP4g==", + "dev": true, + "hasInstallScript": true, + "optional": true + }, "node_modules/@electron-forge/cli": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.4.0.tgz", @@ -194,6 +204,40 @@ "electron-installer-debian": "^3.2.0" } }, + "node_modules/@electron-forge/maker-dmg": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-dmg/-/maker-dmg-7.4.0.tgz", + "integrity": "sha512-xRCMNtnpvQNwrDYvwbVFegnErnIMpHGZANrjwushlH9+Fsu60DFvf5s3AVkgsYdQTqlY7wYRG1mziYZmRlPAIw==", + "dev": true, + "dependencies": { + "@electron-forge/maker-base": "7.4.0", + "@electron-forge/shared-types": "7.4.0", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">= 16.4.0" + }, + "optionalDependencies": { + "electron-installer-dmg": "^4.0.0" + } + }, + "node_modules/@electron-forge/maker-flatpak": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-flatpak/-/maker-flatpak-7.4.0.tgz", + "integrity": "sha512-YWmPBr8bbzEMD4Drar8KXE0A7phopcWWo/i1br44Aeg5soygmcWgatUYe1a5jKDPOgXiV7TfJUwhXbljYAhlFw==", + "dev": true, + "dependencies": { + "@electron-forge/maker-base": "7.4.0", + "@electron-forge/shared-types": "7.4.0", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">= 16.4.0" + }, + "optionalDependencies": { + "@malept/electron-installer-flatpak": "^0.11.4" + } + }, "node_modules/@electron-forge/maker-rpm": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.4.0.tgz", @@ -210,21 +254,21 @@ "electron-installer-redhat": "^3.2.0" } }, - "node_modules/@electron-forge/maker-squirrel": { + "node_modules/@electron-forge/maker-wix": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.4.0.tgz", - "integrity": "sha512-mCQyufnSNfjffiKho59ZqVg4W601zGOl6h01OyfDwjOU/G4iQtpnnDEOXGe26q7OVT5ORb1WDnfyGgBeJ6Ge7g==", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-wix/-/maker-wix-7.4.0.tgz", + "integrity": "sha512-+a5zNh/e8/aguDT7Ya+hEsKkkV7VSSaaB45RaA4ahI91bx/mRAWEhGQjnqakGkSAZkRzM6n37Tedx3wz0/2H4A==", "dev": true, "dependencies": { "@electron-forge/maker-base": "7.4.0", "@electron-forge/shared-types": "7.4.0", - "fs-extra": "^10.0.0" + "chalk": "^4.0.0", + "electron-wix-msi": "^5.1.3", + "log-symbols": "^4.0.0", + "parse-author": "^2.0.0" }, "engines": { "node": ">= 16.4.0" - }, - "optionalDependencies": { - "electron-winstaller": "^5.3.0" } }, "node_modules/@electron-forge/maker-zip": { @@ -746,6 +790,190 @@ "node": ">= 12.13.0" } }, + "node_modules/@malept/electron-installer-flatpak": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@malept/electron-installer-flatpak/-/electron-installer-flatpak-0.11.4.tgz", + "integrity": "sha512-ZdwhT4WeeJWdnsmALUtQ7bn4pzYVh0Vg+4NnF1S3n3OACc9IWg+B+LxI5gT3XSXIrxogouqkjM6gD8S592awyA==", + "dev": true, + "optional": true, + "os": [ + "darwin", + "linux" + ], + "dependencies": { + "@malept/flatpak-bundler": "^0.4.0", + "debug": "^4.1.1", + "electron-installer-common": "^0.10.0", + "lodash": "^4.17.15", + "semver": "^7.1.1", + "yargs": "^16.0.0" + }, + "bin": { + "electron-installer-flatpak": "bin/electron-installer-flatpak.js" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "optional": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/electron-installer-flatpak/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "optional": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1308,6 +1536,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/appdmg": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/appdmg/-/appdmg-0.6.6.tgz", + "integrity": "sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "async": "^1.4.2", + "ds-store": "^0.1.5", + "execa": "^1.0.0", + "fs-temp": "^1.0.0", + "fs-xattr": "^0.3.0", + "image-size": "^0.7.4", + "is-my-json-valid": "^2.20.0", + "minimist": "^1.1.3", + "parse-color": "^1.0.0", + "path-exists": "^4.0.0", + "repeat-string": "^1.5.4" + }, + "bin": { + "appdmg": "bin/appdmg.js" + }, + "engines": { + "node": ">=8.5" + } + }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -1382,12 +1639,9 @@ } }, "node_modules/async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dependencies": { - "lodash": "^4.14.0" - } + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" }, "node_modules/async-limiter": { "version": "1.0.1", @@ -1459,6 +1713,16 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base32-encode": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base32-encode/-/base32-encode-1.2.0.tgz", + "integrity": "sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A==", + "dev": true, + "optional": true, + "dependencies": { + "to-data-view": "^1.1.0" + } + }, "node_modules/base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -1566,6 +1830,16 @@ "node": ">=0.10.40" } }, + "node_modules/bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "dev": true, + "optional": true, + "dependencies": { + "stream-buffers": "~2.2.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1747,6 +2021,20 @@ "node": ">=8" } }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -2066,6 +2354,14 @@ "readable-stream": "^2.0.6" } }, + "node_modules/closure-util/node_modules/async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dependencies": { + "lodash": "^4.14.0" + } + }, "node_modules/closure-util/node_modules/fs-extra": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", @@ -2425,6 +2721,52 @@ "node": ">= 8" } }, + "node_modules/cross-spawn-windows-exe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz", + "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-cross-spawn-windows-exe?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "is-wsl": "^2.2.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn-windows-exe/node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/cross-zip": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cross-zip/-/cross-zip-4.0.1.tgz", @@ -2713,6 +3055,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ds-store": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ds-store/-/ds-store-0.1.6.tgz", + "integrity": "sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw==", + "dev": true, + "optional": true, + "dependencies": { + "bplist-creator": "~0.0.3", + "macos-alias": "~0.2.5", + "tn1150": "^0.1.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3027,6 +3381,26 @@ "node": ">=10" } }, + "node_modules/electron-installer-dmg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/electron-installer-dmg/-/electron-installer-dmg-4.0.0.tgz", + "integrity": "sha512-g3W6XnyUa7QGrAF7ViewHdt6bXV2KYU1Pm1CY3pZpp+H6mOjCHHAhf/iZAxtaX1ERCb+SQHz7xSsAHuNH9I8ZQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^4.3.2", + "minimist": "^1.1.1" + }, + "bin": { + "electron-installer-dmg": "bin/electron-installer-dmg.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "optionalDependencies": { + "appdmg": "^0.6.4" + } + }, "node_modules/electron-installer-redhat": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/electron-installer-redhat/-/electron-installer-redhat-3.4.0.tgz", @@ -3264,77 +3638,26 @@ "node": ">=8.0.0" } }, - "node_modules/electron-winstaller": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.3.0.tgz", - "integrity": "sha512-ml77/OmeeLFFc+dk3YCwPQrl8rthwYcAea6mMZPFq7cGXlpWyRmmT0LY73XdCukPnevguXJFs+4Xu+aGHJwFDA==", + "node_modules/electron-wix-msi": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/electron-wix-msi/-/electron-wix-msi-5.1.3.tgz", + "integrity": "sha512-EYj1cm1nZoVHmIIx3o0aKt784lxdEpJnXbEnyypklUCnglqSb7ni+1xi1Vp/gtrGS/mzIxnWBT+x5fIfuDjhvA==", "dev": true, - "hasInstallScript": true, - "optional": true, "dependencies": { - "@electron/asar": "^3.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash.template": "^4.2.2", - "temp": "^0.9.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "@electron/windows-sign": "^1.1.2" - } - }, - "node_modules/electron-winstaller/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@electron/windows-sign": "^1.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "klaw": "^4.1.0", + "lodash": "^4.17.21", + "rcedit": "^4.0.1", + "rcinfo": "^0.1.3", + "semver": "^7.6.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/electron-winstaller/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/electron-winstaller/node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dev": true, - "optional": true, - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" + "node": ">=14.0.0" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/electron-winstaller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 4.0.0" + "optionalDependencies": { + "@bitdisaster/exe-icon-extractor": "^1.0.10" } }, "node_modules/electron/node_modules/@electron/get": { @@ -3392,6 +3715,13 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true, + "optional": true + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -3617,18 +3947,6 @@ "node": ">=4.8" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/execa/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -3722,6 +4040,20 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -3835,6 +4167,16 @@ "node": ">= 12" } }, + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "optional": true, + "dependencies": { + "imul": "^1.0.0" + } + }, "node_modules/foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", @@ -3912,6 +4254,30 @@ "node": ">= 8" } }, + "node_modules/fs-temp": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fs-temp/-/fs-temp-1.2.1.tgz", + "integrity": "sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==", + "dev": true, + "optional": true, + "dependencies": { + "random-path": "^0.1.0" + } + }, + "node_modules/fs-xattr": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/fs-xattr/-/fs-xattr-0.3.1.tgz", + "integrity": "sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4027,6 +4393,26 @@ "node": ">= 0.10.0" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-property": "^1.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -4178,17 +4564,15 @@ "dev": true }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/getpass": { @@ -4414,11 +4798,6 @@ "uglify-js": "^2.6" } }, - "node_modules/handlebars/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" - }, "node_modules/har-schema": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", @@ -4727,6 +5106,29 @@ } ] }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4829,6 +5231,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4882,6 +5299,27 @@ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, + "node_modules/is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true, + "optional": true + }, + "node_modules/is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "optional": true, + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4899,6 +5337,13 @@ "node": ">=8" } }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true, + "optional": true + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4934,6 +5379,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -5029,6 +5486,14 @@ "node": ">=0.8.0" } }, + "node_modules/jsdoc/node_modules/klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha512-Hx5PvgJKTWpMkNJCYrBUNBLlxYIkxN4FVU/BnZP4CFh5BpiHOgujAPx7iFVz/phD0bP8rsqD48gtqcvNlUt0lQ==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/jsdoc/node_modules/marked": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", @@ -5103,6 +5568,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -5155,11 +5630,12 @@ } }, "node_modules/klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha512-Hx5PvgJKTWpMkNJCYrBUNBLlxYIkxN4FVU/BnZP4CFh5BpiHOgujAPx7iFVz/phD0bP8rsqD48gtqcvNlUt0lQ==", - "dependencies": { - "graceful-fs": "^4.1.9" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "dev": true, + "engines": { + "node": ">=14.14.0" } }, "node_modules/lazy-cache": { @@ -5223,40 +5699,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true, - "optional": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "optional": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "optional": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -5318,6 +5766,20 @@ "node": ">=12" } }, + "node_modules/macos-alias": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.11.tgz", + "integrity": "sha512-zIUs3+qpml+w3wiRuADutd7XIO8UABqksot10Utl/tji4UxZzLG4fWDC+yJZoO8/Ehg5RqsvSRE/6TS5AEOeWw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.4.0" + } + }, "node_modules/magic-string": { "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", @@ -5611,6 +6073,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/murmur-32": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/murmur-32/-/murmur-32-0.2.0.tgz", + "integrity": "sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==", + "dev": true, + "optional": true, + "dependencies": { + "encode-utf8": "^1.0.3", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -5626,9 +6107,9 @@ "dev": true }, "node_modules/node-abi": { - "version": "3.58.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.58.0.tgz", - "integrity": "sha512-pXY1jnGf5T7b8UNzWzIqf0EkX4bx/w8N2AvwlGnk2SYYA/kzDVPaH0Dh0UG4EwxBB5eKOIZKPr8VAHSHL1DPGg==", + "version": "3.60.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.60.0.tgz", + "integrity": "sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -5937,6 +6418,14 @@ "walk": "2.3.9" } }, + "node_modules/openlayers/node_modules/async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dependencies": { + "lodash": "^4.14.0" + } + }, "node_modules/openlayers/node_modules/fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -6166,6 +6655,23 @@ "node": ">=0.10.0" } }, + "node_modules/parse-color": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", + "integrity": "sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "~0.5.0" + } + }, + "node_modules/parse-color/node_modules/color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==", + "dev": true, + "optional": true + }, "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -6259,13 +6765,17 @@ } }, "node_modules/pe-library": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.0.tgz", - "integrity": "sha512-yZ+4d3YHKUjO0BX03oXFfHRKLdYKDO2HmCt1RcApPxme/P5ASPbbKnuQkzFrmT482wi2kfO+sPgqasrz5QeU1w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.1.tgz", + "integrity": "sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==", "dev": true, "engines": { "node": ">=14", "npm": ">=7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" } }, "node_modules/pend": { @@ -6594,6 +7104,17 @@ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" }, + "node_modules/random-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/random-path/-/random-path-0.1.2.tgz", + "integrity": "sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==", + "dev": true, + "optional": true, + "dependencies": { + "base32-encode": "^0.1.0 || ^1.0.0", + "murmur-32": "^0.1.0 || ^0.2.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -6610,6 +7131,24 @@ "quickselect": "^1.0.0" } }, + "node_modules/rcedit": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-4.0.1.tgz", + "integrity": "sha512-bZdaQi34krFWhrDn+O53ccBDw0MkAT2Vhu75SqhtvhQu4OPyFM4RoVheyYiVQYdjhUi6EJMVWQ0tR6bCIYVkUg==", + "dev": true, + "dependencies": { + "cross-spawn-windows-exe": "^1.1.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/rcinfo": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/rcinfo/-/rcinfo-0.1.3.tgz", + "integrity": "sha512-c2XV2aYgY7x3BscO+/B/nCTtMvnclZ8w5D7R6zgK4sGOQnE0MjlXhOPynno7yp6Iw1RPNSXBwXwB1svZVRfcSw==", + "dev": true + }, "node_modules/read-binary-file-arch": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", @@ -6823,16 +7362,20 @@ } }, "node_modules/resedit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.0.tgz", - "integrity": "sha512-vrrJCabKxAW4MT1QivtAAb0poGp8KT2qhnSzfN9tFIxb2rQu1hRHNn1VgGSZR7nmxGaW5Yz0YeW1bjgvRfNoKA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.2.tgz", + "integrity": "sha512-UKTnq602iVe+W5SyRAQx/WdWMnlDiONfXBLFg/ur4QE4EQQ8eP7Jgm5mNXdK12kKawk1vvXPja2iXKqZiGDW6Q==", "dev": true, "dependencies": { - "pe-library": "^1.0.0" + "pe-library": "^1.0.1" }, "engines": { "node": ">=14", "npm": ">=7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" } }, "node_modules/resolve": { @@ -7572,6 +8115,16 @@ "node": ">= 0.6" } }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7821,11 +8374,31 @@ "node": ">=14.14" } }, + "node_modules/tn1150": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tn1150/-/tn1150-0.1.0.tgz", + "integrity": "sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w==", + "dev": true, + "optional": true, + "dependencies": { + "unorm": "^1.4.1" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==" }, + "node_modules/to-data-view": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-1.1.0.tgz", + "integrity": "sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==", + "dev": true, + "optional": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8050,6 +8623,16 @@ "node": ">= 10.0.0" } }, + "node_modules/unorm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", + "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8378,6 +8961,16 @@ "node": ">=0.4.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 57ac4dd4..18432140 100755 --- a/package.json +++ b/package.json @@ -45,8 +45,9 @@ "@electron-forge/cli": "^7.2.0", "@electron-forge/maker-deb": "^7.2.0", "@electron-forge/maker-rpm": "^7.2.0", - "@electron-forge/maker-squirrel": "^7.2.0", "@electron-forge/maker-zip": "^7.2.0", + "@electron-forge/maker-dmg": "^7.2.0", + "@electron-forge/maker-wix": "^7.2.0", "electron": "28.1.4" } } diff --git a/src/css/tabs/onboard_logging.css b/src/css/tabs/onboard_logging.css index 6eaae623..88a98510 100644 --- a/src/css/tabs/onboard_logging.css +++ b/src/css/tabs/onboard_logging.css @@ -249,7 +249,7 @@ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.35); width: 90px; height: 90px; - background-image: url(/images/icons/cf_icon_sdcard.svg); + background-image: url(./../../../images/icons/cf_icon_sdcard.svg); background-position: 21px 20px; background-size: 50px 50px; background-repeat: no-repeat; diff --git a/tabs/calibration.js b/tabs/calibration.js index c6ffcb32..4566fc41 100755 --- a/tabs/calibration.js +++ b/tabs/calibration.js @@ -9,9 +9,9 @@ const MSP = require('./../js/msp'); const { GUI, TABS } = require('./../js/gui'); const FC = require('./../js/fc'); const timeout = require('./../js/timeouts'); -const interval = require('./../js/intervals.js'); +const interval = require('./../js/intervals'); const i18n = require('./../js/localization'); -const jBox = require('./../js/libraries/jBox/jBox.min.js'); +const jBox = require('./../js/libraries/jBox/jBox.min'); TABS.calibration = {}; diff --git a/tabs/cli.js b/tabs/cli.js index 76601dd2..abde8503 100644 --- a/tabs/cli.js +++ b/tabs/cli.js @@ -12,7 +12,7 @@ const i18n = require('./../js/localization'); const { globalSettings } = require('./../js/globalSettings'); const CliAutoComplete = require('./../js/CliAutoComplete'); const { ConnectionType } = require('./../js/connection/connection'); -const jBox = require('./../js/libraries/jBox/jBox.min.js'); +const jBox = require('./../js/libraries/jBox/jBox.min'); TABS.cli = { lineDelayMs: 50, diff --git a/tabs/gps.js b/tabs/gps.js index 3d7ad694..f77d9dd1 100644 --- a/tabs/gps.js +++ b/tabs/gps.js @@ -8,8 +8,8 @@ const MSPChainerClass = require('./../js/msp/MSPchainer'); const mspHelper = require('./../js/msp/MSPHelper'); const MSPCodes = require('./../js/msp/MSPCodes'); const MSP = require('./../js/msp'); -const mspBalancedInterval = require('./../js/msp_balanced_interval.js'); -const mspQueue = require('./../js/serial_queue.js'); +const mspBalancedInterval = require('./../js/msp_balanced_interval'); +const mspQueue = require('./../js/serial_queue'); const { GUI, TABS } = require('./../js/gui'); const FC = require('./../js/fc'); const i18n = require('./../js/localization'); @@ -17,7 +17,7 @@ const Settings = require('./../js/settings'); const serialPortHelper = require('./../js/serialPortHelper'); const features = require('./../js/feature_framework'); const { globalSettings } = require('./../js/globalSettings'); -const jBox = require('./../js/libraries/jBox/jBox.min.js'); +const jBox = require('./../js/libraries/jBox/jBox.min'); const SerialBackend = require('../js/serial_backend'); @@ -307,7 +307,7 @@ TABS.gps.initialize = function (callback) { anchor: [0.5, 1], opacity: 1, scale: 0.5, - src: '../../images/icons/cf_icon_position.png' + src: path.join(__dirname, './../images/icons/cf_icon_position.png') })) }); @@ -366,7 +366,7 @@ TABS.gps.initialize = function (callback) { rotation: vehicle.headingDegrees * (Math.PI / 180), scale: 0.8, anchor: [0.5, 0.5], - src: '../resources/adsb/' + ADSB_VEHICLE_TYPE[vehicle.emitterType], + src: path.join(__dirname, './../resources/adsb/' + ADSB_VEHICLE_TYPE[vehicle.emitterType]), })), text: new ol.style.Text(({ text: vehicle.callsign, diff --git a/tabs/mission_control.js b/tabs/mission_control.js index 7237ef07..461cf646 100644 --- a/tabs/mission_control.js +++ b/tabs/mission_control.js @@ -10,8 +10,8 @@ const MSPChainerClass = require('./../js/msp/MSPchainer'); const mspHelper = require('./../js/msp/MSPHelper'); const MSPCodes = require('./../js/msp/MSPCodes'); const MSP = require('./../js/msp'); -const mspBalancedInterval = require('./../js/msp_balanced_interval.js'); -const mspQueue = require('./../js/serial_queue.js'); +const mspBalancedInterval = require('./../js/msp_balanced_interval'); +const mspQueue = require('./../js/serial_queue'); const { GUI, TABS } = require('./../js/gui'); const FC = require('./../js/fc'); const CONFIGURATOR = require('./../js/data_storage'); @@ -24,9 +24,9 @@ const Safehome = require('./../js/safehome'); const SafehomeCollection = require('./../js/safehomeCollection'); const { ApproachDirection, FwApproach } = require('./../js/fwApproach'); const FwApproachCollection = require('./../js/fwApproachCollection'); -const SerialBackend = require('./../js/serial_backend.js'); +const SerialBackend = require('./../js/serial_backend'); const { distanceOnLine, wrap_360, calculate_new_cooridatnes } = require('./../js/helpers'); -const Plotly = require('./../js/libraries/plotly-latest.min.js'); +const Plotly = require('./../js/libraries/plotly-latest.min'); var MAX_NEG_FW_LAND_ALT = -2000; // cm @@ -68,7 +68,6 @@ TABS.mission_control.initialize = function (callback) { var textGeom; let isOffline = false; let selectedSafehome; - let rthUpdateInterval = 0; let $safehomeContentBox; let $waypointOptionsTableBody; let settings = {speed: 0, alt: 5000, safeRadiusSH: 50, fwApproachAlt: 60, fwLandAlt: 5, maxDistSH: 0, fwApproachLength: 0, fwLoiterRadius: 0, bingDemModel: false}; @@ -326,18 +325,6 @@ TABS.mission_control.initialize = function (callback) { '\nAlt: ' + FC.SENSOR_DATA.altitude + 'm\nSpeed: ' + FC.GPS_DATA.speed + 'cm/s\n' + 'Dist: ' + FC.GPS_DATA.distanceToHome + 'm'); - - //update RTH every 5th GPS update since it really shouldn't change - if(rthUpdateInterval >= 5) - { - FC.MISSION_PLANNER.bufferPoint.number = -1; //needed to get point 0 which id RTH - MSP.send_message(MSPCodes.MSP_WP, mspHelper.crunch(MSPCodes.MSP_WP), false, function rth_update() { - var coord = ol.proj.fromLonLat([FC.MISSION_PLANNER.bufferPoint.lon, FC.MISSION_PLANNER.bufferPoint.lat]); - rthGeo.setCoordinates(coord); - }); - rthUpdateInterval = 0; - } - rthUpdateInterval++; } } @@ -1276,7 +1263,11 @@ TABS.mission_control.initialize = function (callback) { if (disableMarkerEdit) { $('#missionDistance').text('N/A'); } else { - $('#missionDistance').text(lengthMission[lengthMission.length -1] != -1 ? lengthMission[lengthMission.length -1].toFixed(1) : 'infinite'); + if (lengthMission.length >= 1) { + $('#missionDistance').text(lengthMission[lengthMission.length -1].toFixed(1)); + } else { + $('#missionDistance').text('infinite'); + } } } diff --git a/tabs/mixer.js b/tabs/mixer.js index 091119e5..a6ccebe8 100644 --- a/tabs/mixer.js +++ b/tabs/mixer.js @@ -12,7 +12,7 @@ const i18n = require('./../js/localization'); const { mixer, platform, PLATFORM, INPUT, STABILIZED } = require('./../js/model'); const Settings = require('./../js/settings'); const mspBalancedInterval = require('./../js/msp_balanced_interval'); -const jBox = require('../js/libraries/jBox/jBox.min.js'); +const jBox = require('../js/libraries/jBox/jBox.min'); TABS.mixer = {}; diff --git a/tabs/osd.js b/tabs/osd.js index 048905f1..f60440a9 100644 --- a/tabs/osd.js +++ b/tabs/osd.js @@ -17,7 +17,7 @@ const Settings = require('./../js/settings'); const { globalSettings } = require('./../js/globalSettings'); const { PortHandler } = require('./../js/port_handler'); const i18n = require('./../js/localization'); -const jBox = require('./../js/libraries/jBox/jBox.min.js'); +const jBox = require('./../js/libraries/jBox/jBox.min'); var SYM = SYM || {}; diff --git a/tabs/outputs.js b/tabs/outputs.js index 5d1a4fda..f7564ad3 100644 --- a/tabs/outputs.js +++ b/tabs/outputs.js @@ -5,18 +5,18 @@ const path = require('path'); const MSPChainerClass = require('./../js/msp/MSPchainer'); const mspHelper = require('./../js/msp/MSPHelper'); const MSPCodes = require('./../js/msp/MSPCodes'); -const mspBalancedInterval = require('./../js/msp_balanced_interval.js'); -const mspQueue = require('./../js/serial_queue.js') +const mspBalancedInterval = require('./../js/msp_balanced_interval'); +const mspQueue = require('./../js/serial_queue') const MSP = require('./../js/msp'); const { GUI, TABS } = require('./../js/gui'); const FC = require('./../js/fc'); const i18n = require('./../js/localization'); const BitHelper = require('../js/bitHelper'); -const Settings = require('./../js/settings.js'); -const features = require('./../js/feature_framework.js'); +const Settings = require('./../js/settings'); +const features = require('./../js/feature_framework'); const { mixer, PLATFORM } = require('./../js/model'); -const timeout = require('./../js/timeouts.js') -const interval = require('./../js/intervals.js'); +const timeout = require('./../js/timeouts') +const interval = require('./../js/intervals'); TABS.outputs = { allowTestMode: false, diff --git a/tabs/sitl.js b/tabs/sitl.js index 6bf15ad9..81ef58b7 100644 --- a/tabs/sitl.js +++ b/tabs/sitl.js @@ -120,7 +120,7 @@ TABS.sitl.initialize = (callback) => { var $sitlLog = $('#sitlLog'); $sitlLog.val(SITL_LOG); - if ($sitlLog) { + if ($sitlLog && $sitlLog.length == 1) { $sitlLog.val(SITL_LOG); $sitlLog.animate({scrollTop: $sitlLog[0].scrollHeight - $sitlLog.height()}, "fast"); } @@ -510,7 +510,7 @@ TABS.sitl.initialize = (callback) => { function appendLog(message){ SITL_LOG += message; var $sitlLog = $('#sitlLog'); - if ($sitlLog) { + if ($sitlLog && $sitlLog.length == 1) { $sitlLog.val(SITL_LOG); $sitlLog.animate({scrollTop: $sitlLog[0].scrollHeight - $sitlLog.height()}, "fast"); }