47 lines
		
	
	
		
			1010 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1010 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | const fs = require('fs'); | ||
|  | const promisify = require('util.promisify'); | ||
|  | 
 | ||
|  | const promisiedFsRealpath = promisify(fs.realpath); | ||
|  | 
 | ||
|  | function realpath(filepath) { | ||
|  |   if (typeof fs.realpath.native === 'function') { | ||
|  |     return promisify(fs.realpath.native)(filepath); | ||
|  |   } | ||
|  |   const fsBinding = process.binding('fs'); | ||
|  | 
 | ||
|  |   if (fsBinding.realpath) { | ||
|  |     return new Promise((resolve, reject) => { | ||
|  |       try { | ||
|  |         resolve(fsBinding.realpath(filepath, 'utf8')); | ||
|  |       } catch (e) { | ||
|  |         reject(e); | ||
|  |       } | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   return promisiedFsRealpath(filepath); | ||
|  | } | ||
|  | 
 | ||
|  | function realpathSync(filepath) { | ||
|  |   if (typeof fs.realpathSync.native === 'function') { | ||
|  |     return fs.realpathSync.native(filepath); | ||
|  |   } | ||
|  | 
 | ||
|  |   const fsBinding = process.binding('fs'); | ||
|  | 
 | ||
|  |   if (fsBinding.realpath) { | ||
|  |     try { | ||
|  |       return fsBinding.realpath(filepath, 'utf8'); | ||
|  |     } catch (err) { | ||
|  |       /* Probably RAM-disk on windows. */ | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return fs.realpathSync(filepath); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = realpath; | ||
|  | module.exports.sync = realpathSync; |