vscode-message-management
Version:
A message management library that supports getting response values
54 lines • 1.75 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Messenger = void 0;
class Messenger {
constructor(vscode, options = {}) {
this.eventListeners = {};
this.pendingRequests = {};
this.sid = 0;
this.vscode = vscode;
this.options = options;
this.listenMessage();
}
listenMessage() {
window.addEventListener("message", async (e) => {
const { sid, event, data } = e.data;
if (!sid)
return;
// request from extension
if (event) {
const listener = this.eventListeners[event];
if (!listener)
return;
const response = await listener(data);
const responseMessage = { sid, data: response };
this.vscode.postMessage(responseMessage);
return;
}
// response from extension
const pendingRequest = this.pendingRequests[sid];
if (!pendingRequest)
return;
pendingRequest(data);
});
}
getSid() {
return `${this.sid++}`;
}
async request(event, data) {
return new Promise((resolve, reject) => {
const sid = this.getSid();
const message = { sid, event, data };
this.pendingRequests[sid] = resolve;
this.vscode.postMessage(message);
if (this.options.timeout) {
setTimeout(() => reject("timeout"), this.options.timeout);
}
});
}
bind(event, callback) {
this.eventListeners[event] = callback;
}
}
exports.Messenger = Messenger;
//# sourceMappingURL=webview.js.map