| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | /** * @author Toru Nagashima * See LICENSE file in root directory for full license. */"use strict"const fs = require("fs")const path = require("path")const Cache = require("./cache")const ROOT = /^(?:[/.]|\.\.|[A-Z]:\\|\\\\)(?:[/\\]\.\.)*$/uconst cache = new Cache()/** * Check whether the file exists or not. * @param {string} filePath The file path to check. * @returns {boolean} `true` if the file exists. */function existsCaseSensitive(filePath) {    let dirPath = filePath    while (dirPath !== "" && !ROOT.test(dirPath)) {        const fileName = path.basename(dirPath)        dirPath = path.dirname(dirPath)        if (fs.readdirSync(dirPath).indexOf(fileName) === -1) {            return false        }    }    return true}/** * Checks whether or not the file of a given path exists. * * @param {string} filePath - A file path to check. * @returns {boolean} `true` if the file of a given path exists. */module.exports = function exists(filePath) {    let result = cache.get(filePath)    if (result == null) {        try {            const relativePath = path.relative(process.cwd(), filePath)            result =                fs.statSync(relativePath).isFile() &&                existsCaseSensitive(relativePath)        } catch (error) {            if (error.code !== "ENOENT") {                throw error            }            result = false        }        cache.set(filePath, result)    }    return result}
 |