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