Spaces:
Sleeping
Sleeping
module.exports = realpath | |
realpath.realpath = realpath | |
realpath.sync = realpathSync | |
realpath.realpathSync = realpathSync | |
realpath.monkeypatch = monkeypatch | |
realpath.unmonkeypatch = unmonkeypatch | |
var fs = require('fs') | |
var origRealpath = fs.realpath | |
var origRealpathSync = fs.realpathSync | |
var version = process.version | |
var ok = /^v[0-5]\./.test(version) | |
var old = require('./old.js') | |
function newError (er) { | |
return er && er.syscall === 'realpath' && ( | |
er.code === 'ELOOP' || | |
er.code === 'ENOMEM' || | |
er.code === 'ENAMETOOLONG' | |
) | |
} | |
function realpath (p, cache, cb) { | |
if (ok) { | |
return origRealpath(p, cache, cb) | |
} | |
if (typeof cache === 'function') { | |
cb = cache | |
cache = null | |
} | |
origRealpath(p, cache, function (er, result) { | |
if (newError(er)) { | |
old.realpath(p, cache, cb) | |
} else { | |
cb(er, result) | |
} | |
}) | |
} | |
function realpathSync (p, cache) { | |
if (ok) { | |
return origRealpathSync(p, cache) | |
} | |
try { | |
return origRealpathSync(p, cache) | |
} catch (er) { | |
if (newError(er)) { | |
return old.realpathSync(p, cache) | |
} else { | |
throw er | |
} | |
} | |
} | |
function monkeypatch () { | |
fs.realpath = realpath | |
fs.realpathSync = realpathSync | |
} | |
function unmonkeypatch () { | |
fs.realpath = origRealpath | |
fs.realpathSync = origRealpathSync | |
} | |