///|
fn main raise {
let args = @sys.get_cli_args()
let mut input : String? = None
let mut json_mode = false
let mut enhanced = false
let mut sarif = false
let mut workspace = false
let mut annotations = false
let mut i = 1
while i < args.length() {
let arg = args[i]
if arg == "-h" || arg == "--help" {
print_usage()
return
} else if arg == "--json" {
json_mode = true
i = i + 1
} else if arg == "--enhanced" {
enhanced = true
i = i + 1
} else if arg == "--sarif" {
sarif = true
i = i + 1
} else if arg == "--annotations" {
annotations = true
i = i + 1
} else if arg == "--workspace" || arg == "-w" {
workspace = true
i = i + 1
} else if !arg.has_prefix("-") {
input = Some(arg)
i = i + 1
} else {
println("moonmodguard: unknown option: " + arg)
print_usage()
abort("")
}
}
if workspace {
let root = match input {
Some(dir) => dir
None => "."
}
let summary = @guard.audit_workspace(root)
println(@guard.render_batch_summary(summary))
return
}
let path = match input {
Some(p) => p
None => {
println(
"moonmodguard: provide a moon.mod file path or --workspace for batch audit",
)
print_usage()
abort("")
}
}
let manifest = match @guard.parse_mod(@fs.read_file_to_string(path)) {
Ok(m) => m
Err(err) => {
println("moonmodguard: parse error: " + @guard.format_error(err))
abort("")
}
}
let pkg_text = ""
let report = match @guard.parse_pkg(pkg_text) {
Ok(pkg) =>
if enhanced {
let project = @guard.project_from(manifest, [pkg])
@guard.evaluate_enhanced(project, @guard.EnhancedPolicy::default())
} else {
@guard.full_audit(manifest, [pkg])
}
Err(_) => @guard.full_audit(manifest, [])
}
if annotations {
for d in report.diagnostics {
let pd = @guard.positioned_diagnostic(d.code, d.message, path, 1)
println(@guard.render_annotation(pd))
}
} else if sarif {
println(@guard.render_sarif(report, "MoonModGuard"))
} else if json_mode {
println(@guard.render_json(report))
} else {
println(@guard.render_full_report(report))
}
}
///|
fn print_usage() -> Unit {
println("Usage: moonmodguard [options] []")
println(" moonmodguard --workspace []")
println("")
println("Options:")
println(" --json Output as JSON (default: Markdown)")
println(" --sarif Output as SARIF v2.1.0")
println(" --annotations Output as GitHub Actions workflow commands")
println(" --enhanced Use EnhancedPolicy with trust grading")
println(" --workspace Recursively audit all packages under a directory")
println(" -w Short for --workspace")
println(" -h, --help Show this help")
}