From c2a352409e5cfe3540dcf2f64a797aba8fb0ded7 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 2 May 2026 07:42:33 -0700 Subject: [PATCH] fix(tui): encode empty json rows consistently --- tui/tui.go | 3 +++ tui/tui_test.go | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/tui/tui.go b/tui/tui.go index 562e11b..bcb955f 100644 --- a/tui/tui.go +++ b/tui/tui.go @@ -77,6 +77,9 @@ func Browse(ctx context.Context, opts BrowseOptions) error { opts.Stdout = os.Stdout } if opts.JSON { + if opts.Rows == nil { + opts.Rows = []Row{} + } enc := json.NewEncoder(opts.Stdout) enc.SetIndent("", " ") return enc.Encode(opts.Rows) diff --git a/tui/tui_test.go b/tui/tui_test.go index 49fbbed..ff01d41 100644 --- a/tui/tui_test.go +++ b/tui/tui_test.go @@ -35,6 +35,16 @@ func TestBrowseJSONUsesUniversalRows(t *testing.T) { } } +func TestBrowseJSONEncodesNilRowsAsEmptyArray(t *testing.T) { + var out bytes.Buffer + if err := Browse(context.Background(), BrowseOptions{AppName: "discrawl", JSON: true, Stdout: &out}); err != nil { + t.Fatalf("Browse json: %v", err) + } + if strings.TrimSpace(out.String()) != "[]" { + t.Fatalf("json = %q, want []", out.String()) + } +} + func TestRowItemUsesSharedArchiveShape(t *testing.T) { item := Row{ Source: "discord",