import { z } from 'zod/v4'; import { LooseArray } from '../../../util/schema-utils/index.ts'; import { KubernetesResource } from '../kubernetes/schema.ts'; export const SveltosHelmSource = z.object({ repositoryURL: z.string(), repositoryName: z.string(), chartName: z.string(), chartVersion: z.string(), }); export type SveltosHelmSource = z.infer; export const SveltosHelmSpec = z.object({ helmCharts: LooseArray(SveltosHelmSource).optional(), }); export type SveltosHelmSpec = z.infer; export const ClusterProfile = KubernetesResource.extend({ apiVersion: z.string().startsWith('config.projectsveltos.io/'), kind: z.literal('ClusterProfile'), spec: SveltosHelmSpec, }); export const Profile = KubernetesResource.extend({ apiVersion: z.string().startsWith('config.projectsveltos.io/'), kind: z.literal('Profile'), spec: SveltosHelmSpec, }); export const EventTrigger = KubernetesResource.extend({ apiVersion: z.string().startsWith('lib.projectsveltos.io/'), kind: z.literal('EventTrigger'), spec: SveltosHelmSpec, }); export const ClusterPromotionSpec = z.object({ profileSpec: SveltosHelmSpec.optional(), }); export type ClusterPromotionSpec = z.infer; export const ClusterPromotion = KubernetesResource.extend({ apiVersion: z.string().startsWith('config.projectsveltos.io/'), kind: z.literal('ClusterPromotion'), spec: ClusterPromotionSpec, }); // Create a union schema for ProfileDefinition export const ProfileDefinition = z.union([ Profile, ClusterProfile, EventTrigger, ClusterPromotion, ]); export type ProfileDefinition = z.infer;