UNPKG

appdynamics

Version:

Performance Profiler and Monitor

72 lines (62 loc) 1.89 kB
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; };