UNPKG

codeceptjs

Version:

Supercharged End 2 End Testing Framework for NodeJS

48 lines (42 loc) 1.01 kB
import { isMainThread, parentPort } from 'worker_threads' import Container from './container.js' const workerObjects = {} const shareEvent = 'share' const invokeWorkerListeners = workerObj => { const { threadId } = workerObj workerObj.on('message', messageData => { if (messageData.event === shareEvent) { Container.share(messageData.data) } }) workerObj.on('exit', () => { delete workerObjects[threadId] }) } class WorkerStorage { /** * Add worker object * * @api * @param {Worker} workerObj */ static addWorker(workerObj) { workerObjects[workerObj.threadId] = workerObj invokeWorkerListeners(workerObj) } /** * Share data across workers * * @param {*} data */ static share(data) { if (isMainThread) { for (const workerObj of Object.values(workerObjects)) { workerObj.postMessage({ data }) } } else { parentPort.postMessage({ data, event: shareEvent }) } } } export default WorkerStorage