import { z } from "zod"; export const InstallMethodSchema = z.object({ type: z.enum(["default", "alpine"], { errorMap: () => ({ message: "Type must be either 'default' or 'alpine'" }), }), script: z.string().min(1, "Script content cannot be empty"), resources: z.object({ cpu: z.number().nullable(), ram: z.number().nullable(), hdd: z.number().nullable(), os: z.string().nullable(), version: z.string().nullable(), }), }); const NoteSchema = z.object({ text: z.string().min(1, "Note text cannot be empty"), type: z.string().min(1, "Note type cannot be empty"), }); export const ScriptSchema = z.object({ name: z.string().min(1, "Name is required"), slug: z.string().min(1, "Slug is required"), categories: z.array(z.number()), date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"), type: z.enum(["vm", "ct", "pve", "addon", "turnkey"], { errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'pve', 'addon' or 'turnkey'" }), }), updateable: z.boolean(), privileged: z.boolean(), interface_port: z.number().nullable(), documentation: z.string().nullable(), website: z.string().url().nullable(), logo: z.string().url().nullable(), config_path: z.string(), description: z.string().min(1, "Description is required"), install_methods: z.array(InstallMethodSchema).min(1, "At least one install method is required"), default_credentials: z.object({ username: z.string().nullable(), password: z.string().nullable(), }), notes: z.array(NoteSchema), }); export type Script = z.infer;