Initial commit
[yaffs-website] / node_modules / fs.realpath / index.js
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 }