1 | module.exports = realpath
|
---|
2 | realpath.realpath = realpath
|
---|
3 | realpath.sync = realpathSync
|
---|
4 | realpath.realpathSync = realpathSync
|
---|
5 | realpath.monkeypatch = monkeypatch
|
---|
6 | realpath.unmonkeypatch = unmonkeypatch
|
---|
7 |
|
---|
8 | var fs = require('fs')
|
---|
9 | var origRealpath = fs.realpath
|
---|
10 | var origRealpathSync = fs.realpathSync
|
---|
11 |
|
---|
12 | var version = process.version
|
---|
13 | var ok = /^v[0-5]\./.test(version)
|
---|
14 | var old = require('./old.js')
|
---|
15 |
|
---|
16 | function newError (er) {
|
---|
17 | return er && er.syscall === 'realpath' && (
|
---|
18 | er.code === 'ELOOP' ||
|
---|
19 | er.code === 'ENOMEM' ||
|
---|
20 | er.code === 'ENAMETOOLONG'
|
---|
21 | )
|
---|
22 | }
|
---|
23 |
|
---|
24 | function realpath (p, cache, cb) {
|
---|
25 | if (ok) {
|
---|
26 | return origRealpath(p, cache, cb)
|
---|
27 | }
|
---|
28 |
|
---|
29 | if (typeof cache === 'function') {
|
---|
30 | cb = cache
|
---|
31 | cache = null
|
---|
32 | }
|
---|
33 | origRealpath(p, cache, function (er, result) {
|
---|
34 | if (newError(er)) {
|
---|
35 | old.realpath(p, cache, cb)
|
---|
36 | } else {
|
---|
37 | cb(er, result)
|
---|
38 | }
|
---|
39 | })
|
---|
40 | }
|
---|
41 |
|
---|
42 | function realpathSync (p, cache) {
|
---|
43 | if (ok) {
|
---|
44 | return origRealpathSync(p, cache)
|
---|
45 | }
|
---|
46 |
|
---|
47 | try {
|
---|
48 | return origRealpathSync(p, cache)
|
---|
49 | } catch (er) {
|
---|
50 | if (newError(er)) {
|
---|
51 | return old.realpathSync(p, cache)
|
---|
52 | } else {
|
---|
53 | throw er
|
---|
54 | }
|
---|
55 | }
|
---|
56 | }
|
---|
57 |
|
---|
58 | function monkeypatch () {
|
---|
59 | fs.realpath = realpath
|
---|
60 | fs.realpathSync = realpathSync
|
---|
61 | }
|
---|
62 |
|
---|
63 | function unmonkeypatch () {
|
---|
64 | fs.realpath = origRealpath
|
---|
65 | fs.realpathSync = origRealpathSync
|
---|
66 | }
|
---|