75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
import { dirname } from 'path';
 | 
						|
import { optsArg } from './opts-arg.js';
 | 
						|
export const mkdirpManualSync = (path, options, made) => {
 | 
						|
    const parent = dirname(path);
 | 
						|
    const opts = { ...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 mkdirpManualSync(path, opts, 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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
export const mkdirpManual = Object.assign(async (path, options, made) => {
 | 
						|
    const opts = optsArg(options);
 | 
						|
    opts.recursive = false;
 | 
						|
    const parent = 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 mkdirpManual(parent, opts).then((made) => 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: mkdirpManualSync });
 | 
						|
//# sourceMappingURL=mkdirp-manual.js.map
 |