diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2269de6..884ae1c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [12, 14, 16, 18, 20, 22] + node: [16, 18, 20, 22] name: Node ${{ matrix.node }} sample steps: - uses: actions/checkout@v4 diff --git a/package.json b/package.json index 4b0b191..7f36f2b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "web-worker", - "version": "1.4.0", + "version": "1.4.1", "description": "Consistent Web Workers in browser and Node.", "main": "./dist/browser/index.cjs", "browser": "./dist/browser/index.cjs", diff --git a/src/node/index.js b/src/node/index.js index 528c5e7..c8e9eb2 100644 --- a/src/node/index.js +++ b/src/node/index.js @@ -176,7 +176,7 @@ function workerThread() { const isDataUrl = /^data:/.test(mod); if (type === 'module') { - import(URL.pathToFileURL(mod)) + import(isDataUrl ? mod : URL.pathToFileURL(mod)) .catch(err => { if (isDataUrl && err.message === 'Not supported') { console.warn('Worker(): Importing data: URLs requires Node 12.10+. Falling back to classic worker.'); diff --git a/test/index.test.js b/test/index.test.js index 9dd4d1b..448b7c9 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -19,8 +19,8 @@ import Worker from '../dist/node/index.cjs'; let worker; -function createModuleWorker(url) { - const worker = new Worker(url, { type: 'module' }); +function createModuleWorker(url, opts) { + const worker = new Worker(url, opts || { type: 'module' }); worker.events = []; worker.addEventListener('message', e => { worker.events.push(e); @@ -75,3 +75,19 @@ test.serial('close', async t => { }); t.is(closed, true, 'should have closed itself'); }); + +test.serial('data URL - module', async t => { + t.teardown(() => worker && worker.terminate()); + const worker = createModuleWorker('data:application/javascript,postMessage(42)'); + await sleep(500); + t.is(worker.events.length, 1, 'should have received a message event'); + t.is(worker.events[0].data, 42); +}); + +test.serial('data URL - classic', async t => { + t.teardown(() => worker && worker.terminate()); + const worker = createModuleWorker('data:application/javascript,postMessage(42)', {}); + await sleep(500); + t.is(worker.events.length, 1, 'should have received a message event'); + t.is(worker.events[0].data, 42); +});