From 9f22002b3c04e445e93fc0c88f44908dedabb3fa Mon Sep 17 00:00:00 2001 From: IKEDA Sho <suicaicoca@gmail.com> Date: Mon, 19 Aug 2019 23:44:12 +0900 Subject: [PATCH] chore(datasource): add more type annotations (#4312) --- lib/datasource/cargo/index.ts | 2 +- lib/datasource/common.ts | 4 ++-- lib/datasource/dart/index.ts | 2 +- lib/datasource/docker/index.ts | 8 ++++---- lib/datasource/git-tags/index.ts | 2 +- lib/datasource/github/index.ts | 9 ++++++--- lib/datasource/gitlab/index.ts | 2 +- lib/datasource/go/index.ts | 6 +++--- lib/datasource/hex/index.ts | 2 +- lib/datasource/index.ts | 9 +++++++-- lib/datasource/npm/get.ts | 4 +++- lib/datasource/npm/npmrc.ts | 6 +++--- lib/datasource/npm/releases.ts | 2 +- lib/datasource/nuget/index.ts | 2 +- lib/datasource/nuget/v2.ts | 2 +- lib/datasource/nuget/v3.ts | 4 ++-- lib/datasource/orb/index.ts | 2 +- lib/datasource/packagist/index.ts | 9 ++++++--- lib/datasource/pypi/index.ts | 11 +++++++---- lib/datasource/rubygems/get-rubygems-org.ts | 2 +- lib/datasource/rubygems/get.ts | 2 +- lib/datasource/rubygems/releases.ts | 2 +- lib/datasource/rubygems/retriable.ts | 10 +++++----- lib/datasource/sbt/index.ts | 2 +- lib/datasource/terraform/index.ts | 2 +- 25 files changed, 62 insertions(+), 46 deletions(-) diff --git a/lib/datasource/cargo/index.ts b/lib/datasource/cargo/index.ts index 570ffc1862..df40165600 100644 --- a/lib/datasource/cargo/index.ts +++ b/lib/datasource/cargo/index.ts @@ -4,7 +4,7 @@ import { PkgReleaseConfig, ReleaseResult, Release } from '../common'; export async function getPkgReleases({ lookupName, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { if (!lookupName) { return null; } diff --git a/lib/datasource/common.ts b/lib/datasource/common.ts index b6373f0c5a..435d0c806b 100644 --- a/lib/datasource/common.ts +++ b/lib/datasource/common.ts @@ -45,7 +45,7 @@ export interface ReleaseResult { export type Preset = any; export interface Datasource { - getDigest?(config: DigestConfig, newValue?: string): Promise<string>; + getDigest?(config: DigestConfig, newValue?: string): Promise<string | null>; getPreset?(packageName: string, presetName?: string): Promise<Preset>; - getPkgReleases(config: PkgReleaseConfig): Promise<ReleaseResult>; + getPkgReleases(config: PkgReleaseConfig): Promise<ReleaseResult | null>; } diff --git a/lib/datasource/dart/index.ts b/lib/datasource/dart/index.ts index 432892ddf6..ab6a109577 100644 --- a/lib/datasource/dart/index.ts +++ b/lib/datasource/dart/index.ts @@ -4,7 +4,7 @@ import { ReleaseResult, PkgReleaseConfig } from '../common'; export async function getPkgReleases({ lookupName, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { let result: ReleaseResult = null; const pkgUrl = `https://pub.dartlang.org/api/packages/${lookupName}`; interface DartResult { diff --git a/lib/datasource/docker/index.ts b/lib/datasource/docker/index.ts index f4085325ce..7d36addda8 100644 --- a/lib/datasource/docker/index.ts +++ b/lib/datasource/docker/index.ts @@ -41,7 +41,7 @@ function getRegistryRepository(lookupName: string, registryUrls: string[]) { async function getAuthHeaders( registry: string, repository: string -): Promise<OutgoingHttpHeaders> { +): Promise<OutgoingHttpHeaders | null> { try { const apiCheckUrl = `${registry}/v2/`; const apiCheckResponse = await got(apiCheckUrl, { throwHttpErrors: false }); @@ -225,7 +225,7 @@ async function getManifestResponse( export async function getDigest( { registryUrls, lookupName }: PkgReleaseConfig, newValue?: string -): Promise<string> { +): Promise<string | null> { const { registry, repository } = getRegistryRepository( lookupName, registryUrls @@ -272,7 +272,7 @@ export async function getDigest( async function getTags( registry: string, repository: string -): Promise<string[]> { +): Promise<string[] | null> { let tags: string[] = []; try { const cacheNamespace = 'datasource-docker-tags'; @@ -511,7 +511,7 @@ async function getLabels( export async function getPkgReleases({ lookupName, registryUrls, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { const { registry, repository } = getRegistryRepository( lookupName, registryUrls diff --git a/lib/datasource/git-tags/index.ts b/lib/datasource/git-tags/index.ts index 85ac2d11ab..1941a680b6 100644 --- a/lib/datasource/git-tags/index.ts +++ b/lib/datasource/git-tags/index.ts @@ -11,7 +11,7 @@ process.env.GIT_SSH_COMMAND = 'ssh -o BatchMode=yes'; export async function getPkgReleases({ lookupName, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { const git = simpleGit(); try { const cachedResult = await renovateCache.get<ReleaseResult>( diff --git a/lib/datasource/github/index.ts b/lib/datasource/github/index.ts index 804a785ee2..9011e45c3f 100644 --- a/lib/datasource/github/index.ts +++ b/lib/datasource/github/index.ts @@ -70,7 +70,10 @@ function getCacheKey(repo: string, type: string) { return `${repo}:${type}`; } -async function getTagCommit(githubRepo: string, tag: string): Promise<string> { +async function getTagCommit( + githubRepo: string, + tag: string +): Promise<string | null> { const cachedResult = await renovateCache.get<string>( cacheNamespace, getCacheKey(githubRepo, `tag-${tag}`) @@ -119,7 +122,7 @@ async function getTagCommit(githubRepo: string, tag: string): Promise<string> { export async function getDigest( { lookupName: githubRepo }: Partial<DigestConfig>, newValue?: string -): Promise<string> { +): Promise<string | null> { if (newValue && newValue.length) { return getTagCommit(githubRepo, newValue); } @@ -167,7 +170,7 @@ export async function getDigest( export async function getPkgReleases({ lookupName: repo, lookupType, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { let versions: string[]; const cachedResult = await renovateCache.get<ReleaseResult>( cacheNamespace, diff --git a/lib/datasource/gitlab/index.ts b/lib/datasource/gitlab/index.ts index d309275c4f..4a63027879 100644 --- a/lib/datasource/gitlab/index.ts +++ b/lib/datasource/gitlab/index.ts @@ -51,7 +51,7 @@ export async function getPkgReleases({ registryUrls, lookupName: repo, lookupType, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { // Use registryUrls if present, otherwise default to publid gitlab.com const depHost = is.nonEmptyArray(registryUrls) ? registryUrls[0].replace(/\/$/, '') diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts index f1963f09f5..21e5a84f38 100644 --- a/lib/datasource/go/index.ts +++ b/lib/datasource/go/index.ts @@ -8,7 +8,7 @@ interface DataSource { lookupName: string; } -async function getDatasource(name: string): Promise<DataSource> { +async function getDatasource(name: string): Promise<DataSource | null> { if (name.startsWith('gopkg.in/')) { const [pkg] = name.replace('gopkg.in/', '').split('.'); if (pkg.includes('/')) { @@ -72,7 +72,7 @@ async function getDatasource(name: string): Promise<DataSource> { */ export async function getPkgReleases({ lookupName, -}: Partial<PkgReleaseConfig>): Promise<ReleaseResult> { +}: Partial<PkgReleaseConfig>): Promise<ReleaseResult | null> { logger.trace(`go.getPkgReleases(${lookupName})`); const source = await getDatasource(lookupName); if (source && source.datasource === 'github') { @@ -100,7 +100,7 @@ export async function getPkgReleases({ export async function getDigest( { lookupName }: Partial<DigestConfig>, value?: string -): Promise<string> { +): Promise<string | null> { const source = await getDatasource(lookupName); if (source && source.datasource === 'github') { // ignore v0.0.0- pseudo versions that are used Go Modules - look up default branch instead diff --git a/lib/datasource/hex/index.ts b/lib/datasource/hex/index.ts index 3364512cd9..2ad134f203 100644 --- a/lib/datasource/hex/index.ts +++ b/lib/datasource/hex/index.ts @@ -18,7 +18,7 @@ interface HexRelease { export async function getPkgReleases({ lookupName, -}: Partial<PkgReleaseConfig>): Promise<ReleaseResult> { +}: Partial<PkgReleaseConfig>): Promise<ReleaseResult | null> { const hexUrl = `https://hex.pm/api/packages/${lookupName}`; try { const opts = getHostOpts(); diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts index c677ca1a37..269f0c9ed8 100644 --- a/lib/datasource/index.ts +++ b/lib/datasource/index.ts @@ -93,7 +93,9 @@ function getRawReleases(config: PkgReleaseConfig): Promise<ReleaseResult> { return global.repoCache[cacheKey]; } -async function fetchReleases(config: PkgReleaseConfig): Promise<ReleaseResult> { +async function fetchReleases( + config: PkgReleaseConfig +): Promise<ReleaseResult | null> { const { datasource } = config; if (!datasource) { logger.warn('No datasource found'); @@ -111,7 +113,10 @@ export function supportsDigests(config: DigestConfig) { return !!datasources[config.datasource].getDigest; } -export function getDigest(config: DigestConfig, value?: string) { +export function getDigest( + config: DigestConfig, + value?: string +): Promise<string | null> { const lookupName = config.lookupName || config.depName; const { registryUrls } = config; return datasources[config.datasource].getDigest( diff --git a/lib/datasource/npm/get.ts b/lib/datasource/npm/get.ts index 7291a84821..aa7304d1f9 100644 --- a/lib/datasource/npm/get.ts +++ b/lib/datasource/npm/get.ts @@ -40,7 +40,9 @@ export interface NpmDependency extends ReleaseResult { sourceDirectory?: string; } -export async function getDependency(name: string): Promise<NpmDependency> { +export async function getDependency( + name: string +): Promise<NpmDependency | null> { logger.trace(`npm.getDependency(${name})`); // This is our datastore cache and is cleared at the end of each repo, i.e. we never requery/revalidate during a "run" diff --git a/lib/datasource/npm/npmrc.ts b/lib/datasource/npm/npmrc.ts index 7f6fa8e26f..832f937251 100644 --- a/lib/datasource/npm/npmrc.ts +++ b/lib/datasource/npm/npmrc.ts @@ -3,10 +3,10 @@ import ini from 'ini'; import { isBase64 } from 'validator'; import { logger } from '../../logger'; -let npmrc: Record<string, any> = null; +let npmrc: Record<string, any> | null = null; let npmrcRaw: string; -export function getNpmrc() { +export function getNpmrc(): Record<string, any> | null { return npmrc; } @@ -57,7 +57,7 @@ export function setNpmrc(input?: string) { } } -function envReplace(value: any, env = process.env) { +function envReplace(value: any, env = process.env): any { // istanbul ignore if if (!is.string(value)) { return value; diff --git a/lib/datasource/npm/releases.ts b/lib/datasource/npm/releases.ts index d2d887d46c..e998dae7a8 100644 --- a/lib/datasource/npm/releases.ts +++ b/lib/datasource/npm/releases.ts @@ -5,7 +5,7 @@ import { PkgReleaseConfig, ReleaseResult } from '../common'; export async function getPkgReleases({ lookupName, npmrc, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { if (npmrc) { setNpmrc(npmrc); } diff --git a/lib/datasource/nuget/index.ts b/lib/datasource/nuget/index.ts index 56a1c108ec..529bdf126e 100644 --- a/lib/datasource/nuget/index.ts +++ b/lib/datasource/nuget/index.ts @@ -33,7 +33,7 @@ export async function getPkgReleases({ return dep; } -function detectFeedVersion(url: string) { +function detectFeedVersion(url: string): 2 | 3 | null { try { const parsecUrl = urlApi.parse(url); // Official client does it in the same way diff --git a/lib/datasource/nuget/v2.ts b/lib/datasource/nuget/v2.ts index 0297b8e4c3..ff362afbe7 100644 --- a/lib/datasource/nuget/v2.ts +++ b/lib/datasource/nuget/v2.ts @@ -7,7 +7,7 @@ import { ReleaseResult } from '../common'; export async function getPkgReleases( feedUrl: string, pkgName: string -): Promise<ReleaseResult> { +): Promise<ReleaseResult | null> { const dep: ReleaseResult = { pkgName, releases: null, diff --git a/lib/datasource/nuget/v3.ts b/lib/datasource/nuget/v3.ts index 06c3b5b88e..10631ebc9f 100644 --- a/lib/datasource/nuget/v3.ts +++ b/lib/datasource/nuget/v3.ts @@ -13,7 +13,7 @@ export function getDefaultFeed() { return defaultNugetFeed; } -export async function getQueryUrl(url: string): Promise<string> { +export async function getQueryUrl(url: string): Promise<string | null> { // https://docs.microsoft.com/en-us/nuget/api/search-query-service-resource const resourceType = 'SearchQueryService'; const cacheKey = `${url}:${resourceType}`; @@ -63,7 +63,7 @@ export async function getPkgReleases( registryUrl: string, feedUrl: string, pkgName: string -): Promise<ReleaseResult> { +): Promise<ReleaseResult | null> { let queryUrl = `${feedUrl}?q=${pkgName}`; if (registryUrl.toLowerCase() === defaultNugetFeed.toLowerCase()) { queryUrl = queryUrl.replace('q=', 'q=PackageId:'); diff --git a/lib/datasource/orb/index.ts b/lib/datasource/orb/index.ts index 61b399be1c..fd0e95547b 100644 --- a/lib/datasource/orb/index.ts +++ b/lib/datasource/orb/index.ts @@ -16,7 +16,7 @@ interface OrbRelease { */ export async function getPkgReleases({ lookupName, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { logger.debug({ lookupName }, 'orb.getPkgReleases()'); const cacheNamespace = 'orb'; const cacheKey = lookupName; diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts index 019323ed29..1259c4d9b9 100644 --- a/lib/datasource/packagist/index.ts +++ b/lib/datasource/packagist/index.ts @@ -39,7 +39,7 @@ interface RegistryMeta { packages?: Record<string, RegistryFile>; } -async function getRegistryMeta(regUrl: string) { +async function getRegistryMeta(regUrl: string): Promise<RegistryMeta | null> { try { const url = URL.resolve(regUrl.replace(/\/?$/, '/'), 'packages.json'); const opts = getHostOpts(url); @@ -154,7 +154,7 @@ interface AllPackages { includesPackages: Record<string, ReleaseResult>; } -async function getAllPackages(regUrl: string): Promise<AllPackages> { +async function getAllPackages(regUrl: string): Promise<AllPackages | null> { let repoCacheResult = global.repoCache[`packagist-${regUrl}`]; // istanbul ignore if if (repoCacheResult) { @@ -231,7 +231,10 @@ async function packagistOrgLookup(name: string) { return dep; } -async function packageLookup(regUrl: string, name: string) { +async function packageLookup( + regUrl: string, + name: string +): Promise<ReleaseResult | null> { try { if (regUrl === 'https://packagist.org') { const packagistResult = await packagistOrgLookup(name); diff --git a/lib/datasource/pypi/index.ts b/lib/datasource/pypi/index.ts index 08577dac58..9ed556dab5 100644 --- a/lib/datasource/pypi/index.ts +++ b/lib/datasource/pypi/index.ts @@ -32,7 +32,7 @@ export async function getPkgReleases({ compatibility, lookupName, registryUrls, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { let hostUrls = ['https://pypi.org/pypi/']; if (is.nonEmptyArray(registryUrls)) { hostUrls = registryUrls; @@ -59,7 +59,7 @@ async function getDependency( depName: string, hostUrl: string, compatibility: Record<string, string> -) { +): Promise<ReleaseResult | null> { const lookupUrl = url.resolve(hostUrl, `${depName}/json`); try { const dependency: ReleaseResult = { releases: null }; @@ -111,7 +111,7 @@ async function getDependency( async function getSimpleDependency( depName: string, hostUrl: string -): Promise<ReleaseResult> { +): Promise<ReleaseResult | null> { const lookupUrl = url.resolve(hostUrl, `${depName}`); try { const dependency: ReleaseResult = { releases: null }; @@ -147,7 +147,10 @@ async function getSimpleDependency( } } -function extractVersionFromLinkText(text: string, depName: string) { +function extractVersionFromLinkText( + text: string, + depName: string +): string | null { const prefix = `${depName}-`; const suffix = '.tar.gz'; if (!(text.startsWith(prefix) && text.endsWith(suffix))) { diff --git a/lib/datasource/rubygems/get-rubygems-org.ts b/lib/datasource/rubygems/get-rubygems-org.ts index 096dc47c4e..6931ba83d9 100644 --- a/lib/datasource/rubygems/get-rubygems-org.ts +++ b/lib/datasource/rubygems/get-rubygems-org.ts @@ -86,7 +86,7 @@ async function syncVersions() { export async function getRubygemsOrgDependency( lookupName: string -): Promise<ReleaseResult> { +): Promise<ReleaseResult | null> { logger.debug(`getRubygemsOrgDependency(${lookupName})`); await syncVersions(); if (!packageReleases[lookupName]) { diff --git a/lib/datasource/rubygems/get.ts b/lib/datasource/rubygems/get.ts index 3fe9d274a6..f5ac5641b3 100644 --- a/lib/datasource/rubygems/get.ts +++ b/lib/datasource/rubygems/get.ts @@ -56,7 +56,7 @@ const fetch = async ({ dependency, registry, path }) => { export const getDependency = async ({ dependency, registry, -}): Promise<ReleaseResult> => { +}): Promise<ReleaseResult | null> => { try { const info = await fetch({ dependency, registry, path: INFO_PATH }); if (!info) { diff --git a/lib/datasource/rubygems/releases.ts b/lib/datasource/rubygems/releases.ts index 34596c224b..01ace2b0f0 100644 --- a/lib/datasource/rubygems/releases.ts +++ b/lib/datasource/rubygems/releases.ts @@ -6,7 +6,7 @@ import { PkgReleaseConfig, ReleaseResult } from '../common'; export async function getPkgReleases({ lookupName, registryUrls, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { const registries = is.nonEmptyArray(registryUrls) ? registryUrls : []; for (const registry of registries) { diff --git a/lib/datasource/rubygems/retriable.ts b/lib/datasource/rubygems/retriable.ts index 4a55692ef7..cc2baceb7b 100644 --- a/lib/datasource/rubygems/retriable.ts +++ b/lib/datasource/rubygems/retriable.ts @@ -11,16 +11,16 @@ import { const RETRY_AFTER = 600; const NUMBER_OF_RETRIES = 5; -const getDelayStep = () => +const getDelayStep = (): number => parseInt(process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP || '1000', 10); -const toMs = (value: number) => value * getDelayStep(); -const getBannedDelay = (retryAfter: string) => +const toMs = (value: number): number => value * getDelayStep(); +const getBannedDelay = (retryAfter: string): number => (parseInt(retryAfter, 10) || RETRY_AFTER) + 1; -const getDefaultDelay = (count: number) => +const getDefaultDelay = (count: number): number => (NUMBER_OF_RETRIES * getDelayStep()) / count; -const getDelayMessage = (delay: any) => `Retry in ${delay} seconds.`; +const getDelayMessage = (delay: any): string => `Retry in ${delay} seconds.`; const getErrorMessage = (status: number) => { // istanbul ignore next switch (status) { diff --git a/lib/datasource/sbt/index.ts b/lib/datasource/sbt/index.ts index 9456fd1e6b..1e346b41ff 100644 --- a/lib/datasource/sbt/index.ts +++ b/lib/datasource/sbt/index.ts @@ -6,7 +6,7 @@ import { PkgReleaseConfig, ReleaseResult } from '../common'; export async function getPkgReleases( config: PkgReleaseConfig -): Promise<ReleaseResult> { +): Promise<ReleaseResult | null> { const { lookupName, depType } = config; const registryUrls = diff --git a/lib/datasource/terraform/index.ts b/lib/datasource/terraform/index.ts index ff884aab5d..df9a91ba55 100644 --- a/lib/datasource/terraform/index.ts +++ b/lib/datasource/terraform/index.ts @@ -43,7 +43,7 @@ interface TerraformRelease { export async function getPkgReleases({ lookupName, registryUrls, -}: PkgReleaseConfig): Promise<ReleaseResult> { +}: PkgReleaseConfig): Promise<ReleaseResult | null> { const { registry, repository } = getRegistryRepository( lookupName, registryUrls -- GitLab