UNPKG

@eeue56/baner

Version:

Flag parsing library in Typescript

98 lines (78 loc) 2.52 kB
# baner Flag parsing library in Typescript Part of the [Hiraeth](https://github.com/eeue56/hiraeth) collection. # Installation ```bash npm install --save @eeue56/baner ``` # Core 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. [API docs](docs/src/baner.md) # Example ```typescript 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".