use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "frontendmap")]
#[command(version)]
#[command(about = "Frontend project satellite map — index, query, and navigate your web project")]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Index {
#[arg(default_value = ".")]
project: String,
#[arg(short, long, default_value = ".frontendmap/map.json")]
output: String,
},
Query {
#[command(subcommand)]
command: QueryCommands,
},
Nav {
#[command(subcommand)]
command: NavCommands,
},
Analyze {
#[command(subcommand)]
command: AnalyzeCommands,
},
}
#[derive(Subcommand)]
pub enum QueryCommands {
Summary,
Components {
#[arg(short, long)]
name: Option<String>,
#[arg(short, long, default_value = "20")]
limit: usize,
},
Inspect {
name: String,
},
UsedBy {
name: String,
},
Routes,
Apis {
#[arg(short, long)]
component: Option<String>,
},
Stores,
Entries,
Similar {
name: String,
#[arg(short, long, default_value = "10")]
limit: usize,
},
Deps {
name: String,
#[arg(short, long, default_value = "2")]
depth: usize,
},
Impact {
name: String,
#[arg(short, long, default_value = "3")]
depth: usize,
},
Flow {
name: String,
#[arg(short, long, default_value = "2")]
depth: usize,
},
Scope {
target: String,
},
Path {
from: String,
to: String,
},
Export {
#[arg(short, long, default_value = "json")]
format: String,
#[arg(short, long)]
output: Option<String>,
},
}
#[derive(Subcommand)]
pub enum NavCommands {
Guide,
Quality,
Health,
Report {
#[arg(short, long)]
output: Option<String>,
},
Map {
#[arg(short, long)]
full: bool,
},
}
#[derive(Subcommand)]
pub enum AnalyzeCommands {
Deps {
#[arg(short, long)]
from: Option<String>,
},
Fanout {
#[arg(short, long, default_value = "20")]
limit: usize,
},
Tests {
name: Option<String>,
},
}