in tasks/generate-license-data.js [84:129]
function accumulateNodeLicenses(licenses, errors, rootPath, metadata) {
var queue = [ {
path: rootPath,
dependencyName: 'root',
dependencyScope: DEPENDENCY_SCOPE.TOP_LEVEL,
dependencyType: DEPENDENCY_TYPE.PRODUCTION
} ];
// Breadth-first search
while (queue.length > 0) {
var packageObj = queue.shift();
var packageFile = packageObj.path + '/package.json';
// Add children
if (grunt.file.exists(packageFile)) {
var packageData = grunt.file.readJSON(packageFile, { encoding: 'UTF-8' });
for (var dependencyName in packageData.dependencies) {
createNodeLicenseEntry(queue,
licenses,
errors,
packageObj.path,
dependencyName,
packageObj.dependencyType,
packageObj.dependencyScope,
metadata);
}
// For Node/NPM we need to list the top-level devDependencies, but we do not need transitive ones
if (packageObj.dependencyScope === DEPENDENCY_SCOPE.TOP_LEVEL) {
for (var dependencyName in packageData.devDependencies) {
createNodeLicenseEntry(queue,
licenses,
errors,
packageObj.path,
dependencyName,
DEPENDENCY_TYPE.BUILD_ONLY,
packageObj.dependencyScope,
metadata);
}
}
} else {
grunt.verbose.writeln('Queue next file not found: ' + packageFile);
}
}
}