text: var path = require('path');
  var fs = require('fs');
  
  module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
  
  function mkdirP (p, mode, f, made) {
      if (typeof mode === 'function' || mode === undefined) {
          f = mode;
          mode = 0777 & (~process.umask());
      }
      if (!made) made = null;
  
      var cb = f || function () {};
      if (typeof mode === 'string') mode = parseInt(mode, 8);
      p = path.resolve(p);
  
      fs.mkdir(p, mode, function (er) {
          if (!er) {
              made = made || p;
              return cb(null, made);
          }
          switch (er.code) {
              case 'ENOENT':
                  mkdirP(path.dirname(p), mode, function (er, made) {
                      if (er) cb(er, made);
                      else mkdirP(p, mode, cb, made);
                  });
                  break;
  
              // In the case of any other error, just see if there's a dir
              // there already.  If so, then hooray!  If not, then something
              // is borked.
              default:
                  fs.stat(p, function (er2, stat) {
                      // if the stat fails, then that's super weird.
                      // let the original error be the failure reason.
                      if (er2 || !stat.isDirectory()) cb(er, made)
                      else cb(null, made);
                  });
                  break;
          }
      });
  }
  
  mkdirP.sync = function sync (p, mode, made) {
      if (mode === undefined) {
          mode = 0777 & (~process.umask());
      }
      if (!made) made = null;
  
      if (typeof mode === 'string') mode = parseInt(mode, 8);
      p = path.resolve(p);
  
      try {
          fs.mkdirSync(p, mode);
          made = made || p;
      }
      catch (err0) {
          switch (err0.code) {
              case 'ENOENT' :
                  made = sync(path.dirname(p), mode, made);
                  sync(p, mode, made);
                  break;
  
              // In the case of any other error, just see if there's a dir
              // there already.  If so, then hooray!  If not, then something
              // is borked.
              default:
                  var stat;
                  try {
                      stat = fs.statSync(p);
                  }
                  catch (err1) {
                      throw err0;
                  }
                  if (!stat.isDirectory()) throw err0;
                  break;
          }
      }
  
      return made;
  };
  