overleaf-cep/services/history-v1/api/controllers/with_tmp_dir.js
Andrew Rumble 392037efd6 Improve types and export functions we want to use
GitOrigin-RevId: 25fd93214f88c425bee23d43de113cf754f89524
2025-06-25 08:06:18 +00:00

27 lines
763 B
JavaScript

const fs = require('node:fs')
const fsExtra = require('fs-extra')
const logger = require('@overleaf/logger')
const os = require('node:os')
const path = require('node:path')
/**
* Create a temporary directory before executing a function and cleaning up
* after.
*
* @param {string} prefix - prefix for the temporary directory name
* @param {(tmpDir: string) => Promise<void>} fn - async function to call
*/
async function withTmpDir(prefix, fn) {
const tmpDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), prefix))
try {
await fn(tmpDir)
} finally {
fsExtra.remove(tmpDir).catch(err => {
if (err.code !== 'ENOENT') {
logger.error({ err }, 'failed to delete temporary file')
}
})
}
}
module.exports = withTmpDir