Skip to content

Commit 6cc9905

Browse files
authored
fix: properly handle trpc requestIDs with HMR (#369)
1 parent a4a1e1a commit 6cc9905

37 files changed

+2467
-26
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ jobs:
2626
cache: 'pnpm'
2727
- name: Install dependencies
2828
run: pnpm install --frozen-lockfile
29+
- name: Build electron-trpc
30+
run: pnpm --filter @posthog/electron-trpc build
2931
- name: Build agent
3032
run: pnpm --filter agent build
3133
- name: Build array

.github/workflows/release.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77
paths:
88
- "apps/array/**"
99
- "packages/agent/**"
10+
- "packages/electron-trpc/**"
1011
- "pnpm-lock.yaml"
1112
- "package.json"
1213
- "turbo.json"
@@ -71,6 +72,9 @@ jobs:
7172
- name: Install dependencies
7273
run: pnpm install --frozen-lockfile
7374

75+
- name: Build electron-trpc package
76+
run: pnpm --filter @posthog/electron-trpc run build
77+
7478
- name: Build agent package
7579
run: pnpm --filter @posthog/agent run build
7680

apps/array/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
"remark-gfm": "^4.0.1",
146146
"sonner": "^2.0.7",
147147
"tippy.js": "^6.3.7",
148-
"trpc-electron": "^0.1.2",
148+
"@posthog/electron-trpc": "workspace:*",
149149
"uuid": "^9.0.1",
150150
"vscode-icons-js": "^11.6.1",
151151
"zod": "^4.1.12",

apps/array/src/main/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { mkdirSync } from "node:fs";
77
import os from "node:os";
88
import path from "node:path";
99
import { fileURLToPath } from "node:url";
10+
import { createIPCHandler } from "@posthog/electron-trpc/main";
1011
import {
1112
app,
1213
BrowserWindow,
@@ -16,7 +17,6 @@ import {
1617
type MenuItemConstructorOptions,
1718
shell,
1819
} from "electron";
19-
import { createIPCHandler } from "trpc-electron/main";
2020
import "./lib/logger";
2121
import { ANALYTICS_EVENTS } from "../types/analytics.js";
2222
import { container } from "./di/container.js";

apps/array/src/main/preload.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { exposeElectronTRPC } from "trpc-electron/main";
1+
import { exposeElectronTRPC } from "@posthog/electron-trpc/main";
22
import "electron-log/preload";
33

44
process.once("loaded", async () => {

apps/array/src/main/services/dock-badge/service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class DockBadgeService {
1919

2020
this.hasBadge = true;
2121
if (process.platform === "darwin" || process.platform === "linux") {
22-
app.dock.setBadge("•");
22+
app.dock?.setBadge("•");
2323
}
2424
log.info("Dock badge shown");
2525
}
@@ -29,7 +29,7 @@ export class DockBadgeService {
2929

3030
this.hasBadge = false;
3131
if (process.platform === "darwin" || process.platform === "linux") {
32-
app.dock.setBadge("");
32+
app.dock?.setBadge("");
3333
}
3434
log.info("Dock badge cleared");
3535
}

apps/array/src/main/services/ui/service.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ import { injectable } from "inversify";
22
import { TypedEventEmitter } from "../../lib/typed-event-emitter.js";
33
import { UIServiceEvent, type UIServiceEvents } from "./schemas.js";
44

5-
/**
6-
* UIService handles UI events that need to be communicated from main to renderer.
7-
* These are typically triggered by menu items or other main process actions.
8-
*/
95
@injectable()
106
export class UIService extends TypedEventEmitter<UIServiceEvents> {
117
openSettings(): void {

apps/array/src/renderer/trpc/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { ipcLink } from "@posthog/electron-trpc/renderer";
12
import { createTRPCProxyClient } from "@trpc/client";
23
import { type CreateTRPCReact, createTRPCReact } from "@trpc/react-query";
3-
import { ipcLink } from "trpc-electron/renderer";
44
import type { TrpcRouter } from "../../main/trpc/router.js";
55

66
export function createTrpcClient() {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const config = {
2+
compilationOptions: {
3+
preferredConfigPath: "./tsconfig.json",
4+
},
5+
entries: [
6+
{
7+
filePath: "./src/renderer/index.ts",
8+
outFile: `./dist/renderer.d.ts`,
9+
noCheck: true,
10+
},
11+
{
12+
filePath: "./src/main/index.ts",
13+
outFile: `./dist/main.d.ts`,
14+
noCheck: true,
15+
},
16+
],
17+
};
18+
19+
module.exports = config;

packages/electron-trpc/main.d.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Generated by dts-bundle-generator v8.1.2
2+
3+
import { AnyTRPCRouter, inferRouterContext } from "@trpc/server";
4+
import { BrowserWindow, IpcMainInvokeEvent } from "electron";
5+
6+
export declare const ELECTRON_TRPC_CHANNEL = "trpc-electron";
7+
export interface CreateContextOptions {
8+
event: IpcMainInvokeEvent;
9+
}
10+
export type MaybePromise<TType> = Promise<TType> | TType;
11+
declare class IPCHandler<TRouter extends AnyTRPCRouter> {
12+
constructor({
13+
createContext,
14+
router,
15+
windows,
16+
}: {
17+
createContext?: (
18+
opts: CreateContextOptions,
19+
) => MaybePromise<inferRouterContext<TRouter>>;
20+
router: TRouter;
21+
windows?: BrowserWindow[];
22+
});
23+
attachWindow(win: BrowserWindow): void;
24+
detachWindow(win: BrowserWindow, webContentsId?: number): void;
25+
}
26+
export declare const createIPCHandler: <TRouter extends AnyTRPCRouter>({
27+
createContext,
28+
router,
29+
windows,
30+
}: {
31+
createContext?: (
32+
opts: CreateContextOptions,
33+
) => Promise<inferRouterContext<TRouter>>;
34+
router: TRouter;
35+
windows?: Electron.BrowserWindow[];
36+
}) => IPCHandler<TRouter>;
37+
export declare const exposeElectronTRPC: () => void;

0 commit comments

Comments
 (0)