UNPKG

args

Version:

Minimal toolkit for building CLIs

67 lines (55 loc) 1.49 kB
'use strict' module.exports = function(name, description, defaultValue, init) { let usage = [] const assignShort = (name, options, short) => { if (options.find(flagName => flagName.usage[0] === short)) { short = name.charAt(0).toUpperCase() } return [short, name] } // If name is an array, pick the values // Otherwise just use the whole thing switch (name.constructor) { case String: usage = assignShort(name, this.details.options, name.charAt(0)) break case Array: usage = usage.concat(name) break default: throw new Error('Invalid name for option') } // Throw error if short option is too long if (usage.length > 0 && usage[0].length > 1) { throw new Error('Short version of option is longer than 1 char') } const optionDetails = { defaultValue, usage, description } let defaultIsWrong switch (defaultValue) { case false: defaultIsWrong = true break case null: defaultIsWrong = true break case undefined: defaultIsWrong = true break default: defaultIsWrong = false } if (typeof init === 'function') { optionDetails.init = init } else if (!defaultIsWrong) { // Set initializer depending on type of default value optionDetails.init = this.handleType(defaultValue)[1] } // Register option to global scope this.details.options.push(optionDetails) // Allow chaining of .option() return this }