Browse Source

upgraded to electron 29

Eugene 1 year ago
parent
commit
3f0b78edd0

+ 2 - 0
app/lib/index.ts

@@ -31,6 +31,8 @@ try {
     app.exit(1)
     app.exit(1)
 }
 }
 
 
+process.mainModule = module
+
 const application = new Application(configStore)
 const application = new Application(configStore)
 
 
 ipcMain.on('app:new-window', () => {
 ipcMain.on('app:new-window', () => {

+ 59 - 48
app/lib/window.ts

@@ -1,5 +1,5 @@
 import * as glasstron from 'glasstron'
 import * as glasstron from 'glasstron'
-
+import { autoUpdater } from 'electron-updater'
 import { Subject, Observable, debounceTime } from 'rxjs'
 import { Subject, Observable, debounceTime } from 'rxjs'
 import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents } from 'electron'
 import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents } from 'electron'
 import ElectronConfig = require('electron-config')
 import ElectronConfig = require('electron-config')
@@ -159,6 +159,7 @@ export class Window {
         }
         }
 
 
         this.setupWindowManagement()
         this.setupWindowManagement()
+        this.setupUpdater()
 
 
         this.ready = new Promise(resolve => {
         this.ready = new Promise(resolve => {
             const listener = event => {
             const listener = event => {
@@ -346,11 +347,8 @@ export class Window {
             this.send('host:window-focused')
             this.send('host:window-focused')
         })
         })
 
 
-        ipcMain.on('ready', event => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            this.window.webContents.send('start', {
+        this.on('ready', () => {
+            this.window?.webContents.send('start', {
                 config: this.configStore,
                 config: this.configStore,
                 executable: app.getPath('exe'),
                 executable: app.getPath('exe'),
                 windowID: this.window.id,
                 windowID: this.window.id,
@@ -359,42 +357,26 @@ export class Window {
             })
             })
         })
         })
 
 
-        ipcMain.on('window-minimize', event => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            this.window.minimize()
+        this.on('window-minimize', () => {
+            this.window?.minimize()
         })
         })
 
 
-        ipcMain.on('window-set-bounds', (event, bounds) => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            this.window.setBounds(bounds)
+        this.on('window-set-bounds', (_, bounds) => {
+            this.window?.setBounds(bounds)
         })
         })
 
 
-        ipcMain.on('window-set-always-on-top', (event, flag) => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            this.window.setAlwaysOnTop(flag)
+        this.on('window-set-always-on-top', (_, flag) => {
+            this.window?.setAlwaysOnTop(flag)
         })
         })
 
 
-        ipcMain.on('window-set-vibrancy', (event, enabled, type) => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
+        this.on('window-set-vibrancy', (_, enabled, type) => {
             this.setVibrancy(enabled, type)
             this.setVibrancy(enabled, type)
         })
         })
 
 
