GT2/GT2-Android/node_modules/raven/vendor/node-lsmod.js

69 lines
1.6 KiB
JavaScript

'use strict';
// Original repository: https://github.com/defunctzombie/node-lsmod/
//
// [2018-02-09] @kamilogorek - Handle scoped packages structure
// builtin
var fs = require('fs');
var path = require('path');
// node 0.6 support
fs.existsSync = fs.existsSync || path.existsSync;
// mainPaths are the paths where our mainprog will be able to load from
// we store these to avoid grabbing the modules that were loaded as a result
// of a dependency module loading its dependencies, we only care about deps our
// mainprog loads
var mainPaths = (require.main && require.main.paths) || [];
module.exports = function() {
var paths = Object.keys(require.cache || []);
// module information
var infos = {};
// paths we have already inspected to avoid traversing again
var seen = {};
paths.forEach(function(p) {
/* eslint-disable consistent-return */
var dir = p;
(function updir() {
var orig = dir;
dir = path.dirname(orig);
if (/@[^/]+$/.test(dir)) {
dir = path.dirname(dir);
}
if (!dir || orig === dir || seen[orig]) {
return;
} else if (mainPaths.indexOf(dir) < 0) {
return updir();
}
var pkgfile = path.join(orig, 'package.json');
var exists = fs.existsSync(pkgfile);
seen[orig] = true;
// travel up the tree if no package.json here
if (!exists) {
return updir();
}
try {
var info = JSON.parse(fs.readFileSync(pkgfile, 'utf8'));
infos[info.name] = info.version;
} catch (e) {}
})();
/* eslint-enable consistent-return */
});
return infos;
};