l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

index.js (1308B)


      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 }