diff --git a/lib/worker.js b/lib/worker.js index d050b4b..2b25fad 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -34,7 +34,7 @@ async function start () { // The error codes may change based on the node.js version (ENOTDIR > 12, ERR_MODULE_NOT_FOUND <= 12 ) if ((error.code === 'ENOTDIR' || error.code === 'ERR_MODULE_NOT_FOUND') && filename.startsWith('file://')) { - worker = realRequire(decodeURIComponent(filename.replace('file://', ''))) + worker = realRequire(decodeURIComponent(filename.replace(process.platform === 'win32' ? 'file:///' : 'file://', ''))) } else if (error.code === undefined || error.code === 'ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING') { // When bundled with pkg, an undefined error is thrown when called with realImport // When bundled with pkg and using node v20, an ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING error is thrown when called with realImport diff --git a/test/pkg/.gitignore b/test/pkg/.gitignore new file mode 100644 index 0000000..2b70cf7 --- /dev/null +++ b/test/pkg/.gitignore @@ -0,0 +1 @@ +/index-* diff --git a/test/pkg/index.js b/test/pkg/index.js index 8d7fd47..1cfcddb 100644 --- a/test/pkg/index.js +++ b/test/pkg/index.js @@ -21,17 +21,39 @@ process.on('uncaughtException', (error) => { process.exit(1) }) -const stream = new ThreadStream({ - filename: join(__dirname, '..', 'to-file.js'), - workerData: { dest }, - sync: true +const stream1Promise = new Promise((resolve) => { + const stream = new ThreadStream({ + filename: join(__dirname, '..', 'to-file.js'), + workerData: { dest }, + sync: true + }) + + stream.worker.removeAllListeners('message') + stream.worker.once('message', (message) => { + assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED') + resolve() + }) + + stream.end() }) -stream.worker.removeAllListeners('message') -stream.worker.once('message', (message) => { - assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED') +const stream2Promise = new Promise((resolve) => { + const stream = new ThreadStream({ + filename: join(__dirname, '..', 'to-file-worker.js'), + workerData: { dest }, + sync: true + }) + + stream.worker.removeAllListeners('message') + stream.worker.once('message', (message) => { + assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED') + resolve() + }) + + stream.end() +}) + +Promise.all([stream1Promise, stream2Promise]).then(() => { console.log('pkg test passed') process.exit(0) }) - -stream.end() diff --git a/test/pkg/pkg.config.json b/test/pkg/pkg.config.json index 90d73b6..065140b 100644 --- a/test/pkg/pkg.config.json +++ b/test/pkg/pkg.config.json @@ -2,7 +2,8 @@ "pkg": { "assets": [ "../custom-worker.js", - "../to-file.js" + "../to-file.js", + "../to-file-worker.js" ], "targets": [ "node20", @@ -11,4 +12,4 @@ ], "outputPath": "test/pkg" } -} \ No newline at end of file +} diff --git a/test/to-file-worker.js b/test/to-file-worker.js new file mode 100644 index 0000000..c0efd6b --- /dev/null +++ b/test/to-file-worker.js @@ -0,0 +1,14 @@ +'use strict' + +const { join } = require('path') +const ThreadStream = require('../..') + +async function run (opts) { + return new ThreadStream({ + filename: join(__dirname, '..', 'to-file.js'), + workerData: opts, + sync: true + }) +} + +module.exports = run