import { isString } from '@sindresorhus/is'; import { z } from 'zod/v4'; import { MavenDatasource } from '../../../datasource/maven/index.ts'; import { id as versioning } from '../../../versioning/gradle/index.ts'; import type { PackageDependency } from '../../types.ts'; export const mavenRules = ['maven_install', '_maven_install'] as const; const ArtifactSpec = z.union([ z.object({ group: z.string(), artifact: z.string(), version: z.string(), }), z .object({ '0': z.string(), '1': z.string(), '2': z.string(), }) .transform((x) => ({ group: x[0], artifact: x[1], version: x[2] })), ]); type ArtifactSpec = z.infer; export const MavenTarget = z .object({ rule: z.enum(mavenRules), artifacts: z .union([z.string(), ArtifactSpec]) .array() .transform((xs) => { const result: ArtifactSpec[] = []; for (const x of xs) { if (isString(x)) { const [group, artifact, version] = x.split(':'); if (group && artifact && version) { result.push({ group, artifact, version }); } } else { result.push(x); } } return result; }), repositories: z.array(z.string()).optional(), }) .transform( ({ rule: depType, artifacts, repositories: registryUrls, }): PackageDependency[] => artifacts.map(({ group, artifact, version: currentValue }) => ({ datasource: MavenDatasource.id, versioning, depName: `${group}:${artifact}`, currentValue, depType, registryUrls, })), );