diff --git a/index.d.ts b/index.d.ts index c1f2b70..691facb 100644 --- a/index.d.ts +++ b/index.d.ts @@ -93,7 +93,7 @@ declare class ThreadStream extends EventEmitter { * @param transferList an optional list of transferable objects to be transferred to the Worker context. * @returns {boolean} true if the event had listeners, false otherwise. */ - emit(eventName: 'message', message: any, transferList?: workerThreads.TransferListItem[]): boolean + emit(eventName: 'message', message: any, transferList?: workerThreads.Transferable[]): boolean } export = ThreadStream; diff --git a/package.json b/package.json index 73fb9ef..c2f9fa3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "real-require": "^1.0.0" }, "devDependencies": { - "@types/node": "^25.0.2", + "@types/node": "^26.1.1", "@yao-pkg/pkg": "^6.0.0", "borp": "^1.0.0", "desm": "^1.3.0", @@ -21,16 +21,21 @@ "pino-elasticsearch": "^9.0.0", "sonic-boom": "^5.0.0", "ts-node": "^10.8.0", + "tsd": "^0.33.0", "typescript": "~5.7.3" }, "scripts": { "build": "tsc --noEmit", "lint": "eslint", - "test": "npm run lint && npm run build && npm run transpile && borp --pattern \"test/*.test.{js,mjs}\"", - "test:ci": "npm run lint && npm run transpile && borp --pattern \"test/*.test.{js,mjs}\"", + "test": "npm run lint && npm run build && npm run test:types && npm run transpile && borp --pattern \"test/*.test.{js,mjs}\"", + "test:ci": "npm run lint && npm run test:types && npm run transpile && borp --pattern \"test/*.test.{js,mjs}\"", + "test:types": "tsd", "test:yarn": "npm run transpile && borp --pattern \"test/*.test.js\"", "transpile": "sh ./test/ts/transpile.sh" }, + "tsd": { + "directory": "test/types" + }, "repository": { "type": "git", "url": "git+https://github.com/mcollina/thread-stream.git" diff --git a/test/types/index.test-d.ts b/test/types/index.test-d.ts new file mode 100644 index 0000000..92508fb --- /dev/null +++ b/test/types/index.test-d.ts @@ -0,0 +1,26 @@ +import { expectType } from "tsd"; +import { type Transferable, MessageChannel } from "worker_threads"; +import ThreadStream from "../../index"; + +const stream = new ThreadStream({ filename: "./worker.js" }); + +expectType(stream.write("hello")); +expectType(stream.end()); +expectType(stream.flush()); +expectType(stream.flushSync()); + +// emit overload for posting a message to the worker, +// optionally with a list of transferable objects +const { port1 } = new MessageChannel(); +expectType(stream.emit("message", { foo: "bar" })); +expectType(stream.emit("message", { foo: "bar" }, [port1])); +expectType(stream.emit("message", "data", [new ArrayBuffer(8)])); + +// the transferList parameter of the 'message' overload must be Transferable[] +// (Parameters<> resolves to the last overload, which is the 'message' one) +expectType( + undefined as unknown as Parameters[2], +); + +// generic EventEmitter emit +expectType(stream.emit("drain"));