2c688889f1aece337c1cd204952142df678d53ab7964937044dcf54668dd1c5290ced86804821951d0eb17ddf0185c974ce0b2988547c5da6caa97b6aac252 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict'
  2. const debug = require('debug')('lint-staged:file')
  3. const fs = require('fs')
  4. const { promisify } = require('util')
  5. const fsReadFile = promisify(fs.readFile)
  6. const fsUnlink = promisify(fs.unlink)
  7. const fsWriteFile = promisify(fs.writeFile)
  8. /**
  9. * Read contents of a file to buffer
  10. * @param {String} filename
  11. * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist
  12. * @returns {Promise<Buffer>}
  13. */
  14. const readFile = async (filename, ignoreENOENT = true) => {
  15. debug('Reading file `%s`', filename)
  16. try {
  17. return await fsReadFile(filename)
  18. } catch (error) {
  19. if (ignoreENOENT && error.code === 'ENOENT') {
  20. debug("File `%s` doesn't exist, ignoring...", filename)
  21. return null // no-op file doesn't exist
  22. } else {
  23. throw error
  24. }
  25. }
  26. }
  27. /**
  28. * Remove a file
  29. * @param {String} filename
  30. * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist
  31. */
  32. const unlink = async (filename, ignoreENOENT = true) => {
  33. debug('Removing file `%s`', filename)
  34. try {
  35. await fsUnlink(filename)
  36. } catch (error) {
  37. if (ignoreENOENT && error.code === 'ENOENT') {
  38. debug("File `%s` doesn't exist, ignoring...", filename)
  39. } else {
  40. throw error
  41. }
  42. }
  43. }
  44. /**
  45. * Write buffer to file
  46. * @param {String} filename
  47. * @param {Buffer} buffer
  48. */
  49. const writeFile = async (filename, buffer) => {
  50. debug('Writing file `%s`', filename)
  51. await fsWriteFile(filename, buffer)
  52. }
  53. module.exports = {
  54. readFile,
  55. unlink,
  56. writeFile,
  57. }