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
JavaScript
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