-        ipcMain.on('window-set-window-controls-color', (event, theme) => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-
+        this.on('window-set-window-controls-color', (_, theme) => {
             if (process.platform === 'win32') {
             if (process.platform === 'win32') {
                 const symbolColor: string = theme.foreground
                 const symbolColor: string = theme.foreground
-                this.window.setTitleBarOverlay(
+                this.window?.setTitleBarOverlay(
                     {
                     {
                         symbolColor: symbolColor,
                         symbolColor: symbolColor,
                         height: 32,
                         height: 32,
@@ -403,32 +385,23 @@ export class Window {
             }
             }
         })
         })
 
 
-        ipcMain.on('window-set-title', (event, title) => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            this.window.setTitle(title)
+        this.on('window-set-title', (_, title) => {
+            this.window?.setTitle(title)
         })
         })
 
 
-        ipcMain.on('window-bring-to-front', event => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
-            if (this.window.isMinimized()) {
+        this.on('window-bring-to-front', () => {
+            if (this.window?.isMinimized()) {
                 this.window.restore()
                 this.window.restore()
             }
             }
             this.present()
             this.present()
         })
         })
 
 
-        ipcMain.on('window-close', event => {
-            if (!this.window || event.sender !== this.window.webContents) {
-                return
-            }
+        this.on('window-close', () => {
             this.closing = true
             this.closing = true
             this.window.close()
             this.window.close()
         })
         })
 
 
-        ipcMain.on('window-set-touch-bar', (_event, segments, selectedIndex) => {
+        this.on('window-set-touch-bar', (_, segments, selectedIndex) => {
             this.touchBarControl.segments = segments.map(s => ({
             this.touchBarControl.segments = segments.map(s => ({
                 label: s.label,
                 label: s.label,
                 icon: s.hasActivity ? activityIcon : undefined,
                 icon: s.hasActivity ? activityIcon : undefined,
@@ -468,8 +441,46 @@ export class Window {
             this.window.setOpacity(opacity)
             this.window.setOpacity(opacity)
         })
         })
 
 
-        ipcMain.on('window-set-progress-bar', (_event, value) => {
-            this.window.setProgressBar(value, { mode: value < 0 ? 'none' : 'normal' })
+        this.on('window-set-progress-bar', (_, value) => {
+            this.window?.setProgressBar(value, { mode: value < 0 ? 'none' : 'normal' })
+        })
+    }
+
+    on (event: string, listener: (...args: any[]) => void): void {
+        ipcMain.on(event, (e, ...args) => {
+            if (!this.window || e.sender !== this.window.webContents) {
+                return
+            }
+            listener(e, ...args)
+        })
+    }
+
+    private setupUpdater () {
+        autoUpdater.autoDownload = true
+        autoUpdater.autoInstallOnAppQuit = true
+
+        autoUpdater.on('update-available', () => {
+            this.send('updater:update-available')
+        })
+
+        autoUpdater.on('update-not-available', () => {
+            this.send('updater:update-not-available')
+        })
+
+        autoUpdater.on('error', err => {
+            this.send('updater:error', err)
+        })
+
+        autoUpdater.on('update-downloaded', () => {
+            this.send('updater:update-downloaded')
+        })
+
+        this.on('updater:check-for-updates', () => {
+            autoUpdater.checkForUpdates()
+        })
+
+        this.on('updater:quit-and-install', () => {
+            autoUpdater.quitAndInstall()
         })
         })
     }
     }
 
 

+ 3 - 4
app/package.json

@@ -15,7 +15,7 @@
     "watch": "webpack --progress --color --watch"
     "watch": "webpack --progress --color --watch"
   },
   },
   "dependencies": {
   "dependencies": {
-    "@electron/remote": "2.0.10",
+    "@electron/remote": "^2",
     "node-pty": "^1.0",
     "node-pty": "^1.0",
     "any-promise": "^1.3.0",
     "any-promise": "^1.3.0",
     "electron-config": "2.0.0",
     "electron-config": "2.0.0",
@@ -63,8 +63,7 @@
     "tabby-terminal": "*"
     "tabby-terminal": "*"
   },
   },
   "resolutions": {
   "resolutions": {
-    "*/node-abi": "^2.20.0",
-    "node-gyp": "^10.0.0",
-    "nan": "github:jkleinsc/nan#remove_accessor_signature"
+    "*/node-abi": "^3",
+    "node-gyp": "^10.0.0"
   }
   }
 }
 }

+ 0 - 0
app/patches/@serialport+bindings-cpp+11.0.1.patch → app/patches/@serialport+bindings-cpp+11.0.3.patch


+ 1 - 0
app/webpack.config.main.mjs

@@ -42,6 +42,7 @@ const config = {
         'electron-config': 'commonjs electron-config',
         'electron-config': 'commonjs electron-config',
         'electron-debug': 'commonjs electron-debug',
         'electron-debug': 'commonjs electron-debug',
         'electron-promise-ipc': 'commonjs electron-promise-ipc',
         'electron-promise-ipc': 'commonjs electron-promise-ipc',
+        'electron-updater': 'commonjs electron-updater',
         fs: 'commonjs fs',
         fs: 'commonjs fs',
         glasstron: 'commonjs glasstron',
         glasstron: 'commonjs glasstron',
         mz: 'commonjs mz',
         mz: 'commonjs mz',

+ 16 - 12
app/yarn.lock

@@ -2,10 +2,10 @@
 # yarn lockfile v1
 # yarn lockfile v1
 
 
 
 
-"@electron/remote@2.0.10":
-  version "2.0.10"
-  resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.10.tgz#133e2f607b1861ac249bd78b5abd1e961feed713"
-  integrity sha512-3SFKKaQXcyWgwmibud+UqJl/XlHOgLcI3fwtB9pNelPSJAcTxocOJrF6FaxBIQaj1+R05Di6xuAswZpXAW7xhA==
+"@electron/remote@^2":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.1.2.tgz#52a97c8faa5b769155b649ef262f2f8c851776e6"
+  integrity sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==
 
 
 "@iarna/cli@^1.2.0":
 "@iarna/cli@^1.2.0":
   version "1.2.0"
   version "1.2.0"
@@ -2577,9 +2577,10 @@ mz@^2.7.0:
     object-assign "^4.0.1"
     object-assign "^4.0.1"
     thenify-all "^1.0.0"
     thenify-all "^1.0.0"
 
 
-nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
-  version "2.16.0"
-  resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059"
+nan@^2.17.0:
+  version "2.20.0"
+  resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3"
+  integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==
 
 
 napi-build-utils@^1.0.1:
 napi-build-utils@^1.0.1:
   version "1.0.2"
   version "1.0.2"
@@ -2610,12 +2611,12 @@ nice-try@^1.0.4:
   resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
   resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
   integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
   integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
 
 
-node-abi@^2.20.0:
-  version "2.30.1"
-  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf"
-  integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==
+node-abi@^3:
+  version "3.65.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3"
+  integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==
   dependencies:
   dependencies:
-    semver "^5.4.1"
+    semver "^7.3.5"
 
 
 node-abi@^3.3.0:
 node-abi@^3.3.0:
   version "3.8.0"
   version "3.8.0"
@@ -3909,6 +3910,7 @@ strict-uri-encode@^2.0.0:
   integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
   integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
 
 
 "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
 "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  name string-width-cjs
   version "4.2.3"
   version "4.2.3"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
   integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
   integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -3986,6 +3988,7 @@ stringify-package@^1.0.0, stringify-package@^1.0.1:
   integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
   integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
 
 
 "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
 "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
+  name strip-ansi-cjs
   version "6.0.1"
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
   integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
   integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -4432,6 +4435,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0:
     errno "~0.1.7"
     errno "~0.1.7"
 
 
 "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
 "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+  name wrap-ansi-cjs
   version "7.0.0"
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
   integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
   integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==

+ 2 - 2
package.json

@@ -39,7 +39,7 @@
     "cross-env": "7.0.3",
     "cross-env": "7.0.3",
     "css-loader": "^6.7.3",
     "css-loader": "^6.7.3",
     "deep-equal": "2.0.5",
     "deep-equal": "2.0.5",
-    "electron": "^27.0.4",
+    "electron": "^29",
     "electron-builder": "^24.6.4",
     "electron-builder": "^24.6.4",
     "electron-download": "^4.1.1",
     "electron-download": "^4.1.1",
     "electron-installer-snap": "^5.1.0",
     "electron-installer-snap": "^5.1.0",
@@ -55,7 +55,7 @@
     "lru-cache": "^6.0.0",
     "lru-cache": "^6.0.0",
     "macos-release": "^3.1.0",
     "macos-release": "^3.1.0",
     "ngx-toastr": "^16.0.2",
     "ngx-toastr": "^16.0.2",
-    "node-abi": "^3.51.0",
+    "node-abi": "^3.65.0",
     "npmlog": "6.0.2",
     "npmlog": "6.0.2",
     "npx": "^10.2.2",
     "npx": "^10.2.2",
     "patch-package": "^6.4.7",
     "patch-package": "^6.4.7",

+ 0 - 0
patches/app-builder-lib+24.4.0.patch → patches/app-builder-lib+24.6.4.patch


+ 0 - 2
tabby-electron/src/services/electron.service.ts

@@ -16,7 +16,6 @@ export class ElectronService {
     clipboard: Clipboard
     clipboard: Clipboard
     globalShortcut: GlobalShortcut
     globalShortcut: GlobalShortcut
     screen: Screen
     screen: Screen
-    remote = remote
     process: any
     process: any
     autoUpdater: AutoUpdater
     autoUpdater: AutoUpdater
     powerSaveBlocker: PowerSaveBlocker
     powerSaveBlocker: PowerSaveBlocker
@@ -44,7 +43,6 @@ export class ElectronService {
         this.BrowserWindow = remote.BrowserWindow
         this.BrowserWindow = remote.BrowserWindow
         this.Menu = remote.Menu
         this.Menu = remote.Menu
         this.MenuItem = remote.MenuItem
         this.MenuItem = remote.MenuItem
-        this.MenuItem = remote.MenuItem
         this.nativeTheme = remote.nativeTheme
         this.nativeTheme = remote.nativeTheme
     }
     }
 }
 }

+ 15 - 21
tabby-electron/src/services/updater.service.ts

@@ -1,4 +1,3 @@
-import type { AppUpdater } from 'electron-updater'
 import { Injectable } from '@angular/core'
 import { Injectable } from '@angular/core'
 import axios from 'axios'
 import axios from 'axios'
 
 
@@ -13,7 +12,6 @@ export class ElectronUpdaterService extends UpdaterService {
     private downloaded: Promise<boolean>
     private downloaded: Promise<boolean>
     private electronUpdaterAvailable = true
     private electronUpdaterAvailable = true
     private updateURL: string
     private updateURL: string
-    private autoUpdater: AppUpdater
 
 
     constructor (
     constructor (
         log: LogService,
         log: LogService,
@@ -30,32 +28,28 @@ export class ElectronUpdaterService extends UpdaterService {
             return
             return
         }
         }
 
 
-        this.autoUpdater = electron.remote.require('electron-updater').autoUpdater
-        this.autoUpdater.autoDownload = true
-        this.autoUpdater.autoInstallOnAppQuit = false
-
-        this.autoUpdater.on('update-available', () => {
+        this.electron.ipcRenderer.on('updater:update-available', () => {
             this.logger.info('Update available')
             this.logger.info('Update available')
         })
         })
 
 
-        this.autoUpdater.on('update-not-available', () => {
+        this.electron.ipcRenderer.on('updater:update-not-available', () => {
             this.logger.info('No updates')
             this.logger.info('No updates')
         })
         })
 
 
-        this.autoUpdater.on('error', err => {
+        this.electron.ipcRenderer.on('updater:error', err => {
             this.logger.error(err)
             this.logger.error(err)
             this.electronUpdaterAvailable = false
             this.electronUpdaterAvailable = false
         })
         })
 
 
         this.downloaded = new Promise<boolean>(resolve => {
         this.downloaded = new Promise<boolean>(resolve => {
-            this.autoUpdater.once('update-downloaded', () => resolve(true))
+            this.electron.ipcRenderer.once('updater:update-downloaded', () => resolve(true))
         })
         })
 
 
         config.ready$.toPromise().then(() => {
         config.ready$.toPromise().then(() => {
             if (config.store.enableAutomaticUpdates && this.electronUpdaterAvailable && !process.env.TABBY_DEV) {
             if (config.store.enableAutomaticUpdates && this.electronUpdaterAvailable && !process.env.TABBY_DEV) {
                 this.logger.debug('Checking for updates')
                 this.logger.debug('Checking for updates')
                 try {
                 try {
-                    this.autoUpdater.checkForUpdates()
+                    this.electron.ipcRenderer.send('updater:check-for-updates')
                 } catch (e) {
                 } catch (e) {
                     this.electronUpdaterAvailable = false
                     this.electronUpdaterAvailable = false
                     this.logger.info('Electron updater unavailable, falling back', e)
                     this.logger.info('Electron updater unavailable, falling back', e)
@@ -82,26 +76,26 @@ export class ElectronUpdaterService extends UpdaterService {
                     reject(err)
                     reject(err)
                 }
                 }
                 cancel = () => {
                 cancel = () => {
-                    this.autoUpdater.off('error', onError)
-                    this.autoUpdater.off('update-not-available', onNoUpdate)
-                    this.autoUpdater.off('update-available', onUpdate)
+                    this.electron.ipcRenderer.off('updater:error', onError)
+                    this.electron.ipcRenderer.off('updater:update-not-available', onNoUpdate)
+                    this.electron.ipcRenderer.off('updater:update-available', onUpdate)
                 }
                 }
-                this.autoUpdater.on('error', onError)
-                this.autoUpdater.on('update-not-available', onNoUpdate)
-                this.autoUpdater.on('update-available', onUpdate)
+                this.electron.ipcRenderer.on('updater:error', onError)
+                this.electron.ipcRenderer.on('updater:update-not-available', onNoUpdate)
+                this.electron.ipcRenderer.on('updater:update-available', onUpdate)
                 try {
                 try {
-                    this.autoUpdater.checkForUpdates()
+                    this.electron.ipcRenderer.send('updater:check-for-updates')
                 } catch (e) {
                 } catch (e) {
                     this.electronUpdaterAvailable = false
                     this.electronUpdaterAvailable = false
                     this.logger.info('Electron updater unavailable, falling back', e)
                     this.logger.info('Electron updater unavailable, falling back', e)
                 }
                 }
             })
             })
 
 
-            this.autoUpdater.on('update-available', () => {
+            this.electron.ipcRenderer.on('updater:update-available', () => {
                 this.logger.info('Update available')
                 this.logger.info('Update available')
             })
             })
 
 
-            this.autoUpdater.once('update-not-available', () => {
+            this.electron.ipcRenderer.once('updater:update-not-available', () => {
                 this.logger.info('No updates')
                 this.logger.info('No updates')
             })
             })
 
 
@@ -138,7 +132,7 @@ export class ElectronUpdaterService extends UpdaterService {
                 },
                 },
             )).response === 0) {
             )).response === 0) {
                 await this.downloaded
                 await this.downloaded
-                this.autoUpdater.quitAndInstall()
+                this.electron.ipcRenderer.send('updater:quit-and-install')
             }
             }
         }
         }
     }
     }

