// app/create-account/actions.ts
"use server";
import { z } from "zod";
const usernameSchema = z.string().min(5).max(10);
export async function createAccount(prevState: any, formData: FormData) {
const data = {
username: formData.get("username"),
email: formData.get("email"),
password: formData.get("password"),
confirm_password: formData.get("confirm_password"),
};
usernameSchema.parse(data.username);
}
import { z } from "zod";
// creating a schema for strings
const mySchema = z.string();
// parsing
mySchema.parse("tuna"); // => "tuna"
mySchema.parse(12); // => throws ZodError
// "safe" parsing (doesn't throw error if validation fails)
mySchema.safeParse("tuna"); // => { success: true; data: "tuna" }
mySchema.safeParse(12); // => { success: false; error: ZodError }
TypeScript-first schema validation with static type inference
// app/create-account/actions.ts
"use server";
import { z } from "zod";
const formSchema = z.object({
username: z.string().min(3).max(10),
email: z.string().email(),
password: z.string().min(10),
confirm_password: z.string().min(10),
});
export async function createAccount(prevState: any, formData: FormData) {
const data = {
username: formData.get("username"),
email: formData.get("email"),
password: formData.get("password"),
confirm_password: formData.get("confirm_password"),
};
const result = formSchema.safeParse(data);
if (!result.success) {
return result.error.flatten();
}
}
// app/create-account/page.tsx
<FormInput
name="password"
type="password"
placeholder="Password"
required
errors={state?.fieldErrors.password}
/>