#!/usr/bin/env node import { hideBin } from 'yargs/helpers'; import yargs from 'yargs'; const main = async (args: string[]) => { const COMMANDS = { init: await import('./commands/init'), serve: await import('./commands/serve'), analyze: await import('./commands/analyze'), refresh: await import('./commands/refresh'), }; const yargsBuilder = Object.entries(COMMANDS).reduce( (theYargs, [name, command]) => theYargs.command( name, command.description ?? '', command.builder ?? ((commandYargs) => commandYargs), ), yargs .scriptName('amanuensis'), ); const { _: commandNamesRaw, ...etcArgs } = await yargsBuilder.parse(args); const [commandName, ...subcommands] = commandNamesRaw as [keyof typeof COMMANDS, ...string[]]; if (typeof commandName === 'undefined') { yargsBuilder.showHelp(); return -1; } const { [commandName]: commandDef } = COMMANDS; if (typeof commandDef === 'undefined') { process.stderr.write(`Unknown command: ${commandName}\n`); yargsBuilder.showHelp(); return -1; } const { default: handler } = commandDef; return handler({ ...etcArgs, subcommands, }); }; main(hideBin(process.argv)) .then((code = 0) => { // noop process.exit(code); }) .catch(() => { process.exit(-1); });