@@ -18,6 +18,15 @@ import {
1818} from '@stack-spot/vscode-async-webview-shared'
1919import { LinkedBridge , VSCodeWebInterface } from './VSCodeWebInterface'
2020
21+ declare global {
22+ interface Window {
23+ original ?: {
24+ log : ( text : string ) => void ,
25+ error : ( text : string ) => void ,
26+ } ,
27+ }
28+ }
29+
2130interface StreamingHandler {
2231 onData : ( data : string ) => void ,
2332 onError ?: ( error : string ) => void ,
@@ -42,7 +51,7 @@ type TelemetryEvent = (eventName: string, eventType: 'event' | 'error', properti
4251 * This class can be mocked with `VSCodeWebMock`.
4352 */
4453export class VSCodeWeb < Bridge extends AsyncStateful = AsyncStateful > implements VSCodeWebInterface < Bridge > {
45- private state : StateTypeOf < Bridge >
54+ private state : StateTypeOf < Bridge >
4655 private listeners : Partial < { [ K in keyof StateTypeOf < Bridge > ] : ( ( value : StateTypeOf < Bridge > [ K ] ) => void ) [ ] } > = { }
4756 private bridgeCalls : Map < string , ManualPromise > = new Map ( )
4857 readonly bridge = this . createBridgeProxy ( ) as LinkedBridge < Bridge >
@@ -70,6 +79,16 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
7079 this . telemetryEvent = telemetryEvent
7180 }
7281
82+ log ( text : string ) : void {
83+ // eslint-disable-next-line no-console
84+ window . original ?. log ( text )
85+ }
86+
87+ error ( text : string ) : void {
88+ // eslint-disable-next-line no-console
89+ window . original ?. error ( text )
90+ }
91+
7392 /**
7493 * Sends a message to the vscode extension.
7594 * @param message the message to send.
@@ -94,7 +113,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
94113 this . bridgeCalls . delete ( message . id )
95114 }
96115
97- private handleGetStateRequest ( message : WebviewRequestMessage ) {
116+ private handleGetStateRequest ( message : WebviewRequestMessage ) {
98117 logger . debug ( 'handling get state request:' , message )
99118 try {
100119 VSCodeWeb . sendMessageToExtension ( buildGetStateResponse ( message . id , this . getState ( message . id as keyof StateTypeOf < Bridge > ) ) )
@@ -140,7 +159,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
140159 window . addEventListener ( 'message' , ( { data } ) => {
141160 const message = asWebViewMessage ( data )
142161 switch ( message ?. type ) {
143- case messageType . bridge :
162+ case messageType . bridge :
144163 this . handleBridgeResponse ( message )
145164 break
146165 case messageType . getState :
@@ -153,7 +172,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
153172 this . handleTelemetry ( message as WebviewTelemetryMessage )
154173 break
155174 case messageType . stream :
156- this . handleStream ( message as WebviewStreamMessage )
175+ this . handleStream ( message as WebviewStreamMessage )
157176 }
158177 } )
159178 }
@@ -206,7 +225,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
206225 VSCodeWeb . vscode . setState ( this . state )
207226 Object . keys ( this . listeners ) . forEach ( key => this . runListeners ( key , state [ key ] ) )
208227 }
209-
228+
210229 subscribe < Key extends keyof StateTypeOf < Bridge > > ( key : Key , listener : ( value : StateTypeOf < Bridge > [ Key ] ) => void ) : ( ) => void {
211230 if ( ! this . listeners [ key ] ) this . listeners [ key ] = [ ]
212231 this . listeners [ key ] ?. push ( listener )
0 commit comments