Design system.
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

52 рядки
1.2 KiB

  1. #!/usr/bin/env node
  2. import { hideBin } from 'yargs/helpers';
  3. import yargs from 'yargs';
  4. const main = async (args: string[]) => {
  5. const COMMANDS = {
  6. serve: await import('../commands/serve'),
  7. generate: await import('../commands/generate'),
  8. };
  9. const yargsBuilder = Object.entries(COMMANDS).reduce(
  10. (theYargs, [name, command]) => theYargs.command(
  11. name,
  12. command.description ?? '',
  13. command.builder ?? ((commandYargs) => commandYargs),
  14. ),
  15. yargs
  16. .scriptName('amanuensis'),
  17. );
  18. const { _: commandNamesRaw, ...etcArgs } = await yargsBuilder.parse(args);
  19. const [commandName, ...subcommands] = commandNamesRaw as [keyof typeof COMMANDS, ...string[]];
  20. if (typeof commandName === 'undefined') {
  21. yargsBuilder.showHelp();
  22. return -1;
  23. }
  24. const { [commandName]: commandDef } = COMMANDS;
  25. if (typeof commandDef === 'undefined') {
  26. process.stderr.write(`Unknown command: ${commandName}\n`);
  27. yargsBuilder.showHelp();
  28. return -1;
  29. }
  30. const { default: handler } = commandDef;
  31. return handler({
  32. ...etcArgs,
  33. subcommands,
  34. });
  35. };
  36. main(hideBin(process.argv))
  37. .then((code = 0) => {
  38. // noop
  39. process.exit(code);
  40. })
  41. .catch(() => {
  42. process.exit(-1);
  43. });