@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
1 lines • 3.54 kB
Source Map (JSON)
{"version":3,"sources":["../../../packages/tools/wac-cli/src/angular15/utils/command-runner.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,EAAE,UAAU,UAAQ,EAAE,YAAY,MAAY,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqE9I","file":"command-runner.d.ts","sourcesContent":["import { Logger } from \"./logger\";\r\nimport { exec } from 'child_process';\r\nimport fs from 'fs';\r\n\r\n/**\r\n * the run command function.\r\n * @param cmd the command to run.\r\n * @param debug the debug flag.\r\n * @param forceDebug the force debug flag.\r\n * @param finalizeInfo the finalize info.\r\n * @param writeToFileName the write to file name.\r\n * @returns\r\n */\r\nexport function runCommand(cmd: string, debug = false, forceDebug = false, finalizeInfo = undefined, writeToFileName?: string): Promise<string> {\r\n const loggerPrefix = `runCommand - ${cmd}`;\r\n const loggerErrorPrefix = `error - runCommand - ${cmd}`;\r\n let logString = '';\r\n\r\n console.log(`Running ${cmd}`);\r\n return new Promise((resolve) => {\r\n const child = exec(cmd, (error, stdout, stderr) => {\r\n if (error) {\r\n Logger.error(` exec error: ${error}`);\r\n resolve(logString);\r\n return;\r\n }\r\n\r\n stdout.split('\\n').filter(line => line.trimEnd()).forEach(\r\n line => {\r\n logString += `${replaceANSIEscape(line)}\\n`;\r\n Logger.log(line, loggerPrefix);\r\n }\r\n );\r\n stderr.split('\\n').filter(line => line.trimEnd()).forEach(\r\n line => {\r\n logString += `${replaceANSIEscape(line)}\\n`;\r\n Logger.error(line, loggerErrorPrefix)\r\n }\r\n );\r\n\r\n resolve(logString);\r\n });\r\n\r\n if (debug || forceDebug) {\r\n child.stdout.on('data', (data) => {\r\n data.split('\\n').filter(line => line.trimEnd()).forEach(\r\n line => {\r\n logString += `${replaceANSIEscape(line)}\\n`;\r\n Logger.log(` ${line}`, loggerPrefix)\r\n }\r\n );\r\n });\r\n }\r\n\r\n child.stderr.on('data', (data) => {\r\n data.split('\\n').filter(line => line.trimEnd()).forEach(\r\n line => {\r\n logString += ` ${replaceANSIEscape(line)}\\n`;\r\n Logger.error(` ${line}`, loggerErrorPrefix)\r\n }\r\n );\r\n });\r\n\r\n child.on('close', (code) => {\r\n logString += `exitCode: ${code}\\n`;\r\n Logger.log(`exitCode: ${code}`);\r\n if (code !== 0 && finalizeInfo) {\r\n logString += `${finalizeInfo}\\n`;\r\n Logger.log(finalizeInfo);\r\n }\r\n\r\n if (writeToFileName) {\r\n fs.writeFile(writeToFileName, logString, (writeErr) => {\r\n if (writeErr) {\r\n Logger.error(`Error writing log to file: ${writeErr}`);\r\n } else {\r\n console.log(`Logs saved to log'`);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction replaceANSIEscape(line: string) {\r\n return line.replace(/\\x1B\\[[0-9;]*[JKmsu]/g, '');\r\n}\r\n"]}