diff --git a/src/factory.ts b/src/factory.ts index 04ce03b3..b1726d48 100644 --- a/src/factory.ts +++ b/src/factory.ts @@ -571,7 +571,8 @@ export function defineCommand (config: CommandConfig): O const { simplifyZodIssues, formatIssuesText } = await import('./lib/zod-error.js') const issues = simplifyZodIssues(result.error.issues) if (jsonFormat === true) { - process.stderr.write(JSON.stringify({ + const writeErr = cmd.configureOutput().writeErr ?? ((s: string) => process.stderr.write(s)) + writeErr(JSON.stringify({ error: { code: 'input_validation_failed', message: `Input validation failed with ${issues.length} issue(s)`, diff --git a/test/factory.test.ts b/test/factory.test.ts index e7100144..6e433355 100644 --- a/test/factory.test.ts +++ b/test/factory.test.ts @@ -1705,19 +1705,12 @@ describe('defineCommand', () => { prog.exitOverride() cmd.exitOverride() let out = '' - const origOut = process.stdout.write.bind(process.stdout) - const origErr = process.stderr.write.bind(process.stderr) - process.stdout.write = (chunk: unknown) => { out += String(chunk); return true } - process.stderr.write = (chunk: unknown) => { out += String(chunk); return true } prog.configureOutput({ writeOut: (s) => { out += s }, writeErr: (s) => { out += s } }) cmd.configureOutput({ writeOut: (s) => { out += s }, writeErr: (s) => { out += s } }) try { await prog.parseAsync(['--json', cmd.name(), ...argv], { from: 'user' }) } catch { // exitOverride throws on cmd.error(); that's expected - } finally { - process.stdout.write = origOut - process.stderr.write = origErr } let parsed: unknown = null try { parsed = JSON.parse(out) } catch { /* not JSON - test will fail on assertion */ }