107 lines
4.2 KiB
JavaScript
107 lines
4.2 KiB
JavaScript
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<files...>\n\n<files...> app-config.json files to split and make up.");
|
|
}
|