diff --git a/src/task_queue/array_queue.ts b/src/task_queue/array_queue.ts index 6d215152..866b8881 100644 --- a/src/task_queue/array_queue.ts +++ b/src/task_queue/array_queue.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert'; import type { TaskQueue, Task } from '.'; diff --git a/src/task_queue/fixed_queue.ts b/src/task_queue/fixed_queue.ts index 80213dcb..ff1270a7 100644 --- a/src/task_queue/fixed_queue.ts +++ b/src/task_queue/fixed_queue.ts @@ -3,7 +3,7 @@ * License: MIT License * Source: https://github.com/nodejs/node/blob/de7b37880f5a541d5f874c1c2362a65a4be76cd0/lib/internal/fixed_queue.js */ -import assert from 'node:assert'; +import * as assert from 'node:assert'; import type { Task } from './common'; import { TaskQueue } from '.'; // Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two. diff --git a/src/worker.ts b/src/worker.ts index 10f306ca..d43d5363 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -55,16 +55,23 @@ async function getHandler (filename : string, name : string) : Promise 0) { + handler = await ((handler as any)[name]); + } else if (typeof handler !== 'function') { handler = await ((handler as any)[name]); } } catch {} + if (typeof handler !== 'function') { handler = await getImportESM()(pathToFileURL(filename).href); - if (typeof handler !== 'function') { + if (name?.length > 0) { + handler = await ((handler as any)[name]); + } else if (typeof handler !== 'function') { handler = await ((handler as any)[name]); } } + if (typeof handler !== 'function') { return null; } diff --git a/src/worker_pool/base.ts b/src/worker_pool/base.ts index 9c19c1ea..3d592156 100644 --- a/src/worker_pool/base.ts +++ b/src/worker_pool/base.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert'; export abstract class AsynchronouslyCreatedResource { onreadyListeners : (() => void)[] | null = []; diff --git a/src/worker_pool/index.ts b/src/worker_pool/index.ts index 075bfaaa..fdb6a9c8 100644 --- a/src/worker_pool/index.ts +++ b/src/worker_pool/index.ts @@ -1,6 +1,6 @@ import { Worker, MessagePort, receiveMessageOnPort, WorkerOptions, Transferable } from 'node:worker_threads'; import { createHistogram, RecordableHistogram } from 'node:perf_hooks'; -import assert from 'node:assert'; +import * as assert from 'node:assert'; import { RequestMessage, ResponseMessage, StartupMessage } from '../types'; import { Errors } from '../errors'; diff --git a/test/abort-task.test.ts b/test/abort-task.test.ts index f56cf7b0..d298da48 100644 --- a/test/abort-task.test.ts +++ b/test/abort-task.test.ts @@ -1,5 +1,5 @@ import { test } from 'node:test'; -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { EventEmitter } from 'node:events'; import Piscina from '..'; import { resolve } from 'path'; diff --git a/test/async-context.test.ts b/test/async-context.test.ts index 5a3727b4..0b1a49cc 100644 --- a/test/async-context.test.ts +++ b/test/async-context.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { createHook, executionAsyncId } from 'node:async_hooks'; diff --git a/test/atomics-optimization.test.ts b/test/atomics-optimization.test.ts index 1aac801c..917266d7 100644 --- a/test/atomics-optimization.test.ts +++ b/test/atomics-optimization.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '..'; diff --git a/test/console-log.test.ts b/test/console-log.test.ts index 357effe7..9a910408 100644 --- a/test/console-log.test.ts +++ b/test/console-log.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { resolve } from 'node:path'; import { spawn } from 'node:child_process'; import { test } from 'node:test'; diff --git a/test/fixed-queue.test.ts b/test/fixed-queue.test.ts index 23bf532a..e8a33e60 100644 --- a/test/fixed-queue.test.ts +++ b/test/fixed-queue.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { kQueueOptions } from '../dist/symbols'; diff --git a/test/fixtures/cjs-default.js b/test/fixtures/cjs-default.js new file mode 100644 index 00000000..6d7c3206 --- /dev/null +++ b/test/fixtures/cjs-default.js @@ -0,0 +1,3 @@ +module.exports.default = async function generate() { + return 42; +} \ No newline at end of file diff --git a/test/fixtures/move.ts b/test/fixtures/move.ts index 0c3ee096..91b35947 100644 --- a/test/fixtures/move.ts +++ b/test/fixtures/move.ts @@ -1,10 +1,10 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { types } from 'node:util'; import Piscina from '../..'; export default function (moved) { if (moved !== undefined) { - assert(types.isAnyArrayBuffer(moved)); + assert.ok(types.isAnyArrayBuffer(moved)); } return Piscina.move(new ArrayBuffer(10)); } diff --git a/test/fixtures/notify-then-sleep-or.ts b/test/fixtures/notify-then-sleep-or.ts index 3b417af9..5fc7b562 100644 --- a/test/fixtures/notify-then-sleep-or.ts +++ b/test/fixtures/notify-then-sleep-or.ts @@ -1,5 +1,5 @@ // Set the index-th bith in i32array[0], then wait for it to be un-set again. -module.exports = function ({ i32array, index }) { +export default function ({ i32array, index }) { Atomics.or(i32array, 0, 1 << index); Atomics.notify(i32array, 0, Infinity); do { diff --git a/test/fixtures/wait-for-notify.ts b/test/fixtures/wait-for-notify.ts index 1a47fcb5..968e9b0b 100644 --- a/test/fixtures/wait-for-notify.ts +++ b/test/fixtures/wait-for-notify.ts @@ -1,4 +1,4 @@ -module.exports = function (i32array) { +export default function (i32array) { Atomics.wait(i32array, 0, 0); Atomics.store(i32array, 0, -1); Atomics.notify(i32array, 0, Infinity); diff --git a/test/fixtures/wait-for-others.ts b/test/fixtures/wait-for-others.ts index 96bd2c93..05dc2011 100644 --- a/test/fixtures/wait-for-others.ts +++ b/test/fixtures/wait-for-others.ts @@ -1,6 +1,6 @@ import { threadId } from 'worker_threads'; -module.exports = async function ([i32array, n]) { +export default async function ([i32array, n]) { Atomics.add(i32array, 0, 1); Atomics.notify(i32array, 0, Infinity); let lastSeenValue; diff --git a/test/generics.test.ts b/test/generics.test.ts index 4bb5dd04..4d11613b 100644 --- a/test/generics.test.ts +++ b/test/generics.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { resolve } from 'node:path'; import { test } from 'node:test'; import Piscina from '../dist'; diff --git a/test/histogram.test.ts b/test/histogram.test.ts index 3cc1b876..26f1b696 100644 --- a/test/histogram.test.ts +++ b/test/histogram.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { resolve } from 'node:path'; import { test } from 'node:test'; import type { TestContext } from 'node:test'; diff --git a/test/idle-timeout.test.ts b/test/idle-timeout.test.ts index 6174bc60..b22280ec 100644 --- a/test/idle-timeout.test.ts +++ b/test/idle-timeout.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { promisify } from 'node:util'; diff --git a/test/issue-513.test.ts b/test/issue-513.test.ts index 36a0163a..d4899fc2 100644 --- a/test/issue-513.test.ts +++ b/test/issue-513.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '..'; diff --git a/test/load-with-esm.test.ts b/test/load-with-esm.test.ts index fa5ba723..71d43d4a 100644 --- a/test/load-with-esm.test.ts +++ b/test/load-with-esm.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; diff --git a/test/messages.test.ts b/test/messages.test.ts index 66b78b8e..fd66af7e 100644 --- a/test/messages.test.ts +++ b/test/messages.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { once } from 'node:events'; diff --git a/test/move-test.test.ts b/test/move-test.test.ts index f6ff2655..39f7eb6f 100644 --- a/test/move-test.test.ts +++ b/test/move-test.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { types } from 'node:util'; import { MessageChannel, MessagePort } from 'node:worker_threads'; diff --git a/test/nice.test.ts b/test/nice.test.ts index f2999be2..b15f25e9 100644 --- a/test/nice.test.ts +++ b/test/nice.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { resolve } from 'node:path'; import { test } from 'node:test'; import { getCurrentProcessPriority, WindowsThreadPriority } from '@napi-rs/nice'; diff --git a/test/option-validation.test.ts b/test/option-validation.test.ts index b4bcb008..771ac3a0 100644 --- a/test/option-validation.test.ts +++ b/test/option-validation.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import Piscina from '..'; diff --git a/test/pool-close.test.ts b/test/pool-close.test.ts index 123acf8a..f6785e4e 100644 --- a/test/pool-close.test.ts +++ b/test/pool-close.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { once } from 'node:events'; import { resolve } from 'node:path'; import { describe, it, test } from 'node:test'; diff --git a/test/pool-destroy.test.ts b/test/pool-destroy.test.ts index 0bf7c902..d8b2e935 100644 --- a/test/pool-destroy.test.ts +++ b/test/pool-destroy.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '..'; diff --git a/test/pool.test.ts b/test/pool.test.ts index c0718022..f17e275e 100644 --- a/test/pool.test.ts +++ b/test/pool.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { resolve } from 'node:path'; import { test } from 'node:test'; import { once } from 'node:events'; diff --git a/test/post-task.test.ts b/test/post-task.test.ts index aa1bdd19..969f011e 100644 --- a/test/post-task.test.ts +++ b/test/post-task.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test, TestContext } from 'node:test'; import { MessageChannel } from 'node:worker_threads'; import { resolve } from 'node:path'; diff --git a/test/ready-message.test.ts b/test/ready-message.test.ts index c41c323a..5c886ba9 100644 --- a/test/ready-message.test.ts +++ b/test/ready-message.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { once } from 'node:events'; diff --git a/test/simple-test.test.ts b/test/simple-test.test.ts index f7c6b2ea..a40c5f52 100644 --- a/test/simple-test.test.ts +++ b/test/simple-test.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { pathToFileURL } from 'node:url'; import { resolve } from 'node:path'; @@ -233,7 +233,7 @@ test('named tasks work', async () => { assert.strictEqual(await worker.run({}), 'a'); }); -test('named tasks work', async () => { +test('named tasks work (2)', async () => { const worker = new Piscina({ filename: resolve(__dirname, 'fixtures/multiple.js'), name: 'b' @@ -243,3 +243,12 @@ test('named tasks work', async () => { assert.strictEqual(await worker.run({}, { name: 'b' }), 'b'); assert.strictEqual(await worker.run({}), 'b'); }); + +test('cjs#default named export works (#1012)', async () => { + const worker = new Piscina({ + filename: resolve(__dirname, 'fixtures/cjs-default.js'), + name: 'default' + }); + + assert.strictEqual(await worker.run({}), 42); +}); diff --git a/test/task-queue.test.ts b/test/task-queue.test.ts index 11d5a6d6..01f922d0 100644 --- a/test/task-queue.test.ts +++ b/test/task-queue.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina, { PiscinaTask, TaskQueue } from '..'; diff --git a/test/test-is-buffer-transferred.test.ts b/test/test-is-buffer-transferred.test.ts index aa2617f5..b6c272ef 100644 --- a/test/test-is-buffer-transferred.test.ts +++ b/test/test-is-buffer-transferred.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '..'; diff --git a/test/test-resourcelimits.test.ts b/test/test-resourcelimits.test.ts index 02b5a0ed..33289e71 100644 --- a/test/test-resourcelimits.test.ts +++ b/test/test-resourcelimits.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '..'; diff --git a/test/test-uncaught-exception-from-handler.test.ts b/test/test-uncaught-exception-from-handler.test.ts index 2fd392d9..2a8438e9 100644 --- a/test/test-uncaught-exception-from-handler.test.ts +++ b/test/test-uncaught-exception-from-handler.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { once } from 'node:events'; diff --git a/test/thread-count.test.ts b/test/thread-count.test.ts index ef180cac..faaf5b79 100644 --- a/test/thread-count.test.ts +++ b/test/thread-count.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert/strict'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import { cpus } from 'node:os'; diff --git a/test/workers.test.ts b/test/workers.test.ts index b0b1f47f..0de37882 100644 --- a/test/workers.test.ts +++ b/test/workers.test.ts @@ -1,4 +1,4 @@ -import assert from 'node:assert'; +import * as assert from 'node:assert/strict'; import { test } from 'node:test'; import { resolve } from 'node:path'; import Piscina from '../dist'; diff --git a/tsconfig.json b/tsconfig.json index 1cb3ed5f..1a056eaa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,6 @@ "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "esModuleInterop": true, "resolveJsonModule": true, /* Include modules imported with '.json' extension */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */