feat(stage-tamagotchi): unified preload expose

This commit is contained in:
Makito
2025-10-23 00:22:38 +09:00
parent bc9f4ddeee
commit cd7afb6abd
3 changed files with 32 additions and 28 deletions
+2 -25
View File
@@ -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
}
}
+3 -3
View File
@@ -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
}