renovate/lib/modules/datasource/datasource.ts
Sergei Zharinov 765a76319b
feat(sbt-package): Fallback to Maven datasource for GitLab packages (#16817)
* feat(sbt-package): Fallback to Maven datasource for GitLab packages

* Fix

* Use `detectPlatform`

* Tests for hostType
2022-08-01 11:05:17 +00:00

56 lines
1.5 KiB
TypeScript

import { ExternalHostError } from '../../types/errors/external-host-error';
import { Http } from '../../util/http';
import type { HttpError } from '../../util/http';
import type {
DatasourceApi,
DigestConfig,
GetReleasesConfig,
RegistryStrategy,
ReleaseResult,
} from './types';
export abstract class Datasource implements DatasourceApi {
protected constructor(public readonly id: string) {
this.http = new Http(id);
}
caching: boolean | undefined;
customRegistrySupport = true;
defaultConfig: Record<string, unknown> | undefined;
defaultRegistryUrls?: string[] | (() => string[]);
defaultVersioning: string | undefined;
registryStrategy: RegistryStrategy | undefined = 'first';
protected http: Http;
abstract getReleases(
getReleasesConfig: GetReleasesConfig
): Promise<ReleaseResult | null>;
getDigest?(config: DigestConfig, newValue?: string): Promise<string | null>;
// eslint-disable-next-line @typescript-eslint/no-empty-function
handleSpecificErrors(err: HttpError): void {}
protected handleGenericErrors(err: HttpError): never {
// istanbul ignore if: not easy testable with nock
if (err instanceof ExternalHostError) {
throw err;
}
this.handleSpecificErrors(err);
if (err.response?.statusCode !== undefined) {
if (
err.response?.statusCode === 429 ||
(err.response?.statusCode >= 500 && err.response?.statusCode < 600)
) {
throw new ExternalHostError(err);
}
}
throw err;
}
}