+ 0 - 5
tabby-linkifier/yarn.lock

@@ -11,8 +11,3 @@ untildify@^4.0.0:
   version "4.0.0"
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
   resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
   integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
   integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-
-xterm-addon-web-links@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.7.0.tgz#dceac36170605f9db10a01d716bd83ee38f65c17"
-  integrity sha512-6PqoqzzPwaeSq22skzbvyboDvSnYk5teUYEoKBwMYvhbkwOQkemZccjWHT5FnNA8o1aInTc4PRYAl4jjPucCKA==

+ 16 - 4
tabby-ssh/yarn.lock

@@ -9,15 +9,22 @@
   dependencies:
   dependencies:
     ipv6 "*"
     ipv6 "*"
 
 
-"@types/node@*", "@types/[email protected]":
+"@types/node@*":
+  version "22.1.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b"
+  integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==
+  dependencies:
+    undici-types "~6.13.0"
+
+"@types/[email protected]":
   version "20.3.1"
   version "20.3.1"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
   integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
   integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
 
 
 "@types/ssh2-streams@*":
 "@types/ssh2-streams@*":
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.8.tgz#142af404dae059931aea7fcd1511b5478964feb6"
-  integrity sha512-I7gixRPUvVIyJuCEvnmhr3KvA2dC0639kKswqD4H5b4/FOcnPtNU+qWLiXdKIqqX9twUvi5j0U1mwKE5CUsrfA==
+  version "0.1.12"
+  resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz#e68795ba2bf01c76b93f9c9809e1f42f0eaaec5f"
+  integrity sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==
   dependencies:
   dependencies:
     "@types/node" "*"
     "@types/node" "*"
 
 
