basant307/AI_Governance_Project
045
1var path = require('path');2var fs = require('fs');3var _0777 = parseInt('0777', 8);4 5module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;6 7function mkdirP (p, opts, f, made) {8 if (typeof opts === 'function') {9 f = opts;10 opts = {};11 }12 else if (!opts || typeof opts !== 'object') {13 opts = { mode: opts };14 }15 16 var mode = opts.mode;17 var xfs = opts.fs || fs;18 19 if (mode === undefined) {20 mode = _0777 & (~process.umask());21 }22 if (!made) made = null;23 24 var cb = f || function () {};25 p = path.resolve(p);26 27 xfs.mkdir(p, mode, function (er) {28 if (!er) {29 made = made || p;30 return cb(null, made);31 }32 switch (er.code) {33 case 'ENOENT':34 mkdirP(path.dirname(p), opts, function (er, made) {35 if (er) cb(er, made);36 else mkdirP(p, opts, cb, made);37 });38 break;39 40 // In the case of any other error, just see if there's a dir41 // there already. If so, then hooray! If not, then something42 // is borked.43 default:44 xfs.stat(p, function (er2, stat) {45 // if the stat fails, then that's super weird.46 // let the original error be the failure reason.47 if (er2 || !stat.isDirectory()) cb(er, made)48 else cb(null, made);49 });50 break;51 }52 });53}54 55mkdirP.sync = function sync (p, opts, made) {56 if (!opts || typeof opts !== 'object') {57 opts = { mode: opts };58 }59 60 var mode = opts.mode;61 var xfs = opts.fs || fs;62 63 if (mode === undefined) {64 mode = _0777 & (~process.umask());65 }66 if (!made) made = null;67 68 p = path.resolve(p);69 70 try {71 xfs.mkdirSync(p, mode);72 made = made || p;73 }74 catch (err0) {75 switch (err0.code) {76 case 'ENOENT' :77 made = sync(path.dirname(p), opts, made);78 sync(p, opts, made);79 break;80 81 // In the case of any other error, just see if there's a dir82 // there already. If so, then hooray! If not, then something83 // is borked.84 default:85 var stat;86 try {87 stat = xfs.statSync(p);88 }89 catch (err1) {90 throw err0;91 }92 if (!stat.isDirectory()) throw err0;93 break;94 }95 }96 97 return made;98};99 