function accumulateNodeLicenses()

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);
            }
        }
    }