UNPKG

zod-server-actions

Version:

Simple utility library to create server actions in Next.js

44 lines (43 loc) 1.75 kB
import { makeResponseError, makeResponseSuccess } from "./response"; import { makeRetries } from "../utils"; import { logger } from "./logger"; export const createAction = (props) => { if (!props.validator.inputSchema) throw new Error("Missing input schema"); return async function (input) { const inputData = props.validator.parseInput(input); try { const data = await props.cb(inputData, props.config.context); if (props.validator.outputSchema) { const outputData = props.validator.parseOutput(data); return makeResponseSuccess(outputData); } if (props.config && props.config.debug) logger.debug("Request handler success: ", data); return makeResponseSuccess(data); } catch (error) { if (!props.config) return makeResponseError(error); if (props.config.onError) { await props.config.onError(error); } if (props.config.debug) logger.error("Request handler error: ", error); if (props.config.retries) { const result = await makeRetries({ cb: props.cb, config: props.config, input: inputData, }); if (!result) return makeResponseError(error); if (!props.validator.outputSchema) return makeResponseSuccess(result); const outputData = props.validator.parseOutput(result); return makeResponseSuccess(outputData); } return makeResponseError(error); } }; };