diff options
| author | Christian Cleberg <[email protected]> | 2026-04-21 22:54:40 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-21 22:54:40 -0500 |
| commit | e73d58ee5dd43eaeaaa717f7781cc22256df30f0 (patch) | |
| tree | 2eb84058b37f4edfb6cf6ad7205c08a2af374938 /DomainDigCLI.swift | |
| parent | 22ecca12b4fe0e0850401754c674632f322d919d (diff) | |
| download | domain-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.swift | 39 |
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) + } + } +} |
