@lodestar/flare
Version:
Beacon chain debugging tool
54 lines (45 loc) • 1.68 kB
text/typescript
// Must not use `* as yargs`, see https://github.com/yargs/yargs/issues/1131
import yargs, {Argv} from "yargs";
import {hideBin} from "yargs/helpers";
import {registerCommandToYargs} from "@lodestar/utils";
import {cmds} from "./cmds/index.js";
const topBanner = `Beacon chain multi-purpose and debugging tool.
Flare is a sudden brief burst of bright flame or light.
In the wrong hands, can lead people astray.
Use with care.
* by ChainSafe Systems, 2018-${new Date().getFullYear()}`;
const bottomBanner = `
✍️ Give feedback and report issues on GitHub:
* https://github.com/ChainSafe/lodestar`;
export const yarg = yargs((hideBin as (args: string[]) => string[])(process.argv));
/**
* Common factory for running the CLI and running integration tests
* The CLI must actually be executed in a different script
*/
export function getCli(): Argv {
const lodestar = yarg
.env("FLARE")
.parserConfiguration({
// As of yargs v16.1.0 dot-notation breaks strictOptions()
// Manually processing options is typesafe tho more verbose
"dot-notation": false,
})
// blank scriptName so that help text doesn't display the cli name before each command
.scriptName("")
.demandCommand(1)
// Control show help behaviour below on .fail()
.showHelpOnFail(false)
.usage(topBanner)
.epilogue(bottomBanner)
.version(topBanner)
.alias("h", "help")
.alias("v", "version")
.recommendCommands();
// yargs.command and all ./cmds
for (const cmd of cmds) {
registerCommandToYargs(lodestar, cmd);
}
// throw an error if we see an unrecognized cmd
lodestar.recommendCommands().strict();
return lodestar;
}