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

68 lines
1.8 KiB
TypeScript

import { z } from 'zod/v4';
import { regEx } from '../../../../util/regex.ts';
import type { PackageDependency } from '../../types.ts';
import type { Fragment, FragmentData, Target } from '../types.ts';
import { DockerTarget, dockerRules } from './docker.ts';
import { GitTarget, gitRules } from './git.ts';
import { GoTarget, goRules } from './go.ts';
import { HttpTarget, httpRules } from './http.ts';
import { MavenTarget, mavenRules } from './maven.ts';
import { OciTarget, ociRules } from './oci.ts';
const Target = z.union([
DockerTarget,
OciTarget,
GitTarget,
GoTarget,
HttpTarget,
MavenTarget,
]);
/**
* Gather all rule names supported by Renovate in order to speed up parsing
* by filtering out other syntactically correct rules we don't support yet.
*/
const supportedRules = [
...dockerRules,
...ociRules,
...gitRules,
...goRules,
...httpRules,
...mavenRules,
];
export const supportedRulesRegex = regEx(`^(?:${supportedRules.join('|')})$`);
export function extractDepsFromFragmentData(
fragmentData: FragmentData,
): PackageDependency[] {
const res = Target.safeParse(fragmentData);
if (!res.success) {
return [];
}
return res.data;
}
export function extractDepsFromFragment(
fragment: Fragment,
): PackageDependency[] {
const fragmentData = extract(fragment);
return extractDepsFromFragmentData(fragmentData);
}
export function extract(fragment: Fragment): FragmentData {
if (fragment.type === 'string') {
return fragment.value;
}
if (fragment.type === 'record') {
const { children } = fragment;
const result: Record<string, FragmentData> = {};
for (const [key, value] of Object.entries(children)) {
result[key] = extract(value);
}
return result;
}
return fragment.children.map(extract);
}