Function: createSafeAction()
createSafeAction<
Input,ExceptionHandler>(options):SafeActionBuilder<Input,never,never,Ctx,false,ExceptionHandler>
Defined in: packages/action/src/safe.ts:46
Creates a new safe action builder for composing middleware and action functions that return Results.
Unlike createAction, it'ss designed to work with functions that return Result<T, E> types, providing type-safe error handling without exceptions.
Type Parameters
Input
Input = never
The input type that will be passed to the action when executed.
ExceptionHandler
ExceptionHandler extends (ex) => UnknownResult = (ex) => Err<ThrownActionError>
Function type that converts exceptions to Result types. Should return Ok<T> or Err<E>.
Parameters
options
Configuration options for the safe action
onThrow?
ExceptionHandler
Optional custom exception handler for thrown exceptions
Returns
SafeActionBuilder<Input, never, never, Ctx, false, ExceptionHandler>
A new SafeActionBuilder instance
Example
const action = createAction<{ token: string }>({ onThrow: console.error })
.with(async ({ input }) => {
const session = await getSession(input.token);
if (!session) return err('SESSION_NOT_FOUND');
return next({ session });
})
.with(async ({ ctx }) => {
const user = await getUser(ctx.session.userId);
if (!user) return err('USER_NOT_FOUND');
return next({ user });
})
.do(async ({ ctx }) => {
const blogPosts = await getBlogPosts(ctx.user.id);
return ok(blogPosts ?? []);
});
const result = await action({ token: 'test' });
if (isOk(result)) {
console.log(result.data); // BlogPost[]
} else {
console.log(result.error); // "SESSION_NOT_FOUND" | "USER_NOT_FOUND"
}