renovate/lib/modules/datasource/endoflife-date/schema.ts

36 lines
869 B
TypeScript
Raw Permalink Normal View History

import { DateTime } from 'luxon';
import { z } from 'zod';
2023-06-04 09:06:43 -06:00
import { UtcDate } from '../../../util/schema-utils';
import type { Release } from '../types';
2023-06-04 09:06:43 -06:00
const ExpireableField = z.union([
UtcDate.transform((x) => {
const now = DateTime.now().toUTC();
return x <= now;
}),
z.boolean(),
]);
export const EndoflifeDateVersions = z
.object({
cycle: z.string(),
latest: z.optional(z.string()),
releaseDate: z.optional(z.string()),
2023-06-04 09:06:43 -06:00
eol: z.optional(ExpireableField),
discontinued: z.optional(ExpireableField),
})
2023-06-04 09:06:43 -06:00
.transform(
({
cycle,
latest,
releaseDate: releaseTimestamp,
eol,
discontinued,
}): Release => {
const version = latest ?? cycle;
const isDeprecated = eol === true || discontinued === true;
return { version, releaseTimestamp, isDeprecated };
},
2023-06-04 09:06:43 -06:00
)
.array();