From e73d58ee5dd43eaeaaa717f7781cc22256df30f0 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Tue, 21 Apr 2026 22:54:40 -0500 Subject: 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 --- DomainDigCLI.swift | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 DomainDigCLI.swift (limited to 'DomainDigCLI.swift') 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 [--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 [--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) + } + } +} -- cgit v1.2.3