@@ -18,6 +18,15 @@ import {
18
18
} from '@stack-spot/vscode-async-webview-shared'
19
19
import { LinkedBridge , VSCodeWebInterface } from './VSCodeWebInterface'
20
20
21
+ declare global {
22
+ interface Window {
23
+ original ?: {
24
+ log : ( text : string ) => void ,
25
+ error : ( text : string ) => void ,
26
+ } ,
27
+ }
28
+ }
29
+
21
30
interface StreamingHandler {
22
31
onData : ( data : string ) => void ,
23
32
onError ?: ( error : string ) => void ,
@@ -42,7 +51,7 @@ type TelemetryEvent = (eventName: string, eventType: 'event' | 'error', properti
42
51
* This class can be mocked with `VSCodeWebMock`.
43
52
*/
44
53
export class VSCodeWeb < Bridge extends AsyncStateful = AsyncStateful > implements VSCodeWebInterface < Bridge > {
45
- private state : StateTypeOf < Bridge >
54
+ private state : StateTypeOf < Bridge >
46
55
private listeners : Partial < { [ K in keyof StateTypeOf < Bridge > ] : ( ( value : StateTypeOf < Bridge > [ K ] ) => void ) [ ] } > = { }
47
56
private bridgeCalls : Map < string , ManualPromise > = new Map ( )
48
57
readonly bridge = this . createBridgeProxy ( ) as LinkedBridge < Bridge >
@@ -70,6 +79,16 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
70
79
this . telemetryEvent = telemetryEvent
71
80
}
72
81
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
+
73
92
/**
74
93
* Sends a message to the vscode extension.
75
94
* @param message the message to send.
@@ -94,7 +113,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
94
113
this . bridgeCalls . delete ( message . id )
95
114
}
96
115
97
- private handleGetStateRequest ( message : WebviewRequestMessage ) {
116
+ private handleGetStateRequest ( message : WebviewRequestMessage ) {
98
117
logger . debug ( 'handling get state request:' , message )
99
118
try {
100
119
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
140
159
window . addEventListener ( 'message' , ( { data } ) => {
141
160
const message = asWebViewMessage ( data )
142
161
switch ( message ?. type ) {
143
- case messageType . bridge :
162
+ case messageType . bridge :
144
163
this . handleBridgeResponse ( message )
145
164
break
146
165
case messageType . getState :
@@ -153,7 +172,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
153
172
this . handleTelemetry ( message as WebviewTelemetryMessage )
154
173
break
155
174
case messageType . stream :
156
- this . handleStream ( message as WebviewStreamMessage )
175
+ this . handleStream ( message as WebviewStreamMessage )
157
176
}
158
177
} )
159
178
}
@@ -206,7 +225,7 @@ export class VSCodeWeb<Bridge extends AsyncStateful = AsyncStateful> implements
206
225
VSCodeWeb . vscode . setState ( this . state )
207
226
Object . keys ( this . listeners ) . forEach ( key => this . runListeners ( key , state [ key ] ) )
208
227
}
209
-
228
+
210
229
subscribe < Key extends keyof StateTypeOf < Bridge > > ( key : Key , listener : ( value : StateTypeOf < Bridge > [ Key ] ) => void ) : ( ) => void {
211
230
if ( ! this . listeners [ key ] ) this . listeners [ key ] = [ ]
212
231
this . listeners [ key ] ?. push ( listener )
0 commit comments