@@ -70,24 +70,30 @@ export const checkInjected = (error: string): boolean => {
7070 return false ;
7171} ;
7272
73- export const useReconnect = < T extends Chat . Port > ( connect : ( ) => T ) : T & { destroy : ( ) => void } => {
74- let actualPort = connect ( ) ;
75- const onDisconnect = ( ) : void => {
76- actualPort = connect ( ) ;
77- actualPort . onDisconnect . addListener ( onDisconnect ) ;
73+ type ReconnectingPort < T extends Chat . Port > =
74+ Partial < Pick < T , 'name' | 'disconnect' | 'postMessage' | 'onMessage' | 'onDisconnect' > > &
75+ { destroy : ( ) => void } ;
76+
77+ export const useReconnect = < T extends Chat . Port > ( connect : ( ) => Promise < T > ) : ReconnectingPort < T > => {
78+ let actualPort : T | null = null ;
79+
80+ const doConnect = async ( ) : Promise < void > => {
81+ actualPort = await connect ( ) ;
82+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
83+ actualPort . onDisconnect . addListener ( doConnect ) ;
7884 } ;
79- actualPort . onDisconnect . addListener ( onDisconnect ) ;
85+ void doConnect ( ) ;
8086
8187 return {
82- ...actualPort ,
83- get name ( ) { return actualPort . name ; } ,
84- disconnect ( ...args ) { return actualPort . disconnect ( ...args ) ; } ,
85- postMessage ( ...args ) { return actualPort . postMessage ( ...args ) ; } ,
86- get onMessage ( ) { return actualPort . onMessage ; } ,
87- get onDisconnect ( ) { return actualPort . onDisconnect ; } ,
88+ get name ( ) { return actualPort ?. name ; } ,
89+ disconnect ( ...args ) { return actualPort ?. disconnect ( ...args ) ; } ,
90+ postMessage ( ...args ) { return actualPort ?. postMessage ( ...args ) ; } ,
91+ get onMessage ( ) { return actualPort ?. onMessage ; } ,
92+ get onDisconnect ( ) { return actualPort ?. onDisconnect ; } ,
8893 destroy : ( ) => {
89- actualPort . onDisconnect . removeListener ( onDisconnect ) ;
90- actualPort . disconnect ( ) ;
94+ // eslint-disable-next-line @typescript-eslint/no-misused-promises
95+ actualPort ?. onDisconnect . removeListener ( doConnect ) ;
96+ actualPort ?. disconnect ( ) ;
9197 }
9298 } ;
9399} ;
0 commit comments