mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-27 07:50:47 +00:00
b84a54cda7
* fix(datasource/crate): tolerate null metadata fields crates.io returns `null` for unset crate metadata fields. `z.string().optional()` rejects `null`, so a single null field (e.g. `documentation` on the `sentry` crate) failed the whole metadata parse and discarded the valid `repository`, leaving `sourceUrl` unset and breaking monorepo grouping. Use `.nullish()` so null fields are tolerated. * datasource/crate: Use `Nullish()` for metadata * datasource/crate: Use `sentry` for null metadata test * datasource/crate: Use `DeepNullish()` for metadata
35 lines
951 B
TypeScript
35 lines
951 B
TypeScript
import { z } from 'zod/v4';
|
|
import { DeepNullish } from '../../../util/schema-utils/index.ts';
|
|
import { MaybeTimestamp } from '../../../util/timestamp.ts';
|
|
|
|
export const RegistryConfig = z.object({
|
|
dl: z.string(),
|
|
api: z.string().optional(),
|
|
});
|
|
export type RegistryConfig = z.infer<typeof RegistryConfig>;
|
|
|
|
export const ReleaseTimestamp = z
|
|
.object({
|
|
version: z.object({
|
|
created_at: MaybeTimestamp,
|
|
}),
|
|
})
|
|
.transform(({ version: { created_at } }) => created_at)
|
|
.nullable()
|
|
.catch(null);
|
|
|
|
export const CrateMetadata = DeepNullish(
|
|
z.object({
|
|
description: z.string().optional(),
|
|
documentation: z.string().optional(),
|
|
homepage: z.string().optional(),
|
|
repository: z.string().optional(),
|
|
}),
|
|
);
|
|
export type CrateMetadata = z.infer<typeof CrateMetadata>;
|
|
|
|
export const CrateMetadataResponse = z.object({
|
|
crate: CrateMetadata,
|
|
});
|
|
export type CrateMetadataResponse = z.infer<typeof CrateMetadataResponse>;
|