11import type { WebSocketRpcClientOptions } from '@vitejs/devtools-rpc/presets/ws/client'
22import type { BirpcOptions , BirpcReturn } from 'birpc'
33import type { ConnectionMeta , DevToolsRpcClientFunctions , DevToolsRpcServerFunctions } from '../types'
4+ import type { DevToolsClientContext , DevToolsClientRpcHost } from './docks'
45import { createRpcClient } from '@vitejs/devtools-rpc'
56import { createWsRpcPreset } from '@vitejs/devtools-rpc/presets/ws/client'
7+ import { RpcFunctionsCollectorBase } from 'birpc-x'
68
79function isNumeric ( str : string | number | undefined ) {
810 if ( str == null )
@@ -19,12 +21,15 @@ export interface DevToolsRpcClientOptions {
1921
2022export type DevToolsRpcClient = BirpcReturn < DevToolsRpcServerFunctions , DevToolsRpcClientFunctions >
2123
22- export async function getDevToolsRpcClient (
23- options : DevToolsRpcClientOptions = { } ,
24- ) : Promise < {
24+ export interface ClientRpcReturn {
2525 connectionMeta : ConnectionMeta
2626 rpc : DevToolsRpcClient
27- } > {
27+ clientRpc : DevToolsClientRpcHost
28+ }
29+
30+ export async function getDevToolsRpcClient (
31+ options : DevToolsRpcClientOptions = { } ,
32+ ) : Promise < ClientRpcReturn > {
2833 const {
2934 baseURL = '/.devtools/' ,
3035 rpcOptions = { } ,
@@ -55,16 +60,26 @@ export async function getDevToolsRpcClient(
5560 ? `${ location . protocol . replace ( 'http' , 'ws' ) } //${ location . hostname } :${ connectionMeta . websocket } `
5661 : connectionMeta . websocket as string
5762
58- const rpc = createRpcClient < DevToolsRpcServerFunctions , DevToolsRpcClientFunctions > ( { } , {
59- preset : createWsRpcPreset ( {
60- url,
61- ...options . wsOptions ,
62- } ) ,
63- rpcOptions,
64- } )
63+ const context : DevToolsClientContext = {
64+ rpc : undefined ! ,
65+ }
66+ const clientRpc : DevToolsClientRpcHost = new RpcFunctionsCollectorBase < DevToolsRpcClientFunctions , DevToolsClientContext > ( context )
67+ const rpc = createRpcClient < DevToolsRpcServerFunctions , DevToolsRpcClientFunctions > (
68+ clientRpc . functions ,
69+ {
70+ preset : createWsRpcPreset ( {
71+ url,
72+ ...options . wsOptions ,
73+ } ) ,
74+ rpcOptions,
75+ } ,
76+ )
77+ // @ts -expect-error assign to readonly property
78+ context . rpc = rpc
6579
6680 return {
6781 connectionMeta,
6882 rpc,
83+ clientRpc,
6984 }
7085}
0 commit comments