You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.6 KiB
						
					
					
				const {dirname} = require('path')
 | 
						|
 | 
						|
const mkdirpManual = (path, opts, made) => {
 | 
						|
  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
 | 
						|
      if (er.code !== 'EISDIR')
 | 
						|
        throw er
 | 
						|
    })
 | 
						|
  }
 | 
						|
 | 
						|
  return opts.mkdirAsync(path, opts).then(() => made || path, er => {
 | 
						|
    if (er.code === 'ENOENT')
 | 
						|
      return mkdirpManual(parent, opts)
 | 
						|
        .then(made => mkdirpManual(path, opts, made))
 | 
						|
    if (er.code !== 'EEXIST' && er.code !== 'EROFS')
 | 
						|
      throw er
 | 
						|
    return opts.statAsync(path).then(st => {
 | 
						|
      if (st.isDirectory())
 | 
						|
        return made
 | 
						|
      else
 | 
						|
        throw er
 | 
						|
    }, () => { throw er })
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
const mkdirpManualSync = (path, opts, made) => {
 | 
						|
  const parent = dirname(path)
 | 
						|
  opts.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
 | 
						|
      if (er.code !== 'EISDIR')
 | 
						|
        throw er
 | 
						|
      else
 | 
						|
        return
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  try {
 | 
						|
    opts.mkdirSync(path, opts)
 | 
						|
    return made || path
 | 
						|
  } catch (er) {
 | 
						|
    if (er.code === 'ENOENT')
 | 
						|
      return mkdirpManualSync(path, opts, mkdirpManualSync(parent, opts, made))
 | 
						|
    if (er.code !== 'EEXIST' && er.code !== 'EROFS')
 | 
						|
      throw er
 | 
						|
    try {
 | 
						|
      if (!opts.statSync(path).isDirectory())
 | 
						|
        throw er
 | 
						|
    } catch (_) {
 | 
						|
      throw er
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {mkdirpManual, mkdirpManualSync}
 |