CLI-oriented router plus prompt and console helpers.
import { Terminal, control, input } from '@stackpress/lib';For direct subpath imports, control and input are also available through @stackpress/lib/terminal/* because the package exports ./terminal/*.
Use Terminal when a command-line entrypoint should route commands through the same emitter and response patterns as the rest of the library. Use control and input when you only need prompting or formatted console output.
const terminal = new Terminal(process.argv.slice(2), '[app]');| Name | Type | Notes |
|---|---|---|
args |
string[] |
CLI args after the command name. |
brand |
string |
Prefix used by control(). |
command |
string |
First CLI token. |
control |
frozen controls object | Output and prompt helpers. |
data |
Record<string, any> |
Parsed CLI args produced by objectFromArgs(). |
| Method | Returns | Notes |
|---|---|---|
expect(flags, defaults) |
typed value | Returns the first truthy parsed flag value. |
run() |
Promise<Partial<StatusResponse<T>>> |
Resolves the current command through the inherited router. |
Returns a small console-helper object with:
branderror(message, variables?)info(message, variables?)input(question, answer?)output(message, variables?, color?)success(message, variables?)system(message, variables?)warning(message, variables?)
The formatting helpers replace %s placeholders in order and prepend the brand when present.
Prompt helper for interactive terminal input.
Important config fields from TerminalInputConfig:
defaultmessagepatternpatternErrorprefillrequiredthemetransformervalidate
Named exports also include:
createAbortError(message?)formatValue(config, value, isFinal)renderPrompt(config, state)clearRender(output, lines)validateInput(config, value)
import { Terminal } from '@stackpress/lib';
const terminal = new Terminal(['user:list', '--page', '2'], '[users]');
terminal.route('ANY', 'user:list', async (req, res) => {
const page = req.data('page');
res.results({ page });
});
const result = await terminal.run<{ page: number }>();