diff --git a/packages/extension-query/src/QueryClient.ts b/packages/extension-query/src/QueryClient.ts index 3932393..c16d937 100644 --- a/packages/extension-query/src/QueryClient.ts +++ b/packages/extension-query/src/QueryClient.ts @@ -1,4 +1,4 @@ -import { Context, Effect, Layer } from "effect" +import { Context, Effect, identity, Layer } from "effect" import type { Mutable } from "effect/Types" import * as QueryErrorHandler from "./QueryErrorHandler.js" @@ -8,14 +8,14 @@ export interface QueryClient { } -export interface MakeProps { - readonly errorHandler: Effect.Effect, E, R> +export interface MakeProps { + readonly errorHandler: QueryErrorHandler.QueryErrorHandler } -export const make = ( - { errorHandler }: MakeProps -): Effect.Effect, E, R> => Effect.Do.pipe( - Effect.bind("errorHandler", () => errorHandler) +export const make = ( + { errorHandler }: MakeProps +): Effect.Effect> => Effect.Do.pipe( + Effect.let("errorHandler", () => errorHandler) ) @@ -39,34 +39,19 @@ export interface ServiceResult extends Context. typeof id, QueryClient > { - readonly Default: Layer.Layer, E, R> + readonly Default: Layer.Layer } export const Service = () => ( - < - FallbackA = QueryErrorHandler.Fallback>, - HandledE = QueryErrorHandler.Error>, - E = never, - R = never, - >( + ( props?: ServiceProps - ): ServiceResult => { - const TagClass = Context.Tag(id)() as ServiceResult + ): ServiceResult => { + const TagClass = Context.Tag(id)() as ServiceResult - (TagClass as Mutable).Default = Layer.effect(TagClass, Effect.Do.pipe( - Effect.bind("errorHandler", () => - (props?.ErrorHandler ?? QueryErrorHandler.DefaultQueryErrorHandler) as Effect.Effect< - QueryErrorHandler.QueryErrorHandler, - never, - EH extends QueryErrorHandler.DefaultQueryErrorHandler ? never : EH - > - ) - )).pipe( - Layer.provideMerge((props?.ErrorHandler - ? Layer.empty - : QueryErrorHandler.DefaultQueryErrorHandler.Default - ) as Layer.Layer) - ) + (TagClass as Mutable).Default = Layer.effect(TagClass, Effect.flatMap( + props?.errorHandler ?? QueryErrorHandler.make()(identity), + errorHandler => make({ errorHandler }), + )) return TagClass } diff --git a/packages/extension-query/src/QueryErrorHandler.ts b/packages/extension-query/src/QueryErrorHandler.ts index 1c0e04b..7cbed7d 100644 --- a/packages/extension-query/src/QueryErrorHandler.ts +++ b/packages/extension-query/src/QueryErrorHandler.ts @@ -1,4 +1,4 @@ -import { Cause, Effect, identity, PubSub, Stream } from "effect" +import { Cause, Effect, PubSub, Stream } from "effect" export interface QueryErrorHandler { @@ -25,19 +25,16 @@ export const make = () => ( self: Effect.Effect ): Effect.Effect, R> => f( self as unknown as Effect.Effect, - (failure: HandledE) => PubSub.publish(pubsub, Cause.fail(failure)).pipe( - Effect.andThen(Effect.failCause(Cause.empty)) + (failure: HandledE) => Effect.andThen( + PubSub.publish(pubsub, Cause.fail(failure)), + Effect.failCause(Cause.empty), ), - (defect: unknown) => PubSub.publish(pubsub, Cause.die(defect)).pipe( - Effect.andThen(Effect.failCause(Cause.empty)) + (defect: unknown) => Effect.andThen( + PubSub.publish(pubsub, Cause.die(defect)), + Effect.failCause(Cause.empty), ), ) return { errors, handle } }) ) - - -export class DefaultQueryErrorHandler extends Effect.Service()("@reffuse/extension-query/DefaultQueryErrorHandler", { - effect: make()(identity) -}) {}