From 55d65ad807d817ecb022be7d5eb01b2146f94740 Mon Sep 17 00:00:00 2001 From: Ori Livneh Date: Sun, 13 Oct 2013 14:22:51 -0700 Subject: [PATCH] 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 --- resources/mediawiki/mediawiki.inspect.js | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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; - }, + } } }; -- 2.20.1