Skip to content
Snippets Groups Projects
index.ts 2.19 KiB
Newer Older
import urlApi from 'url';
import { logger } from '../../logger';
import { clone } from '../../util/clone';
import { GetReleasesConfig, ReleaseResult } from '../common';
import * as v2 from './v2';
import * as v3 from './v3';
export { id } from './common';

Rhys Arkins's avatar
Rhys Arkins committed
export const defaultRegistryUrls = [v3.getDefaultFeed()];
function parseRegistryUrl(
  registryUrl: string
): { feedUrl: string; protocolVersion: number } {
    const parsedUrl = urlApi.parse(registryUrl);
    let protocolVersion = 2;
    const protolVersionRegExp = /#protocolVersion=(2|3)/;
    const protocolVersionMatch = protolVersionRegExp.exec(parsedUrl.hash);
    if (protocolVersionMatch) {
      parsedUrl.hash = '';
      protocolVersion = Number.parseInt(protocolVersionMatch[1], 10);
    } else if (parsedUrl.pathname.endsWith('.json')) {
      protocolVersion = 3;
    return { feedUrl: urlApi.format(parsedUrl), protocolVersion };
    logger.debug({ e }, `nuget registry failure: can't parse ${registryUrl}`);
    return { feedUrl: registryUrl, protocolVersion: null };
export async function getReleases({
  lookupName,
  registryUrls,
}: GetReleasesConfig): Promise<ReleaseResult> {
  logger.trace(`nuget.getReleases(${lookupName})`);
  let dep: ReleaseResult = null;
Rhys Arkins's avatar
Rhys Arkins committed
  for (const feed of registryUrls) {
    const { feedUrl, protocolVersion } = parseRegistryUrl(feed);
    let res: ReleaseResult = null;
      res = await v2.getReleases(feedUrl, lookupName);
    } else if (protocolVersion === 3) {
      const queryUrl = await v3.getQueryUrl(feedUrl);
        res = await v3.getReleases(feedUrl, queryUrl, lookupName);
        for (const resRelease of res.releases) {
          if (
            !dep.releases.find(
              (depRelease) => depRelease.version === resRelease.version
            )
          ) {
            dep.releases.push(resRelease);
          }
        }
      { lookupName },
      `Dependency lookup failure: not found in all feeds`