Skip to content

Commit

Permalink
feat: update electron to 30 and switch to esm
Browse files Browse the repository at this point in the history
  • Loading branch information
Julusian committed Jul 2, 2024
1 parent 0aa558c commit 57e6e55
Show file tree
Hide file tree
Showing 19 changed files with 471 additions and 353 deletions.
File renamed without changes.
13 changes: 7 additions & 6 deletions satellite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@
"email": "[email protected]",
"url": "https://github.com/julusian"
},
"type": "module",
"main": "dist/electron.js",
"license": "MIT",
"private": true,
"scripts": {
"dev": "ts-node src/main.ts config.json",
"dev": "tsx src/main.ts config.json",
"dev-electron": "run build:main && electron dist/electron.js",
"build": "rimraf dist && run build:main",
"build:main": "run -T tsc -p tsconfig.build.json",
Expand All @@ -31,15 +32,15 @@
"@typescript-eslint/eslint-plugin": "^7.15.0",
"@typescript-eslint/parser": "^7.15.0",
"cross-env": "^7.0.3",
"electron": "25.9.8",
"electron": "31.1.0",
"electron-builder": "^24.13.3",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-jest": "^28.6.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.1.3",
"rimraf": "^5.0.7",
"ts-node": "^10.9.2"
"tsx": "^4.10.5"
},
"engines": {
"node": "^18.18"
Expand All @@ -51,10 +52,10 @@
"@loupedeck/node": "^1.1.2",
"@napi-rs/canvas": "^0.1.53",
"@xencelabs-quick-keys/node": "^1.0.0",
"conf": "^10.2.0",
"conf": "^12.0.0",
"electron-about-window": "^1.15.2",
"electron-store": "^8.2.0",
"eventemitter3": "^4.0.7",
"electron-store": "^9.0.0",
"eventemitter3": "^5.0.1",
"exit-hook": "^2.2.1",
"infinitton-idisplay": "^1.1.2",
"koa": "^2.15.3",
Expand Down
4 changes: 2 additions & 2 deletions satellite/src/apiTypes.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Conf from 'conf'
import { CompanionSatelliteClient } from './client'
import { SatelliteConfig } from './config'
import { CompanionSatelliteClient } from './client.js'
import { SatelliteConfig } from './config.js'

export interface ApiStatusResponse {
connected: boolean
Expand Down
8 changes: 2 additions & 6 deletions satellite/src/cards.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import * as path from 'path'
import { promisify } from 'util'
import { readFile } from 'fs'
import { readFile } from 'fs/promises'
import { Canvas, Image, loadImage } from '@napi-rs/canvas'
import * as imageRs from '@julusian/image-rs'
import { networkInterfaces } from 'os'

const readFileP = promisify(readFile)

export class CardGenerator {
private iconImage: Image | undefined

async loadIcon(): Promise<Image> {
if (!this.iconImage) {
const rawData = await readFileP(path.join(__dirname, '../assets/icon.png'))
const rawData = await readFile(new URL('../assets/icon.png', import.meta.url))

this.iconImage = await loadImage(rawData)
}
Expand Down
4 changes: 2 additions & 2 deletions satellite/src/client.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { EventEmitter } from 'eventemitter3'
import { Socket } from 'net'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps } from './device-types/api'
import { DEFAULT_PORT } from './lib'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps } from './device-types/api.js'
import { DEFAULT_PORT } from './lib.js'
import * as semver from 'semver'

const PING_UNACKED_LIMIT = 15 // Arbitrary number
Expand Down
6 changes: 3 additions & 3 deletions satellite/src/device-types/infinitton.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { CardGenerator } from '../cards'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api'
import Infinitton = require('infinitton-idisplay')
import { CardGenerator } from '../cards.js'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api.js'
import * as imageRs from '@julusian/image-rs'
import Infinitton from 'infinitton-idisplay'

export class InfinittonWrapper implements WrappedDevice {
readonly #cardGenerator: CardGenerator
Expand Down
8 changes: 4 additions & 4 deletions satellite/src/device-types/loupedeck-live-s.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import {
LoupedeckControlType,
} from '@loupedeck/node'
import * as imageRs from '@julusian/image-rs'
import { CardGenerator } from '../cards'
import { ImageWriteQueue } from '../writeQueue'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api'
import { parseColor } from './lib'
import { CardGenerator } from '../cards.js'
import { ImageWriteQueue } from '../writeQueue.js'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api.js'
import { parseColor } from './lib.js'

export class LoupedeckLiveSWrapper implements WrappedDevice {
readonly #cardGenerator: CardGenerator
Expand Down
8 changes: 4 additions & 4 deletions satellite/src/device-types/loupedeck-live.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import {
LoupedeckControlType,
} from '@loupedeck/node'
import * as imageRs from '@julusian/image-rs'
import { CardGenerator } from '../cards'
import { ImageWriteQueue } from '../writeQueue'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api'
import { parseColor } from './lib'
import { CardGenerator } from '../cards.js'
import { ImageWriteQueue } from '../writeQueue.js'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api.js'
import { parseColor } from './lib.js'

export class LoupedeckLiveWrapper implements WrappedDevice {
readonly #cardGenerator: CardGenerator
Expand Down
6 changes: 3 additions & 3 deletions satellite/src/device-types/razer-stream-controller-x.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { LoupedeckDevice, LoupedeckDisplayId, LoupedeckBufferFormat, LoupedeckModelId } from '@loupedeck/node'
import * as imageRs from '@julusian/image-rs'
import { CardGenerator } from '../cards'
import { ImageWriteQueue } from '../writeQueue'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api'
import { CardGenerator } from '../cards.js'
import { ImageWriteQueue } from '../writeQueue.js'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api.js'

export class RazerStreamControllerXWrapper implements WrappedDevice {
readonly #cardGenerator: CardGenerator
Expand Down
8 changes: 4 additions & 4 deletions satellite/src/device-types/streamdeck.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { DeviceModelId, StreamDeck } from '@elgato-stream-deck/node'
import * as imageRs from '@julusian/image-rs'
import { CardGenerator } from '../cards'
import { ImageWriteQueue } from '../writeQueue'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api'
import { parseColor } from './lib'
import { CardGenerator } from '../cards.js'
import { ImageWriteQueue } from '../writeQueue.js'
import { ClientCapabilities, CompanionClient, DeviceDrawProps, DeviceRegisterProps, WrappedDevice } from './api.js'
import { parseColor } from './lib.js'

export class StreamDeckWrapper implements WrappedDevice {
readonly #cardGenerator: CardGenerator
Expand Down
2 changes: 1 addition & 1 deletion satellite/src/device-types/xencelabs-quick-keys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
XencelabsQuickKeysDisplayOrientation,
WheelEvent,
} from '@xencelabs-quick-keys/node'
import { WrappedDevice, DeviceRegisterProps, DeviceDrawProps, ClientCapabilities, CompanionClient } from './api'
import { WrappedDevice, DeviceRegisterProps, DeviceDrawProps, ClientCapabilities, CompanionClient } from './api.js'

function keyToCompanion(k: number): number | null {
if (k >= 0 && k < 4) return k + 1
Expand Down
22 changes: 11 additions & 11 deletions satellite/src/devices.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { CompanionSatelliteClient } from './client'
import { CompanionSatelliteClient } from './client.js'
import { getStreamDeckDeviceInfo, openStreamDeck } from '@elgato-stream-deck/node'
import { usb } from 'usb'
import { CardGenerator } from './cards'
import { CardGenerator } from './cards.js'
import {
XencelabsQuickKeysManagerInstance,
XencelabsQuickKeys,
VENDOR_ID as VendorIdXencelabs,
} from '@xencelabs-quick-keys/node'
import { DeviceId, WrappedDevice } from './device-types/api'
import { StreamDeckWrapper } from './device-types/streamdeck'
import { QuickKeysWrapper } from './device-types/xencelabs-quick-keys'
import Infinitton = require('infinitton-idisplay')
import { InfinittonWrapper } from './device-types/infinitton'
import { LoupedeckLiveWrapper } from './device-types/loupedeck-live'
import { LoupedeckLiveSWrapper } from './device-types/loupedeck-live-s'
import { DeviceId, WrappedDevice } from './device-types/api.js'
import { StreamDeckWrapper } from './device-types/streamdeck.js'
import { QuickKeysWrapper } from './device-types/xencelabs-quick-keys.js'
import Infinitton from 'infinitton-idisplay'
import { InfinittonWrapper } from './device-types/infinitton.js'
import { LoupedeckLiveWrapper } from './device-types/loupedeck-live.js'
import { LoupedeckLiveSWrapper } from './device-types/loupedeck-live-s.js'
import * as HID from 'node-hid'
import {
openLoupedeck,
Expand All @@ -23,10 +23,10 @@ import {
VendorIdLoupedeck,
VendorIdRazer,
} from '@loupedeck/node'
import { RazerStreamControllerXWrapper } from './device-types/razer-stream-controller-x'
import { RazerStreamControllerXWrapper } from './device-types/razer-stream-controller-x.js'
// eslint-disable-next-line node/no-extraneous-import
import { VENDOR_ID as VendorIdElgato } from '@elgato-stream-deck/core'
import { wrapAsync } from './lib'
import { wrapAsync } from './lib.js'

// Force into hidraw mode
HID.setDriverType('hidraw')
Expand Down
37 changes: 19 additions & 18 deletions satellite/src/electron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import * as path from 'path'
import electronStore from 'electron-store'
// eslint-disable-next-line node/no-unpublished-import
import openAboutWindow from 'electron-about-window'
import { DeviceManager } from './devices'
import { CompanionSatelliteClient } from './client'
import { DEFAULT_PORT } from './lib'
import { RestServer } from './rest'
import { SatelliteConfig, ensureFieldsPopulated } from './config'
import { ApiConfigData, ApiStatusResponse, compileConfig, compileStatus, updateConfig } from './apiTypes'
import { DeviceManager } from './devices.js'
import { CompanionSatelliteClient } from './client.js'
import { DEFAULT_PORT } from './lib.js'
import { RestServer } from './rest.js'
import { SatelliteConfig, ensureFieldsPopulated } from './config.js'
import { ApiConfigData, ApiStatusResponse, compileConfig, compileStatus, updateConfig } from './apiTypes.js'
import { fileURLToPath } from 'url'

const appConfig = new electronStore<SatelliteConfig>({
// schema: satelliteConfigSchema,
Expand All @@ -27,7 +28,7 @@ app.on('window-all-closed', () => {

console.log('Starting')

const webRoot = path.join(__dirname, app.isPackaged ? '../../webui' : '../../webui/dist')
const webRoot = fileURLToPath(new URL(app.isPackaged ? '../../webui' : '../../webui/dist', import.meta.url))

const client = new CompanionSatelliteClient({ debug: true })
const devices = new DeviceManager(client)
Expand Down Expand Up @@ -73,7 +74,7 @@ trayMenu.append(
height: 720,
autoHideMenuBar: isProduction,
webPreferences: {
preload: path.join(__dirname, '../dist/electronPreload.js'),
preload: fileURLToPath(new URL('../dist/electronPreload.js', import.meta.url)),
},
})
configWindow.on('close', () => {
Expand Down Expand Up @@ -122,20 +123,20 @@ app.whenReady()
tryConnect()
restartRestApi()

let trayImagePath = path.join(__dirname, '../assets', 'tray.png')
let trayImageOfflinePath = path.join(__dirname, '../assets', 'tray-offline.png')
let trayImagePath = new URL('../assets/tray.png', import.meta.url)
let trayImageOfflinePath = new URL('../assets/tray-offline.png', import.meta.url)
switch (process.platform) {
case 'darwin':
trayImagePath = path.join(__dirname, '../assets', 'trayTemplate.png')
trayImageOfflinePath = path.join(__dirname, '../assets', 'trayOfflineTemplate.png')
trayImagePath = new URL('../assets/trayTemplate.png', import.meta.url)
trayImageOfflinePath = new URL('../assets/trayOfflineTemplate.png', import.meta.url)
break
case 'win32':
trayImagePath = path.join(__dirname, '../assets', 'tray.ico')
trayImageOfflinePath = path.join(__dirname, '../assets', 'tray-offline.ico')
trayImagePath = new URL('../assets/tray.ico', import.meta.url)
trayImageOfflinePath = new URL('../assets/tray-offline.ico', import.meta.url)
break
}
const trayImage = nativeImage.createFromPath(trayImagePath)
const trayImageOffline = nativeImage.createFromPath(trayImageOfflinePath)
const trayImage = nativeImage.createFromPath(fileURLToPath(trayImagePath))
const trayImageOffline = nativeImage.createFromPath(fileURLToPath(trayImageOfflinePath))

tray = new Tray(trayImageOffline)

Expand Down Expand Up @@ -184,8 +185,8 @@ function trayScanDevices() {

function trayAbout() {
console.log('about click')
openAboutWindow({
icon_path: path.join(__dirname, '../assets', 'icon.png'),
openAboutWindow.default({
icon_path: fileURLToPath(new URL('../assets/icon.png', import.meta.url)),
product_name: 'Companion Satellite',
use_inner_html: true,
description: 'Satellite Streamdeck connector for Bitfocus Companion <br />Supports 2.2.0 and newer',
Expand Down
2 changes: 1 addition & 1 deletion satellite/src/electronPreload.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { contextBridge, ipcRenderer } from 'electron'
import type { ApiConfigData, ApiStatusResponse } from './apiTypes'
import type { ApiConfigData, ApiStatusResponse } from './apiTypes.js'

export const electronApi = {
rescanSurfaces: (): void => ipcRenderer.send('rescan'),
Expand Down
6 changes: 3 additions & 3 deletions satellite/src/fixup-pi-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*/

import { stat, readFile, copyFile, chown } from 'fs/promises'
import { openHeadlessConfig } from './config'
import path from 'path'
import { openHeadlessConfig } from './config.js'
import { fileURLToPath } from 'url'

const configFilePath = process.argv[2]
if (!configFilePath) throw new Error(`Missing config file path parameter`)
Expand All @@ -16,7 +16,7 @@ const appConfig = openHeadlessConfig(configFilePath)
// Ensure the satellite user owns the file. This is a bit dodgey guessing the ids like this..
chown(appConfig.path, 1000, 1000).catch(() => null)

const templatePathName = path.join(__dirname, '../pi-image/satellite-config')
const templatePathName = fileURLToPath(new URL('../pi-image/satellite-config', import.meta.url))

const importFromPaths = [
// Paths to search for a config file to 'import' from
Expand Down
16 changes: 8 additions & 8 deletions satellite/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import exitHook = require('exit-hook')
import { CompanionSatelliteClient } from './client'
import { DeviceManager } from './devices'
import { DEFAULT_PORT } from './lib'
import { RestServer } from './rest'
import { openHeadlessConfig } from './config'
import path = require('path')
import exitHook from 'exit-hook'
import { CompanionSatelliteClient } from './client.js'
import { DeviceManager } from './devices.js'
import { DEFAULT_PORT } from './lib.js'
import { RestServer } from './rest.js'
import { openHeadlessConfig } from './config.js'
import { fileURLToPath } from 'url'

const rawConfigPath = process.argv[2]
if (!rawConfigPath) {
Expand All @@ -24,7 +24,7 @@ const appConfig = openHeadlessConfig(rawConfigPath)

console.log('Starting', appConfig.path)

const webRoot = path.join(__dirname, '../../webui/dist')
const webRoot = fileURLToPath(new URL('../../webui/dist', import.meta.url))

const client = new CompanionSatelliteClient({ debug: true })
const devices = new DeviceManager(client)
Expand Down
12 changes: 6 additions & 6 deletions satellite/src/rest.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import Koa from 'koa'
import Router from 'koa-router'
import koaBody from 'koa-body'
import { koaBody } from 'koa-body'
import serve from 'koa-static'
import http = require('http')
import http from 'http'
import type Conf from 'conf'
import type { CompanionSatelliteClient } from './client'
import type { DeviceManager } from './devices'
import type { SatelliteConfig } from './config'
import { ApiConfigData, compileConfig, compileStatus, updateConfig } from './apiTypes'
import type { CompanionSatelliteClient } from './client.js'
import type { DeviceManager } from './devices.js'
import type { SatelliteConfig } from './config.js'
import { ApiConfigData, compileConfig, compileStatus, updateConfig } from './apiTypes.js'

export class RestServer {
private readonly appConfig: Conf<SatelliteConfig>
Expand Down
6 changes: 5 additions & 1 deletion satellite/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
"skipLibCheck": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"declaration": true
"declaration": true,

"module": "Node16",
"moduleResolution": "Node16",
"target": "ES2022"
}
}
Loading

0 comments on commit 57e6e55

Please sign in to comment.