ae-biu
Version:
Born For AE, Born To Do
93 lines (75 loc) • 2.39 kB
JavaScript
;
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var path = require('path');
var fs = require('fs');
var _0777 = parseInt('0777', 8);
module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
function mkdirP(p, opts, f, made) {
if (typeof opts === 'function') {
f = opts;
opts = {};
} else if (!opts || (typeof opts === 'undefined' ? 'undefined' : (0, _typeof3.default)(opts)) !== 'object') {
opts = { mode: opts };
}
var mode = opts.mode;
var xfs = opts.fs || fs;
if (mode === undefined) {
mode = _0777 & ~process.umask();
}
if (!made) made = null;
var cb = f || function () {};
p = path.resolve(p);
xfs.mkdir(p, mode, function (er) {
if (!er) {
made = made || p;
return cb(null, made);
}
switch (er.code) {
case 'ENOENT':
mkdirP(path.dirname(p), opts, function (er, made) {
if (er) cb(er, made);else mkdirP(p, opts, cb, made);
});
break;
default:
xfs.stat(p, function (er2, stat) {
if (er2 || !stat.isDirectory()) cb(er, made);else cb(null, made);
});
break;
}
});
}
mkdirP.sync = function sync(p, opts, made) {
if (!opts || (typeof opts === 'undefined' ? 'undefined' : (0, _typeof3.default)(opts)) !== 'object') {
opts = { mode: opts };
}
var mode = opts.mode;
var xfs = opts.fs || fs;
if (mode === undefined) {
mode = _0777 & ~process.umask();
}
if (!made) made = null;
p = path.resolve(p);
try {
xfs.mkdirSync(p, mode);
made = made || p;
} catch (err0) {
switch (err0.code) {
case 'ENOENT':
made = sync(path.dirname(p), opts, made);
sync(p, opts, made);
break;
default:
var stat;
try {
stat = xfs.statSync(p);
} catch (err1) {
throw err0;
}
if (!stat.isDirectory()) throw err0;
break;
}
}
return made;
};