asarfuckery/electronasar/ptb/browser/ipc-main-internal-utils.js

53 lines
1.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const ipc_main_internal_1 = require("@electron/internal/browser/ipc-main-internal");
const errorUtils = require("@electron/internal/common/error-utils");
const callHandler = async function (handler, event, args, reply) {
try {
const result = await handler(event, ...args);
reply([null, result]);
}
catch (error) {
reply([errorUtils.serialize(error)]);
}
};
exports.handle = function (channel, handler) {
ipc_main_internal_1.ipcMainInternal.on(channel, (event, requestId, ...args) => {
callHandler(handler, event, args, responseArgs => {
if (requestId) {
event._replyInternal(`${channel}_RESPONSE_${requestId}`, ...responseArgs);
}
else {
event.returnValue = responseArgs;
}
});
});
};
let nextId = 0;
function invokeInWebContents(sender, sendToAll, command, ...args) {
return new Promise((resolve, reject) => {
const requestId = ++nextId;
const channel = `${command}_RESPONSE_${requestId}`;
ipc_main_internal_1.ipcMainInternal.on(channel, function handler(event, error, result) {
if (event.sender !== sender) {
console.error(`Reply to ${command} sent by unexpected WebContents (${event.sender.id})`);
return;
}
ipc_main_internal_1.ipcMainInternal.removeListener(channel, handler);
if (error) {
reject(errorUtils.deserialize(error));
}
else {
resolve(result);
}
});
if (sendToAll) {
sender._sendInternalToAll(command, requestId, ...args);
}
else {
sender._sendInternal(command, requestId, ...args);
}
});
}
exports.invokeInWebContents = invokeInWebContents;