source: node_modules/mkdirp-classic/index.js@ 62b2964

finki-main main
Last change on this file since 62b2964 was 81bc7da, checked in by Klimentina Efremova <klimentina08642@…>, 3 months ago

Initial commit

  • Property mode set to 100644
File size: 2.6 KB
Line 
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 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
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 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};
Note: See TracBrowser for help on using the repository browser.