Files
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

53 lines
1.5 KiB
TypeScript

import { z } from 'zod/v4';
import { toArray } from '../../../util/array.ts';
import { LooseArray } from '../../../util/schema-utils/index.ts';
import { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';
import type { PackageDependency } from '../types.ts';
const GitlabInclude = z
.object({
project: z.string(),
ref: z.string().optional().catch(undefined),
})
.transform(({ project, ref }) => {
const dep: PackageDependency = {
datasource: GitlabTagsDatasource.id,
depName: project,
depType: 'repository',
};
if (!ref) {
dep.skipReason = 'unspecified-version';
return dep;
}
dep.currentValue = ref;
return dep;
});
const GitlabIncludes = z
.union([GitlabInclude.transform(toArray), LooseArray(GitlabInclude)])
.catch([]);
const GitlabRecord = z.record(z.string(), z.unknown()).transform((obj) => {
const { include, ...rest } = obj;
const children = Object.values(rest);
return { include, children };
});
export const GitlabDocument = z
.union([GitlabRecord.transform(toArray), LooseArray(GitlabRecord)])
.transform((docs): PackageDependency[] =>
docs
.map(({ include, children }) => {
const deps = GitlabIncludes.parse(include);
const childrenDeps = GitlabDocumentArray.parse(children);
return [...childrenDeps, ...deps];
})
.flat(),
);
export const GitlabDocumentArray = LooseArray(GitlabDocument)
.transform((x) => x.flat())
.catch([]);