@@ -337,6 +344,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
   integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
   integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
 
 
+undici-types@~6.13.0:
+  version "6.13.0"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5"
+  integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==
+
 [email protected]:
 [email protected]:
   version "0.8.3"
   version "0.8.3"
   resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0"
   resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0"

+ 31 - 24
yarn.lock

@@ -863,10 +863,12 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
   integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
   integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
 
 
-"@types/node@^18.11.18":
-  version "18.17.12"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.12.tgz#c6bd7413a13e6ad9cfb7e97dd5c4e904c1821e50"
-  integrity sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==
+"@types/node@^20.9.0":
+  version "20.14.14"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e"
+  integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==
+  dependencies:
+    undici-types "~5.26.4"
 
 
 "@types/parse5@^5":
 "@types/parse5@^5":
   version "5.0.3"
   version "5.0.3"
@@ -2505,13 +2507,13 @@ [email protected], core-util-is@~1.0.0:
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
 
 
-cpu-features@~0.0.8:
-  version "0.0.8"
-  resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.8.tgz#a2d464b023b8ad09004c8cdca23b33f192f63546"
-  integrity sha512-BbHBvtYhUhksqTjr6bhNOjGgMnhwhGTQmOoZGD+K7BCaQDCuZl/Ve1ZxUSMRwVC4D/rkCPQ2MAIeYzrWyK7eEg==
+cpu-features@~0.0.9:
+  version "0.0.10"
+  resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5"
+  integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==
   dependencies:
   dependencies:
     buildcheck "~0.0.6"
     buildcheck "~0.0.6"
