UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

53 lines (50 loc) 1.71 kB
import type { APIContext } from 'astro'; import { AstroError } from 'astro/errors'; import { z } from 'astro/zod'; import { createJsonResponse, Effect, genLogger, parseFormDataEntryToString, readAPIContextFormData, readAPIContextJson, Schema, } from '../../../effect.js'; export class FormDataEntryFields extends Schema.Class<FormDataEntryFields>('FormDataEntryFields')({ title: Schema.String, description: Schema.String, }) {} export class AuthAPIUtils extends Effect.Service<AuthAPIUtils>()( 'studiocms/routes/api/auth/shared/AuthAPIUtils', { effect: genLogger('studiocms/routes/api/auth/shared/AuthAPIUtils.effect')(function* () { return { parseFormDataEntryToString: parseFormDataEntryToString, // biome-ignore lint/suspicious/noExplicitAny: This is a generic utility function readJson: (context: APIContext) => readAPIContextJson<any>(context), readFormData: (context: APIContext) => readAPIContextFormData(context), badFormDataEntry: (title: string, description: string) => genLogger('studiocms/routes/api/auth/shared/AuthAPIUtils.badFormDataEntry')(function* () { const error = yield* Schema.decode(FormDataEntryFields)({ title, description }); return createJsonResponse( { error }, { status: 400, statusText: 'Bad Request', } ); }), validateEmail: (email: string) => Effect.try({ try: () => { const emailSchema = z.coerce.string().email({ message: 'Email address is invalid' }); return emailSchema.safeParse(email); }, catch: () => new AstroError('Failed to parse email with zod.'), }), }; }), } ) { static Provide = Effect.provide(this.Default); }