root / HServer / 00.Server / 00.Program / node_modules / mkdirp / index.js
이력 | 보기 | 이력해설 | 다운로드 (2.57 KB)
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 |
}; |