const wu=require("./wuLib.js"); const fs=require("fs"); const path=require("path"); const crypto=require("crypto"); const {VM}=require('vm2'); function getWorkerPath(name){ let code=fs.readFileSync(name,{encoding:'utf8'}); let commPath=false; let vm=new VM({sandbox:{ require(){}, define(name){ name=path.dirname(name)+'/'; if(commPath===false)commPath=name; commPath=wu.commonDir(commPath,name); } }}); vm.run(code.slice(code.indexOf("define("))); if(commPath.length>0)commPath=commPath.slice(0,-1); console.log("Worker path: \""+commPath+"\""); return commPath; } function doConfig(configFile,cb){ let dir=path.dirname(configFile); wu.get(configFile,content=>{ let e=JSON.parse(content); let k=e.pages; k.splice(k.indexOf(wu.changeExt(e.entryPagePath)),1); k.unshift(wu.changeExt(e.entryPagePath)); let app={pages:k,window:e.global&&e.global.window,tabBar:e.tabBar,networkTimeout:e.networkTimeout}; if(e.subPackages){ app.subPackages=e.subPackages; console.log("=======================================================\nNOTICE: SubPackages exist in this package.\nDetails: ",app.subPackages,"\n======================================================="); } if(e.navigateToMiniProgramAppIdList)app.navigateToMiniProgramAppIdList=e.navigateToMiniProgramAppIdList; if(fs.existsSync(path.resolve(dir,"workers.js")))app.workers=getWorkerPath(path.resolve(dir,"workers.js")); if(e.extAppid) wu.save(path.resolve(dir,'ext.json'),JSON.stringify({extEnable:true,extAppid:e.extAppid,ext:e.ext},null,4)); if(typeof e.debug!="undefined")app.debug=e.debug; let cur=path.resolve("./file"); for(let a in e.page)if(e.page[a].window.usingComponents) for(let name in e.page[a].window.usingComponents){ let componentPath=e.page[a].window.usingComponents[name]+".html"; let file=componentPath.startsWith('/')?componentPath.slice(1):wu.toDir(path.resolve(path.dirname(a),componentPath),cur); if(!e.page[file])e.page[file]={}; if(!e.page[file].window)e.page[file].window={}; e.page[file].window.component=true; } if(fs.existsSync(path.resolve(dir,"app-service.js"))){ let matches=fs.readFileSync(path.resolve(dir,"app-service.js"),{encoding:'utf8'}).match(/\_\_wxAppCode\_\_\['[^\.]+\.json[^;]+\;/g); if(matches){ let attachInfo={}; (new VM({sandbox:{ __wxAppCode__:attachInfo }})).run(matches.join("")); for(let name in attachInfo)e.page[wu.changeExt(name,".html")]={window:attachInfo[name]}; } } let delWeight=8; for(let a in e.page){ let fileName=path.resolve(dir,wu.changeExt(a,".json")); wu.save(fileName,JSON.stringify(e.page[a].window,null,4)); if(configFile==fileName)delWeight=0; } if(app.tabBar&&app.tabBar.list) wu.scanDirByExt(dir,"",li=>{//search all files let digests=[],digestsEvent=new wu.CntEvent,rdir=path.resolve(dir); function fixDir(dir){return dir.startsWith(rdir)?dir.slice(rdir.length+1):dir;} digestsEvent.add(()=>{ for(let e of app.tabBar.list){ e.pagePath=wu.changeExt(e.pagePath); if(e.iconData){ let hash=crypto.createHash("MD5").update(e.iconData,'base64').digest(); for(let [buf,name] of digests)if(hash.equals(buf)){ delete e.iconData; e.iconPath=fixDir(name).replace(/\\/g,'/'); break; } } if(e.selectedIconData){ let hash=crypto.createHash("MD5").update(e.selectedIconData,'base64').digest(); for(let [buf,name] of digests)if(hash.equals(buf)){ delete e.selectedIconData; e.selectedIconPath=fixDir(name).replace(/\\/g,'/'); break; } } } wu.save(path.resolve(dir,'app.json'),JSON.stringify(app,null,4)); cb({[configFile]:delWeight}); }); for(let name of li){ digestsEvent.encount(); wu.get(name,data=>{ digests.push([crypto.createHash("MD5").update(data).digest(),name]); digestsEvent.decount(); },{}); } });else{ wu.save(path.resolve(dir,'app.json'),JSON.stringify(app,null,4)); cb({[configFile]:delWeight}); } }); } module.exports={doConfig:doConfig}; if(require.main===module){ wu.commandExecute(doConfig,"Split and make up weapp app-config.json file.\n\n\n\n app-config.json files to split and make up."); }