Repository navigation
Expand file tree
/
Copy pathindex.ts
More file actions
57 lines (53 loc) · 2.23 KB
/
Copy pathindex.ts
File metadata and controls
57 lines (53 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { contextBridge, ipcRenderer } from 'electron'
import type { IpcChannels, StagePlotExportData } from '../shared/types'
// Type-safe IPC invoke helper
function invoke<K extends keyof IpcChannels>(
channel: K,
...args: IpcChannels[K]['args']
): Promise<IpcChannels[K]['return']> {
return ipcRenderer.invoke(channel, ...args)
}
const api = {
platform: process.platform as NodeJS.Platform,
projects: {
list: () => invoke('db:projects:list'),
get: (id: string) => invoke('db:projects:get', id),
save: (project: Parameters<typeof invoke<'db:projects:save'>>[1]) =>
invoke('db:projects:save', project),
delete: (id: string) => invoke('db:projects:delete', id)
},
items: {
list: (projectId: string) => invoke('db:items:list', projectId),
save: (item: Parameters<typeof invoke<'db:items:save'>>[1]) => invoke('db:items:save', item),
saveMany: (items: Parameters<typeof invoke<'db:items:saveMany'>>[1]) =>
invoke('db:items:saveMany', items),
delete: (id: string) => invoke('db:items:delete', id),
deleteByProject: (projectId: string) => invoke('db:items:deleteByProject', projectId)
},
files: {
exportJson: (data: StagePlotExportData) => invoke('file:exportJson', data),
importJson: () => invoke('file:importJson'),
importImage: () => invoke('file:importImage')
},
background: {
get: (projectId: string) => invoke('db:background:get', projectId),
set: (projectId: string, imageData: string | null, locked: boolean, x: number | null, y: number | null, width: number | null, height: number | null) =>
invoke('db:background:set', projectId, imageData, locked, x, y, width, height)
},
app: {
getVersion: () => invoke('app:version'),
installUpdate: () => invoke('app:install-update'),
openReleases: () => invoke('app:open-releases'),
onUpdateAvailable: (cb: (version: string) => void) => {
ipcRenderer.on('app:update-available', (_event, version: string) => cb(version))
},
onUpdateDownloaded: (cb: () => void) => {
ipcRenderer.on('app:update-downloaded', () => cb())
},
onUpdateError: (cb: () => void) => {
ipcRenderer.on('app:update-error', () => cb())
}
}
}
contextBridge.exposeInMainWorld('api', api)
export type API = typeof api