@rubenverg/electron-util v1.2.0
@rubenverg/electron-util
An electron-util port for modern Electron.
Switching from electron-util
Since I renamed some functions to be clearer, you can use @rubenverg/electron-util/compat instead. All APIs have exactly the same name there and work exactly the same (except for darkMode which has other features)
Using in renderer
Assuming nodeIntegration is off (as it should be), you can expose the utils via the preload script. You might also want to use @rubenverg/electron-util/safe that removes the api exposure that allows access to all main functions from the renderer. Note that this depends on electron.remote, which is deprecated. I'll try switching to ipc messages.
API
This is the API documentation for @rubenverg/electron-util. safe has the same API except for the lack of api, and compat uses the electron-util naming scheme.
about
function about(options: {
icon?: string,
copyright?: string,
website?: string,
text?: string,
title?: string
}): voidShows an about window for the app. Note that not all options are used for all platforms, see electron-util for more detail.
aboutMenuItem
function aboutMenuItem(options: {
icon?: string,
copyright?: string,
website?: string,
text?: string,
title?: string
}): electron.MenuItemReturns a MenuItem named ${title || 'About'} ${appName} that calls about(options) on click.
activeWindow
function activeWindow(): electron.BrowserWindow | nullReturns the currently focused window.
activeWindowOrFirst
function activeWindowOrFirst(): electron.BrowserWindow | nullReturns the currently focused window, or the first one (in BrowserWindow.getAllWindows) if none is focused.
api
Access to the electron api, whether from main or renderer. Uses electron.remote if in a renderer process. Currently not available outside compat, as it's deprecated and doesn't really work.
centerWindow
function centerWindow(options: {
window?: electron.BrowserWindow,
size?: electron.Size,
useFullBounds?: boolean,
animated?: boolean
})Centers the current window.
chromeVersion
const chromeVersion: stringChromium version
nativeTheme
nativeTheme.isEnabled
const isEnabled: booleanIs the app in dark mode? (Only available for compatibility, deprecated in favor of nativeTheme.dark)
nativeTheme.dark
const dark: booleanIs the app in dark mode?
nativeTheme.highContrast
const highContrast: booleanIs the app in high contrast mode?
nativeTheme.inverted
const inverted: booleanIs the app in inverted colors mode?
onChange
function onChange(callback: () => unknown): (() => void)Call callback on native theme change. Returns a function that can be called to remove the callback.
debugInfo
Returns some info useful for debugging.
disableZoom
function disableZoom(window: electron.BrowserWindow = activeWindow): voidDisables zooming window.
electronVersion
const electronVersion: stringElectron version
fixPathAsar
function fixPathAsar(path: string): stringFixes the path to point to the unpacked Asar if an Asar packed app.
getWindowBoundsCentered
function getWindowBoundsCentered(options: {
window?: electron.BrowserWindow,
size?: electron.Size,
useFullBounds?: boolean
})Gets the bounds of options.window as if it were centered on the screen.
is
is.macos
const macos: booleanIs the current OS macOS?
is.linux
const linux: booleanIs the current OS Linux?
is.windows
const windows: booleanIs the current OS Windows?
is.main
const main: booleanIs this a main process?
is.renderer
const renderer: booleanIs this a renderer process?
is.macAppStore
const macAppStore: booleanIs this a Mac App Store app?
is.windowsStore
const windowsStore: booleanIs this a Windows Store app?
is.usingAsar
const usingAsar: booleanIs this app Asar packaged?
is.development
const development: booleanIs this Electron app in development mode?
firstLaunch
function firstLaunch(): booleanIs this the first time the app is ran? (Works by storing a file in app.getPath('userData'), so only counts the first time the function, or the electron-util one, is called)
githubIssue
function githubIssue(options: {
body?: string,
title?: string,
template?: string,
labels?: string[],
milestone?: string,
assignee?: string,
projects?: string[],
repoUrl: string,
// or
user: string,
repo: string
}): void;Opens in the user's browser a page to create a GitHub issue. Refer to new-github-issue-url for option documentation.
urlMenuItem
function urlMenuItem(options: electron.MenuItemConstructorOptions & { url: string }): electron.MenuItemReturns a MenuItem that, when clicked, takes to options.url in a browser. Takes the same options as new electron.MenuItem, plus a mandatory url.
byPlatform
export function platform<T>(switcher: {
aix?: T | (() => T),
android?: T | (() => T),
macos?: T | (() => T),
freebsd?: T | (() => T),
linux?: T | (() => T),
openbsd?: T | (() => T),
sunos?: T | (() => T),
windows?: T | (() => T),
cygwin?: T | (() => T),
netbsd?: T | (() => T),
default?: T | (() => T)
}): TReturns a T by process.platform (windows instead of win32 and macos instead of darwin). Alternatively takes a function to the same type, if you do need a function to be returned use () => (yourFunction)
executeJavaScript
function executeJavaScript(code: string, window: electron.BrowserWindow = activeWindow()): Promise<any>Executes code in window.
withCsp
function withCsp(csp: string, session: electron.Session): Promise<void>Forces the content security policy csp on the session. For some reason, lines in csp must end with a semicolon. Don't ask me why, it's compatibility :)
macPreferences
// This is a bit of a hard type, here's the simplified version:
function macPreferences(pane?: string, section?: string): Promise<void>
// Or if you're a TypeScript geek:
interface SystemPreferencesPanes {
universalaccess:
| 'Captioning'
| 'Hearing'
| 'Keyboard'
| 'Media_Descriptions'
| 'Mouse'
| 'Seeing_Display'
| 'Seeing_VoiceOver'
| 'Seeing_Zoom'
| 'SpeakableItems'
| 'Switch';
security:
| 'Advanced'
| 'FDE'
| 'Firewall'
| 'General'
| 'Privacy'
| 'Privacy_Accessibility'
| 'Privacy_Advertising'
| 'Privacy_AllFiles'
| 'Privacy_Assistive'
| 'Privacy_Automation'
| 'Privacy_Calendars'
| 'Privacy_Camera'
| 'Privacy_Contacts'
| 'Privacy_DesktopFolder'
| 'Privacy_Diagnostics'
| 'Privacy_DocumentsFolder'
| 'Privacy_DownloadsFolder'
| 'Privacy_LocationServices'
| 'Privacy_Microphone'
| 'Privacy_Photos'
| 'Privacy_Reminders'
| 'Privacy_ScreenCapture';
speech:
| 'Dictation'
| 'TTS';
sharing:
| 'Internet'
| 'Services_ARDService'
| 'Services_BluetoothSharing'
| 'Services_PersonalFileSharing'
| 'Services_PrinterSharing'
| 'Services_RemoteAppleEvent'
| 'Services_RemoteLogin'
| 'Services_ScreenSharing';
}
function macPreferences<Pane extends keyof SystemPreferencesPanes>(pane?: Pane, section?: SystemPreferencePanes[Pane]): Promise<void>Shows the macOS System Preferences, optionally with pane pane and section section visible.
openUrl
function openUrl(url: string): voidOpens url in the user's browser. Mainly for safe mode where api.shell isn't available.