UNPKG

@astro-utils/forms

Version:

Server component for Astro (call server functions from client side with validation and state management)

29 lines (28 loc) 935 B
import { createLock } from '../utils.js'; import { validateFrom } from './csrf.js'; export function isPost(astro) { return astro.request.method === "POST"; } export async function parseFormData(request) { const lock = request.formDataLock ?? (request.formDataLock = createLock()); await lock.acquireAsync(); try { const formData = await request.formData(); request.formData = () => Promise.resolve(formData); return formData; } finally { lock.release(); } } export async function getFormValue(request, key) { const data = await parseFormData(request); return data.get(key); } export async function getFormMultiValue(request, key) { const data = await parseFormData(request); return data.getAll(key); } export async function validateAction(astro, formKey, value) { return await validateFrom(astro) && await getFormValue(astro.request, formKey) == value; }