UNPKG

1.89 kBJavaScriptView Raw
1'use strict'
2
3const debug = require('debug')('lint-staged:file')
4const fs = require('fs')
5const { promisify } = require('util')
6
7const fsAccess = promisify(fs.access)
8const fsReadFile = promisify(fs.readFile)
9const fsUnlink = promisify(fs.unlink)
10const fsWriteFile = promisify(fs.writeFile)
11
12/**
13 * Check if a file exists. Returns the filename if exists.
14 * @param {String} filename
15 * @returns {String|Boolean}
16 */
17const exists = async filename => {
18 try {
19 await fsAccess(filename)
20 return filename
21 } catch {
22 return false
23 }
24}
25
26/**
27 * Read contents of a file to buffer
28 * @param {String} filename
29 * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist
30 * @returns {Promise<Buffer>}
31 */
32const readFile = async (filename, ignoreENOENT = true) => {
33 debug('Reading file `%s`', filename)
34 try {
35 return await fsReadFile(filename)
36 } catch (error) {
37 if (ignoreENOENT && error.code === 'ENOENT') {
38 debug("File `%s` doesn't exist, ignoring...", filename)
39 return null // no-op file doesn't exist
40 } else {
41 throw error
42 }
43 }
44}
45
46/**
47 * Unlink a file if it exists
48 * @param {String} filename
49 * @param {Boolean} [ignoreENOENT=true] — Whether to throw if the file doesn't exist
50 */
51const unlink = async (filename, ignoreENOENT = true) => {
52 if (filename) {
53 debug('Unlinking file `%s`', filename)
54 try {
55 await fsUnlink(filename)
56 } catch (error) {
57 if (ignoreENOENT && error.code === 'ENOENT') {
58 debug("File `%s` doesn't exist, ignoring...", filename)
59 } else {
60 throw error
61 }
62 }
63 }
64}
65
66/**
67 * Write buffer to file
68 * @param {String} filename
69 * @param {Buffer} buffer
70 */
71const writeFile = async (filename, buffer) => {
72 debug('Writing file `%s`', filename)
73 await fsWriteFile(filename, buffer)
74}
75
76module.exports = {
77 exists,
78 readFile,
79 unlink,
80 writeFile
81}