@eeue56/baner
v1.1.0
Published
Flag parsing library in Typescript
Downloads
1,327
Readme
baner
Flag parsing library in Typescript
Part of the Hiraeth collection.
Installation
npm install --save @eeue56/banerCore functionality
The library is built on the ideas:
- A command line library might have multiple flags
- Every flag should have help text
- Arguments to the command line are either: strings, numbers, booleans, or lists of those
- Types are good, let's do more of that.
Example
const helloParser = parser(
longFlag("name", "The name to say hi to", string()),
longFlag("age", "The age of the person", number()),
longFlag("pets", "Names of your pets", variableList(string())),
longFlag("type", "Type of owner", oneOf(["human", "alien"])),
longFlag("pet-type", "Type of pets", variableList(oneOf(["cat", "dog"]))),
bothFlag("h", "help", "This help text", empty()),
);
function sayHi(
name: string,
age: number,
pets: string[],
type: "human" | "alien",
petTypes: Exclude<
ProgramValuesOf<typeof helloParser>["pet-type"],
undefined
>,
): void {
console.log(`Hi, ${name}! Congrats on being ${age} years old.`);
if (type === "alien") console.log("Welcome to earth!");
if (pets.length > 0) {
console.log(
`Wow, you had ${pets.length} pets. I bet ${pets.join(
", ",
)} were good pets to have`,
);
}
for (const petType of petTypes) {
console.log("And it was a....", petType);
}
}
function showHelp(program: ProgramOf<typeof helloParser>): void {
console.log("Provide a name via --name and age via --age");
console.log(help(helloParser));
console.log("Supported flags:", program.flags);
}
const program = parse(helloParser, process.argv);
if (program.flags["help"].isPresent) {
showHelp(program);
} else {
const errors = allErrors(program);
const missing = allMissing(program, ["help"]);
const values = allValues(program);
if (errors.length > 0) {
console.log("Errors:");
console.log(errors.join("\n"));
} else if (missing.length > 0) {
console.log("Missing flags:");
console.log(missing.join("\n"));
} else {
sayHi(
values.name!,
values.age!,
values.pets!,
values.type!,
values["pet-type"]!,
);
}
}Name
Baner means "flag" in Welsh. In English, you'd pronounce it as "ban-eh-eruh".
