CLI command execution runtime using Wings routing system.

Architecture: Transform CLI args → Context → Router → terminal output. Same routes handle HTTP requests and CLI commands through unified abstractions.

Context Mapping:

  • CLI args → URL via ArgsToUrl transformation
  • stdin data → requestBody (Unix pipe support)
  • responseBody → stdout content
  • responseStatusCode → exit code (200-299=0, else=1)
  • COMMAND method enables route reuse

Performance: Zero overhead abstraction—direct Node.js I/O primitives. Async stdin reading supports interactive patterns without blocking.

import { Router } from '@raven-js/wings/core';
import { Terminal } from '@raven-js/wings/terminal';

const router = new Router();
router.cmd('/git/status', (ctx) => ctx.text('Clean working tree'));
router.cmd('/git/commit', async (ctx) => {
const msg = ctx.queryParams.get('message');
if (!msg) return ctx.status(400).text('Missing message');
await performCommit(msg);
ctx.text('✅ Committed');
});

await new Terminal(router).run(process.argv.slice(2));

Constructors

Accessors

Methods

Constructors

  • Create Terminal runtime with Wings router.

    Parameters

    • router: Router

      Wings router for command handling

    Returns Terminal

    Router missing or invalid (no handleRequest method)

Accessors

Methods

  • Execute CLI command through Wings router.

    Flow: CLI args → URL → Context → Router → stdout + exit code. Detects stdin pipe data, routes through middleware, maps HTTP status to exit codes.

    Exit Codes: 200-299 → 0 (success), others → 1 (error). Stdin: Reads piped data when !isTTY, null otherwise. Error Handling: Unexpected errors → stderr + exit(1).

    Parameters

    • args: string[]

      Command line arguments

    Returns Promise<void>

    Resolves after execution, process.exit() called