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 00000000..6e044d5b Binary files /dev/null and b/assets/windows/background.jpg differ diff --git a/assets/windows/banner.jpg b/assets/windows/banner.jpg new file mode 100644 index 00000000..66c3f04f Binary files /dev/null and b/assets/windows/banner.jpg differ diff --git a/assets/windows/inav_installer.bmp b/assets/windows/inav_installer.bmp deleted file mode 100644 index d65f3940..00000000 Binary files a/assets/windows/inav_installer.bmp and /dev/null differ diff --git a/assets/windows/inav_installer_small.bmp b/assets/windows/inav_installer_small.bmp deleted file mode 100644 index 535303fb..00000000 Binary files a/assets/windows/inav_installer_small.bmp and /dev/null differ diff --git a/assets/windows/installer.iss b/assets/windows/installer.iss deleted file mode 100644 index 89f56efa..00000000 --- a/assets/windows/installer.iss +++ /dev/null @@ -1,169 +0,0 @@ -; ------------------------------------------ -; Installer for INAV -; ------------------------------------------ -; It receives from the command line with /D the parameters: -; version -; archName -; archAllowed -; archInstallIn64bit -; sourceFolder -; targetFolder - -#define ApplicationName "INAV Configurator" -#define CompanyName "The INAV open source project" -#define CompanyUrl "https://github.com/iNavFlight/inav" -#define ExecutableFileName "inav-configurator.exe" -#define GroupName "INAV" -#define InstallerFileName "INAV-Configurator_" + archName + "_" + version -#define SourcePath "..\..\" + sourceFolder + "\inav-configurator\" + archName -#define TargetFolderName "INAV-Configurator" -#define UpdatesUrl "https://github.com/iNavFlight/inav-configurator/releases" - -[CustomMessages] -AppName=inav-configurator -LaunchProgram=Start {#ApplicationName} - -[Files] -Source: "{#SourcePath}\*"; DestDir: "{app}"; Flags: recursesubdirs - -[Icons] -; Programs group -Name: "{group}\{#ApplicationName}"; Filename: "{app}\{#ExecutableFileName}"; -; Desktop icon -Name: "{autodesktop}\{#ApplicationName}"; Filename: "{app}\{#ExecutableFileName}"; -; Non admin users, uninstall icon -Name: "{group}\Uninstall {#ApplicationName}"; Filename: "{uninstallexe}"; Check: not IsAdminInstallMode - -[Languages] -; English default, it must be first -Name: "en"; MessagesFile: "compiler:Default.isl" -; Official languages -;Name: "ca"; MessagesFile: "compiler:Languages\Catalan.isl" -;Name: "da"; MessagesFile: "compiler:Languages\Danish.isl" -;Name: "de"; MessagesFile: "compiler:Languages\German.isl" -;Name: "es"; MessagesFile: "compiler:Languages\Spanish.isl" -;Name: "fr"; MessagesFile: "compiler:Languages\French.isl" -;Name: "it"; MessagesFile: "compiler:Languages\Italian.isl" -;Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl" -;Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" -;Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" -;Name: "pl"; MessagesFile: "compiler:Languages\Polish.isl" -;Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl" -; Not official. Sometimes not updated to latest version (strings missing) -;Name: "ga"; MessagesFile: "unofficial_inno_languages\Galician.isl" -;Name: "eu"; MessagesFile: "unofficial_inno_languages\Basque.isl" -;Name: "hr"; MessagesFile: "unofficial_inno_languages\Croatian.isl" -;Name: "hu"; MessagesFile: "unofficial_inno_languages\Hungarian.isl" -;Name: "id"; MessagesFile: "unofficial_inno_languages\Indonesian.isl" -;Name: "ko"; MessagesFile: "unofficial_inno_languages\Korean.isl" -;Name: "lv"; MessagesFile: "unofficial_inno_languages\Latvian.isl" -;Name: "sv"; MessagesFile: "unofficial_inno_languages\Swedish.isl" -;Name: "zh_CN"; MessagesFile: "unofficial_inno_languages\ChineseSimplified.isl" -;Name: "zh_TW"; MessagesFile: "unofficial_inno_languages\ChineseTraditional.isl" -; Not available -; pt_BR (Portuguese Brasileiro) - -[Run] -; Add a checkbox to start the app after installed -Filename: {app}\{cm:AppName}.exe; Description: {cm:LaunchProgram,{cm:AppName}}; Flags: nowait postinstall skipifsilent - -[Setup] -AppId=2e5662ca-1fb3-8f1e-a7e1-e390add7a19d -AppName={#ApplicationName} -AppPublisher={#CompanyName} -AppPublisherURL={#CompanyUrl} -AppUpdatesURL={#UpdatesUrl} -AppVersion={#version} -ArchitecturesAllowed={#archAllowed} -ArchitecturesInstallIn64BitMode={#archInstallIn64bit} -Compression=lzma2 -DefaultDirName={autopf}\{#GroupName}\{#TargetFolderName} -DefaultGroupName={#GroupName}\{#ApplicationName} -LicenseFile=..\..\LICENSE -MinVersion=6.2 -OutputBaseFilename={#InstallerFileName} -OutputDir=..\..\{#targetFolder}\ -PrivilegesRequiredOverridesAllowed=commandline dialog -SetupIconFile=inav_installer_icon.ico -ShowLanguageDialog=yes -SolidCompression=yes -UninstallDisplayIcon={app}\{#ExecutableFileName} -UninstallDisplayName={#ApplicationName} -WizardImageFile=inav_installer.bmp -WizardSmallImageFile=inav_installer_small.bmp -WizardStyle=modern - -[Code] -function GetOldNsisUninstallerPath(): String; -var - RegKey: String; -begin - Result := ''; - // Look into the different registry entries: win32, win64 and without user rights - if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\INAV Configurator', 'UninstallString', Result) then - begin - if not RegQueryStringValue(HKLM, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\INAV Configurator', 'UninstallString', Result) then - begin - RegQueryStringValue(HKCU, 'SOFTWARE\INAV\INAV Configurator', 'UninstallString', Result) - end; - end; -end; - -function GetQuietUninstallerPath(): String; -var - RegKey: String; -begin - Result := ''; - RegKey := Format('%s\%s_is1', ['Software\Microsoft\Windows\CurrentVersion\Uninstall', '{#emit SetupSetting("AppId")}']); - if not RegQueryStringValue(HKEY_LOCAL_MACHINE, RegKey, 'QuietUninstallString', Result) then - begin - RegQueryStringValue(HKEY_CURRENT_USER, RegKey, 'QuietUninstallString', Result); - end; -end; - -function InitializeSetup(): Boolean; -var - ResultCode: Integer; - ParameterStr : String; - UninstPath : String; -begin - - Result := True; - - // Check if the application is already installed by the old NSIS installer, and uninstall it - UninstPath := GetOldNsisUninstallerPath(); - - // Found, start uninstall - if UninstPath <> '' 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"); }