@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
JavaScript
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;
}