mmy / lib /validators.ts
Mohammad Shahid
added self repair and removed player ai
d87d4e5
import { Type } from "@google/genai";
import { z } from "zod";
export const heroFormSchema = z.object({
_id: z.string(),
heroName: z.string().min(2, "Name must be at least 2 characters."),
heroGender: z.enum(["Male", "Female"]),
heroDescription: z.string().min(10, "Description is too short."),
heroColor: z.string().regex(/^#[0-9a-fA-F]{6}$/, "Must be a valid hex color."),
heroHealth: z.number().int().min(50),
heroSpeed: z.number().min(0.5),
basicAttack: z.object({
type: z.enum(['RANGED', 'MELEE', 'CONTACT']),
damage: z.number().min(1),
cooldown: z.number().min(0.5),
range: z.number().min(0),
}),
powerName: z.string().min(3, "Power name is too short."),
powerDescription: z.string().min(10, "Power description is too short."),
powerLogicDescription: z.string().min(10, "Power logic description is too short."),
powerLogic: z.string().min(20, "Power logic code seems too short."),
introLine: z.string().min(5, "Intro line is too short."),
superpowerActivationLine: z.string().min(5, "Activation line is too short."),
avatarPrompt: z.string().min(10),
iconPrompt: z.string().min(10),
avatarUrl: z.string().url("Must be a valid URL."),
iconUrl: z.string().url("Must be a valid URL."),
introLineAudioUrl: z.string().url().optional().nullable(),
superpowerActivationLineAudioUrl: z.string().url().optional().nullable(),
tags: z.array(z.string()).optional(),
});
export const heroDataSchema = {
type: Type.OBJECT,
properties: {
heroName: { type: Type.STRING },
heroGender: { type: Type.STRING },
heroDescription: { type: Type.STRING },
heroColor: { type: Type.STRING },
heroHealth: { type: Type.NUMBER },
heroSpeed: { type: Type.NUMBER },
basicAttack: {
type: Type.OBJECT,
properties: {
type: { type: Type.STRING }, // e.g., "RANGED", "MELEE", "CONTACT"
damage: { type: Type.NUMBER },
cooldown: { type: Type.NUMBER },
range: { type: Type.NUMBER },
knockback: { type: Type.NUMBER },
},
required: ["type", "damage", "cooldown", "range", "knockback"],
},
powerName: { type: Type.STRING },
powerDescription: { type: Type.STRING },
powerLogicDescription: { type: Type.STRING },
introLine: { type: Type.STRING },
superpowerActivationLine: { type: Type.STRING },
avatarPrompt: { type: Type.STRING },
iconPrompt: { type: Type.STRING },
tags: { type: Type.ARRAY, items: { type: Type.STRING } },
},
required: [
"heroName",
"heroGender",
"heroDescription",
"heroColor",
"heroHealth",
"heroSpeed",
"basicAttack",
"powerName",
"powerDescription",
"powerLogicDescription",
"introLine",
"superpowerActivationLine",
"avatarPrompt",
"iconPrompt",
"tags",
],
};