-    nan "^2.17.0"
+    nan "^2.19.0"
 
 
 crc@^3.8.0:
 crc@^3.8.0:
   version "3.8.0"
   version "3.8.0"
@@ -3071,13 +3073,13 @@ electron-to-chromium@^1.4.284:
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f"
   integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ==
   integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ==
 
 
-electron@^27.0.4:
-  version "27.1.0"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-27.1.0.tgz#d759885e552d7d926526cfc433ab312796f74a9a"
-  integrity sha512-XPdJiO475QJ8cx59/goWNNWnlV0vab+Ut3occymos7VDxkHV5mFrlW6tcGi+M3bW6gBfwpJocWMng8tw542vww==
+electron@^29:
+  version "29.4.5"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-29.4.5.tgz#b83bbeee6fc722dbbaab30d3a6bc8e982c9ab98d"
+  integrity sha512-DlEuzGbWBYl1Qr0qUYgNZdoixJg4YGHy2HC6fkRjSXSlb01UrQ5ORi8hNLzelzyYx8rNQyyE3zDUuk9EnZwYuA==
   dependencies:
   dependencies:
     "@electron/get" "^2.0.0"
     "@electron/get" "^2.0.0"
-    "@types/node" "^18.11.18"
+    "@types/node" "^20.9.0"
     extract-zip "^2.0.1"
     extract-zip "^2.0.1"
 
 
 elliptic@^6.5.3:
 elliptic@^6.5.3:
