59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
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),
|
|
}
|
|
|
|
// 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
|
|
},
|
|
})
|
|
}
|