/**
* Buffers string input with a timeout for dry-run scenarios.
*
* @param {number} timeoutMs The timeout in milliseconds.
* @returns {Promise<string>} A promise that resolves with the buffered input string
* or rejects with an error if the timeout is exceeded.
*/
async function bufferedInput(timeoutMs) {
let buffer = "";
let startTime = Date.now();
return new Promise((resolve, reject) => {
const inputHandler = (e) => {
if (e.length > 0) {
buffer += e;
}
};
// Capture input events
process.stdin.setEncoding('utf8');
process.stdin.on('data', inputHandler);
process.stdin.resume();
process.stdin.on('timeout', () => {
process.stdin.off('data', inputHandler);
process.stdin.off('timeout');
if (buffer.length > 0) {
resolve(buffer);
} else {
reject(new Error("Timeout: No input received"));
}
});
process.stdin.on('close', () => {
process.stdin.off('data', inputHandler);
process.stdin.off('timeout');
resolve(buffer);
});
// Timeout implementation
setTimeout(() => {
process.stdin.off('data', inputHandler);
process.stdin.off('timeout');
resolve(buffer);
}, timeoutMs);
});
}
Add your comment