@@ -6,6 +6,8 @@ import { createRpcClient } from '@vitejs/devtools-rpc'
66import { createWsRpcPreset } from '@vitejs/devtools-rpc/presets/ws/client'
77import { RpcFunctionsCollectorBase } from 'birpc-x'
88
9+ const CONNECTION_META_KEY = '__VITE_DEVTOOLS_CONNECTION_META__'
10+
911function isNumeric ( str : string | number | undefined ) {
1012 if ( str == null )
1113 return false
@@ -27,30 +29,48 @@ export interface ClientRpcReturn {
2729 clientRpc : DevToolsClientRpcHost
2830}
2931
32+ function findConnectionMetaFromWindows ( ) : ConnectionMeta | undefined {
33+ const getters = [
34+ ( ) => ( window as any ) [ CONNECTION_META_KEY ] ,
35+ ( ) => ( globalThis as any ) [ CONNECTION_META_KEY ] ,
36+ ( ) => ( parent . window as any ) [ CONNECTION_META_KEY ] ,
37+ ]
38+
39+ for ( const getter of getters ) {
40+ try {
41+ const value = getter ( )
42+ if ( value )
43+ return value
44+ }
45+ catch { }
46+ }
47+ }
48+
3049export async function getDevToolsRpcClient (
3150 options : DevToolsRpcClientOptions = { } ,
3251) : Promise < ClientRpcReturn > {
3352 const {
3453 baseURL = '/.devtools/' ,
3554 rpcOptions = { } ,
3655 } = options
37- const urls = Array . isArray ( baseURL ) ? baseURL : [ baseURL ]
38- let connectionMeta : ConnectionMeta | undefined = options . connectionMeta
56+ const bases = Array . isArray ( baseURL ) ? baseURL : [ baseURL ]
57+ let connectionMeta : ConnectionMeta | undefined = options . connectionMeta || findConnectionMetaFromWindows ( )
3958
4059 if ( ! connectionMeta ) {
4160 const errors : Error [ ] = [ ]
42- for ( const url of urls ) {
61+ for ( const base of bases ) {
4362 try {
44- connectionMeta = await fetch ( `${ url } .vdt-connection.json` )
63+ connectionMeta = await fetch ( `${ base } .vdt-connection.json` )
4564 . then ( r => r . json ( ) ) as ConnectionMeta
65+ ; ( globalThis as any ) [ CONNECTION_META_KEY ] = connectionMeta
4666 break
4767 }
4868 catch ( e ) {
4969 errors . push ( e as Error )
5070 }
5171 }
5272 if ( ! connectionMeta ) {
53- throw new Error ( `Failed to get connection meta from ${ urls . join ( ', ' ) } ` , {
73+ throw new Error ( `Failed to get connection meta from ${ bases . join ( ', ' ) } ` , {
5474 cause : errors ,
5575 } )
5676 }
0 commit comments