@oppo-minigame/cli
Version:
Command line interface for rapid OPPO minigame development
1 lines • 3.23 kB
JavaScript
const path=require("path"),fs=require("fs-extra"),os=require("os"),{shellExecSilentlyAsync:shellExecSilentlyAsync,packSpinner:packSpinner,copyDirRecursivelyAsync:copyDirRecursivelyAsync}=require("../utils"),TPL_PATH=path.resolve(__dirname,"..","..","tpl"),ICON_KEY="Icon",ICON_PATH=path.join(TPL_PATH,"logo.ico"),CMD_PREFIX='cmd.exe /s /k pushd "%V" & chcp 65001 >nul',PAUSE_EXIT_COMMAND="pause & exit",DIR_SHELL_REG_PATH="HKEY_CLASSES_ROOT\\Directory\\shell",DIR_BACKGROUND_SHELL_REG_PATH="HKEY_CLASSES_ROOT\\Directory\\Background\\shell",PACK_KEY="OppoQuickgamePack",WX_TRANSFER_KEY="OppoQuickgameTransfer",MAC_USER_SERVICES_PATH=`${path.join(os.homedir(),"Library/Services")}`,MAC_PACK_WORKFLOW_NAME="微信转 OPPO 小游戏.workflow",MAC_WX_TRANSFER_WORKFLOW_NAME="打包 OPPO 小游戏.workflow";async function register(){const e=process.platform;"win32"===e?await registerWin():"darwin"===e?await registerMac():console.warn(`当前平台 "${e}" 不支持快捷打包指令`)}async function registerWin(){await regContextMenuItem(PACK_KEY,"打包 OPPO 小游戏",`${CMD_PREFIX} & echo ### 开始打包 ### & quickgame pack --auto-env --auto-install & pause & exit`,"注册打包命令");await regContextMenuItem(WX_TRANSFER_KEY,"微信转 OPPO 小游戏",`${CMD_PREFIX} & quickgame transfer & pause & exit`,"注册微信转化命令")}async function registerMac(){const e="注册快捷打包指令",n=packSpinner(e);try{await copyDirRecursivelyAsync(path.join(TPL_PATH,"tools/mac/workflows"),MAC_USER_SERVICES_PATH),n.succeed()}catch(t){n.fail(e,t)}}async function unregister(){const e=process.platform;"win32"===e?await unregisterWin():"darwin"===e?await unregisterMac():console.warn(`当前平台 "${e}" 不支持快捷打包指令`)}async function unregisterWin(){await unregContextMenuItem(PACK_KEY,"注销打包命令"),await unregContextMenuItem(WX_TRANSFER_KEY,"注销微信转化命令")}async function unregisterMac(){const e="注销快捷打包指令",n=packSpinner(e);try{await fs.remove(path.join(MAC_USER_SERVICES_PATH,MAC_PACK_WORKFLOW_NAME)),await fs.remove(path.join(MAC_USER_SERVICES_PATH,"打包 OPPO 小游戏.workflow")),n.succeed()}catch(t){n.fail(e,t)}}async function regDefaultValue(e,n){try{return await shellExecSilentlyAsync(`reg add ${e} /ve /d "${n}" /f`),!0}catch(e){return!1}}async function regValue(e,n,t){try{return await shellExecSilentlyAsync(`reg add ${e} /v "${n}" /d "${t}" /f`),!0}catch(e){return!1}}async function unregKey(e){try{return await shellExecSilentlyAsync(`reg delete ${e} /f`),!0}catch(e){return!1}}async function regContextMenuItem(e,n,t,r){async function a(e){if(await regDefaultValue(e,n)){if(await regValue(e,"Icon",ICON_PATH)){const n=`${e}\\command`;return!!await regDefaultValue(n,t)||await unregKey(n)}return await unregKey(e)}return await unregKey(e)}const i=packSpinner(r);return await a(`${DIR_SHELL_REG_PATH}\\${e}`)&&await a(`${DIR_BACKGROUND_SHELL_REG_PATH}\\${e}`)?(i.succeed(),!0):(i.fail(),!1)}async function unregContextMenuItem(e,n){const t=packSpinner(n);return await unregKey(`${DIR_SHELL_REG_PATH}\\${e}`)&&await unregKey(`${DIR_BACKGROUND_SHELL_REG_PATH}\\${e}`)?(t.succeed(),!0):(t.fail(),!1)}module.exports={register:register,unregister:unregister};