From 0326cb308872b164f56e9cf6948471b2254949c0 Mon Sep 17 00:00:00 2001 From: Alex Van Camp Date: Thu, 19 Feb 2015 09:18:20 -0600 Subject: [PATCH] minor refactoring in extensions lib, making it easier to read --- lib/server/extensions.js | 46 +++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/lib/server/extensions.js b/lib/server/extensions.js index 83b6a8232..5eccc69e7 100644 --- a/lib/server/extensions.js +++ b/lib/server/extensions.js @@ -1,11 +1,11 @@ 'use strict'; -var EventEmitter = require('events').EventEmitter, - fs = require('fs'), - path = require('path'), - bundles = require('../bundles'), - ExtensionApi = require('../extension_api'), - log = require('../logger')('nodecg/lib/server/extensions'); +var EventEmitter = require('events').EventEmitter; +var fs = require('fs'); +var path = require('path'); +var bundles = require('../bundles'); +var ExtensionApi = require('../extension_api'); +var log = require('../logger')('nodecg/lib/server/extensions'); var extensions = {}; @@ -14,26 +14,16 @@ exports = new EventEmitter(); bundles.on('allLoaded', function(allBundles) { log.trace('Starting extension mounting'); - var unsatisfiedDeps = []; - function checkBundles(bundle) { - bundle.bundleDependencies.forEach(checkBundleDep); - log.warn('Extension for bundle %s could not be mounted, as it had unsatisfied dependencies:', - bundle.name, unsatisfiedDeps.join(', ')); - bundles.remove(bundle.name); - } - function checkBundleDep(dep) { - if (extensions.hasOwnProperty(dep)) return; - unsatisfiedDeps.push(dep); - } - while(allBundles.length > 0) { var startLen = allBundles.length; for (var i = 0; i < startLen; i++) { + // If this bundle does not have an extension, remove it from the list if (!allBundles[i].extension) { allBundles.splice(i, 1); break; } + // If this bundle has no dependencies, load it and remove it from the list if (!allBundles[i].bundleDependencies) { log.debug('Bundle %s has extension with no dependencies', allBundles[i].name); _loadExtension(allBundles[i]); @@ -41,6 +31,7 @@ bundles.on('allLoaded', function(allBundles) { break; } + // If this bundle has dependencies, and all of them are satisfied, load it and remove it from the list if (_bundleDepsSatisfied(allBundles[i])) { log.debug('Bundle %s has extension with satisfied dependencies', allBundles[i].name); _loadExtension(allBundles[i]); @@ -51,7 +42,24 @@ bundles.on('allLoaded', function(allBundles) { var endLen = allBundles.length; if (startLen === endLen) { - allBundles.forEach(checkBundles); + // This block can only ever be entered once, so its safe to define a function here + // even though we're inside of a `while` loop. + /* jshint -W083 */ + + // Any bundles left over must have had unsatisfied dependencies. + // Print a warning about each bundle, and what its unsatisfied deps were. + // Then, unload the bundle. + allBundles.forEach(function (bundle) { + var unsatisfiedDeps = []; + bundle.bundleDependencies.forEach(function (dep) { + if (extensions.hasOwnProperty(dep)) return; + unsatisfiedDeps.push(dep); + }); + log.warn('Extension for bundle %s could not be mounted, as it had unsatisfied dependencies:', + bundle.name, unsatisfiedDeps.join(', ')); + bundles.remove(bundle.name); + }); + /*jshint +W083 */ log.warn('%d bundle(s) could not be loaded, as their dependencies were not satisfied', endLen); break; }