From ed0b9dbf3266aa3d83679e3b90ff3c4caacabb8a Mon Sep 17 00:00:00 2001 From: Devin Ivy Date: Tue, 7 Apr 2026 00:05:09 -0400 Subject: [PATCH] chore: add type checking setup and gitignore Add typescript and @types/node as devDependencies, fix tsconfig for node types and Symbol.dispose, clean up worker-pool.ts type issue. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 3 +++ package.json | 4 ++++ pnpm-lock.yaml | 39 +++++++++++++++++++++++++++++++++++++++ src/worker-pool.ts | 33 ++++++++++++++++++--------------- tsconfig.json | 2 ++ 5 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 .gitignore create mode 100644 pnpm-lock.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a91f81 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.claude +docs diff --git a/package.json b/package.json index f074785..e458e25 100644 --- a/package.json +++ b/package.json @@ -6,5 +6,9 @@ "packageManager": "pnpm@10.33.0", "scripts": { "test": "node --experimental-strip-types --test --test-force-exit test/**/*.test.ts" + }, + "devDependencies": { + "@types/node": "^25.5.2", + "typescript": "^6.0.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..cf367d7 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,39 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/node': + specifier: ^25.5.2 + version: 25.5.2 + typescript: + specifier: ^6.0.2 + version: 6.0.2 + +packages: + + '@types/node@25.5.2': + resolution: {integrity: sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==} + + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + +snapshots: + + '@types/node@25.5.2': + dependencies: + undici-types: 7.18.2 + + typescript@6.0.2: {} + + undici-types@7.18.2: {} diff --git a/src/worker-pool.ts b/src/worker-pool.ts index f7c0ed1..891c65f 100644 --- a/src/worker-pool.ts +++ b/src/worker-pool.ts @@ -17,20 +17,23 @@ export function workerPool(size: number): Runner { let next = 0; let disposed = false; - const run = (task: Task): Promise => { - if (disposed) return Promise.reject(new Error('Worker pool is disposed')); - const worker = workers[next % workers.length]; - next++; - return execute(worker, task.id, task.args); - }; + const run: Runner = Object.assign( + (task: Task): Promise => { + if (disposed) return Promise.reject(new Error('Worker pool is disposed')); + const worker = workers[next % workers.length]; + next++; + return execute(worker, task.id, task.args); + }, + { + [Symbol.dispose]() { + disposed = true; + for (const worker of workers) { + worker.terminate(); + } + workers.length = 0; + }, + }, + ); - run[Symbol.dispose] = () => { - disposed = true; - for (const worker of workers) { - worker.terminate(); - } - workers.length = 0; - }; - - return run as Runner; + return run; } diff --git a/tsconfig.json b/tsconfig.json index 93d3480..098c72e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,8 @@ { "compilerOptions": { "target": "es2022", + "lib": ["es2022", "esnext.disposable"], + "types": ["node"], "module": "nodenext", "moduleResolution": "nodenext", "strict": true, -- 2.51.2