appdynamics
Version:
Performance Profiler and Monitor
72 lines (62 loc) • 1.89 kB
JavaScript
var path = require('path');
const fs = require('fs');
const MAX_ITEMS_PER_GROUP = 1024;
exports.LibraryMetadata = LibraryMetadata;
function LibraryMetadata(agent) {
var self = this;
self.agent = agent;
}
LibraryMetadata.prototype.init = function() {
};
LibraryMetadata.prototype.getMetadata = function() {
var self = this;
if(!self.metadataCache) {
self.metadataCache = self._getMetadata();
}
return self.metadataCache;
};
LibraryMetadata.prototype._getJson = function()
{
var rootPath = require('path').resolve('./');
if(fs.existsSync(path.join(rootPath, './package-lock.json'))) {
return require(path.join(rootPath, './package-lock.json'));
} else if(fs.existsSync(path.join(rootPath, './yarn.lock'))) {
const lockfile = require('@yarnpkg/lockfile');
let file = fs.readFileSync(path.join(rootPath, './yarn.lock'), 'utf8');
let json = lockfile.parse(file);
let updatedDependencyJson = {};
for(let [key, val] of Object.entries(json.object)) {
let newkey = key.split("@")[0];
updatedDependencyJson[newkey] = val;
}
let dependencies = { dependencies: updatedDependencyJson };
return dependencies;
}
};
LibraryMetadata.prototype._getMetadata = function() {
var self = this;
try {
var pkjson = self._getJson();
var metadataCache = [];
var cacheGroup = [];
var itemCount = 0;
for (var pkg in pkjson.dependencies) {
if(itemCount == MAX_ITEMS_PER_GROUP) {
metadataCache.push(cacheGroup);
cacheGroup = [];
itemCount = 0;
}
cacheGroup.push({
name: pkg,
version: pkjson.dependencies[pkg].version
});
itemCount = itemCount + 1;
}
} catch(error) {
self.agent.logger.warn('Error reading package metadata ' + error);
}
if(cacheGroup.length) {
metadataCache.push(cacheGroup);
}
return metadataCache;
};