mirror of https://github.com/openclaw/openclaw.git
24 lines
616 B
TypeScript
24 lines
616 B
TypeScript
import fs from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
|
|
export async function withTempDir<T>(
|
|
options: {
|
|
prefix: string;
|
|
parentDir?: string;
|
|
subdir?: string;
|
|
},
|
|
run: (dir: string) => Promise<T>,
|
|
): Promise<T> {
|
|
const base = await fs.mkdtemp(path.join(options.parentDir ?? os.tmpdir(), options.prefix));
|
|
const dir = options.subdir ? path.join(base, options.subdir) : base;
|
|
if (options.subdir) {
|
|
await fs.mkdir(dir, { recursive: true });
|
|
}
|
|
try {
|
|
return await run(dir);
|
|
} finally {
|
|
await fs.rm(base, { recursive: true, force: true });
|
|
}
|
|
}
|