Your music, beautifully tracked. All yours. (coming soon) teal.fm
teal-fm atproto
at main 47 lines 1.4 kB view raw
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});