feat(stage-tamagotchi): unified preload expose
This commit is contained in:
@@ -1,26 +1,3 @@
|
||||
import { contextIsolated, platform } from 'node:process'
|
||||
import { expose } from './shared'
|
||||
|
||||
import { electronAPI } from '@electron-toolkit/preload'
|
||||
import { contextBridge } from 'electron'
|
||||
|
||||
// Custom APIs for renderer
|
||||
const api = {}
|
||||
|
||||
// Use `contextBridge` APIs to expose Electron APIs to
|
||||
// renderer only if context isolation is enabled, otherwise
|
||||
// just add to the DOM global.
|
||||
if (contextIsolated) {
|
||||
try {
|
||||
contextBridge.exposeInMainWorld('electron', electronAPI)
|
||||
contextBridge.exposeInMainWorld('platform', platform)
|
||||
contextBridge.exposeInMainWorld('api', api)
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
else {
|
||||
window.electron = electronAPI
|
||||
window.platform = platform
|
||||
window.api = api
|
||||
}
|
||||
expose()
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
import type { ElectronWindow } from '@proj-airi/stage-shared'
|
||||
|
||||
import { contextIsolated, platform } from 'node:process'
|
||||
|
||||
import { electronAPI } from '@electron-toolkit/preload'
|
||||
import { contextBridge } from 'electron'
|
||||
|
||||
export function expose<CustomApi = unknown>(customApi: CustomApi = undefined as CustomApi) {
|
||||
// Use `contextBridge` APIs to expose Electron APIs to
|
||||
// renderer only if context isolation is enabled, otherwise
|
||||
// just add to the DOM global.
|
||||
if (contextIsolated) {
|
||||
try {
|
||||
contextBridge.exposeInMainWorld('electron', electronAPI)
|
||||
contextBridge.exposeInMainWorld('platform', platform)
|
||||
contextBridge.exposeInMainWorld('api', customApi)
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
else {
|
||||
window.electron = electronAPI
|
||||
window.platform = platform
|
||||
;(window as ElectronWindow<CustomApi>).api = customApi
|
||||
}
|
||||
}
|
||||
@@ -2,12 +2,12 @@ import type { ElectronAPI } from '@electron-toolkit/preload'
|
||||
|
||||
import { isStageTamagotchi } from './environment'
|
||||
|
||||
export interface ElectronWindow {
|
||||
export interface ElectronWindow<CustomApi = unknown> {
|
||||
electron: ElectronAPI
|
||||
platform: NodeJS.Platform
|
||||
api: unknown
|
||||
api: CustomApi
|
||||
}
|
||||
|
||||
export function isElectronWindow(window: Window): window is (Window & ElectronWindow) {
|
||||
export function isElectronWindow<CustomApi = unknown>(window: Window): window is (Window & ElectronWindow<CustomApi>) {
|
||||
return isStageTamagotchi() && typeof window === 'object' && window !== null && 'electron' in window
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user