package.dist.cjs.src.mkdirp-manual.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mkdirp Show documentation
Show all versions of mkdirp Show documentation
Recursively mkdir, like `mkdir -p`
The newest version!
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.mkdirpManual = exports.mkdirpManualSync = void 0;
const path_1 = require("path");
const opts_arg_js_1 = require("./opts-arg.js");
const mkdirpManualSync = (path, options, made) => {
const parent = (0, path_1.dirname)(path);
const opts = { ...(0, opts_arg_js_1.optsArg)(options), recursive: false };
if (parent === path) {
try {
return opts.mkdirSync(path, opts);
}
catch (er) {
// swallowed by recursive implementation on posix systems
// any other error is a failure
const fer = er;
if (fer && fer.code !== 'EISDIR') {
throw er;
}
return;
}
}
try {
opts.mkdirSync(path, opts);
return made || path;
}
catch (er) {
const fer = er;
if (fer && fer.code === 'ENOENT') {
return (0, exports.mkdirpManualSync)(path, opts, (0, exports.mkdirpManualSync)(parent, opts, made));
}
if (fer && fer.code !== 'EEXIST' && fer && fer.code !== 'EROFS') {
throw er;
}
try {
if (!opts.statSync(path).isDirectory())
throw er;
}
catch (_) {
throw er;
}
}
};
exports.mkdirpManualSync = mkdirpManualSync;
exports.mkdirpManual = Object.assign(async (path, options, made) => {
const opts = (0, opts_arg_js_1.optsArg)(options);
opts.recursive = false;
const parent = (0, path_1.dirname)(path);
if (parent === path) {
return opts.mkdirAsync(path, opts).catch(er => {
// swallowed by recursive implementation on posix systems
// any other error is a failure
const fer = er;
if (fer && fer.code !== 'EISDIR') {
throw er;
}
});
}
return opts.mkdirAsync(path, opts).then(() => made || path, async (er) => {
const fer = er;
if (fer && fer.code === 'ENOENT') {
return (0, exports.mkdirpManual)(parent, opts).then((made) => (0, exports.mkdirpManual)(path, opts, made));
}
if (fer && fer.code !== 'EEXIST' && fer.code !== 'EROFS') {
throw er;
}
return opts.statAsync(path).then(st => {
if (st.isDirectory()) {
return made;
}
else {
throw er;
}
}, () => {
throw er;
});
});
}, { sync: exports.mkdirpManualSync });
//# sourceMappingURL=mkdirp-manual.js.map