import os from "node:os" import { platform } from "node:process" import { electronAPI } from "@electron-toolkit/preload" import { clipboard, contextBridge } from "electron" export const isMacOS = platform === "darwin" export const isWindows = platform === "win32" export const isLinux = platform === "linux" /** * @see https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information * Windows 11 buildNumber starts from 22000. */ const detectingWindows11 = () => { if (!isWindows) return false const release = os.release() const majorVersion = Number.parseInt(release.split(".")[0]!) const buildNumber = Number.parseInt(release.split(".")[2]!) return majorVersion === 10 && buildNumber >= 22000 } export const isWindows11 = detectingWindows11() // Custom APIs for renderer const api = { canWindowBlur: process.platform === "darwin" || (process.platform === "win32" && isWindows11), isWindowsStore: Boolean((process as typeof process & { windowsStore?: boolean }).windowsStore), } // Use `contextBridge` APIs to expose Electron APIs to // renderer only if context isolation is enabled, otherwise // just add to the DOM global. if (process.contextIsolated) { try { contextBridge.exposeInMainWorld("electron", electronAPI) contextBridge.exposeInMainWorld("api", api) contextBridge.exposeInMainWorld("platform", process.platform) } catch (error) { console.error(error) } } else { // @ts-ignore (define in dts) window.electron = electronAPI // @ts-ignore (define in dts) window.api = api // @ts-ignore (define in dts) window.platform = process.platform Object.defineProperty(window.navigator, "clipboard", { get: () => { return clipboard }, }) }