From cd7afb6abd9cd62f56d639e56fa6d55baa69fe7f Mon Sep 17 00:00:00 2001 From: Makito Date: Thu, 23 Oct 2025 00:22:38 +0900 Subject: [PATCH] feat(stage-tamagotchi): unified preload expose --- apps/stage-tamagotchi/src/preload/index.ts | 27 ++------------------- apps/stage-tamagotchi/src/preload/shared.ts | 27 +++++++++++++++++++++ packages/stage-shared/src/window.ts | 6 ++--- 3 files changed, 32 insertions(+), 28 deletions(-) create mode 100644 apps/stage-tamagotchi/src/preload/shared.ts diff --git a/apps/stage-tamagotchi/src/preload/index.ts b/apps/stage-tamagotchi/src/preload/index.ts index 43b009209..ebaf15783 100644 --- a/apps/stage-tamagotchi/src/preload/index.ts +++ b/apps/stage-tamagotchi/src/preload/index.ts @@ -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() diff --git a/apps/stage-tamagotchi/src/preload/shared.ts b/apps/stage-tamagotchi/src/preload/shared.ts new file mode 100644 index 000000000..a6fa91646 --- /dev/null +++ b/apps/stage-tamagotchi/src/preload/shared.ts @@ -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: 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).api = customApi + } +} diff --git a/packages/stage-shared/src/window.ts b/packages/stage-shared/src/window.ts index 483424cb2..80cf736ff 100644 --- a/packages/stage-shared/src/window.ts +++ b/packages/stage-shared/src/window.ts @@ -2,12 +2,12 @@ import type { ElectronAPI } from '@electron-toolkit/preload' import { isStageTamagotchi } from './environment' -export interface ElectronWindow { +export interface ElectronWindow { electron: ElectronAPI platform: NodeJS.Platform - api: unknown + api: CustomApi } -export function isElectronWindow(window: Window): window is (Window & ElectronWindow) { +export function isElectronWindow(window: Window): window is (Window & ElectronWindow) { return isStageTamagotchi() && typeof window === 'object' && window !== null && 'electron' in window }