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 | }; |