Merge "Add method for inspecting module dependency relations"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 31 Oct 2013 04:44:34 +0000 (04:44 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 31 Oct 2013 04:44:34 +0000 (04:44 +0000)
resources/mediawiki/mediawiki.inspect.js

index 346e783..454d1a4 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;
-                       },
+                       }
                }
        };