Merge pull request #6207 from tschaub/require-all

Require all when generating exports
This commit is contained in:
Tim Schaub
2016-12-06 14:41:02 -07:00
committed by GitHub
+15 -14
View File
@@ -76,15 +76,19 @@ function getSymbols(patterns, callback) {
* @param {Array.<string>} patterns A list of symbol names to match. Wildcards * @param {Array.<string>} patterns A list of symbol names to match. Wildcards
* at the end of a string will match multiple names. * at the end of a string will match multiple names.
* @param {Array.<Object>} symbols List of symbols. * @param {Array.<Object>} symbols List of symbols.
* @param {function(Error, Array.<Object>)} callback Called with the filtered * @param {function(Error, Array.<Object>, Array.<string>)} callback Called with
* list of symbols (or any error). * the filtered list of symbols and a list of all provides (or any error).
*/ */
function filterSymbols(patterns, symbols, callback) { function filterSymbols(patterns, symbols, callback) {
var matches = []; var matches = [];
var provides = {};
var lookup = {}; var lookup = {};
symbols.forEach(function(symbol) { symbols.forEach(function(symbol) {
lookup[symbol.name] = symbol; lookup[symbol.name] = symbol;
symbol.provides.forEach(function(provide) {
provides[provide] = true;
});
}); });
patterns.forEach(function(name) { patterns.forEach(function(name) {
@@ -111,7 +115,7 @@ function filterSymbols(patterns, symbols, callback) {
} }
}); });
callback(null, matches); callback(null, matches, Object.keys(provides).sort());
} }
@@ -150,15 +154,16 @@ function formatPropertyExport(name) {
* Generate export code given a list symbol names. * Generate export code given a list symbol names.
* @param {Array.<Object>} symbols List of symbols. * @param {Array.<Object>} symbols List of symbols.
* @param {string|undefined} namespace Target object for exported symbols. * @param {string|undefined} namespace Target object for exported symbols.
* @param {Array.<string>} provides List of all provides.
* @return {string} Export code. * @return {string} Export code.
*/ */
function generateExports(symbols, namespace) { function generateExports(symbols, namespace, provides) {
var blocks = []; var blocks = [];
var requires = {}; provides.forEach(function(provide) {
blocks.push('goog.require(\'' + provide + '\');');
});
blocks.push('\n\n');
symbols.forEach(function(symbol) { symbols.forEach(function(symbol) {
symbol.provides.forEach(function(provide) {
requires[provide] = true;
});
var name = symbol.name; var name = symbol.name;
if (name.indexOf('#') > 0) { if (name.indexOf('#') > 0) {
blocks.push(formatPropertyExport(name)); blocks.push(formatPropertyExport(name));
@@ -166,10 +171,6 @@ function generateExports(symbols, namespace) {
blocks.push(formatSymbolExport(name, namespace)); blocks.push(formatSymbolExport(name, namespace));
} }
}); });
blocks.unshift('\n');
Object.keys(requires).sort().reverse().forEach(function(name) {
blocks.unshift('goog.require(\'' + name + '\');');
});
blocks.unshift( blocks.unshift(
'/**\n' + '/**\n' +
' * @fileoverview Custom exports file.\n' + ' * @fileoverview Custom exports file.\n' +
@@ -190,10 +191,10 @@ function main(config, callback) {
async.waterfall([ async.waterfall([
getSymbols.bind(null, config.exports), getSymbols.bind(null, config.exports),
filterSymbols, filterSymbols,
function(symbols, done) { function(symbols, provides, done) {
var code, err; var code, err;
try { try {
code = generateExports(symbols, config.namespace); code = generateExports(symbols, config.namespace, provides);
} catch (e) { } catch (e) {
err = e; err = e;
} }