const Path=require("path"),Fs=require("fire-fs"),CfgUtil=Editor.require("packages://hot-update-tools/core/CfgUtil.js"),Util=Editor.require("packages://hot-update-tools/core/Util.js"),OutPut=Editor.require("packages://hot-update-tools/core/OutPut.js"),GoogleAnalytics=Editor.require("packages://hot-update-tools/core/GoogleAnalytics.js"),Electron=require("electron");Vue.component("manifest-gen",{template:Fs.readFileSync(Editor.url("packages://hot-update-tools/panel/manifest-gen.html"),"utf-8"),mixins:[Editor.require("packages://hot-update-tools/panel/mixin.js")],data:()=>({version:"",serverRootDir:"",remoteServerVersion:"",hotAddressArray:[],resourceRootDir:"",genManifestDir:"",isShowUseAddrBtn:!1,isShowDelAddrBtn:!1}),computed:{isValidResDir(){return!(!this.resourceRootDir||!Fs.existsSync(this.resourceRootDir))}},created(){this.$nextTick(()=>{let e=CfgUtil.cfgData;e&&(this.version=e.version,this.serverRootDir=e.serverRootDir,this.resourceRootDir=e.resourceRootDir,this.hotAddressArray=e.hotAddressArray||[]),this.genManifestDir=OutPut.manifestDir,this._getRemoteServerVersion(),this._initResourceBuild()})},methods:{_initResourceBuild(){let e=Editor.Project.path,t=Path.join(e,"local/builder.json");if(Fs.existsSync(t)){let s=JSON.parse(Fs.readFileSync(t,"utf-8")),i=s.buildPath,r=Path.join(e,i),o=Path.join(r,`jsb-${s.template}`);if(!Fs.existsSync(o)){let e=Path.join(r,s.platform);Fs.existsSync(e)&&(o=e)}this._checkResourceRootDir(o)}else this.log("发现没有构建项目, 使用前请先构建项目!")},_isVersionPass(e,t){if(void 0===e||null===e||void 0===t||null===t)return!1;let s=e.split("."),i=t.split("."),r=s.length>i.length?s.length:i.length;for(let e=0;eparseInt(r))return!0}return!1},_updateShowUseAddrBtn(){let e=this.$els.address.value;this.serverRootDir===e&&(this.isShowUseAddrBtn=!1)},_addHotAddress(e){let t=!0;for(let s=0;s{if(4===t.readyState&&t.status>=200&&t.status<400){let e=t.responseText,s=null;try{s=JSON.parse(e)}catch(e){return void this.log("获取远程版本号失败!")}this.remoteServerVersion=s.version}else t.status}),t.open("get",e,!0),t.setRequestHeader("If-Modified-Since","0"),t.send()},onClickGenCfg(e){GoogleAnalytics.eventCustom("GenManifest"),!this.version||this.version.length<=0?this.log("[生成] 版本号未填写"):!this.serverRootDir||this.serverRootDir.length<=0?this.log("[生成] 服务器地址未填写"):0!==this.resourceRootDir.length?this._checkResourceRootDir(this.resourceRootDir)&&(!this.genManifestDir||this.genManifestDir.length<=0?this.log("[生成] manifest文件生成地址未填写"):Fs.existsSync(this.genManifestDir)?(this._saveConfig(),this._genVersion(this.version,this.serverRootDir,this.resourceRootDir,this.genManifestDir)):this.log("[生成] manifest存储目录不存在: "+this.genManifestDir)):this.log("[生成] 请先指定 ")},onClickOpenVersionDir(){this.openDir(OutPut.versionsDir)},onOpenManifestDir(){this.openDir(this.genManifestDir)},onOpenResourceDir(){this.openDir(this.resourceRootDir)},onSelectResourceRootDir(){let e=Editor.Dialog.openFile({title:"选择构建后的根目录",defaultPath:Editor.projectInfo.path,properties:["openDirectory"]});if(-1!==e){let t=e[0];this._checkResourceRootDir(t)&&(this.resourceRootDir=t,this._saveConfig())}},onBtnClickDelSelectedHotAddress(){let e=this.$els.address.value;if(this.hotAddressArray.length>0){let t=!1;for(let s=0;s0&&(this.serverRootDir="http://"+e,this.onInPutUrlOver(null))},onInPutUrlOver(e){let t=this.serverRootDir;if("http://"===t||"https://"===t||"http"===t||"https"===t||"http:"===t||"https:"===t)return;let s=t.indexOf("http://"),i=t.indexOf("https://");if(-1===s&&-1===i){/^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+)\.)+([A-Za-z0-9-~\/])+$/.test(t)||(this.log(t+" 不是以http://https://开头,或者不是网址, 已经自动修改"),this.serverRootDir="http://"+this.serverRootDir,this._getRemoteServerVersion())}else this._getRemoteServerVersion();this._addHotAddress(this.serverRootDir),this._updateShowUseAddrBtn(),this._saveConfig()},_saveConfig(){let e={version:this.version,serverRootDir:this.serverRootDir,resourceRootDir:this.resourceRootDir,genManifestDir:OutPut.manifestDir,localServerPath:this.localServerPath,hotAddressArray:this.hotAddressArray};CfgUtil.saveConfig(e)},onInputVersionOver(){let e=CfgUtil.cfgData.genVersion,t=(CfgUtil.cfgData.buildTime,CfgUtil.cfgData.genTime,this.remoteServerVersion);null!==t&&void 0!==t&&(this._isVersionPass(this.version,t)?(this.log("上次构建时版本号: "+e),this._isVersionPass(this.version,e)?this.log("版本通过验证!"):this.log("[Warning] 要构建的版本低于上次构建版本: "+this.version+"<="+e)):this.log("[Warning] version 填写的版本低于远程版本")),this._saveConfig()},onStopTouchEvent(e){e.preventDefault(),e.stopPropagation()},onBtnClickHelpDoc(){GoogleAnalytics.eventDoc();Electron.shell.openExternal("https://tidys.gitee.io/doc")},onBtnClickTellMe(){GoogleAnalytics.eventQQ();Electron.shell.openExternal("http://wpa.qq.com/msgrd?v=3&uin=774177933&site=qq&menu=yes")},_genVersion(e,t,s,i){this.log("[Build] 开始生成manifest配置文件....");let r={version:e,packageUrl:t,remoteManifestUrl:"",remoteVersionUrl:"",assets:{},searchPaths:[]};"/"===t[t.length-1]?(r.remoteManifestUrl=t+"project.manifest",r.remoteVersionUrl=t+"version.manifest"):(r.remoteManifestUrl=t+"/project.manifest",r.remoteVersionUrl=t+"/version.manifest");let o=i,n=s,l=(e,t)=>{let s=Fs.statSync(e);if(!s.isDirectory())return;let i,r,o,a,h,d=Fs.readdirSync(e);for(let c=0;c{try{Fs.mkdirSync(e)}catch(e){if("EEXIST"!==e.code)throw e}})(o),Fs.writeFileSync(a,JSON.stringify(r)),this.log("[Build] 生成 project.manifest成功"),delete r.assets,delete r.searchPaths,Fs.writeFileSync(h,JSON.stringify(r)),this.log("[Build] 生成 version.manifest成功"),this._packageVersion()},_packageDir(e,t){let s=Fs.readdirSync(e);for(let i=0;i{this.log("[Pack] 打包成功: "+d)}).on("error",e=>{this.log("[Pack] 打包失败:"+e.message)})},_checkResourceRootDir(e){if(Fs.existsSync(e)){let t=Path.join(e,"src");if(!Fs.existsSync(t))return this.log(`没有发现 ${t}, 请先构建项目.`),!1;let s=["res","assets"];for(let t=0;t