123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- const isFn = require('./isFn');
- const noop = require('./noop');
- const fs = require('fs');
- const path = require('path');
- const _0777 = parseInt('0777', 8);
- exports = function(p, mode, cb) {
- if (isFn(mode)) {
- cb = mode;
- mode = _0777;
- }
- cb = cb || noop;
- p = path.resolve(p);
- fs.mkdir(p, mode, function(err) {
- if (!err) return cb();
- if (err.code === 'ENOENT') {
- exports(path.dirname(p), mode, function(err) {
- if (err) return cb(err);
- exports(p, mode, cb);
- });
- } else {
- fs.stat(p, function(errStat, stat) {
- if (errStat || !stat.isDirectory()) return cb(errStat);
- cb();
- });
- }
- });
- };
- exports.sync = function(p, mode = _0777) {
- p = path.resolve(p);
- try {
- fs.mkdirSync(p, mode);
- } catch (err) {
- if (err.code === 'ENOENT') {
- exports.sync(path.dirname(p), mode);
- exports.sync(p, mode);
- } else {
- try {
- if (!fs.statSync(p).isDirectory()) {
- throw err;
- }
- } catch (_) {
- throw err;
- }
- }
- }
- };
- module.exports = exports;
|