0
0
Fork 0
mirror of https://github.com/renovatebot/renovate.git synced 2025-05-15 00:42:26 +00:00
renovatebot_renovate/lib/modules/datasource/hex/index.ts
2025-03-06 17:05:19 +00:00

71 lines
2.2 KiB
TypeScript

import { logger } from '../../../logger';
import { cache } from '../../../util/cache/package/decorator';
import { joinUrlParts } from '../../../util/url';
import * as hexVersioning from '../../versioning/hex';
import { Datasource } from '../datasource';
import type { GetReleasesConfig, ReleaseResult } from '../types';
import { HexRelease } from './schema';
export class HexDatasource extends Datasource {
static readonly id = 'hex';
constructor() {
super(HexDatasource.id);
}
override readonly defaultRegistryUrls = ['https://hex.pm'];
override readonly defaultVersioning = hexVersioning.id;
override readonly releaseTimestampSupport = true;
override readonly releaseTimestampNote =
'The release timestamp is determined the `inserted_at` field in the results.';
override readonly sourceUrlSupport = 'package';
override readonly sourceUrlNote =
'The source URL is determined from the `Github` field in the results.';
@cache({
namespace: `datasource-${HexDatasource.id}`,
key: ({ packageName }: GetReleasesConfig) => packageName,
})
async getReleases({
packageName,
registryUrl,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
/* v8 ignore next 3 -- should never happen */
if (!registryUrl) {
return null;
}
// Get dependency name from packageName.
// If the dependency is private packageName contains organization name as following:
// hexPackageName:organizationName
// hexPackageName is used to pass it in hex dep url
// organizationName is used for accessing to private deps
const [hexPackageName, organizationName] = packageName.split(':');
const organizationUrlPrefix = organizationName
? `repos/${organizationName}/`
: '';
const hexUrl = joinUrlParts(
registryUrl,
`/api/${organizationUrlPrefix}packages/${hexPackageName}`,
);
const { val: result, err } = await this.http
.getJsonSafe(hexUrl, HexRelease)
.onError((err) => {
logger.warn(
{ url: hexUrl, datasource: 'hex', packageName, err },
'Error fetching from url',
);
})
.unwrap();
if (err) {
this.handleGenericErrors(err);
}
return result;
}
}