#!/usr/bin/env bun /** * Basic single-command CLI. * * Demonstrates: typed positional args, typed flags, aliases, and default values. * * Usage: * npx tsx examples/basic.ts Alice * npx tsx examples/basic.ts Alice --loud --times 3 * npx tsx examples/basic.ts Alice -l -t 3 * npx tsx examples/basic.ts --help */ import { arg, cli, command, flag } from '@kjanat/dreamcli'; const greet = command('greet') .description('Greet someone') .example(({ name }) => `${name} greet Alice`, 'Greet Alice once') .example(({ name }) => `${name} greet Alice --loud --times 3`, 'Shout the greeting three times') .arg('name', arg.string().describe('Who to greet')) .flag('loud', flag.boolean().alias('l').describe('Shout the greeting')) .flag('times', flag.number().default(1).alias('t').describe('Repeat count')) .action(({ args, flags, out }) => { // args.name: string — required positional // flags.loud: boolean — defaults to false (all booleans do) // flags.times: number — defaults to 1 (never undefined) const repeatCount = Number.isFinite(flags.times) ? Math.max(0, Math.min(100, Math.floor(flags.times))) : 1; for (let i = 0; i < repeatCount; i++) { const msg = `Hello, ${args.name}!`; out.log(flags.loud ? msg.toUpperCase() : msg); } }); void cli('greet').default(greet).run();