Files

26 lines
1.2 KiB
JavaScript

import { z } from "zod";
/** Required, trimmed text */
export const req = (max = 300) => z.string().trim().min(1, "این فیلد الزامی است").max(max);
/** Optional, trimmed text (empty string when missing) */
export const text = (max = 300) => z.string().trim().max(max).default("");
export const idSchema = z.coerce.number().int().positive();
export const slugSchema = z
.string()
.trim()
.min(1, "این فیلد الزامی است")
.max(80)
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "فقط حروف کوچک انگلیسی، عدد و خط تیره (مثلاً safety-shoes)");
export const iconNameSchema = z.string().trim().min(1).max(80);
/** Image stored by URL inside section content */
export const imageRefSchema = z.object({
url: req(500),
alt: text(200),
});
export const linkSchema = z.object({
label: req(60),
href: req(300),
});
export const toIssues = (error) => error.issues.map((i) => ({ path: i.path.map(String).join("."), message: i.message }));
/** Convert latin digits to Persian digits */
export const faNum = (v) => String(v).replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[Number(d)]);
//# sourceMappingURL=common.js.map