Skip to content

Commit bf5b8a0

Browse files
Merge pull request #10 from stack-spot/feature/bridge-interface-console
Feature/bridge interface console
2 parents bc0dd05 + 5d1d533 commit bf5b8a0

File tree

6 files changed

+8134
-6156
lines changed

6 files changed

+8134
-6156
lines changed

packages/client/index.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
declare namespace VScodeAsyncWebviewClient {
2+
interface Window {
3+
original?: {
4+
log: (text: string) => void,
5+
error: (text: string) => void,
6+
},
7+
}
8+
}

packages/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@stack-spot/vscode-async-webview-client",
3-
"version": "0.7.3",
3+
"version": "0.7.4",
44
"repository": "github:stack-spot/vscode-async-webview",
55
"main": "out/index.js",
66
"module": "out/index.mjs",

packages/client/src/VSCodeWeb.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ import {
1818
} from '@stack-spot/vscode-async-webview-shared'
1919
import { 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+
2130
interface 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
*/
4453
export 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)

packages/client/src/VSCodeWebMock.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ export class VSCodeWebMock<Bridge extends AsyncStateful = AsyncStateful> impleme
1616
this.mockedBridge = bridge
1717
this.bridge = this.createBridgeProxy()
1818
}
19+
setViewReady?: (() => void) | undefined
20+
21+
log(text: string): void {
22+
window.original?.log(text)
23+
}
24+
25+
error(text: string): void {
26+
window.original?.error(text)
27+
}
1928

2029
private createBridgeProxy() {
2130
// eslint-disable-next-line @typescript-eslint/no-this-alias

packages/client/tsconfig.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"compilerOptions": {
33
"target": "ESNext",
4-
"lib": [
5-
"ESNext",
4+
"lib": [
5+
"ESNext",
66
"dom",
77
"dom.iterable",
88
],
@@ -19,10 +19,11 @@
1919
"isolatedModules": true,
2020
"declaration": true,
2121
"sourceMap": true,
22-
"rootDir": "src",
22+
"rootDir": "src",
2323
"noImplicitOverride": true,
2424
},
2525
"include": [
26-
"src"
26+
"src",
27+
"index.d.ts"
2728
]
28-
}
29+
}

0 commit comments

Comments
 (0)