UNPKG

@jjavery/worker-pool

Version:

A worker pool for Node.js applications

71 lines 1.76 kB
"use strict"; // This is the entrypoint for all workers const { serializeError } = require('serialize-error'); // If module has been executed directly if (require.main === module && process.send != null) { // Keepalive setInterval(() => { }, 2 ** 31 - 1); // Handle requests from the worker pool process.on('message', handleRequest); // Inform the worker pool that this worker is ready process.send('ready'); } function handleRequest(message) { const { id, modulePath, functionName, args = [] } = message; let module; try { module = require(modulePath); } catch (err) { handleError(id, err); return; } const fn = module[functionName]; if (!fn) { handleError(id, new Error(`Module "${modulePath}" doesn't export a function named "${functionName}"`)); return; } let resultOrPromise; try { resultOrPromise = fn(...args); } catch (err) { handleError(id, err); return; } Promise.resolve(resultOrPromise) .then((result) => { handleResult(id, result); }) .catch((err) => { handleError(id, err); }); } function handleResult(id, result) { const message = { id, result }; send(message); } function handleError(id, err) { const message = { id, err: serializeError(err) }; send(message); } function send(message) { if (handleSend != null) { handleSend(message); } else { if (process.send == null) return; process.send(message); } } let handleSend; function onSend(handler) { handleSend = handler; } // Entrypoint for testing module.exports = { handleRequest, onSend }; //# sourceMappingURL=worker-main.js.map