11import { vsCodeAPI } from '../vscode-api' ;
2- import type { WebviewData , Message , Responses } from '../types' ;
2+ import type { Message , Responses } from '../types' ;
33
44let currentMessageId = 1 ;
55const messagePromises = new Map <
@@ -8,37 +8,50 @@ const messagePromises = new Map<
88 { resolve : ( value : Responses ) => void ; reject : ( reason ?: any ) => void }
99> ( ) ;
1010
11- export function postMessageWithResponse ( message : Message ) {
12- return new Promise ( ( resolve , reject ) => {
11+ class MessageError extends Error {
12+ constructor ( message : string ) {
13+ super ( message ) ;
14+ this . name = 'MessageError' ;
15+ }
16+ }
17+
18+ /**
19+ * Sends a message to the VSCode extension and returns a promise that resolves with the response.
20+ * @param message The message to send.
21+ * @returns A promise that resolves with the response from the extension.
22+ */
23+ export function postMessageWithResponse ( message : Message ) : Promise < Responses > {
24+ return new Promise < Responses > ( ( resolve , reject ) => {
1325 message . id = currentMessageId ++ ;
1426 messagePromises . set ( message . id , { resolve, reject } ) ;
1527
1628 vsCodeAPI . postMessage ( message ) ;
1729 } ) ;
1830}
1931
32+ /**
33+ * Handles incoming messages from the VSCode extension.
34+ * @param event The message event.
35+ */
2036window . addEventListener ( 'message' , ( event ) => {
21- const message : Responses = event . data ; // The JSON data that the extension sent
22- const { id, type, data, error } = message ;
23-
24- console . log ( 'message' , message ) ;
37+ const message = event . data ?? { } ;
2538
26- if ( ! id || ! type ) {
39+ if ( ! message . id || ! message . type ) {
2740 return ;
2841 }
2942
30- const promiseMethods = messagePromises . get ( id ) ;
43+ const promiseMethods = messagePromises . get ( message . id ) ;
3144
3245 if ( ! promiseMethods ) {
3346 return ;
3447 }
3548
3649 const { resolve, reject } = promiseMethods ;
37- messagePromises . delete ( id ) ;
50+ messagePromises . delete ( message . id ) ;
3851
39- if ( error ) {
40- reject ( new Error ( error ) ) ;
52+ if ( message . error ) {
53+ reject ( new MessageError ( `Message error: ${ message . error } ` ) ) ;
4154 } else {
42- resolve ( { type , data } as Responses ) ;
55+ resolve ( message as Responses ) ;
4356 }
4457} ) ;
0 commit comments