Skip to content

Instantly share code, notes, and snippets.

@NuckChorris
Created March 5, 2025 06:17
Show Gist options
  • Save NuckChorris/0357d401987dc753beb2f068ae09aff7 to your computer and use it in GitHub Desktop.
Save NuckChorris/0357d401987dc753beb2f068ae09aff7 to your computer and use it in GitHub Desktop.
Disposable Temporary Files and Directories
import { chmodSync as chmod, rmSync as rm } from 'node:fs';
import {
temporaryDirectory as _temporaryDirectory,
temporaryFile as _temporaryFile,
} from 'tempy';
function makeDisposableFilename(file: string) {
return Object.assign(new String(file), {
[Symbol.dispose]() {
chmod(file, 0o777);
rm(file, { recursive: true, force: true, maxRetries: 2 });
},
}) as string & { [Symbol.dispose](): void };
}
export function temporaryDirectory(
...options: Parameters<typeof _temporaryDirectory>
) {
return makeDisposableFilename(_temporaryDirectory(...options));
}
export function temporaryFile(...options: Parameters<typeof _temporaryFile>) {
return makeDisposableFilename(_temporaryFile(...options));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment