feat: setup tipc

This commit is contained in:
DIYgod 2024-05-18 11:02:47 +08:00
parent a60ce0d23c
commit 591b6424f1
No known key found for this signature in database
6 changed files with 79 additions and 2 deletions

View File

@ -25,6 +25,7 @@
"prepare": "husky"
},
"dependencies": {
"@egoist/tipc": "0.3.1",
"@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/utils": "^3.0.0",
"@fontsource/sn-pro": "5.0.1",

View File

@ -8,6 +8,9 @@ importers:
.:
dependencies:
'@egoist/tipc':
specifier: 0.3.1
version: 0.3.1(electron@30.0.3)(react@18.3.1)
'@electron-toolkit/preload':
specifier: ^3.0.0
version: 3.0.1(electron@30.0.3)
@ -375,6 +378,11 @@ packages:
peerDependencies:
tailwindcss: '*'
'@egoist/tipc@0.3.1':
resolution: {integrity: sha512-jnolALBsPffkUUoBMYNX3/ONX019D94KR/cQwPDF7Ns7eHwbHhormAFr445BjFbtxEifAlt/KWwehrE+0HS5Zg==}
peerDependencies:
electron: '>=26.0.0'
'@electron-toolkit/eslint-config-prettier@2.0.0':
resolution: {integrity: sha512-L+uG1FvJcAZkPZpSi6B1pmdpyJFyOxWDTjr1Vs47vSryxv/EX1Ch6o4HVsachlDq3fMEkDgojuP2F3ZvVZMoLw==}
peerDependencies:
@ -4575,6 +4583,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@egoist/tipc@0.3.1(electron@30.0.3)(react@18.3.1)':
dependencies:
electron: 30.0.3
optionalDependencies:
'@tanstack/react-query': 5.36.0(react@18.3.1)
transitivePeerDependencies:
- react
'@electron-toolkit/eslint-config-prettier@2.0.0(eslint@9.2.0)(prettier@3.2.5)':
dependencies:
eslint: 9.2.0

View File

@ -3,6 +3,10 @@ import { app, BrowserWindow, ipcMain, ShareMenu } from "electron"
import path from "path"
import { electronApp, optimizer } from "@electron-toolkit/utils"
import { createWindow } from "./window"
import { registerIpcMain } from "@egoist/tipc/main"
import { router } from "./tipc"
registerIpcMain(router)
if (process.defaultApp) {
if (process.argv.length >= 2) {

46
src/main/tipc.ts Normal file
View File

@ -0,0 +1,46 @@
import { tipc } from "@egoist/tipc/main"
import { Menu } from "electron"
const t = tipc.create()
export const router = {
sum: t.procedure
.input<{ a: number; b: number }>()
.action(async ({ input }) => {
return input.a + input.b
}),
inspectElement: t.procedure
.input<{ x: number; y: number }>()
.action(async ({ input, context }) => {
context.sender.inspectElement(input.x, input.y)
}),
showContextMenu: t.procedure
.input<{
items: Array<{ type: "text"; label: string } | { type: "separator" }>
}>()
.action(async ({ input, context }) => {
const menu = Menu.buildFromTemplate(
input.items.map((item, index) => {
if (item.type === "separator") {
return {
type: "separator" as const,
}
}
return {
label: item.label,
click() {
context.sender.send("menu-click", index)
},
}
}),
)
menu.popup({
callback: () => {
context.sender.send("menu-closed")
},
})
}),
}
export type Router = typeof router

View File

@ -0,0 +1,6 @@
import { createClient } from "@egoist/tipc/renderer"
import type { Router } from "@main/tipc"
export const client = createClient<Router>({
ipcInvoke: window.electron.ipcRenderer.invoke,
})

View File

@ -4,7 +4,8 @@
"src/renderer/src/env.d.ts",
"src/renderer/src/**/*",
"src/renderer/src/**/*.tsx",
"src/preload/*.d.ts"
"src/preload/*.d.ts",
"src/main/*.ts",
],
"compilerOptions": {
"composite": true,
@ -13,7 +14,10 @@
"paths": {
"@renderer/*": [
"src/renderer/src/*"
]
],
"@main/*": [
"src/main/*"
],
}
}
}