Personal no-bs blogging platform.
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243import * as z from 'zod';import type { ValidationTargets } from 'hono';import { zValidator as zv } from '@hono/zod-validator';import { MIN_PASSWORD, MAX_SUBDOMAIN, MAX_BLOG_TITLE, MAX_BLOG_DESCRIPTION, MAX_POST_LENGTH, MAX_POST_TITLE_LENGTH } from "./constants";
export const signup_schema = z.object({ email: z.email(), // { pattern: /^(?!\.)(?!.*\.\.)([a-z0-9_'\-\.]*)[a-z0-9_-]@([a-z0-9][a-z0-9\-]*\.)+[a-z]{2,}$/ } <- add this to disable + sign. password: z.string().min(MIN_PASSWORD, `Password isn't long enough! Use at least ${MIN_PASSWORD} characters.`), subdomain: z.string({ error: "Invalid subdomain!" }).max(MAX_SUBDOMAIN, `That's too long of a subdomain. Maximum length is ${MAX_SUBDOMAIN} chars.`).toLowerCase().regex(/^(?!-)[a-z0-9-]{0,}$/, "Subdomain contains invalid characters."), title: z.string().max(MAX_BLOG_TITLE, `That title is too long! Shorten it to less than ${MAX_BLOG_TITLE}`), description: z.string().max(MAX_BLOG_DESCRIPTION, `Description is too long. Shorten it to less than ${MAX_BLOG_DESCRIPTION}`),});
export const login_schema = z.object({ email: z.email("Invalid email"), password: z.string(),});
export const update_post_schema = z.object({ content: z.string().max(MAX_POST_LENGTH, `Post's content must be <${MAX_POST_LENGTH} characters.`).trim().optional(), title: z.string().max(MAX_POST_TITLE_LENGTH, `Title must be <${MAX_POST_LENGTH} characters.`).trim().optional(), publish: z.boolean().optional(),});
export const publish_post_schema = z.object({ uuid: z.uuidv7(),})
export const zValidator = <T extends z.ZodSchema, Target extends keyof ValidationTargets>( target: Target, schema: T) => zv(target, schema, ((val, c) => { if (!val.success) { const error = z.flattenError(val.error); const errors = (error.fieldErrors as any); return c.json({ success: false, errors }, 400) } }))