summaryrefslogtreecommitdiff
path: root/DomainDigCLI.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-21 22:54:40 -0500
committerChristian Cleberg <[email protected]>2026-04-21 22:54:40 -0500
commite73d58ee5dd43eaeaaa717f7781cc22256df30f0 (patch)
tree2eb84058b37f4edfb6cf6ad7205c08a2af374938 /DomainDigCLI.swift
parent22ecca12b4fe0e0850401754c674632f322d919d (diff)
downloaddomain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.tar.gz
domain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.tar.bz2
domain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.zip
feat(v2.4.0): add JSON output, CLI foundation, and shared report layer
* introduce DomainReport as canonical output model * add JSON export for single and batch results * create DomainReportBuilder for reusable report construction * add CLI target using shared inspection pipeline * refactor services for UI-independent usage * ensure consistency across TXT, CSV, and JSON outputs
Diffstat (limited to 'DomainDigCLI.swift')
-rw-r--r--DomainDigCLI.swift39
1 files changed, 39 insertions, 0 deletions
diff --git a/DomainDigCLI.swift b/DomainDigCLI.swift
new file mode 100644
index 0000000..73f7028
--- /dev/null
+++ b/DomainDigCLI.swift
@@ -0,0 +1,39 @@
+import Foundation
+
+@main
+struct DomainDigCLI {
+ static func main() async {
+ let arguments = Array(CommandLine.arguments.dropFirst())
+
+ guard let command = CommandLine.arguments.first else {
+ fputs("usage: domaindig <domain> [--json]\n", stderr)
+ Foundation.exit(1)
+ }
+ _ = command
+
+ let wantsJSON = arguments.contains("--json") || arguments.contains("-j")
+ let domains = arguments.filter { !$0.hasPrefix("-") }
+
+ guard let domain = domains.first, !domain.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {
+ fputs("usage: domaindig <domain> [--json]\n", stderr)
+ Foundation.exit(1)
+ }
+
+ let inspectionService = DomainInspectionService()
+ let report = await inspectionService.inspect(domain: domain)
+
+ do {
+ let data = try DomainReportExporter.data(
+ for: report,
+ format: wantsJSON ? .json : .text
+ )
+ FileHandle.standardOutput.write(data)
+ if data.last != 0x0A {
+ FileHandle.standardOutput.write(Data([0x0A]))
+ }
+ } catch {
+ fputs("domaindig: \(error.localizedDescription)\n", stderr)
+ Foundation.exit(1)
+ }
+ }
+}