| #!/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) |
| }) |