Files
renovate/lib/modules/manager/gitlabci/schema.ts
T
Sebastian Poxhofer 15f4bd8eff chore: migrate from zod/v3 to zod/v4 (#43691)
* chore: migrate from zod/v3 to zod/v4

This commit contains the logic changes

* chore: migrate imports from zod/v3 to zod/v4

This contains import updates and adds explicit record keys as zod/v4 requires these now

* ci: enforce usage of zod/v4
2026-05-30 16:01:58 +00:00

75 lines
1.9 KiB
TypeScript

import { z } from 'zod/v4';
import { toArray } from '../../../util/array.ts';
import { LooseArray, LooseRecord } from '../../../util/schema-utils/index.ts';
import { trimLeadingSlash } from '../../../util/url.ts';
const LocalInclude = z
.union([
z.string(),
z.object({ local: z.string() }).transform(({ local }) => local),
])
.transform(trimLeadingSlash);
const DocumentLocalIncludes = z
.object({
include: z.union([
LooseArray(LocalInclude),
LocalInclude.transform(toArray),
]),
})
.transform(({ include }) => include);
export const MultiDocumentLocalIncludes = LooseArray(
DocumentLocalIncludes,
).transform((includes) => includes.flat());
export const Job = z.object({
image: z
.union([
z.string().transform((image) => ({
type: 'image' as const,
value: image,
})),
z.object({ name: z.string() }).transform(({ name }) => ({
type: 'image-name' as const,
value: name,
})),
])
.optional()
.catch(undefined),
services: LooseArray(
z.union([
z.string(),
z.object({ name: z.string() }).transform(({ name }) => name),
]),
).catch([]),
});
export const Jobs = LooseRecord(z.string(), Job)
.catch({})
.transform((x) => Object.values(x));
const GitlabInclude = z
.object({ component: z.string() })
.transform(({ component }) => component);
const GitlabIncludes = z
.union([LooseArray(GitlabInclude), GitlabInclude.transform(toArray)])
.catch([]);
export const GitlabDocument = z
.record(z.string(), z.unknown())
.transform((obj) => {
const { include, ...rest } = obj;
const children = Object.values(rest);
return { include, children };
})
.transform(({ include, children }): string[] => [
...GitlabDocumentArray.parse(children),
...GitlabIncludes.parse(include),
]);
const GitlabDocumentArray = LooseArray(GitlabDocument).transform((x) =>
x.flat(),
);