@lacspace/form
End-to-end form handling for the server — turn FormData into typed, validated data with a honeypot + timing spam guard, and get back your data or per-field errors ready to re-render. Shaped for Next.js Server Actions. Zero-dependency, isomorphic.
npm i @lacspace/formUsage
// app/actions.ts
"use server";
import { createForm } from "@lacspace/form";
import { v } from "@lacspace/validate";
const contact = createForm({
schema: v.object({
name: v.string().min(2),
email: v.string().email(),
message: v.string().min(10),
}),
honeypot: "company", // hidden field bots fill; humans never see it
minSubmitMs: 800, // reject sub-second (bot-speed) submissions
});
export async function submit(prev: unknown, formData: FormData) {
const r = contact.action(prev, formData);
if (!r.ok) return r; // { errors, values } → re-render form
await sendEmail(r.data); // ✅ { name, email, message } fully typed
return { ok: true as const };
}Exports 5
createFormformDataToObjecthandleFormhoneypotPropstimestampValueKeywords
More in App & Utils Kit
A tiny in-memory cache — LRU eviction, per-entry TTL and stale-while-revalidate, plus wrap()/memoize() to cache any async function with in-flight de-duplication. Zero-dependency, isomorphic.
@lacspace/caseConvert strings between cases — camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, Sentence case. Handles acronyms & numbers. Zero-dependency, isomorphic.
@lacspace/colorParse, convert, manipulate and check colours — hex/rgb/hsl, lighten/darken/mix/alpha, and WCAG contrast for accessible palettes. Zero-dependency, isomorphic.
@lacspace/envTyped, validated environment variables — declare a schema, validate process.env at boot, get a typed frozen object or a clear fail-fast error. A zero-dependency t3-env / envalid alternative.
@lacspace/flagsFeature flags & A/B experiments with no SaaS and no infrastructure — deterministic bucketing (same user always gets the same result), targeting rules, percentage rollouts and weighted variants. Synchronous, zero-dependency, isomorphic.
@lacspace/humanizeTurn machine values into human-readable text — bytes, durations, relative time, ordinals, plurals, compact numbers and grammatical lists. Zero-dependency, isomorphic.