remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
foodEntry.ts
(1317B)
1 import { withZod } from "@remix-validated-form/with-zod";
2 import { z } from "zod";
3
4 export const foodEntryUserSchema = z
5 .object({
6 name: z
7 .string()
8 .min(1, { message: "Food name is required" })
9 .max(64, { message: "Food name is too long" }),
10 consumed: z
11 .string()
12 .min(1, { message: "Consumed Date is required" })
13 .regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/, {
14 message: "Consumed Date is invalid",
15 })
16 .refine((x) => new Date(x) < new Date(), {
17 message: "Consumed Date is too young",
18 }),
19 calories: z
20 .string()
21 .min(1, { message: "Calories is required" })
22 .refine((x) => !Number.isNaN(Number(x)), {
23 message: "Calories is not a number",
24 })
25 .refine((x) => Number(x) >= 0, {
26 message: "Calories is a non-negative number",
27 })
28 .refine((x) => Number(x) <= 5000, {
29 message: "Too many calories",
30 }),
31 })
32 .strict();
33
34 export const foodEntryAdminSchema = foodEntryUserSchema
35 .extend({
36 userId: z
37 .string()
38 .min(1, { message: "User ID is required" })
39 .cuid({ message: "User ID is not valid" }),
40 })
41 .strict();
42
43 export const foodEntryUserValidator = withZod(foodEntryUserSchema);
44 export const foodEntryAdminValidator = withZod(foodEntryAdminSchema);