| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- 'use strict';
 
- const call = require('./call');
 
- module.exports = stat;
 
- /**
 
-  * Retrieves the {@link fs.Stats} for the given path. If the path is a symbolic link,
 
-  * then the Stats of the symlink's target are returned instead.  If the symlink is broken,
 
-  * then the Stats of the symlink itself are returned.
 
-  *
 
-  * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module
 
-  * @param {string} path - The path to return stats for
 
-  * @param {function} callback
 
-  */
 
- function stat (fs, path, callback) {
 
-   let isSymLink = false;
 
-   call.safe(fs.lstat, path, (err, lstats) => {
 
-     if (err) {
 
-       // fs.lstat threw an eror
 
-       return callback(err);
 
-     }
 
-     try {
 
-       isSymLink = lstats.isSymbolicLink();
 
-     }
 
-     catch (err2) {
 
-       // lstats.isSymbolicLink() threw an error
 
-       // (probably because fs.lstat returned an invalid result)
 
-       return callback(err2);
 
-     }
 
-     if (isSymLink) {
 
-       // Try to resolve the symlink
 
-       symlinkStat(fs, path, lstats, callback);
 
-     }
 
-     else {
 
-       // It's not a symlink, so return the stats as-is
 
-       callback(null, lstats);
 
-     }
 
-   });
 
- }
 
- /**
 
-  * Retrieves the {@link fs.Stats} for the target of the given symlink.
 
-  * If the symlink is broken, then the Stats of the symlink itself are returned.
 
-  *
 
-  * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module
 
-  * @param {string} path - The path of the symlink to return stats for
 
-  * @param {object} lstats - The stats of the symlink
 
-  * @param {function} callback
 
-  */
 
- function symlinkStat (fs, path, lstats, callback) {
 
-   call.safe(fs.stat, path, (err, stats) => {
 
-     if (err) {
 
-       // The symlink is broken, so return the stats for the link itself
 
-       return callback(null, lstats);
 
-     }
 
-     try {
 
-       // Return the stats for the resolved symlink target,
 
-       // and override the `isSymbolicLink` method to indicate that it's a symlink
 
-       stats.isSymbolicLink = () => true;
 
-     }
 
-     catch (err2) {
 
-       // Setting stats.isSymbolicLink threw an error
 
-       // (probably because fs.stat returned an invalid result)
 
-       return callback(err2);
 
-     }
 
-     callback(null, stats);
 
-   });
 
- }
 
 
  |