From 6f56869687b720d7266b9101631a68165c1199b9 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 28 Apr 2024 08:41:04 +1200 Subject: [PATCH] suggestions for effect plugin (#3449) --- plugin/effect/src/index.ts | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/plugin/effect/src/index.ts b/plugin/effect/src/index.ts index a022a1f8e..856eb1aac 100644 --- a/plugin/effect/src/index.ts +++ b/plugin/effect/src/index.ts @@ -1,21 +1,20 @@ -import { Effect } from "effect"; +import * as Effect from "effect/Effect"; import * as z from "zod"; function zodEffect(this: z.ZodType, data: unknown, params?: any) { - return Effect.tryPromise({ - try: async () => this.parseAsync(data, params), - catch(error) { - return error as z.ZodError; - }, - }); + return Effect.flatMap( + Effect.promise(() => this.safeParseAsync(data, params)), + (result) => + result.success ? Effect.succeed(result.data) : Effect.fail(result.error) + ); } function zodEffectSync(this: z.ZodType, data: unknown, params?: any) { - return Effect.try({ - try: () => this.parse(data, params), - catch(error) { - return error as z.ZodError; - }, + return Effect.suspend(() => { + const result = this.safeParse(data, params); + return result.success + ? Effect.succeed(result.data) + : Effect.fail(result.error); }); } @@ -31,10 +30,10 @@ declare module "zod" { interface ZodType { effect( ...args: Parameters - ): Effect.Effect, never>; + ): Effect.Effect>; effectSync( ...args: Parameters - ): Effect.Effect, never>; + ): Effect.Effect>; } interface ZodError {