{"version":3,"sources":["../src/misc/execScript.ts"],"names":["execScript","script","options","opts","assignObject","path","resolve","reject","c","child_process","err","stdout","stderr","stderrError","error"],"mappings":";;;;AAwBA,eAAsBA,CAAAA,CAAWC,CAAgBC,CAAAA,CAAAA,CAA6B,CAC1E,IAAMC,CAAAA,CAAOC,CACT,CAAA,CACI,OAAQ,KACR,CAAA,GAAA,CAAKC,CAAK,CAAA,OAAA,CAAQ,QAAQ,GAAI,EAAC,CAC/B,CAAA,GAAA,CAAK,QAAQ,GACb,CAAA,QAAA,CAAU,MACV,CAAA,SAAA,CAAW,SACX,cAAgB,CAAA,OACpB,CACAH,CAAAA,CACJ,EACA,OAAAC,CAAAA,CAAK,KAAQA,CAAAA,CAAAA,CAAK,OAAS,QAAW,CAAA,CAAC,CAAG,CAAA,CAAA,CAAG,CAAC,CAEvC,CAAA,IAAI,OAAQ,CAAA,CAACG,EAASC,CAAW,GAAA,CACpC,IAAMC,CAAAA,CAAIC,EAAc,IAAKR,CAAAA,CAAAA,CAAQE,CAAM,CAAA,CAACO,EAAUC,CAAaC,CAAAA,CAAAA,GAAgB,CAE/E,GAAIA,GAAUA,CAAO,CAAA,IAAA,EAAW,GAAA,EAAA,EAAMT,EAAK,cAAmB,GAAA,QAAA,CAAA,CAC1D,GAAIA,CAAAA,CAAK,iBAAmB,OAAS,CAAA,CAEjC,IAAMU,CAAAA,CAAc,IAAI,KAAM,CAAA,gCAAgC,CAC7D,CAAA,OAACA,EAAoB,MAASD,CAAAA,CAAAA,CAC7BC,CAAoB,CAAA,MAAA,CAASF,EAC7BE,CAAoB,CAAA,aAAA,CAAgBH,CAC/BH,CAAAA,CAAAA,CAAOM,CAAW,CAC7B,CAAA,KAAA,GAAWV,CAAK,CAAA,cAAA,GAAmB,UAE/B,OAAOG,CAAAA,CAAQ,CAAE,MAAA,CAAAK,EAAQ,MAAAC,CAAAA,CAAO,CAAC,CAAA,CAKpCF,EAEMA,CAAI,CAAA,IAAA,GAAS,MACpBJ,CAAAA,CAAAA,CAAQK,CAAM,CAGZD,EAAAA,CAAAA,CAAY,MAASE,CAAAA,CAAAA,CACrBF,EAAY,MAASC,CAAAA,CAAAA,CACvBJ,CAAOG,CAAAA,CAAG,GAPVJ,CAAQK,CAAAA,CAAM,EAStB,CAAC,EAEIR,CAAK,CAAA,MAAA,GACNK,CAAE,CAAA,MAAA,EAAQ,KAAK,OAAQ,CAAA,MAAM,CAC7BA,CAAAA,CAAAA,CAAE,QAAQ,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA,CAIjCA,EAAE,EAAG,CAAA,OAAA,CAAUM,CAAiB,EAAA,CAC5BP,EAAOO,CAAK,EAChB,CAAC,EACL,CAAC,CACL","file":"chunk-YYTFQF6H.mjs","sourcesContent":["import { assignObject } from '../object/assignObject'\r\nimport path from 'node:path'\r\nimport child_process from 'node:child_process'\r\n\r\n/**\r\n * 执行脚本并返回输出结果\r\n * @param {string} script 要执行的脚本命令\r\n * @param {ExecScriptOptions} options 执行选项\r\n * @returns {Promise<string|{stdout: string, stderr: string}>} 根据选项返回stdout或包含stdout和stderr的对象\r\n */\r\nexport interface ExecScriptOptions {\r\n    silent?: boolean\r\n    env?: NodeJS.ProcessEnv\r\n    maxBuffer?: number\r\n    encoding?: string\r\n    /**\r\n     * 如何处理标准错误输出\r\n     * - 'ignore': 忽略stderr (默认)\r\n     * - 'throw': 当stderr有内容时抛出错误\r\n     * - 'include': 将stderr包含在返回结果中\r\n     */\r\n    stderrHandling?: 'ignore' | 'throw' | 'include'\r\n}\r\n\r\nexport async function execScript(script: string, options?: ExecScriptOptions) {\r\n    const opts = assignObject(\r\n        {\r\n            silent: false,\r\n            cwd: path.resolve(process.cwd()),\r\n            env: process.env,\r\n            encoding: 'utf8',\r\n            maxBuffer: 30 * 1024 * 1024,\r\n            stderrHandling: 'throw', // 默认忽略stderr\r\n        },\r\n        options,\r\n    )\r\n    opts.stdio = opts.silent ? 'ignore' : [0, 1, 2]\r\n\r\n    return new Promise((resolve, reject) => {\r\n        const c = child_process.exec(script, opts, (err: any, stdout: any, stderr: any) => {\r\n            // 检查是否有stderr内容且需要特殊处理\r\n            if (stderr && stderr.trim() !== '' && opts.stderrHandling !== 'ignore') {\r\n                if (opts.stderrHandling === 'throw') {\r\n                    // 创建包含stderr的错误对象\r\n                    const stderrError = new Error('Command generated error output')\r\n                    ;(stderrError as any).stderr = stderr\r\n                    ;(stderrError as any).stdout = stdout\r\n                    ;(stderrError as any).originalError = err\r\n                    return reject(stderrError)\r\n                } else if (opts.stderrHandling === 'include') {\r\n                    // 返回包含stdout和stderr的对象\r\n                    return resolve({ stdout, stderr })\r\n                }\r\n            }\r\n\r\n            // 常规错误处理\r\n            if (!err) {\r\n                resolve(stdout)\r\n            } else if (err.code === undefined) {\r\n                resolve(stdout)\r\n            } else {\r\n                // 增强错误对象\r\n                ;(err as any).stderr = stderr\r\n                ;(err as any).stdout = stdout\r\n                reject(err)\r\n            }\r\n        })\r\n\r\n        if (!opts.silent) {\r\n            c.stdout?.pipe(process.stdout)\r\n            c.stderr?.pipe(process.stderr)\r\n        }\r\n\r\n        // 添加错误事件处理\r\n        c.on('error', (error: Error) => {\r\n            reject(error)\r\n        })\r\n    })\r\n}\r\n"]}