"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.bridge = void 0;
const readline_1 = __importDefault(require("readline"));
function bridge(tasks, opts = {}) {
const rl = readline_1.default.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false,
});
let debugOn = opts === null || opts === void 0 ? void 0 : opts.debug;
function debug(...args) {
if (debugOn)
console.log.call(console, ...args);
}
let payloadStr = "";
let payload = null;
let payloadStart = null;
rl.on("line", function (line) {
switch (line) {
case "PAYLOAD_END":
payload = JSON.parse(payloadStr);
if (payload === null || payload === void 0 ? void 0 : payload._inner_payload) {
payload = payload === null || payload === void 0 ? void 0 : payload._inner_payload;
}
payloadStr = "";
debug("payload received in", Date.now() - payloadStart, "ms");
payloadStart = null;
debug("payload :>> ", payload);
console.log("PAYLOAD_OK");
break;
default: {
if (line.startsWith("PAYLOAD_CHUNK:")) {
if (!payloadStart) {
payloadStart = Date.now();
}
payloadStr += line.replace("PAYLOAD_CHUNK:", "").trim();
}
else if (line.startsWith("CMD:")) {
const cmd = line.replace("CMD:", "").trim();
const task = tasks[cmd];
if (!task) {
throw new Error(`Task "${cmd}" not found for this worker`);
}
debug("executing command: ", cmd);
const res = task === null || task === void 0 ? void 0 : task(payload);
if (res) {
const str = JSON.stringify(res);
const chunks = str.match(/.{1,1000}/g) || [];
for (const chunk of chunks) {
console.log(`RESULT_CHUNK: ${chunk}`);
}
}
console.log("OK");
}
break;
}
}
});
console.log("READY");
}
exports.bridge = bridge;