💾 Archived View for gmi.noulin.net › gitRepositories › git-off › file › src › node_modules › mkdirp … captured on 2023-01-29 at 13:11:16. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
index.js (2630B)
1 var path = require('path'); 2 var fs = require('fs'); 3 var _0777 = parseInt('0777', 8); 4 5 module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; 6 7 function 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 dir 41 // there already. If so, then hooray! If not, then something 42 // 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 55 mkdirP.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 dir 82 // there already. If so, then hooray! If not, then something 83 // 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 };