@@ -25,12 +25,16 @@ var defaultIsDir = function isDirectory(dir, cb) {
2525 } ) ;
2626} ;
2727
28- var maybeUnwrapSymlink = function maybeUnwrapSymlink ( x , opts , cb ) {
28+ var defaultUnwrapSymlink = function unwrapSymlink ( x , cb ) {
29+ fs . realpath ( x , function ( realPathErr , realPath ) {
30+ if ( realPathErr && realPathErr . code !== 'ENOENT' ) cb ( realPathErr ) ;
31+ else cb ( null , realPathErr ? x : realPath ) ;
32+ } ) ;
33+ } ;
34+
35+ var maybeUnwrapSymlink = function maybeUnwrapSymlink ( unwrap , x , opts , cb ) {
2936 if ( ! opts || ! opts . preserveSymlinks ) {
30- fs . realpath ( x , function ( realPathErr , realPath ) {
31- if ( realPathErr && realPathErr . code !== 'ENOENT' ) cb ( realPathErr ) ;
32- else cb ( null , realPathErr ? x : realPath ) ;
33- } ) ;
37+ unwrap ( x , cb ) ;
3438 } else {
3539 cb ( null , x ) ;
3640 }
@@ -63,6 +67,7 @@ module.exports = function resolve(x, options, callback) {
6367 var isFile = opts . isFile || defaultIsFile ;
6468 var isDirectory = opts . isDirectory || defaultIsDir ;
6569 var readFile = opts . readFile || fs . readFile ;
70+ var unwrapSymlink = opts . unwrapSymlink || defaultUnwrapSymlink ;
6671 var packageIterator = opts . packageIterator ;
6772
6873 var extensions = opts . extensions || [ '.js' ] ;
@@ -75,6 +80,7 @@ module.exports = function resolve(x, options, callback) {
7580 var absoluteStart = path . resolve ( basedir ) ;
7681
7782 maybeUnwrapSymlink (
83+ unwrapSymlink ,
7884 absoluteStart ,
7985 opts ,
8086 function ( err , realStart ) {
@@ -110,7 +116,7 @@ module.exports = function resolve(x, options, callback) {
110116 } else loadNodeModules ( x , basedir , function ( err , n , pkg ) {
111117 if ( err ) cb ( err ) ;
112118 else if ( n ) {
113- return maybeUnwrapSymlink ( n , opts , function ( err , realN ) {
119+ return maybeUnwrapSymlink ( unwrapSymlink , n , opts , function ( err , realN ) {
114120 if ( err ) {
115121 cb ( err ) ;
116122 } else {
@@ -131,7 +137,7 @@ module.exports = function resolve(x, options, callback) {
131137 else loadAsDirectory ( res , function ( err , d , pkg ) {
132138 if ( err ) cb ( err ) ;
133139 else if ( d ) {
134- maybeUnwrapSymlink ( d , opts , function ( err , realD ) {
140+ maybeUnwrapSymlink ( unwrapSymlink , d , opts , function ( err , realD ) {
135141 if ( err ) {
136142 cb ( err ) ;
137143 } else {
@@ -195,7 +201,7 @@ module.exports = function resolve(x, options, callback) {
195201 }
196202 if ( ( / [ / \\ ] n o d e _ m o d u l e s [ / \\ ] * $ / ) . test ( dir ) ) return cb ( null ) ;
197203
198- maybeUnwrapSymlink ( dir , opts , function ( unwrapErr , pkgdir ) {
204+ maybeUnwrapSymlink ( unwrapSymlink , dir , opts , function ( unwrapErr , pkgdir ) {
199205 if ( unwrapErr ) return loadpkg ( path . dirname ( dir ) , cb ) ;
200206 var pkgfile = path . join ( pkgdir , 'package.json' ) ;
201207 isFile ( pkgfile , function ( err , ex ) {
@@ -223,7 +229,7 @@ module.exports = function resolve(x, options, callback) {
223229 fpkg = opts . package ;
224230 }
225231
226- maybeUnwrapSymlink ( x , opts , function ( unwrapErr , pkgdir ) {
232+ maybeUnwrapSymlink ( unwrapSymlink , x , opts , function ( unwrapErr , pkgdir ) {
227233 if ( unwrapErr ) return loadAsDirectory ( path . dirname ( x ) , fpkg , cb ) ;
228234 var pkgfile = path . join ( pkgdir , 'package.json' ) ;
229235 isFile ( pkgfile , function ( err , ex ) {
0 commit comments