redis-smq-common
Version:
Provides essential components and utilities shared across RedisSMQ packages.
50 lines • 1.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleRunnableWorker = handleRunnableWorker;
const index_js_1 = require("../types/index.js");
const worker_thread_message_js_1 = require("./worker-thread-message.js");
function isWorkerClass(Worker) {
return Worker.prototype && typeof Worker.prototype.constructor === 'function';
}
function handleRunnableWorker(Worker, messagePort, initialPayload) {
let instance = null;
try {
if (isWorkerClass(Worker))
instance = new Worker(initialPayload);
else
instance = Worker(initialPayload);
}
catch (err) {
(0, worker_thread_message_js_1.exit)(index_js_1.EWorkerThreadChildExitCode.INVALID_WORKER_TYPE, err);
}
if (!instance ||
typeof instance !== 'object' ||
!instance.run ||
!instance.shutdown) {
(0, worker_thread_message_js_1.exit)(index_js_1.EWorkerThreadChildExitCode.INVALID_WORKER_TYPE);
}
else {
const run = () => {
try {
instance.run((err) => {
if (err)
(0, worker_thread_message_js_1.exit)(index_js_1.EWorkerThreadChildExecutionCode.PROCESSING_ERROR, err);
});
}
catch (err) {
(0, worker_thread_message_js_1.exit)(index_js_1.EWorkerThreadChildExecutionCode.PROCESSING_CAUGHT_ERROR, err);
}
};
const shutdown = () => {
instance.shutdown(() => void 0);
};
const onMessage = (message) => {
if (message.type === index_js_1.EWorkerThreadParentMessage.RUN)
run();
if (message.type === index_js_1.EWorkerThreadParentMessage.SHUTDOWN)
shutdown();
};
messagePort.on('message', onMessage);
}
}
//# sourceMappingURL=runnable-worker-thread.js.map