UNPKG

@backstage/cli

Version:

CLI for developing Backstage plugins and apps

61 lines (57 loc) 1.66 kB
'use strict'; var errors = require('@backstage/errors'); const requestType = "@backstage/cli/channel/request"; const responseType = "@backstage/cli/channel/response"; class IpcServer { #generation = 1; #methods = /* @__PURE__ */ new Map(); addChild(child) { const generation = this.#generation++; const sendMessage = child.send?.bind(child); if (!sendMessage) { return; } const messageListener = (request) => { if (request.type !== requestType) { return; } const handler = this.#methods.get(request.method); if (!handler) { sendMessage({ type: responseType, id: request.id, error: { name: "NotFoundError", message: `No handler registered for method ${request.method}` } }); return; } Promise.resolve().then(() => handler(request.body, { generation })).then( (response) => sendMessage({ type: responseType, id: request.id, body: response }) ).catch( (error) => sendMessage({ type: responseType, id: request.id, error: errors.serializeError(error) }) ); }; child.addListener("message", messageListener); child.addListener("exit", () => { child.removeListener("message", messageListener); }); } registerMethod(method, handler) { if (this.#methods.has(method)) { throw new Error(`A handler is already registered for method ${method}`); } this.#methods.set(method, handler); } } exports.IpcServer = IpcServer; //# sourceMappingURL=IpcServer.cjs.js.map