'use strict' const debug = require('debug')('lint-staged:file') const fs = require('fs') const { promisify } = require('util') const fsReadFile = promisify(fs.readFile) const fsUnlink = promisify(fs.unlink) const fsWriteFile = promisify(fs.writeFile) /** * Read contents of a file to buffer * @param {String} filename * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist * @returns {Promise} */ const readFile = async (filename, ignoreENOENT = true) => { debug('Reading file `%s`', filename) try { return await fsReadFile(filename) } catch (error) { if (ignoreENOENT && error.code === 'ENOENT') { debug("File `%s` doesn't exist, ignoring...", filename) return null // no-op file doesn't exist } else { throw error } } } /** * Remove a file * @param {String} filename * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist */ const unlink = async (filename, ignoreENOENT = true) => { debug('Removing file `%s`', filename) try { await fsUnlink(filename) } catch (error) { if (ignoreENOENT && error.code === 'ENOENT') { debug("File `%s` doesn't exist, ignoring...", filename) } else { throw error } } } /** * Write buffer to file * @param {String} filename * @param {Buffer} buffer */ const writeFile = async (filename, buffer) => { debug('Writing file `%s`', filename) await fsWriteFile(filename, buffer) } module.exports = { readFile, unlink, writeFile, }