morph_cli/core/presets/
mod.rs1use serde::Serialize;
2
3#[derive(Debug, Clone, Serialize)]
4pub struct Preset {
5 pub name: &'static str,
6 pub description: &'static str,
7 pub recipes: &'static [&'static str],
8 pub recommended_flags: PresetFlags,
9 pub risk_level: RiskLevel,
10}
11
12#[derive(Debug, Clone, Serialize)]
13pub struct PresetFlags {
14 pub review: bool,
15 pub allow_risky: bool,
16 pub strict: bool,
17}
18
19#[derive(Debug, Clone, Copy, Serialize)]
20pub enum RiskLevel {
21 Low,
22 Medium,
23 High,
24}
25
26pub fn all_presets() -> Vec<Preset> {
27 vec![
28 Preset {
29 name: "modern-node",
30 description: "Migrate Node.js projects to modern standards (ESM + clean imports)",
31 recipes: &["commonjs-to-esm"],
32 recommended_flags: PresetFlags {
33 review: true,
34 allow_risky: false,
35 strict: true,
36 },
37 risk_level: RiskLevel::Medium,
38 },
39 Preset {
40 name: "typescript-adoption",
41 description: "Convert JavaScript projects to TypeScript with basic type safety",
42 recipes: &["js-to-ts", "commonjs-to-esm"],
43 recommended_flags: PresetFlags {
44 review: true,
45 allow_risky: true,
46 strict: false,
47 },
48 risk_level: RiskLevel::High,
49 },
50 Preset {
51 name: "react-modernization",
52 description: "Upgrade React codebase to modern patterns (Class to Hooks)",
53 recipes: &["react-class-to-hooks"],
54 recommended_flags: PresetFlags {
55 review: true,
56 allow_risky: false,
57 strict: false,
58 },
59 risk_level: RiskLevel::Medium,
60 },
61 ]
62}
63
64pub fn find_preset(name: &str) -> Option<Preset> {
65 all_presets().into_iter().find(|p| p.name == name)
66}