| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- var fs = require('fs');
- var path = require('path');
- var mkpath = function mkpath(dirpath, mode, callback) {
- dirpath = path.resolve(dirpath);
- if (typeof mode === 'function' || typeof mode === 'undefined') {
- callback = mode;
- mode = 0777 & (~process.umask());
- }
- if (!callback) {
- callback = function () {};
- }
- fs.stat(dirpath, function (err, stats) {
- if (err) {
- if (err.code === 'ENOENT') {
- mkpath(path.dirname(dirpath), mode, function (err) {
- if (err) {
- callback(err);
- } else {
- fs.mkdir(dirpath, mode, function (err) {
- if (!err || err.code == 'EEXIST') {
- callback(null);
- } else {
- callback(err);
- }
- });
- }
- });
- } else {
- callback(err);
- }
- } else if (stats.isDirectory()) {
- callback(null);
- } else {
- callback(new Error(dirpath + ' exists and is not a directory'));
- }
- });
- };
- mkpath.sync = function mkpathsync(dirpath, mode) {
- dirpath = path.resolve(dirpath);
- if (typeof mode === 'undefined') {
- mode = 0777 & (~process.umask());
- }
- try {
- if (!fs.statSync(dirpath).isDirectory()) {
- throw new Error(dirpath + ' exists and is not a directory');
- }
- } catch (err) {
- if (err.code === 'ENOENT') {
- mkpathsync(path.dirname(dirpath), mode);
- fs.mkdirSync(dirpath, mode);
- } else {
- throw err;
- }
- }
- };
- module.exports = mkpath;
|