diff --git a/lib/modules/datasource/maven/util.ts b/lib/modules/datasource/maven/util.ts index 1edc357068e5cdde5791c6eacb8dfeee4e6ed4ad..dd6fd41961fd7dfb9c50ec0c956e099e51f55319 100644 --- a/lib/modules/datasource/maven/util.ts +++ b/lib/modules/datasource/maven/util.ts @@ -12,8 +12,8 @@ import { Result } from '../../../util/result'; import type { S3UrlParts } from '../../../util/s3'; import { getS3Client, parseS3Url } from '../../../util/s3'; import { streamToString } from '../../../util/streams'; +import { asTimestamp } from '../../../util/timestamp'; import { ensureTrailingSlash, parseUrl } from '../../../util/url'; -import { normalizeDate } from '../metadata'; import { getGoogleAuthToken } from '../util'; import { MAVEN_REPO } from './common'; import type { @@ -83,7 +83,7 @@ export async function downloadHttpProtocol( result.isCacheable = true; } - const lastModified = normalizeDate(res?.headers?.['last-modified']); + const lastModified = asTimestamp(res?.headers?.['last-modified']); if (lastModified) { result.lastModified = lastModified; } @@ -203,7 +203,7 @@ export async function downloadS3Protocol( const data = await streamToString(Body); const result: MavenFetchSuccess = { data }; - const lastModified = normalizeDate(LastModified); + const lastModified = asTimestamp(LastModified); if (lastModified) { result.lastModified = lastModified; } @@ -276,7 +276,7 @@ async function checkHttpResource( const res = await http.head(pkgUrl.toString()); const timestamp = res?.headers?.['last-modified']; if (timestamp) { - const isoTimestamp = normalizeDate(timestamp); + const isoTimestamp = asTimestamp(timestamp); if (isoTimestamp) { const releaseDate = DateTime.fromISO(isoTimestamp, { zone: 'UTC', diff --git a/lib/modules/datasource/metadata.spec.ts b/lib/modules/datasource/metadata.spec.ts index 0b49c803ce8db82b2c5c37634d12bb6e7706b975..645d270f98ae1bf2b58ce6a29a9334bbe7760632 100644 --- a/lib/modules/datasource/metadata.spec.ts +++ b/lib/modules/datasource/metadata.spec.ts @@ -5,7 +5,6 @@ import { addMetaData, massageGithubUrl, massageUrl, - normalizeDate, shouldDeleteHomepage, } from './metadata'; import { NpmDatasource } from './npm'; @@ -521,23 +520,4 @@ describe('modules/datasource/metadata', () => { sourceUrl: 'https://github.com/flyingcircusio/pycountry', }); }); - - describe('normalizeDate()', () => { - it('works for number input', () => { - const now = Date.now(); - expect(normalizeDate(now)).toBe(new Date(now).toISOString()); - }); - - it('works for string input', () => { - expect(normalizeDate('2021-01-01')).toBe( - new Date('2021-01-01').toISOString(), - ); - }); - - it('works for Date instance', () => { - expect(normalizeDate(new Date('2021-01-01'))).toBe( - new Date('2021-01-01').toISOString(), - ); - }); - }); }); diff --git a/lib/modules/datasource/metadata.ts b/lib/modules/datasource/metadata.ts index bdfbe258b026454a1e6024c848f7776196848a87..6fe5efa54a465a3206d2da6c54f1dc0c20d71431 100644 --- a/lib/modules/datasource/metadata.ts +++ b/lib/modules/datasource/metadata.ts @@ -1,10 +1,10 @@ import is from '@sindresorhus/is'; import parse from 'github-url-from-git'; -import { DateTime } from 'luxon'; import { detectPlatform } from '../../util/common'; import { parseGitUrl } from '../../util/git/url'; import * as hostRules from '../../util/host-rules'; import { regEx } from '../../util/regex'; +import { asTimestamp } from '../../util/timestamp'; import { isHttpUrl, parseUrl, trimTrailingSlash } from '../../util/url'; import { manualChangelogUrls, manualSourceUrls } from './metadata-manual'; import type { ReleaseResult } from './types'; @@ -64,59 +64,11 @@ function massageGitAtUrl(url: string): string { return massagedUrl; } -/** - * @deprecated Use `asTimestamp` instead - */ -export function normalizeDate(input: any): string | null { - if ( - typeof input === 'number' && - !Number.isNaN(input) && - input > 0 && - input <= Date.now() + 24 * 60 * 60 * 1000 - ) { - return new Date(input).toISOString(); - } - - if (typeof input === 'string') { - // `Date.parse()` is more permissive, but it assumes local time zone - // for inputs like `2021-01-01`. - // - // Here we try to parse with default UTC with fallback to `Date.parse()`. - // - // It allows us not to care about machine timezones so much, though - // some misinterpretation is still possible, but only if both: - // - // 1. Renovate machine is configured for non-UTC zone - // 2. Format of `input` is very exotic - // (from `DateTime.fromISO()` perspective) - // - - let luxonDate = DateTime.fromISO(input, { zone: 'UTC' }); - if (luxonDate.isValid) { - return luxonDate.toISO(); - } - luxonDate = DateTime.fromFormat(input, 'yyyyMMddHHmmss', { - zone: 'UTC', - }); - if (luxonDate.isValid) { - return luxonDate.toISO(); - } - - return normalizeDate(Date.parse(input)); - } - - if (input instanceof Date) { - return input.toISOString(); - } - - return null; -} - function massageTimestamps(dep: ReleaseResult): void { for (const release of dep.releases || []) { let { releaseTimestamp } = release; delete release.releaseTimestamp; - releaseTimestamp = normalizeDate(releaseTimestamp); + releaseTimestamp = asTimestamp(releaseTimestamp); if (releaseTimestamp) { release.releaseTimestamp = releaseTimestamp; } diff --git a/lib/modules/datasource/nuget/__snapshots__/index.spec.ts.snap b/lib/modules/datasource/nuget/__snapshots__/index.spec.ts.snap index e668b57267e71e6ac343a4f22eb33fce0c47ac14..9b1702cc94ed93080ce0d244c34e7a1edd937ba0 100644 --- a/lib/modules/datasource/nuget/__snapshots__/index.spec.ts.snap +++ b/lib/modules/datasource/nuget/__snapshots__/index.spec.ts.snap @@ -34,7 +34,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v2) 1`] "version": "2.5.10.11092", }, { - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, { @@ -228,7 +227,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) fee }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, { @@ -418,7 +416,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) fee }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, { @@ -604,12 +601,10 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.0.1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.0.1.1", }, { @@ -638,7 +633,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.0.0-rc", }, { @@ -651,12 +645,10 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.1.0-alpha1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.1.0-rc1", }, { @@ -665,7 +657,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.1.1-rc1", }, { @@ -678,7 +669,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.2.0-rc1", }, { @@ -687,7 +677,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.2.1-rc1", }, { @@ -704,52 +693,42 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-alpha1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-alpha2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-alpha3", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-alpha4", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-beta1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-beta2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-beta3", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-rc1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-rc2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.0-rc3", }, { @@ -758,7 +737,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.1-rc1", }, { @@ -779,7 +757,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.5-alpha1", }, { @@ -800,7 +777,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.3.9-test-retry-archive", }, { @@ -817,112 +793,90 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-alpha1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-alpha2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-alpha3", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-alpha4", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta-14", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta10", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta11", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta12", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta13", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta3", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta4", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta5", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta6", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta7", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta8", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-beta9", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-betaV14", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-betaV15", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-rc1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.0-rc2", }, { @@ -931,12 +885,10 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.1-dev-b4084", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.1-dev-b4085", }, { @@ -945,12 +897,10 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.2-rc1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.2-rc2", }, { @@ -967,7 +917,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.5-beta1", }, { @@ -976,22 +925,18 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.6-beta1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.6-beta2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.6-beta3", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.4.6-rc1", }, { @@ -1028,97 +973,78 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-alpha01", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-alpha02", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-alpha03", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-alpha04", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta01", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta02", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta03", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta04", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta05", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta06", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta07", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-beta08", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc01", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc02", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc03", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc04", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc05", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc06", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.5.0-rc07", }, { @@ -1171,17 +1097,14 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.6.0-rc1", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.6.0-rc2", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.6.0-rc3", }, { @@ -1222,7 +1145,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "4.7.0-rc1", }, { @@ -1243,67 +1165,54 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) for }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta01", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta02", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta03", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta03-tryoutMutex", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta04", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta05", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta05-test", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta06", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta07", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta08", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta09", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta10", }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "5.0.0-beta11", }, ], @@ -1329,7 +1238,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) nus }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, { @@ -1519,7 +1427,6 @@ exports[`modules/datasource/nuget/index getReleases processes real data (v3) nus }, { "isDeprecated": true, - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, { @@ -1868,7 +1775,6 @@ exports[`modules/datasource/nuget/index getReleases returns deduplicated results { "isDeprecated": true, "registryUrl": "https://api.nuget.org/v3/index.json", - "releaseTimestamp": "1900-01-01T00:00:00.000Z", "version": "2.6.0.12051", }, {