11import * as vscode from 'vscode' ;
22import { getHtml } from './html' ;
33import { highlightRange , openFile } from '../services/editor' ;
4+ import type { WebviewMessage } from '../types/test-api' ;
45
56/**
67 * Webview provider for the LiquidJava extension
78 * Provides an interactive user interface for the LiquidJava diagnostics
89 */
9- export class LiquidJavaWebviewProvider implements vscode . WebviewViewProvider {
10+ export class LiquidJavaWebviewProvider implements vscode . WebviewViewProvider , vscode . Disposable {
1011 public static readonly viewType = "liquidJavaView" ;
1112 private view ?: vscode . WebviewView ;
1213 private messageEmitter = new vscode . EventEmitter < any > ( ) ;
1314 public readonly onDidReceiveMessage = this . messageEmitter . event ;
15+ private webviewMessageEmitter = new vscode . EventEmitter < WebviewMessage > ( ) ;
16+ public readonly onWebviewMessage = this . webviewMessageEmitter . event ;
1417
1518 constructor ( private readonly extensionUri : vscode . Uri ) { }
1619
@@ -29,6 +32,7 @@ export class LiquidJavaWebviewProvider implements vscode.WebviewViewProvider {
2932 // listen for messages coming from webview
3033 webviewView . webview . onDidReceiveMessage ( message => {
3134 // emit the message to any external listeners
35+ this . webviewMessageEmitter . fire ( { direction : "fromWebview" , message } ) ;
3236 this . messageEmitter . fire ( message ) ;
3337
3438 // handle message
@@ -46,7 +50,14 @@ export class LiquidJavaWebviewProvider implements vscode.WebviewViewProvider {
4650 * @param message
4751 */
4852 public sendMessage ( message : any ) {
49- this . view ?. webview . postMessage ( message ) ;
53+ if ( ! this . view ) return ;
54+ this . webviewMessageEmitter . fire ( { direction : "toWebview" , message } ) ;
55+ this . view . webview . postMessage ( message ) ;
56+ }
57+
58+ public dispose ( ) {
59+ this . messageEmitter . dispose ( ) ;
60+ this . webviewMessageEmitter . dispose ( ) ;
5061 }
5162
5263 /**
0 commit comments