UNPKG

vscode-message-management

Version:

A message management library that supports getting response values

54 lines 1.75 kB
"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