overleaf/services/history-v1/api/controllers/with_tmp_dir.js

28 lines
723 B
JavaScript
Raw Normal View History

const fs = require('fs')
const fsExtra = require('fs-extra')
const logger = require('@overleaf/logger')
const os = require('os')
const path = require('path')
/**
* Create a temporary directory before executing a function and cleaning up
* after.
*
* @param {string} prefix - prefix for the temporary directory name
* @param {Function} 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