프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / mkdirp / index.js

이력 | 보기 | 이력해설 | 다운로드 (2.57 KB)

1 39 HKM
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
};