zod-server-actions
Version:
Simple utility library to create server actions in Next.js
44 lines (43 loc) • 1.75 kB
JavaScript
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);
}
};
};