Skip to content

Commit 135f89d

Browse files
committed
feat!: disable birpc proxify, requires explicit $call
1 parent 1db34e9 commit 135f89d

File tree

9 files changed

+45
-21
lines changed

9 files changed

+45
-21
lines changed

packages/core/src/node/ws.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export async function createWsServer(options: CreateWsServerOptions) {
3737
{
3838
preset,
3939
rpcOptions: {
40-
onError(error, name) {
40+
onGeneralError(error, name) {
4141
console.error(c.red`⬢ RPC error on executing "${c.bold(name)}":`)
4242
console.error(error)
4343
throw error

packages/kit/src/client/rpc.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ export interface DevToolsRpcClientOptions {
1818
connectionMeta?: ConnectionMeta
1919
baseURL?: string[]
2020
wsOptions?: Partial<WebSocketRpcClientOptions>
21-
rpcOptions?: Partial<BirpcOptions<DevToolsRpcServerFunctions>>
21+
rpcOptions?: Partial<BirpcOptions<DevToolsRpcServerFunctions, DevToolsRpcClientFunctions, boolean>>
2222
}
2323

24-
export type DevToolsRpcClient = BirpcReturn<DevToolsRpcServerFunctions, DevToolsRpcClientFunctions>
24+
export type DevToolsRpcClient = BirpcReturn<DevToolsRpcServerFunctions, DevToolsRpcClientFunctions, false>
2525

2626
export interface ClientRpcReturn {
2727
connectionMeta: ConnectionMeta

packages/kit/src/types/rpc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ import type { DevToolsRpcClientFunctions, DevToolsRpcServerFunctions } from './r
44
import type { DevToolsNodeContext } from './vite-plugin'
55

66
export type RpcFunctionsHost = RpcFunctionsCollectorBase<DevToolsRpcServerFunctions, DevToolsNodeContext> & {
7-
boardcast: BirpcGroup<DevToolsRpcClientFunctions, DevToolsRpcServerFunctions>['broadcast']
7+
boardcast: BirpcGroup<DevToolsRpcClientFunctions, DevToolsRpcServerFunctions, false>['broadcast']
88
}

packages/rpc/src/client.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@ import type { BirpcOptions, BirpcReturn } from 'birpc'
22
import { createBirpc } from 'birpc'
33

44
export function createRpcClient<
5-
ServerFunctions = Record<string, never>,
5+
ServerFunctions extends object = Record<string, never>,
66
ClientFunctions extends object = Record<string, never>,
77
>(
88
functions: ClientFunctions,
99
options: {
10-
preset: BirpcOptions<ServerFunctions>
11-
rpcOptions?: Partial<BirpcOptions<ServerFunctions>>
10+
preset: BirpcOptions<ServerFunctions, ClientFunctions, false>
11+
rpcOptions?: Partial<BirpcOptions<ServerFunctions, ClientFunctions, boolean>>
1212
},
13-
): BirpcReturn<ServerFunctions, ClientFunctions> {
13+
): BirpcReturn<ServerFunctions, ClientFunctions, false> {
1414
const { preset, rpcOptions = {} } = options
15-
return createBirpc<ServerFunctions, ClientFunctions>(functions, {
15+
return createBirpc<ServerFunctions, ClientFunctions, false>(functions, {
1616
...preset,
1717
timeout: -1,
1818
...rpcOptions,
19-
} as BirpcOptions<ServerFunctions, ClientFunctions>)
19+
proxify: false,
20+
})
2021
}

packages/rpc/src/index.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ describe('devtools rpc', () => {
4141
preset: createWsRpcClientPreset({ url: WS_URL }),
4242
})
4343

44-
expect(await client1.hello(1)).toBe('hello world from client 1')
44+
expect(await client1.$call('hello', 1)).toBe('hello world from client 1')
4545

46-
expect(await client2.hello(2)).toBe('hello world from client 2')
46+
expect(await client2.$call('hello', 2)).toBe('hello world from client 2')
4747

48-
expect(await server.broadcast.hey('server')).toEqual(expect.arrayContaining(['hey server, I\'m client 1', 'hey server, I\'m client 2']))
48+
expect(await server.broadcast.$call('hey', 'server')).toEqual(expect.arrayContaining(['hey server, I\'m client 1', 'hey server, I\'m client 2']))
4949
})
5050
})

packages/rpc/src/presets/index.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import type { BirpcGroup, BirpcOptions, ChannelOptions } from 'birpc'
22

3-
export type RpcServerPresetReturnType = <ClientFunctions, ServerFunctions>(rpc: BirpcGroup<ClientFunctions, ServerFunctions>, options?: Pick<BirpcOptions<ClientFunctions>, 'serialize' | 'deserialize'>) => void
3+
export type RpcServerPresetReturnType = <
4+
ClientFunctions extends object,
5+
ServerFunctions extends object,
6+
>(
7+
rpc: BirpcGroup<ClientFunctions, ServerFunctions, false>,
8+
options?: Pick<BirpcOptions<ClientFunctions, ServerFunctions, false>, 'serialize' | 'deserialize'>,
9+
) => void
10+
411
export type RpcServerPresetBasicType = (...args: any[]) => RpcServerPresetReturnType
512
export type RpcServerPreset<T extends RpcServerPresetBasicType> = (...args: Parameters<T>) => RpcServerPresetReturnType
613

packages/rpc/src/presets/ws/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,30 @@ export interface WebSocketRpcServerOptions {
1313

1414
function NOOP() {}
1515

16-
export const createWsRpcPreset: RpcServerPreset<(options: WebSocketRpcServerOptions) => <ClientFunctions, ServerFunctions>(rpc: BirpcGroup<ClientFunctions, ServerFunctions>, options?: Pick<BirpcOptions<ClientFunctions>, 'serialize' | 'deserialize'>) => void> = defineRpcServerPreset((options: WebSocketRpcServerOptions) => {
16+
export const createWsRpcPreset: RpcServerPreset<
17+
(options: WebSocketRpcServerOptions) =>
18+
<
19+
ClientFunctions extends object,
20+
ServerFunctions extends object,
21+
>(
22+
rpc: BirpcGroup<ClientFunctions, ServerFunctions, false>,
23+
options?: Pick<BirpcOptions<ClientFunctions, ServerFunctions, false>, 'serialize' | 'deserialize'>,
24+
) => void
25+
> = defineRpcServerPreset((options: WebSocketRpcServerOptions) => {
1726
const {
1827
port,
1928
onConnected = NOOP,
2029
onDisconnected = NOOP,
2130
} = options
31+
2232
const wss = new WebSocketServer({
2333
port,
2434
})
2535

26-
return <ClientFunctions, ServerFunctions>(rpc: BirpcGroup<ClientFunctions, ServerFunctions>, options?: Pick<BirpcOptions<ClientFunctions>, 'serialize' | 'deserialize'>) => {
36+
return <ClientFunctions extends object, ServerFunctions extends object>(
37+
rpc: BirpcGroup<ClientFunctions, ServerFunctions, false>,
38+
options?: Pick<BirpcOptions<ClientFunctions, ServerFunctions, false>, 'serialize' | 'deserialize'>,
39+
) => {
2740
const {
2841
serialize = stringify,
2942
deserialize = parse,

packages/rpc/src/server.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ export function createRpcServer<
77
>(
88
functions: ServerFunctions,
99
options: {
10-
preset: (rpc: BirpcGroup<ClientFunctions, ServerFunctions>) => void
11-
rpcOptions?: EventOptions<ClientFunctions>
10+
preset: (rpc: BirpcGroup<ClientFunctions, ServerFunctions, false>) => void
11+
rpcOptions?: EventOptions<ClientFunctions, ServerFunctions, false>
1212
},
13-
): BirpcGroup<ClientFunctions, ServerFunctions> {
14-
const rpc = createBirpcGroup<ClientFunctions, ServerFunctions>(functions, [], (options?.rpcOptions ?? {}) as EventOptions<ClientFunctions, ServerFunctions>)
13+
): BirpcGroup<ClientFunctions, ServerFunctions, false> {
14+
const rpc = createBirpcGroup<ClientFunctions, ServerFunctions, false>(functions, [], {
15+
...options?.rpcOptions,
16+
proxify: false,
17+
})
1518
options?.preset(rpc)
1619

1720
return rpc

packages/vite/src/app/composables/rpc.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export async function connect() {
3636
},
3737
},
3838
rpcOptions: {
39-
onError: (e, name) => {
39+
onGeneralError: (e, name) => {
4040
connectionState.error = e
4141
console.error(`[vite-devtools] RPC error on executing "${name}":`)
4242
},

0 commit comments

Comments
 (0)