| var common = require('./common'); |
| var fs = require('fs'); |
| var path = require('path'); |
| |
| // Recursively creates 'dir' |
| function mkdirSyncRecursive(dir) { |
| var baseDir = path.dirname(dir); |
| |
| // Base dir exists, no recursion necessary |
| if (fs.existsSync(baseDir)) { |
| fs.mkdirSync(dir, parseInt('0777', 8)); |
| return; |
| } |
| |
| // Base dir does not exist, go recursive |
| mkdirSyncRecursive(baseDir); |
| |
| // Base dir created, can create dir |
| fs.mkdirSync(dir, parseInt('0777', 8)); |
| } |
| |
| //@ |
| //@ ### mkdir([options ,] dir [, dir ...]) |
| //@ ### mkdir([options ,] dir_array) |
| //@ Available options: |
| //@ |
| //@ + `p`: full path (will create intermediate dirs if necessary) |
| //@ |
| //@ Examples: |
| //@ |
| //@ ```javascript |
| //@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g'); |
| //@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above |
| //@ ``` |
| //@ |
| //@ Creates directories. |
| function _mkdir(options, dirs) { |
| options = common.parseOptions(options, { |
| 'p': 'fullpath' |
| }); |
| if (!dirs) |
| common.error('no paths given'); |
| |
| if (typeof dirs === 'string') |
| dirs = [].slice.call(arguments, 1); |
| // if it's array leave it as it is |
| |
| dirs.forEach(function(dir) { |
| if (fs.existsSync(dir)) { |
| if (!options.fullpath) |
| common.error('path already exists: ' + dir, true); |
| return; // skip dir |
| } |
| |
| // Base dir does not exist, and no -p option given |
| var baseDir = path.dirname(dir); |
| if (!fs.existsSync(baseDir) && !options.fullpath) { |
| common.error('no such file or directory: ' + baseDir, true); |
| return; // skip dir |
| } |
| |
| if (options.fullpath) |
| mkdirSyncRecursive(dir); |
| else |
| fs.mkdirSync(dir, parseInt('0777', 8)); |
| }); |
| } // mkdir |
| module.exports = _mkdir; |