mold-js
Version:
MoldJS structure and pattern framework commandline interface
161 lines (150 loc) • 4.49 kB
JavaScript
//!info transpiled
Seed({
type : "module",
include : [
{ File : "Mold.Core.File" },
{ Promise : "Mold.Core.Promise" },
{ Command : "Mold.Core.Command" }
]
},
function(module){
var InstallInfo = function(){
this.infoDir = ".mold/";
this.installInfoFile = "install-info.json";
}
InstallInfo.prototype = {
getFile : function(){
var file = new File(this.infoDir + this.installInfoFile, "json");
return file.load();
},
get : function(packageName, recursive, temp){
var that = this;
temp = temp || {};
return new Promise(function(resolve, reject){
this.getFile()
.then(function(data){
if(data && data.packages){
if(packageName && data.packages[packageName]){
if(recursive){
var depSteps = [];
for(var i = 0; i < data.packages[packageName].dependencies.length; i++){
var currentDep = data.packages[packageName].dependencies[i];
//use temp object to avoid endless recursion
if(!temp[currentDep.name]){
temp[currentDep.name] = currentDep.name;
depSteps.push(that.get(currentDep.name, recursive, temp))
}
}
Promise
.all(depSteps)
.then(function(results){
var output = data.packages[packageName];
for(var i = 0; i < results.length; i++){
output.dependencies = output.dependencies || [];
output.sources = output.sources || [];
if(results[i]){
for(var y = 0; y < results[i].dependencies.length; y++){
if(!output.dependencies.find(function(entry){
return entry.name === results[i].dependencies[y].name;
})
){
output.dependencies.push(results[i].dependencies[y]);
}
}
for(var y = 0; y < results[i].sources.length; y++){
if(!output.sources.find(function(entry){
return entry.path === results[i].sources[y].path;
})
){
output.sources.push(results[i].sources[y]);
}
}
}
}
resolve(output);
}).catch(function(err){
reject(err)
})
}else{
resolve(data.packages[packageName]);
}
}else if(!packageName){
resolve(data.packages);
}else{
resolve(null);
}
}else{
resolve(null);
}
}.bind(this))
.catch(reject)
}.bind(this))
},
set : function(packageName, data){
return new Promise(function(resolve, reject){
if(!packageName){
reject(new Error("Package name not given! [Mold.Core.PackageInfo]"));
return;
}
var path = this.infoDir + this.installInfoFile;
Command.createPath({ '-p' : path, '--silent' : true})
.then(function(){
var file = new File(path, "json");
file.load()
.then(function(infoData){
if(!infoData){
infoData = {
packages : {}
}
}else if(!infoData.packages){
infoData.packages = {};
}
infoData.packages[packageName] = data;
file.content = infoData;
file.save()
.then(resolve)
.catch(reject)
})
.catch(reject)
})
.catch(reject)
}.bind(this))
},
setPackages : function(data){
return new Promise(function(resolve, reject){
var path = this.infoDir + this.installInfoFile;
Command.createPath({ '-p' : path, '--silent' : true})
.then(function(){
var file = new File(path, "json");
file.content = { packages : data }
file.save()
.then(resolve)
.catch(reject)
})
.catch(reject);
}.bind(this))
},
remove : function(packageName){
if(!packageName){
reject(new Error("Package name not given! [Mold.Core.InstallInfo]"));
return;
}
return new Promise(function(resolve, reject){
this.get().then(function(all){
var filterd = {};
for(var current in all){
if(current !== packageName){
filterd[current] = all[current];
}
}
this.setPackages(filterd)
.then(resolve)
.catch(reject);
}.bind(this))
.catch(reject)
}.bind(this))
}
}
module.exports = new InstallInfo();
}
)