// toNeverthrow
export const toNeverthrow = <
TResult,
TError extends { cause?: unknown; message: string },
TContext,
>(
effect: Effect.Effect<TResult, TError, TContext>
): Effect.Effect<
Result<TResult, VoidhashInternalServerError>,
never,
TContext
> => {
return Effect.map(effect, (e) =>
ok<TResult, VoidhashInternalServerError>(e)
).pipe(
Effect.catchAll((error: TError) => {
return Effect.succeed(
err({
code: "INTERNAL_SERVER_ERROR",
message: "Internal server error",
originalError: error.cause as Error,
} satisfies VoidhashInternalServerError)
);
})
);
};
// page.tsx
export default Page() {
const perksResult = await NextjsRuntime.runPromise(
PerkService.pipe(
Effect.flatMap((perkService) => perkService.getPerks(project.id))
).pipe(toNeverthrow)
);
if (perksResult.isErr()) {
const error = projectResult._unsafeUnwrapErr();
return <VoidhashErrorCard error={error} />;
}
const perks = perksResult.value;
return (
<div>
...
</div>)
}
// toNeverthrow
export const toNeverthrow = <
TResult,
TError extends { cause?: unknown; message: string },
TContext,
>(
effect: Effect.Effect<TResult, TError, TContext>
): Effect.Effect<
Result<TResult, VoidhashInternalServerError>,
never,
TContext
> => {
return Effect.map(effect, (e) =>
ok<TResult, VoidhashInternalServerError>(e)
).pipe(
Effect.catchAll((error: TError) => {
return Effect.succeed(
err({
code: "INTERNAL_SERVER_ERROR",
message: "Internal server error",
originalError: error.cause as Error,
} satisfies VoidhashInternalServerError)
);
})
);
};
// page.tsx
export default Page() {
const perksResult = await NextjsRuntime.runPromise(
PerkService.pipe(
Effect.flatMap((perkService) => perkService.getPerks(project.id))
).pipe(toNeverthrow)
);
if (perksResult.isErr()) {
const error = projectResult._unsafeUnwrapErr();
return <VoidhashErrorCard error={error} />;
}
const perks = perksResult.value;
return (
<div>
...
</div>)
}