From 7f2c863dd3f04f91fa86f8e721083fd13f6f286b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 1 Jul 2026 05:42:00 +0000 Subject: [PATCH] Replace unmaintained temp dependency with fs.mkdtemp Use Node's built-in fs.mkdtemp (via fs-extra) with os.tmpdir() to create temporary directories, removing the unmaintained `temp` npm module and its `@types/temp` typings. Cleanup semantics from `temp.track()` are preserved by tracking created directories and removing them on process exit. Closes #581 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_014t5CkSh3wMXJRmF6YxEGbh --- package.json | 4 +--- src/temp-utils.ts | 43 ++++++++++++++++++++++++++++++++++++------- yarn.lock | 21 --------------------- 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index d1f18496..887508af 100644 --- a/package.json +++ b/package.json @@ -33,14 +33,12 @@ "debug": "^4.1.1", "fs-extra": "^7.0.1", "lodash": "^4.17.21", - "semver": "^7.6.3", - "temp": "^0.9.0" + "semver": "^7.6.3" }, "devDependencies": { "@types/fs-extra": "^5.0.5", "@types/lodash": "^4.17.0", "@types/node": "^20.6.0", - "@types/temp": "^0.8.34", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "ava": "^5.1.1", diff --git a/src/temp-utils.ts b/src/temp-utils.ts index 10e83eb4..c6d97981 100644 --- a/src/temp-utils.ts +++ b/src/temp-utils.ts @@ -1,9 +1,38 @@ -import * as temp from 'temp'; -import { promisify } from 'util'; -temp.track(); +import fs from 'fs-extra'; +import os from 'os'; +import path from 'path'; -const createTempDir = promisify(temp.mkdir); +const createdTempDirs: string[] = []; +let cleanupRegistered = false; -export { - createTempDir -}; +function registerCleanup(): void { + if (cleanupRegistered) { + return; + } + cleanupRegistered = true; + + // Mirror `temp.track()`: remove any created temp dirs when the process exits. + process.on('exit', () => { + for (const dir of createdTempDirs) { + try { + fs.removeSync(dir); + } catch { + // Best-effort cleanup on exit; ignore failures. + } + } + }); +} + +/** + * Creates a uniquely-named temporary directory under the OS temp directory and + * registers it for automatic removal when the process exits. + * + * @param prefix - A prefix for the generated directory name. + * @returns The absolute path to the newly created temporary directory. + */ +export async function createTempDir(prefix: string): Promise { + registerCleanup(); + const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), prefix)); + createdTempDirs.push(tempDir); + return tempDir; +} diff --git a/yarn.lock b/yarn.lock index cd319b87..dd4476cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -193,13 +193,6 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz" integrity sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg== -"@types/temp@^0.8.34": - version "0.8.34" - resolved "https://registry.npmjs.org/@types/temp/-/temp-0.8.34.tgz" - integrity sha512-oLa9c5LHXgS6UimpEVp08De7QvZ+Dfu5bMQuWyMhf92Z26Q10ubEMOWy9OEfUdzW7Y/sDWVHmUaLFtmnX/2j0w== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^5.62.0": version "5.62.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" @@ -1655,13 +1648,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -1797,13 +1783,6 @@ temp-dir@^3.0.0: resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz" integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== -temp@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/temp/-/temp-0.9.0.tgz" - integrity sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ== - dependencies: - rimraf "~2.6.2" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"