UNPKG

@oppo-minigame/cli

Version:

Command line interface for rapid OPPO minigame development

1 lines 1.64 kB
const path=require("path"),which=require("which"),{colorconsole:colorconsole}=require("../utils"),{execADBCommand:execADBCommand,ADB_BINARY_FILE:ADB_BINARY_FILE}=require("adb-driver"),{exec:exec}=require("child_process"),os=require("os"),fs=require("fs-extra");let logsTempFileTxtPath="";const TEMP_LOG_DIR="oppo-minigame-logs";function execADBLogsCommand(e){let t=e;if(!which.sync("adb",{nothrow:!0})){let o=e.split(" ");const s=ADB_BINARY_FILE[process.platform];o[0]=`"${s}"`,t=o.join(" ")}return new Promise((e,o)=>{e(exec(t,{stdio:"inherit"},(e,t,s)=>{e&&o(e)}))}).catch(e=>e)}function adbStatusIdentify(e){return/List\s+of\s+devices\s+attached\s*(\r)*(\n)*\S+\s*(\t)*device/.test(e)}async function getDevices(){return new Promise(async(e,t)=>{const o=await execADBCommand("adb devices");o instanceof Error&&(console.error("fail to execute adb devices"),e(!1)),e(adbStatusIdentify(o))})}async function log(e){const t=writeTempLogs(),o=o=>{e?e(o):colorconsole.log(o),t.write(o,"utf8")};if(!await getDevices())return o("### device is disconnected ###");await execADBCommand("adb logcat -c").catch(()=>{o("清空日志缓存报错,可忽略")});const s=await execADBLogsCommand("adb logcat -s jswrapper").catch(e=>{o(e)});s.stdout.on("data",e=>{o(e)}),s.stdout.on("close",()=>{o("### child process closed ####")})}function writeTempLogs(){const e=os.tmpdir(),t=path.join(e,`./${TEMP_LOG_DIR}`);fs.ensureDirSync(t),fs.emptyDirSync(t),logsTempFileTxtPath=path.join(t,+new Date+".txt");return fs.createWriteStream(logsTempFileTxtPath)}function getTempLogDir(){return logsTempFileTxtPath}module.exports={log:log,getTempLogDir:getTempLogDir};