| import process from 'node:process'; |
| import { y as yargsParser, t as trimNewlines, r as redent, n as normalizePackageData, c as camelcaseKeys } from './dependencies.js'; |
| import { buildOptions } from './options.js'; |
| import { buildParserOptions } from './parser.js'; |
| import { checkUnknownFlags, validate, checkMissingRequiredFlags } from './validate.js'; |
| |
| const buildResult = (options, parserOptions) => { |
| const {pkg: package_} = options; |
| const argv = yargsParser(options.argv, parserOptions); |
| let help = ''; |
| |
| if (options.help) { |
| help = trimNewlines((options.help || '').replace(/\t+\n*$/, '')); |
| |
| if (help.includes('\n')) { |
| help = redent(help, options.helpIndent); |
| } |
| |
| help = `\n${help}`; |
| } |
| |
| normalizePackageData(package_); |
| |
| let {description} = options; |
| if (!description && description !== false) { |
| ({description} = package_); |
| } |
| |
| description &&= help ? redent(`\n${description}\n`, options.helpIndent) : `\n${description}`; |
| help = `${description || ''}${help}\n`; |
| |
| const showHelp = code => { |
| console.log(help); |
| process.exit(typeof code === 'number' ? code : 2); |
| }; |
| |
| const showVersion = () => { |
| console.log(typeof options.version === 'string' ? options.version : package_.version); |
| process.exit(0); |
| }; |
| |
| if (argv._.length === 0 && options.argv.length === 1) { |
| if (argv.version === true && options.autoVersion) { |
| showVersion(); |
| } else if (argv.help === true && options.autoHelp) { |
| showHelp(0); |
| } |
| } |
| |
| const input = argv._; |
| delete argv._; |
| |
| if (!options.allowUnknownFlags) { |
| checkUnknownFlags(input); |
| } |
| |
| const flags = camelcaseKeys(argv, {exclude: ['--', /^\w$/]}); |
| const unnormalizedFlags = {...flags}; |
| |
| validate(flags, options); |
| |
| for (const flagValue of Object.values(options.flags)) { |
| if (Array.isArray(flagValue.aliases)) { |
| for (const alias of flagValue.aliases) { |
| delete flags[alias]; |
| } |
| } |
| |
| delete flags[flagValue.shortFlag]; |
| } |
| |
| checkMissingRequiredFlags(options.flags, flags, input); |
| |
| return { |
| input, |
| flags, |
| unnormalizedFlags, |
| pkg: package_, |
| help, |
| showHelp, |
| showVersion, |
| }; |
| }; |
| |
| const meow = (helpText, options = {}) => { |
| const parsedOptions = buildOptions(helpText, options); |
| const parserOptions = buildParserOptions(parsedOptions); |
| const result = buildResult(parsedOptions, parserOptions); |
| |
| process.title = result.pkg.bin ? Object.keys(result.pkg.bin).at(0) : result.pkg.name; |
| |
| return result; |
| }; |
| |
| export { meow as default }; |