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.
		
		
		
		
		
			
		
			
				
					69 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					69 lines
				
				1.8 KiB
			| 
											3 years ago
										 | #!/usr/bin/env node
 | ||
|  | 
 | ||
|  | const usage = () => `
 | ||
|  | usage: mkdirp [DIR1,DIR2..] {OPTIONS} | ||
|  | 
 | ||
|  |   Create each supplied directory including any necessary parent directories | ||
|  |   that don't yet exist. | ||
|  | 
 | ||
|  |   If the directory already exists, do nothing. | ||
|  | 
 | ||
|  | OPTIONS are: | ||
|  | 
 | ||
|  |   -m<mode>       If a directory needs to be created, set the mode as an octal | ||
|  |   --mode=<mode>  permission string. | ||
|  | 
 | ||
|  |   -v --version   Print the mkdirp version number | ||
|  | 
 | ||
|  |   -h --help      Print this helpful banner | ||
|  | 
 | ||
|  |   -p --print     Print the first directories created for each path provided | ||
|  | 
 | ||
|  |   --manual       Use manual implementation, even if native is available | ||
|  | `
 | ||
|  | 
 | ||
|  | const dirs = [] | ||
|  | const opts = {} | ||
|  | let print = false | ||
|  | let dashdash = false | ||
|  | let manual = false | ||
|  | for (const arg of process.argv.slice(2)) { | ||
|  |   if (dashdash) | ||
|  |     dirs.push(arg) | ||
|  |   else if (arg === '--') | ||
|  |     dashdash = true | ||
|  |   else if (arg === '--manual') | ||
|  |     manual = true | ||
|  |   else if (/^-h/.test(arg) || /^--help/.test(arg)) { | ||
|  |     console.log(usage()) | ||
|  |     process.exit(0) | ||
|  |   } else if (arg === '-v' || arg === '--version') { | ||
|  |     console.log(require('../package.json').version) | ||
|  |     process.exit(0) | ||
|  |   } else if (arg === '-p' || arg === '--print') { | ||
|  |     print = true | ||
|  |   } else if (/^-m/.test(arg) || /^--mode=/.test(arg)) { | ||
|  |     const mode = parseInt(arg.replace(/^(-m|--mode=)/, ''), 8) | ||
|  |     if (isNaN(mode)) { | ||
|  |       console.error(`invalid mode argument: ${arg}\nMust be an octal number.`) | ||
|  |       process.exit(1) | ||
|  |     } | ||
|  |     opts.mode = mode | ||
|  |   } else | ||
|  |     dirs.push(arg) | ||
|  | } | ||
|  | 
 | ||
|  | const mkdirp = require('../') | ||
|  | const impl = manual ? mkdirp.manual : mkdirp | ||
|  | if (dirs.length === 0) | ||
|  |   console.error(usage()) | ||
|  | 
 | ||
|  | Promise.all(dirs.map(dir => impl(dir, opts))) | ||
|  |   .then(made => print ? made.forEach(m => m && console.log(m)) : null) | ||
|  |   .catch(er => { | ||
|  |     console.error(er.message) | ||
|  |     if (er.code) | ||
|  |       console.error('  code: ' + er.code) | ||
|  |     process.exit(1) | ||
|  |   }) |