| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| function sync(path, options) { |
| const lstat = options.fs.lstatSync(path); |
| if (!isFollowedSymlink(lstat, options)) { |
| return lstat; |
| } |
| try { |
| const stat = options.fs.statSync(path); |
| stat.isSymbolicLink = () => true; |
| return stat; |
| } |
| catch (err) { |
| if (!options.throwErrorOnBrokenSymlinks) { |
| return lstat; |
| } |
| throw err; |
| } |
| } |
| exports.sync = sync; |
| function async(path, options, callback) { |
| options.fs.lstat(path, (err0, lstat) => { |
| if (err0) { |
| return callback(err0, undefined); |
| } |
| if (!isFollowedSymlink(lstat, options)) { |
| return callback(null, lstat); |
| } |
| options.fs.stat(path, (err1, stat) => { |
| if (err1) { |
| return options.throwErrorOnBrokenSymlinks ? callback(err1) : callback(null, lstat); |
| } |
| stat.isSymbolicLink = () => true; |
| callback(null, stat); |
| }); |
| }); |
| } |
| exports.async = async; |
| /** |
| * Returns `true` for followed symlink. |
| */ |
| function isFollowedSymlink(stat, options) { |
| return stat.isSymbolicLink() && options.followSymlinks; |
| } |
| exports.isFollowedSymlink = isFollowedSymlink; |