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';
export const defaultRegistryUrls = [v3.getDefaultFeed()];
Florian Greinacher
committed
function parseRegistryUrl(
registryUrl: string
): { feedUrl: string; protocolVersion: number } {
Florian Greinacher
committed
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;
Florian Greinacher
committed
return { feedUrl: urlApi.format(parsedUrl), protocolVersion };
} catch (e) {
Florian Greinacher
committed
logger.debug({ e }, `nuget registry failure: can't parse ${registryUrl}`);
return { feedUrl: registryUrl, protocolVersion: null };
export async function getReleases({
}: GetReleasesConfig): Promise<ReleaseResult> {
logger.trace(`nuget.getReleases(${lookupName})`);
Florian Greinacher
committed
const { feedUrl, protocolVersion } = parseRegistryUrl(feed);
let res: ReleaseResult = null;
Florian Greinacher
committed
if (protocolVersion === 2) {
res = await v2.getReleases(feedUrl, lookupName);
Florian Greinacher
committed
} else if (protocolVersion === 3) {
const queryUrl = await v3.getQueryUrl(feedUrl);
if (queryUrl !== null) {
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);
}
}
} else {
dep = res;
}
if (dep === null) {
{ lookupName },
`Dependency lookup failure: not found in all feeds`
return dep;