diff --git a/node/opendataloader-pdf/src/index.ts b/node/opendataloader-pdf/src/index.ts index 7f68ae36b..db61fb606 100644 --- a/node/opendataloader-pdf/src/index.ts +++ b/node/opendataloader-pdf/src/index.ts @@ -37,13 +37,21 @@ function executeJar(args: string[], executionOptions: JarExecutionOptions = {}): let stdout = ''; let stderr = ''; + let streamedStdoutTail = ''; + const MAX_STDOUT_TAIL = 64 * 1024; javaProcess.stdout.on('data', (data) => { const chunk = data.toString(); if (streamOutput) { process.stdout.write(chunk); + streamedStdoutTail += chunk; + if (streamedStdoutTail.length > MAX_STDOUT_TAIL) { + streamedStdoutTail = streamedStdoutTail.slice(-MAX_STDOUT_TAIL); + } + } else { + // Only accumulate when not streaming to avoid double-write by the caller + stdout += chunk; } - stdout += chunk; }); javaProcess.stderr.on('data', (data) => { @@ -56,9 +64,11 @@ function executeJar(args: string[], executionOptions: JarExecutionOptions = {}): javaProcess.on('close', (code) => { if (code === 0) { - resolve(stdout); + // When streamOutput=true, content was already written to process.stdout in real-time. + // Return empty string to prevent callers from double-writing the same output. + resolve(streamOutput ? '' : stdout); } else { - const errorOutput = stderr || stdout; + const errorOutput = stderr || (streamOutput ? streamedStdoutTail : stdout); const error = new Error( `The opendataloader-pdf CLI exited with code ${code}.\n\n${errorOutput}`, );