diff --git a/server.js b/server.js index 05f7cc54..ab526d5f 100755 --- a/server.js +++ b/server.js @@ -9,6 +9,7 @@ try { var path = require("path"); var architect = require("architect"); var optimist = require("optimist"); +var async = require("async"); if (process.version.match(/^v0/) && parseFloat(process.version.substr(3)) < 10) { console.warn("You're using Node.js version " + process.version @@ -26,6 +27,7 @@ var shortcuts = { "ci" : ["ide", "preview", "vfs", "proxy", "-s", "ci"], "s" : ["standalone", "-s", "standalone"] }; +var delayLoadConfigs = ["preview", "api", "oldclient", "apps-proxy", "worker"]; module.exports = main; @@ -47,7 +49,7 @@ function getDefaultSettings() { module.exports.getDefaultSettings = getDefaultSettings; -function main(argv, config, callback) { +function main(argv, config, onLoaded) { var options = optimist(argv) .usage("Usage: $0 [CONFIG_NAME] [--help]") .alias("s", "settings") @@ -62,20 +64,45 @@ function main(argv, config, callback) { var configs = options.argv._; if (!configs.length) configs = [config || DEFAULT_CONFIG]; - - configs.forEach(function(config) { - if (shortcuts[config]) { - return main(shortcuts[config].concat(argv.filter(function(arg) { - return arg != config; - })), null, callback); - } - else { - start(config, options, callback); - } + + var expanded = expandShortCuts(configs); + if (expanded.length > configs.length) + return main(expanded.concat(argv.filter(function(arg) { + return !shortcuts[arg]; + })), config, onLoaded); + + var delayed = expanded.filter(function(c) { return delayLoadConfigs.indexOf(c) !== -1 }); + var notDelayed = expanded.filter(function(c) { return delayLoadConfigs.indexOf(c) === -1 }); + + startConfigs(notDelayed, function() { + startConfigs(delayed, function() {}); }); + + function startConfigs(configs, done) { + async.each(configs, function(config, next) { + start(config, options, function(err, result) { + onLoaded && onLoaded(err, result); + next(err); + }); + }, done); + } +} + +function expandShortCuts(configs) { + var results = configs.slice(); + for (var i = 0; i < results.length; i++) { + var expanded = shortcuts[results[i]]; + if (expanded) { + results.splice.apply(results, [i, 1].concat(expanded)); + i += expanded.length - 1; + } + } + return results; } function start(configName, options, callback) { + console.log("Starting", configName); + var argv = options.argv; var settingsName = argv.settings;