whitesource
Version:
whitesource node module
116 lines (100 loc) • 3.65 kB
JavaScript
var traverse = require('traverse');
var cli = require('cli');
var fs = require('fs');
var glob = require("glob");
var WsNodeReportBuilder = exports;
exports.constructor = function WsNodeReportBuilder(){};
WsNodeReportBuilder.refitNodes = function(obj){
var build, key, destKey, ix, value;
var mapShortToLong = {
"dependencies": "children",
"resolved" : "artifactId"
};
build = {};
for (key in obj) {
// Get the destination key
destKey = mapShortToLong[key] || key;
// Get the value
value = obj[key];
// If this is an object, recurse
if (typeof value === "object") {
value = WsNodeReportBuilder.refitNodes(value);
}
// Set it on the result using the destination key
build[destKey] = value;
if(destKey === "children"){
build[destKey] = [];
for (var i in value){
build[destKey].push(value[i]);
value[i].name = i;
value[i].groupId = i;
value[i].systemPath = null;
value[i].scope = null;;
value[i].exclusions = [];
value[i].classifier = null;
}
}
}
return build;
};
WsNodeReportBuilder.traverseShrinkWrapJson = function(shrinkwrap){
cli.ok("Building dependencies report");
var foundedShasum = 0;
var missingShasum = 0;
var parseData = shrinkwrap;
var scrubbed = traverse(parseData).paths();
for (var i = 0; i<scrubbed.length; i++){
var path = scrubbed[i];
for(var j = 0; j<path.length; j++){
var isDep = (path[j] === "dependencies")
var isVer = (path[j] === "version");
var isResolved = (path[j] === "resolved");
var isFrom = (path[j] === "from");
var isName = (path[j] === "name");
var isShasum = ((path[j] === "shasum" ) || (path[j] === "_shasum")); //shasum can be "_shasum"
// var isShasum = (path[j] === "shasum"); //shasum can be "_shasum"
var isNodeMod = (path[j] === "node_modules");
if(isDep){
path[j] = "node_modules";
isNodeMod = true;
}
if(path[j] === path[path.length -1]
&& !isName && !isNodeMod && !isFrom
&& !isResolved && !isVer && !isShasum){
var pointerStrng = scrubbed[i].join('.').replace(/node_modules/gi, "dependencies");
var uri = scrubbed[i].join('/') + "/package.json";
//console.log('scanning for shasum at path: ' + uri )
var strArr = uri.split("");
for(var k = 0; k<strArr.length; k++){
if(strArr[k] == "/"){
strArr[k] = '"]["';
}
}
var joinedStr = strArr.join('');
joinedStr = joinedStr.substr(0,joinedStr.lastIndexOf('['));
var objPointer = 'parseData["' + joinedStr.replace(/node_modules/gi, "dependencies");
var dataObjPointer = eval(objPointer);
var obj = JSON.parse(fs.readFileSync(uri, 'utf8'));
if(obj.dist || obj._shasum){
//cli.ok('Founded dependencie shasum');
if(obj.dist){
dataObjPointer.shasum = obj.dist.shasum;
path.shasum = obj.dist.shasum;
}
if(obj._shasum){
dataObjPointer.sha1 = obj._shasum;
path.sha1 = obj._shasum;
}
foundedShasum++;
}else{//couldn't find shasum key
missingShasum++;
cli.info('Missing : ' + obj.name);
}
}
}
}
cli.info("Total shasum found: " + foundedShasum);
cli.info("Missing shasum: " + missingShasum);
cli.info("Total project dependencies: " + (missingShasum + foundedShasum));
return WsNodeReportBuilder.refitNodes(parseData);
};