Skip to content

Commit 42abc41

Browse files
jsonnullbiw
andauthored
Fix subscription transformers. (#126)
* Fixed transform on subscription * Update response transforms, add tests. * Add superjson example. * Merge CHANGELOG. * Add changeset. --------- Co-authored-by: Ben Williams <[email protected]>
1 parent 0077533 commit 42abc41

File tree

24 files changed

+470
-93
lines changed

24 files changed

+470
-93
lines changed

.changeset/red-pandas-behave.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'electron-trpc': patch
3+
---
4+
5+
Fix transforms not running for subscriptions.
6+
7+
pr: 125

CHANGELOG.md

Lines changed: 0 additions & 49 deletions
This file was deleted.
File renamed without changes.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import z from 'zod';
2+
import { initTRPC } from '@trpc/server';
3+
import { observable } from '@trpc/server/observable';
4+
import { EventEmitter } from 'events';
5+
import superjson from 'superjson';
6+
7+
const ee = new EventEmitter();
8+
9+
const t = initTRPC.create({ isServer: true, transformer: superjson });
10+
11+
export const router = t.router({
12+
greeting: t.procedure.input(z.object({ name: z.string() })).query((req) => {
13+
const { input } = req;
14+
15+
ee.emit('greeting', `Greeted ${input.name}`);
16+
return {
17+
text: `Hello ${input.name}` as const,
18+
};
19+
}),
20+
subscription: t.procedure.subscription(() => {
21+
return observable((emit) => {
22+
function onGreet(text: string) {
23+
emit.next({ text });
24+
}
25+
26+
ee.on('greeting', onGreet);
27+
28+
return () => {
29+
ee.off('greeting', onGreet);
30+
};
31+
});
32+
}),
33+
});
34+
35+
export type AppRouter = typeof router;
File renamed without changes.
File renamed without changes.

examples/basic/package.json renamed to examples/basic-react-superjson/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
2-
"name": "examples/basic",
3-
"description": "Electron support for tRPC",
2+
"name": "examples/basic-react-superjson",
43
"version": "0.0.8",
54
"private": true,
65
"main": "dist-electron/index.js",
@@ -18,6 +17,7 @@
1817
"electron-trpc": "0.4.2",
1918
"react": "^18.2.0",
2019
"react-dom": "^18.2.0",
20+
"superjson": "^1.12.2",
2121
"zod": "^3.19.1"
2222
},
2323
"devDependencies": {
File renamed without changes.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import React, { useState } from 'react';
2+
import ReactDom from 'react-dom';
3+
import { ipcLink } from 'electron-trpc/renderer';
4+
import superjson from 'superjson';
5+
import { createTRPCReact } from '@trpc/react-query';
6+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
7+
import type { AppRouter } from '../electron/api';
8+
9+
const trpcReact = createTRPCReact<AppRouter>();
10+
11+
function App() {
12+
const [queryClient] = useState(() => new QueryClient());
13+
const [trpcClient] = useState(() =>
14+
trpcReact.createClient({
15+
links: [ipcLink()],
16+
transformer: superjson,
17+
})
18+
);
19+
20+
return (
21+
<trpcReact.Provider client={trpcClient} queryClient={queryClient}>
22+
<QueryClientProvider client={queryClient}>
23+
<HelloElectron />
24+
</QueryClientProvider>
25+
</trpcReact.Provider>
26+
);
27+
}
28+
29+
function HelloElectron() {
30+
const { data } = trpcReact.greeting.useQuery({ name: 'Electron' });
31+
trpcReact.subscription.useSubscription(undefined, {
32+
onData: (data) => {
33+
console.log(data);
34+
},
35+
});
36+
37+
if (!data) {
38+
return null;
39+
}
40+
41+
return <div>{data.text}</div>;
42+
}
43+
44+
ReactDom.render(<App />, document.getElementById('react-root'));
File renamed without changes.

0 commit comments

Comments
 (0)