Add method for inspecting module dependency relations
authorOri Livneh <ori@wikimedia.org>
Sun, 13 Oct 2013 21:22:51 +0000 (14:22 -0700)
committerOri Livneh <ori@wikimedia.org>
Mon, 21 Oct 2013 04:11:36 +0000 (21:11 -0700)
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

index 8268f12..0317737 100644 (file)
         */
        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.
                 *
                                } );
                                sortByProperty( modules, 'allSelectors', true );
                                return modules;
-                       },
+                       }
                }
        };