Skip to content

Commit cd7afb6

Browse files
committed
feat(stage-tamagotchi): unified preload expose
1 parent bc9f4dd commit cd7afb6

File tree

3 files changed

+32
-28
lines changed

3 files changed

+32
-28
lines changed
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
import { contextIsolated, platform } from 'node:process'
1+
import { expose } from './shared'
22

3-
import { electronAPI } from '@electron-toolkit/preload'
4-
import { contextBridge } from 'electron'
5-
6-
// Custom APIs for renderer
7-
const api = {}
8-
9-
// Use `contextBridge` APIs to expose Electron APIs to
10-
// renderer only if context isolation is enabled, otherwise
11-
// just add to the DOM global.
12-
if (contextIsolated) {
13-
try {
14-
contextBridge.exposeInMainWorld('electron', electronAPI)
15-
contextBridge.exposeInMainWorld('platform', platform)
16-
contextBridge.exposeInMainWorld('api', api)
17-
}
18-
catch (error) {
19-
console.error(error)
20-
}
21-
}
22-
else {
23-
window.electron = electronAPI
24-
window.platform = platform
25-
window.api = api
26-
}
3+
expose()
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { ElectronWindow } from '@proj-airi/stage-shared'
2+
3+
import { contextIsolated, platform } from 'node:process'
4+
5+
import { electronAPI } from '@electron-toolkit/preload'
6+
import { contextBridge } from 'electron'
7+
8+
export function expose<CustomApi = unknown>(customApi: CustomApi = undefined as CustomApi) {
9+
// Use `contextBridge` APIs to expose Electron APIs to
10+
// renderer only if context isolation is enabled, otherwise
11+
// just add to the DOM global.
12+
if (contextIsolated) {
13+
try {
14+
contextBridge.exposeInMainWorld('electron', electronAPI)
15+
contextBridge.exposeInMainWorld('platform', platform)
16+
contextBridge.exposeInMainWorld('api', customApi)
17+
}
18+
catch (error) {
19+
console.error(error)
20+
}
21+
}
22+
else {
23+
window.electron = electronAPI
24+
window.platform = platform
25+
;(window as ElectronWindow<CustomApi>).api = customApi
26+
}
27+
}

packages/stage-shared/src/window.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import type { ElectronAPI } from '@electron-toolkit/preload'
22

33
import { isStageTamagotchi } from './environment'
44

5-
export interface ElectronWindow {
5+
export interface ElectronWindow<CustomApi = unknown> {
66
electron: ElectronAPI
77
platform: NodeJS.Platform
8-
api: unknown
8+
api: CustomApi
99
}
1010

11-
export function isElectronWindow(window: Window): window is (Window & ElectronWindow) {
11+
export function isElectronWindow<CustomApi = unknown>(window: Window): window is (Window & ElectronWindow<CustomApi>) {
1212
return isStageTamagotchi() && typeof window === 'object' && window !== null && 'electron' in window
1313
}

0 commit comments

Comments
 (0)