l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

cmd.js (1830B)


      1 #!/usr/bin/env node
      2 
      3 const usage = () => `
      4 usage: mkdirp [DIR1,DIR2..] {OPTIONS}
      5 
      6   Create each supplied directory including any necessary parent directories
      7   that don't yet exist.
      8 
      9   If the directory already exists, do nothing.
     10 
     11 OPTIONS are:
     12 
     13   -m<mode>       If a directory needs to be created, set the mode as an octal
     14   --mode=<mode>  permission string.
     15 
     16   -v --version   Print the mkdirp version number
     17 
     18   -h --help      Print this helpful banner
     19 
     20   -p --print     Print the first directories created for each path provided
     21 
     22   --manual       Use manual implementation, even if native is available
     23 `
     24 
     25 const dirs = []
     26 const opts = {}
     27 let print = false
     28 let dashdash = false
     29 let manual = false
     30 for (const arg of process.argv.slice(2)) {
     31   if (dashdash)
     32     dirs.push(arg)
     33   else if (arg === '--')
     34     dashdash = true
     35   else if (arg === '--manual')
     36     manual = true
     37   else if (/^-h/.test(arg) || /^--help/.test(arg)) {
     38     console.log(usage())
     39     process.exit(0)
     40   } else if (arg === '-v' || arg === '--version') {
     41     console.log(require('../package.json').version)
     42     process.exit(0)
     43   } else if (arg === '-p' || arg === '--print') {
     44     print = true
     45   } else if (/^-m/.test(arg) || /^--mode=/.test(arg)) {
     46     const mode = parseInt(arg.replace(/^(-m|--mode=)/, ''), 8)
     47     if (isNaN(mode)) {
     48       console.error(`invalid mode argument: ${arg}\nMust be an octal number.`)
     49       process.exit(1)
     50     }
     51     opts.mode = mode
     52   } else
     53     dirs.push(arg)
     54 }
     55 
     56 const mkdirp = require('../')
     57 const impl = manual ? mkdirp.manual : mkdirp
     58 if (dirs.length === 0)
     59   console.error(usage())
     60 
     61 Promise.all(dirs.map(dir => impl(dir, opts)))
     62   .then(made => print ? made.forEach(m => m && console.log(m)) : null)
     63   .catch(er => {
     64     console.error(er.message)
     65     if (er.code)
     66       console.error('  code: ' + er.code)
     67     process.exit(1)
     68   })