https://github.com/aretrosen/tabman
A tab completion and argument parsing library for Javascript and Typescript CLI programs.
https://github.com/aretrosen/tabman
argument-parser cli cli-app completion completions node node-js node-module nodejs tab-completion typescript
Last synced: 8 months ago
JSON representation
A tab completion and argument parsing library for Javascript and Typescript CLI programs.
- Host: GitHub
- URL: https://github.com/aretrosen/tabman
- Owner: aretrosen
- License: bsd-3-clause
- Created: 2024-02-24T21:19:18.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-04-22T02:55:38.000Z (over 1 year ago)
- Last Synced: 2025-02-10T13:04:47.956Z (8 months ago)
- Topics: argument-parser, cli, cli-app, completion, completions, node, node-js, node-module, nodejs, tab-completion, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/@kyvernetes/tabman
- Size: 146 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Tabman
**Tabman** is a library for JavaScript and TypeScript command line interface (CLI) programs that provides functionality for tab completion and argument parsing.
## Usage
To use `Tabman`, first import `Completions` and `argFunction`, and then define your desired completions as an object. For example:
```typescript
const myCompletions = {
"--help": { __desc: "Some kinda help" },
add: {
__desc: "Some kinda add",
"--dev": {
__desc: "Some kinda dev",
},
"--prod": {
__desc: "Some kinda prod",
},
"--opt": {
__desc: "Some kinda optional",
},
},
cache: ["ls", "dir", "clean"],
global: {
add: {},
cache: {},
},
};myCompletions.global.add = myCompletions.add;
myCompletions.global.cache = myCompletions.cache;
```Next, specify the type of each argument or option. While there are some automated methods for detecting certain types, it is generally better to explicitly declare them for clarity and consistency.
```typescript
const typer: Record = {
global: "boolean",
add: "boolean",
cache: "boolean",
};
```Then, create an instance of the `Completion` class, passing it the completions object, the type definitions, and an optional map of aliases. If you don't have any aliases, you can simply pass an empty `Map()`.
```typescript
const someCompletions = new Completion(myCompletions, typer, new Map());
```Finally, call the `nextCompletions` method on the `Completion` instance whenever you want to generate a list of possible completions. You must provide the name of the current shell and any additional completions you want to include.
```typescript
const compgen = someCompletions.nextCompletions("zsh");
```The `nextCompletions` method reads the value of the `COMP_LINE` environment variable and generates completions based on the current state of the command line input. You can now use any logging function you want, for simplicity use `console.log`.
## Example Usage:
See a simple example [here](/example/tabman-usage/).
## To-dos:
- [ ] Completions for `bash` and `pwsh`, maybe `nushell` too.
- [ ] An inbuilt logging function.
- [ ] A better algorithm to automatically detect argument type.## Why "Tabman"?
No deep meaning here - just some letter-swapping fun: tab → bat → Batman = **Tabman**.
## Contribution Guidelines:
Thank you for considering contributing to **Tabman**! I welcome contributions from anyone who wants to improve the project. You are also welcome to contribute by writing new features and reporting any issues you may find.
If you discover a security vulnerability, please do not disclose it publicly. Instead, please email the details to me privately at ``. Your help in keeping `Tabman` secure is greatly appreciated!