const urlApi = require('url'); const { logger } = require('../../logger'); const v2 = require('./v2'); const v3 = require('./v3'); module.exports = { getPkgReleases, }; async function getPkgReleases({ lookupName, registryUrls }) { logger.trace(`nuget.getPkgReleases(${lookupName})`); let dep = null; for (const feed of registryUrls || [v3.getDefaultFeed()]) { const feedVersion = detectFeedVersion(feed); if (feedVersion === 2) { dep = await v2.getPkgReleases(feed, lookupName); } else if (feedVersion === 3) { const queryUrl = await v3.getQueryUrl(feed); if (queryUrl !== null) { dep = await v3.getPkgReleases(feed, queryUrl, lookupName); } } if (dep != null) { break; } } if (dep === null) { logger.info( { lookupName }, `Dependency lookup failure: not found in all feeds` ); } return dep; } function detectFeedVersion(url) { try { const parsecUrl = urlApi.parse(url); // Official client does it in the same way if (parsecUrl.pathname.endsWith('.json')) { return 3; } return 2; } catch (e) { logger.debug({ e }, `nuget registry failure: can't parse ${url}`); return null; } }