UNPKG

yup-server-action

Version:

Server actions powered by Yup

64 lines (63 loc) 1.59 kB
// src/create-server-action.ts function internalBuilder(inputSchema) { const obj = { input(schema) { return internalBuilder(schema); }, handle(fn) { return { _inputType: void 0, _resultType: void 0, run: async (rawInput) => { const parsedInput = inputSchema ? await inputSchema.validate(rawInput, { abortEarly: false }) : void 0; const ctx = inputSchema ? { input: parsedInput } : {}; return fn(ctx); } }; } }; return obj; } function createServerAction(schema) { return schema ? internalBuilder(schema) : internalBuilder(); } // src/use-server-action.ts import { useState } from "react"; function useServerAction(action, options) { const [isPending, setIsPending] = useState(false); const [isSuccess, setIsSuccess] = useState(false); const [isError, setIsError] = useState(false); const [data, setData] = useState(void 0); const [error, setError] = useState(void 0); const execute = async (...args) => { setIsPending(true); setIsSuccess(false); setIsError(false); try { const result = await action.run(...args); options?.onSuccess?.(result); setIsSuccess(true); setData(result); } catch (error2) { options?.onError?.(error2); setIsError(true); setError(error2); throw error2; } finally { setIsPending(false); } }; return { execute, isPending, isSuccess, isError, data, error }; } export { createServerAction, useServerAction }; //# sourceMappingURL=index.mjs.map