"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;
|