397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
23 lines
700 B
JavaScript
23 lines
700 B
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* UTF-8 safe stdin reader for hooks.
|
|
* Fixes Windows Node stdin quirk: default `for await (chunk of stdin)` interprets
|
|
* chunks as Buffer, and `input += chunk` calls .toString() which uses utf-8 BUT
|
|
* fails on chunk boundaries that fall inside multi-byte sequences (e.g. cyrillic
|
|
* 2-byte chars split across chunks).
|
|
*
|
|
* Uses StringDecoder to handle multi-byte chars across chunks correctly.
|
|
*/
|
|
|
|
import { StringDecoder } from 'string_decoder';
|
|
|
|
export async function readStdinAsUtf8(stdin) {
|
|
const decoder = new StringDecoder('utf-8');
|
|
let out = '';
|
|
for await (const chunk of stdin) {
|
|
out += decoder.write(chunk);
|
|
}
|
|
out += decoder.end();
|
|
return out;
|
|
}
|