26 lines
1.2 KiB
JavaScript
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
|