You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							58 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							58 lines
						
					
					
						
							1.4 KiB
						
					
					
				/** | 
						|
 * @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]:\\|\\\\)(?:[/\\]\.\.)*$/u | 
						|
const 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 | 
						|
}
 | 
						|
 |