Your music, beautifully tracked. All yours. (coming soon)
teal.fm
teal-fm
atproto
1#!/usr/bin/env node
2
3import { Command } from 'commander';
4import { generate } from './commands/generate.js';
5import { watch } from './commands/watch.js';
6import { validate } from './commands/validate.js';
7import { diff } from './commands/diff.js';
8import pc from 'picocolors';
9
10const program = new Command();
11
12program
13 .name('lexicon-cli')
14 .description('Unified lexicon management for Teal')
15 .version('0.1.0');
16
17program
18 .command('generate')
19 .alias('gen')
20 .description('Generate TypeScript and Rust types from lexicons')
21 .option('--ts-only', 'Generate only TypeScript types')
22 .option('--rust-only', 'Generate only Rust types')
23 .option('--force', 'Force regeneration even if no changes detected')
24 .action(generate);
25
26program
27 .command('watch')
28 .description('Watch lexicon files and auto-regenerate types')
29 .option('--ts-only', 'Watch only TypeScript generation')
30 .option('--rust-only', 'Watch only Rust generation')
31 .action(watch);
32
33program
34 .command('validate')
35 .description('Validate generated types for consistency')
36 .action(validate);
37
38program
39 .command('diff')
40 .description('Show changes between lexicon versions')
41 .argument('[commit]', 'Git commit to compare against (default: HEAD~1)')
42 .action(diff);
43
44program.parseAsync().catch((error: unknown) => {
45 console.error(pc.red('Error:'), error instanceof Error ? error.message : String(error));
46 process.exit(1);
47});