diff --git a/node.js b/node.js index 53f1c60..2011b64 100644 --- a/node.js +++ b/node.js @@ -68,9 +68,16 @@ function Event(type, target) { this.target = this.currentTarget = this.data = null; } +const Worker = mainThread(); +global.Worker = Worker; + // this module is used self-referentially on both sides of the // thread boundary, but behaves differently in each context. -export default threads.isMainThread ? mainThread() : workerThread(); +if (!threads.isMainThread) { + workerThread(); +} + +export default Worker; const baseUrl = URL.pathToFileURL(process.cwd() + '/'); diff --git a/test/fixtures/nested.mjs b/test/fixtures/nested.mjs new file mode 100644 index 0000000..7aef001 --- /dev/null +++ b/test/fixtures/nested.mjs @@ -0,0 +1,10 @@ +import Worker from '..'; + +const worker = new Worker('./worker.mjs', { + type: 'module' +}); + +worker.events = []; +worker.addEventListener('message', e => { + worker.events.push(e); +}); diff --git a/test/index.test.js b/test/index.test.js index e3c44ae..3546d43 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -52,7 +52,7 @@ test.serial('postMessage', async t => { await sleep(500); t.is(worker.events.length, 2, 'should have received two message responses'); - + const first = worker.events[0]; t.is(first.data[0], 'received onmessage'); t.assert(Math.abs(timestamp - first.data[1]) < 500); @@ -65,3 +65,9 @@ test.serial('postMessage', async t => { t.deepEqual(second.data[2], msg); t.not(second.data[2], msg); }); + +test.serial('nested Worker instantiation', async t => { + worker = createModuleWorker('./test/fixtures/nested.mjs'); + t.is(worker.events.length, 1, 'should have received a message event'); + t.is(worker.events[0].data, 42); +});