UNPKG

remix-conform-rpc

Version:

Supercharge your remix/react-router actions and loaders with typesafe param and query parsing using conform and zod

41 lines 1.56 kB
import { parseWithZod } from "@conform-to/zod"; import { getParamsOrFail, getSearchParamsOrFail } from "remix-params-helper"; import { z, ZodSchema } from "zod"; import { invalidSubmission } from "./response.server.js"; import { respondWithError } from "../utils/error.js"; async function setupAction({ actionArgs, schema, mutation, querySchema, paramSchema, middleware }) { const formData = await actionArgs.request.formData(); const submission = parseWithZod(formData, { schema }); if (submission.status !== "success") { return invalidSubmission(submission); } const params = paramSchema ? getParamsOrFail(actionArgs.params, paramSchema) : undefined; const query = querySchema ? getSearchParamsOrFail(actionArgs.request, querySchema) : undefined; const mutationArgs = { submission: submission, request: actionArgs.request, context: actionArgs.context, ...(params && { params }), ...(query && { query }) }; const middlewareResult = middleware ? await middleware(mutationArgs) : undefined; try { return await mutation({ ...mutationArgs, ...middlewareResult }); } catch (thrownValue) { if (thrownValue instanceof Response) { throw thrownValue; } return respondWithError(null, { message: thrownValue instanceof Error ? thrownValue.message : "unknown_error", code: 500 }); } } export { setupAction }; //# sourceMappingURL=setup-action.server.js.map