From ef9155fee13cf8a65282e1681ac2761edcb1fcc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Fri, 30 Oct 2026 18:29:50 +0000 Subject: [PATCH] fix(cli): say stdin was empty when a JSON flag reads - and nothing is piped (#6852) --- packages/cli/src/utils/jsonFlag.test.ts | 6 ++++++ packages/cli/src/utils/jsonFlag.ts | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/utils/jsonFlag.test.ts b/packages/cli/src/utils/jsonFlag.test.ts index 60bed89fdf..48ef789e36 100644 --- a/packages/cli/src/utils/jsonFlag.test.ts +++ b/packages/cli/src/utils/jsonFlag.test.ts @@ -35,6 +35,12 @@ describe("readJsonFlag", () => { expect(() => readJsonFlag("--grading", "C:\\clips\\grade.json", io)).toThrow(/no such file$/); }); + it("says stdin was empty instead of a JSON parse error", () => { + expect(() => readJsonFlag("--grading", "-", { ...io, readStdin: () => "\n" })).toThrow( + /Could not read --grading: stdin: nothing was piped in/, + ); + }); + it("names the flag and path when the file cannot be read", () => { expect(() => readJsonFlag("--grading", "missing.json", io)).toThrow( /Could not read --grading: missing\.json: ENOENT/, diff --git a/packages/cli/src/utils/jsonFlag.ts b/packages/cli/src/utils/jsonFlag.ts index 7f3d2db58f..1582cc7914 100644 --- a/packages/cli/src/utils/jsonFlag.ts +++ b/packages/cli/src/utils/jsonFlag.ts @@ -51,7 +51,10 @@ export function readJsonFlagText(value: string, partialIo: Partial = if (trimmed.startsWith("{") || trimmed.startsWith("[") || isJsonScalar(trimmed)) return value; const source = trimmed === "-" ? "stdin" : value; try { - return trimmed === "-" ? io.readStdin() : io.readFile(value); + if (trimmed !== "-") return io.readFile(value); + const piped = io.readStdin(); + if (!piped.trim()) throw new Error("nothing was piped in"); + return piped; } catch (error: unknown) { throw new JsonFlagReadError(source, errorText(error)); }