@@ -5983,7 +5985,7 @@ mute-stream@~0.0.4:
   resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz"
   resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz"
   integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
   integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
 
 
[email protected], nan@^2.17.0:
[email protected], nan@^2.18.0, nan@^2.19.0:
   version "2.17.0"
   version "2.17.0"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
   integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
   integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
@@ -6028,10 +6030,10 @@ no-case@^3.0.4:
     lower-case "^2.0.2"
     lower-case "^2.0.2"
     tslib "^2.0.3"
     tslib "^2.0.3"
 
 
-node-abi@^3.0.0, node-abi@^3.51.0:
-  version "3.51.0"
-  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d"
-  integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==
+node-abi@^3.0.0, node-abi@^3.65.0:
+  version "3.65.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3"
+  integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==
   dependencies:
   dependencies:
     semver "^7.3.5"
     semver "^7.3.5"
 
 
@@ -8219,15 +8221,15 @@ sprintf-js@~1.0.2:
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
 
 ssh2@^1.14.0:
 ssh2@^1.14.0:
-  version "1.14.0"
-  resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb"
-  integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b"
+  integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==
   dependencies:
   dependencies:
     asn1 "^0.2.6"
     asn1 "^0.2.6"
     bcrypt-pbkdf "^1.0.2"
     bcrypt-pbkdf "^1.0.2"
   optionalDependencies:
   optionalDependencies:
-    cpu-features "~0.0.8"
-    nan "^2.17.0"
+    cpu-features "~0.0.9"
+    nan "^2.18.0"
 
 
 sshpk@^1.7.0:
 sshpk@^1.7.0:
   version "1.16.1"
   version "1.16.1"
@@ -8926,6 +8928,11 @@ unbox-primitive@^1.0.2:
     has-symbols "^1.0.3"
     has-symbols "^1.0.3"
     which-boxed-primitive "^1.0.2"
     which-boxed-primitive "^1.0.2"
 
 
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
 unique-filename@^1.1.0, unique-filename@~1.1.0:
 unique-filename@^1.1.0, unique-filename@~1.1.0:
   version "1.1.0"
   version "1.1.0"
   resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz"
   resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz"