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