#!/usr/bin/env node /** * 共享 stdin 读取模块 — 供 hooks 使用 * 用法: * const { readStdin } = require('../scripts/hook-stdin.js'); * readStdin(MAX_SIZE).then(input => { ... }).catch(() => process.exit(0)); */ 'use strict'; /** * 异步读取 stdin 并解析 JSON * @param {number} maxSize - 最大允许大小 (字节) * @returns {Promise} 解析后的 JSON 对象 */ function readStdin(maxSize = 512 * 1024) { return new Promise((resolve, reject) => { let raw = ''; process.stdin.setEncoding('utf8'); process.stdin.on('data', (chunk) => { raw += chunk; if (raw.length > maxSize) { reject(new Error('stdin overflow: ' + raw.length + ' > ' + maxSize)); } }); process.stdin.on('end', () => { try { resolve(JSON.parse(raw)); } catch (e) { reject(e); } }); process.stdin.on('error', reject); }); } /** * 同步风格的 stdin 读取 (回调模式, 兼容现有 hooks) * @param {number} maxSize - 最大允许大小 * @param {function} callback - (error, input) => void */ function readStdinSync(maxSize, callback) { readStdin(maxSize).then( input => callback(null, input), err => callback(err, null) ); } module.exports = { readStdin, readStdinSync };