diff --git a/lib/internal/errors.js b/lib/internal/errors.js index ae2028f8a2955e..ac42b07f095b44 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1356,7 +1356,7 @@ E('ERR_WORKER_PATH', E('ERR_WORKER_UNSERIALIZABLE_ERROR', 'Serializing an uncaught exception failed', Error); E('ERR_WORKER_UNSUPPORTED_EXTENSION', - 'The worker script extension must be ".js" or ".mjs". Received "%s"', + 'The worker script extension must be ".js", ".mjs", or ".cjs". Received "%s"', TypeError); E('ERR_WORKER_UNSUPPORTED_OPERATION', '%s is not supported in workers', TypeError); diff --git a/lib/internal/worker.js b/lib/internal/worker.js index d7adfda5fa3927..acf325eff61197 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -103,7 +103,7 @@ class Worker extends EventEmitter { filename = path.resolve(filename); const ext = path.extname(filename); - if (ext !== '.js' && ext !== '.mjs') { + if (!/^\.[cm]?js$/.test(ext)) { throw new ERR_WORKER_UNSUPPORTED_EXTENSION(ext); } } diff --git a/test/fixtures/worker-data.cjs b/test/fixtures/worker-data.cjs new file mode 100644 index 00000000000000..731b77eb367863 --- /dev/null +++ b/test/fixtures/worker-data.cjs @@ -0,0 +1,3 @@ +const { workerData, parentPort } = require('worker_threads'); + +parentPort.postMessage(workerData); diff --git a/test/parallel/test-worker-cjs-workerdata.js b/test/parallel/test-worker-cjs-workerdata.js new file mode 100644 index 00000000000000..949011fee8173e --- /dev/null +++ b/test/parallel/test-worker-cjs-workerdata.js @@ -0,0 +1,15 @@ +'use strict'; +const common = require('../common'); +const fixtures = require('../common/fixtures'); +const assert = require('assert'); +const { Worker } = require('worker_threads'); + +const workerData = 'Hello from main thread'; + +const worker = new Worker(fixtures.path('worker-data.cjs'), { + workerData +}); + +worker.on('message', common.mustCall((message) => { + assert.strictEqual(message, workerData); +}));