@@ -27,12 +27,16 @@ var defaultIsDir = function isDirectory(dir, cb) {
2727 } ) ;
2828} ;
2929
30- var maybeUnwrapSymlink = function maybeUnwrapSymlink ( x , opts , cb ) {
30+ var defaultUnwrapSymlink = function unwrapSymlink ( x , cb ) {
31+ realpath ( x , function ( realPathErr , realPath ) {
32+ if ( realPathErr && realPathErr . code !== 'ENOENT' ) cb ( realPathErr ) ;
33+ else cb ( null , realPathErr ? x : realPath ) ;
34+ } ) ;
35+ } ;
36+
37+ var maybeUnwrapSymlink = function maybeUnwrapSymlink ( unwrap , x , opts , cb ) {
3138 if ( ! opts || ! opts . preserveSymlinks ) {
32- realpath ( x , function ( realPathErr , realPath ) {
33- if ( realPathErr && realPathErr . code !== 'ENOENT' ) cb ( realPathErr ) ;
34- else cb ( null , realPathErr ? x : realPath ) ;
35- } ) ;
39+ unwrap ( x , cb ) ;
3640 } else {
3741 cb ( null , x ) ;
3842 }
@@ -65,6 +69,7 @@ module.exports = function resolve(x, options, callback) {
6569 var isFile = opts . isFile || defaultIsFile ;
6670 var isDirectory = opts . isDirectory || defaultIsDir ;
6771 var readFile = opts . readFile || fs . readFile ;
72+ var unwrapSymlink = opts . unwrapSymlink || defaultUnwrapSymlink ;
6873 var packageIterator = opts . packageIterator ;
6974
7075 var extensions = opts . extensions || [ '.js' ] ;
@@ -77,6 +82,7 @@ module.exports = function resolve(x, options, callback) {
7782 var absoluteStart = path . resolve ( basedir ) ;
7883
7984 maybeUnwrapSymlink (
85+ unwrapSymlink ,
8086 absoluteStart ,
8187 opts ,
8288 function ( err , realStart ) {
@@ -112,7 +118,7 @@ module.exports = function resolve(x, options, callback) {
112118 } else loadNodeModules ( x , basedir , function ( err , n , pkg ) {
113119 if ( err ) cb ( err ) ;
114120 else if ( n ) {
115- return maybeUnwrapSymlink ( n , opts , function ( err , realN ) {
121+ return maybeUnwrapSymlink ( unwrapSymlink , n , opts , function ( err , realN ) {
116122 if ( err ) {
117123 cb ( err ) ;
118124 } else {
@@ -133,7 +139,7 @@ module.exports = function resolve(x, options, callback) {
133139 else loadAsDirectory ( res , function ( err , d , pkg ) {
134140 if ( err ) cb ( err ) ;
135141 else if ( d ) {
136- maybeUnwrapSymlink ( d , opts , function ( err , realD ) {
142+ maybeUnwrapSymlink ( unwrapSymlink , d , opts , function ( err , realD ) {
137143 if ( err ) {
138144 cb ( err ) ;
139145 } else {
@@ -197,7 +203,7 @@ module.exports = function resolve(x, options, callback) {
197203 }
198204 if ( ( / [ / \\ ] n o d e _ m o d u l e s [ / \\ ] * $ / ) . test ( dir ) ) return cb ( null ) ;
199205
200- maybeUnwrapSymlink ( dir , opts , function ( unwrapErr , pkgdir ) {
206+ maybeUnwrapSymlink ( unwrapSymlink , dir , opts , function ( unwrapErr , pkgdir ) {
201207 if ( unwrapErr ) return loadpkg ( path . dirname ( dir ) , cb ) ;
202208 var pkgfile = path . join ( pkgdir , 'package.json' ) ;
203209 isFile ( pkgfile , function ( err , ex ) {
@@ -225,7 +231,7 @@ module.exports = function resolve(x, options, callback) {
225231 fpkg = opts . package ;
226232 }
227233
228- maybeUnwrapSymlink ( x , opts , function ( unwrapErr , pkgdir ) {
234+ maybeUnwrapSymlink ( unwrapSymlink , x , opts , function ( unwrapErr , pkgdir ) {
229235 if ( unwrapErr ) return loadAsDirectory ( path . dirname ( x ) , fpkg , cb ) ;
230236 var pkgfile = path . join ( pkgdir , 'package.json' ) ;
231237 isFile ( pkgfile , function ( err , ex ) {
0 commit comments