Require all when generating exports

This commit is contained in:
Tim Schaub
2016-12-04 16:43:15 -07:00
parent f6a3ec513e
commit 99eddbb31f

View File

@@ -76,15 +76,19 @@ function getSymbols(patterns, callback) {
* @param {Array.<string>} patterns A list of symbol names to match. Wildcards
* at the end of a string will match multiple names.
* @param {Array.<Object>} symbols List of symbols.
* @param {function(Error, Array.<Object>)} callback Called with the filtered
* list of symbols (or any error).
* @param {function(Error, Array.<Object>, Array.<string>)} callback Called with
* the filtered list of symbols and a list of all provides (or any error).
*/
function filterSymbols(patterns, symbols, callback) {
var matches = [];
var provides = {};
var lookup = {};
symbols.forEach(function(symbol) {
lookup[symbol.name] = symbol;
symbol.provides.forEach(function(provide) {
provides[provide] = true;
});
});
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.
* @param {Array.<Object>} symbols List of symbols.
* @param {string|undefined} namespace Target object for exported symbols.
* @param {Array.<string>} provides List of all provides.
* @return {string} Export code.
*/
function generateExports(symbols, namespace) {
function generateExports(symbols, namespace, provides) {
var blocks = [];
var requires = {};
provides.forEach(function(provide) {
blocks.push('goog.require(\'' + provide + '\');');
});
blocks.push('\n\n');
symbols.forEach(function(symbol) {
symbol.provides.forEach(function(provide) {
requires[provide] = true;
});
var name = symbol.name;
if (name.indexOf('#') > 0) {
blocks.push(formatPropertyExport(name));
@@ -166,10 +171,6 @@ function generateExports(symbols, namespace) {
blocks.push(formatSymbolExport(name, namespace));
}
});
blocks.unshift('\n');
Object.keys(requires).sort().reverse().forEach(function(name) {
blocks.unshift('goog.require(\'' + name + '\');');
});
blocks.unshift(
'/**\n' +
' * @fileoverview Custom exports file.\n' +
@@ -190,10 +191,10 @@ function main(config, callback) {
async.waterfall([
getSymbols.bind(null, config.exports),
filterSymbols,
function(symbols, done) {
function(symbols, provides, done) {
var code, err;
try {
code = generateExports(symbols, config.namespace);
code = generateExports(symbols, config.namespace, provides);
} catch (e) {
err = e;
}