--- /dev/null
+"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;