From: Ori Livneh Date: Sun, 13 Oct 2013 21:22:51 +0000 (-0700) Subject: Add method for inspecting module dependency relations X-Git-Tag: 1.31.0-rc.0~18336^2 X-Git-Url: http://git.cyclocoop.org//%22javascript:ModifierStyle%28%27%22.%24id.%22%27%29/%22?a=commitdiff_plain;h=55d65ad807d817ecb022be7d5eb01b2146f94740;p=lhc%2Fweb%2Fwiklou.git Add method for inspecting module dependency relations This patch adds mw.inspect#getDependencyGraph, which returns an object enumerating all the modules that a given module requires and all the modules that require the given module. There is no special console report associated with this method. Change-Id: Ib234c2c8bbbf8f34860b04e8d299b6923f4775ef --- diff --git a/resources/mediawiki/mediawiki.inspect.js b/resources/mediawiki/mediawiki.inspect.js index 8268f12c61..0317737188 100644 --- a/resources/mediawiki/mediawiki.inspect.js +++ b/resources/mediawiki/mediawiki.inspect.js @@ -20,6 +20,29 @@ */ var inspect = { + /** + * Return a map of all dependency relationships between loaded modules. + * + * @return {Object} Maps module names to objects. Each sub-object has + * two properties, 'requires' and 'requiredBy'. + */ + getDependencyGraph: function () { + var modules = inspect.getLoadedModules(), graph = {}; + + $.each( modules, function ( moduleIndex, moduleName ) { + var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || []; + + graph[moduleName] = graph[moduleName] || { requiredBy: [] }; + graph[moduleName].requires = dependencies; + + $.each( dependencies, function ( depIndex, depName ) { + graph[depName] = graph[depName] || { requiredBy: [] }; + graph[depName].requiredBy.push( moduleName ); + } ); + } ); + return graph; + }, + /** * Calculate the byte size of a ResourceLoader module. * @@ -184,7 +207,7 @@ } ); sortByProperty( modules, 'allSelectors', true ); return modules; - }, + } } };