12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- var childProcess = require('child_process');
- var fs = require('fs-extra');
- var glob = require('glob');
- var path = require('path');
- var url = require('url');
- var basePath = path.resolve('..');
- var baseUrl = 'https://github.com/jupyterlab/jupyterlab/tree/master/packages';
- var packages = glob.sync(path.join(basePath, 'packages/*'));
- // Begin the graph specification
- var text = 'digraph G {\n';
- text += 'ratio = 0.6;\n';
- text += 'rankdir=LR;\n';
- packages.forEach(function(packagePath) {
- // Load the package.json data.
- var dataPath = path.join(packagePath, 'package.json');
- try {
- var data = require(dataPath);
- } catch (e) {
- return;
- }
- // Don't include private packages.
- if (data.private === true) {
- return;
- }
- // Only include packages in the @jupyterlab namespace.
- if (data.name.indexOf('@jupyterlab') === -1) {
- return;
- }
- // In order to cut down on the number of graph nodes,
- // don't include "*-extension" packages.
- if (data.name.indexOf('-extension') !== -1 ) {
- return;
- }
- // Construct a URL to the package on GitHub.
- var Url = url.resolve(baseUrl, 'packages/'+path.basename(packagePath));
-
- // Remove the '@jupyterlab' part of the name.
- var name = '"'+data.name.split('/')[1] +'"';
- text += name + '[URL="' + Url + '"];\n';
- var deps = data.dependencies || [];
- for (var dep in deps) {
- // Don't include non-jupyterlab dependencies.
- if (dep.indexOf('@jupyterlab') === -1) {
- continue;
- }
- dep = '"'+dep.split('/')[1]+'"';
- text += name + ' -> ' + dep + ';\n';
- }
- });
- text += '}\n';
- fs.writeFileSync('./dependencies.gv', text);
- childProcess.execSync('cat dependencies.gv | tred | dot -Tsvg -o dependency-graph.svg')
- fs.unlink('./dependencies.gv');
|