Initial Commit

This commit is contained in:
Ahmad 2024-02-14 21:30:10 -05:00
commit f3e2f01bd7
No known key found for this signature in database
GPG key ID: 8FD8A93530D182BF
150 changed files with 13612 additions and 0 deletions

28
lib/create-safe-action.ts Normal file
View file

@ -0,0 +1,28 @@
import { z } from "zod";
export type FieldErrors<T> = {
[K in keyof T]?: string[];
};
export type ActionState<TInput, TOutput> = {
fieldErrors?: FieldErrors<TInput>;
error?: string | null;
data?: TOutput;
};
export const createSafeAction = <TInput, TOutput>(
schema: z.Schema<TInput>,
handler: (validatedData: TInput) => Promise<ActionState<TInput, TOutput>>
) => {
return async (data: TInput): Promise<ActionState<TInput, TOutput>> => {
const validationResult = schema.safeParse(data);
if (!validationResult.success) {
return {
fieldErrors: validationResult.error.flatten()
.fieldErrors as FieldErrors<TInput>,
};
}
return handler(validationResult.data);
};
};