You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.5 KiB
101 lines
2.5 KiB
define([ |
|
"../buildControl", |
|
"../fileUtils", |
|
"../fs", |
|
"dojo/_base/lang", |
|
"dojo/_base/array", |
|
"dojo/json" |
|
], function(bc, fileUtils, fs, lang, array, json){ |
|
return function(resource, callback){ |
|
if(!bc.depsDumpDotFilename && !bc.depsDumpFilename){ |
|
return 0; |
|
} |
|
|
|
var dotModules = 0, traceForDot = {}, traceForDotDone = {}; |
|
if(bc.dotModules){ |
|
dotModules = {}; |
|
array.forEach(bc.dotModules.split(","), function(module){ |
|
dotModules[lang.trim(module)] = traceForDot; |
|
}); |
|
} |
|
|
|
var modules = [], |
|
midToId = {}, |
|
i = 0, |
|
dotOutput = "digraph {\n", |
|
r, p, destFilename; |
|
for(p in bc.resources){ |
|
r = bc.resources[p]; |
|
if(r.deps){ |
|
if(!dotModules || dotModules[r.mid]){ |
|
dotModules[r.mid] = traceForDotDone; |
|
r.deps.forEach(function(module){ |
|
dotOutput += '"' + r.mid + '" -> "' + module.mid + '";\n'; |
|
if (dotModules[module.mid]!==traceForDotDone){ |
|
dotModules[module.mid] = traceForDot; |
|
} |
|
}); |
|
} |
|
r.uid = i; |
|
midToId[bc.resources[p].mid] = i; |
|
modules.push(r); |
|
i++; |
|
} |
|
} |
|
|
|
if(bc.depsDumpDotFilename){ |
|
var foundOne = dotModules; |
|
while(foundOne){ |
|
foundOne = false; |
|
for(p in bc.resources){ |
|
r = bc.resources[p]; |
|
if(dotModules[r.mid]==traceForDot){ |
|
foundOne = true; |
|
dotModules[r.mid] = traceForDotDone; |
|
if(r.deps){ |
|
r.deps.forEach(function(module){ |
|
dotOutput += '"' + r.mid + '" -> "' + module.mid + '";\n'; |
|
if (dotModules[module.mid]!==traceForDotDone){ |
|
dotModules[module.mid] = traceForDot; |
|
} |
|
}); |
|
} |
|
} |
|
} |
|
} |
|
dotOutput += "}\n"; |
|
|
|
var filename = fileUtils.computePath(bc.depsDumpDotFilename, bc.destBasePath); |
|
fileUtils.ensureDirectory(fileUtils.getFilepath(filename)); |
|
fs.writeFileSync(filename, dotOutput, "ascii"); |
|
} |
|
|
|
if(bc.depsDumpFilename){ |
|
var depsTree = modules.map(function(module){ |
|
return module.deps.map(function(item){ return item.uid; }); |
|
}), |
|
idTree = {}, |
|
getItem = function(parts, bag){ |
|
var part = parts.shift(); |
|
if(!(part in bag)){ |
|
bag[part] = {}; |
|
} |
|
if(parts.length){ |
|
return getItem(parts, bag[part]); |
|
}else{ |
|
return bag[part]; |
|
} |
|
}; |
|
modules.forEach(function(item, i){ |
|
var parts = item.mid.split("/"); |
|
getItem(parts, idTree)["*"] = i; |
|
}); |
|
|
|
filename = fileUtils.computePath(bc.depsDumpFilename, bc.destBasePath); |
|
fileUtils.ensureDirectory(fileUtils.getFilepath(filename)); |
|
fs.writeFileSync(filename, json.stringify({depsTree:depsTree, idTree:idTree}), "ascii"); |
|
} |
|
|
|
return 0; |
|
}; |
|
});
|
|
|