Fix
All checks were successful
Lint / lint (push) Successful in 16s

This commit is contained in:
Julien Valverdé
2025-06-01 03:49:04 +02:00
parent f4e380ddcb
commit ed788af128
2 changed files with 22 additions and 40 deletions

View File

@@ -1,4 +1,4 @@
import { Context, Effect, Layer } from "effect" import { Context, Effect, identity, Layer } from "effect"
import type { Mutable } from "effect/Types" import type { Mutable } from "effect/Types"
import * as QueryErrorHandler from "./QueryErrorHandler.js" import * as QueryErrorHandler from "./QueryErrorHandler.js"
@@ -8,14 +8,14 @@ export interface QueryClient<FallbackA, HandledE> {
} }
export interface MakeProps<FallbackA, HandledE, E, R> { export interface MakeProps<FallbackA, HandledE> {
readonly errorHandler: Effect.Effect<QueryErrorHandler.QueryErrorHandler<FallbackA, HandledE>, E, R> readonly errorHandler: QueryErrorHandler.QueryErrorHandler<FallbackA, HandledE>
} }
export const make = <FallbackA, HandledE, E, R>( export const make = <FallbackA, HandledE>(
{ errorHandler }: MakeProps<FallbackA, HandledE, E, R> { errorHandler }: MakeProps<FallbackA, HandledE>
): Effect.Effect<QueryClient<FallbackA, HandledE>, E, R> => Effect.Do.pipe( ): Effect.Effect<QueryClient<FallbackA, HandledE>> => Effect.Do.pipe(
Effect.bind("errorHandler", () => errorHandler) Effect.let("errorHandler", () => errorHandler)
) )
@@ -39,34 +39,19 @@ export interface ServiceResult<Self, FallbackA, HandledE, E, R> extends Context.
typeof id, typeof id,
QueryClient<FallbackA, HandledE> QueryClient<FallbackA, HandledE>
> { > {
readonly Default: Layer.Layer<QueryErrorHandler.QueryErrorHandler<FallbackA, HandledE>, E, R> readonly Default: Layer.Layer<Self, E, R>
} }
export const Service = <Self>() => ( export const Service = <Self>() => (
< <FallbackA = never, HandledE = never, E = never, R = never>(
FallbackA = QueryErrorHandler.Fallback<Context.Tag.Service<typeof QueryErrorHandler.DefaultQueryErrorHandler>>,
HandledE = QueryErrorHandler.Error<Context.Tag.Service<typeof QueryErrorHandler.DefaultQueryErrorHandler>>,
E = never,
R = never,
>(
props?: ServiceProps<FallbackA, HandledE, E, R> props?: ServiceProps<FallbackA, HandledE, E, R>
): ServiceResult<Self, EH, FallbackA, HandledE> => { ): ServiceResult<Self, FallbackA, HandledE, E, R> => {
const TagClass = Context.Tag(id)() as ServiceResult<Self, EH, FallbackA, HandledE> const TagClass = Context.Tag(id)() as ServiceResult<Self, FallbackA, HandledE, E, R>
(TagClass as Mutable<typeof TagClass>).Default = Layer.effect(TagClass, Effect.Do.pipe( (TagClass as Mutable<typeof TagClass>).Default = Layer.effect(TagClass, Effect.flatMap(
Effect.bind("errorHandler", () => props?.errorHandler ?? QueryErrorHandler.make<never>()(identity),
(props?.ErrorHandler ?? QueryErrorHandler.DefaultQueryErrorHandler) as Effect.Effect< errorHandler => make({ errorHandler }),
QueryErrorHandler.QueryErrorHandler<FallbackA, HandledE>, ))
never,
EH extends QueryErrorHandler.DefaultQueryErrorHandler ? never : EH
>
)
)).pipe(
Layer.provideMerge((props?.ErrorHandler
? Layer.empty
: QueryErrorHandler.DefaultQueryErrorHandler.Default
) as Layer.Layer<EH>)
)
return TagClass return TagClass
} }

View File

@@ -1,4 +1,4 @@
import { Cause, Effect, identity, PubSub, Stream } from "effect" import { Cause, Effect, PubSub, Stream } from "effect"
export interface QueryErrorHandler<FallbackA, HandledE> { export interface QueryErrorHandler<FallbackA, HandledE> {
@@ -25,19 +25,16 @@ export const make = <HandledE = never>() => (
self: Effect.Effect<A, E, R> self: Effect.Effect<A, E, R>
): Effect.Effect<A | FallbackA, Exclude<E, HandledE>, R> => f( ): Effect.Effect<A | FallbackA, Exclude<E, HandledE>, R> => f(
self as unknown as Effect.Effect<never, HandledE, never>, self as unknown as Effect.Effect<never, HandledE, never>,
(failure: HandledE) => PubSub.publish(pubsub, Cause.fail(failure)).pipe( (failure: HandledE) => Effect.andThen(
Effect.andThen(Effect.failCause(Cause.empty)) PubSub.publish(pubsub, Cause.fail(failure)),
Effect.failCause(Cause.empty),
), ),
(defect: unknown) => PubSub.publish(pubsub, Cause.die(defect)).pipe( (defect: unknown) => Effect.andThen(
Effect.andThen(Effect.failCause(Cause.empty)) PubSub.publish(pubsub, Cause.die(defect)),
Effect.failCause(Cause.empty),
), ),
) )
return { errors, handle } return { errors, handle }
}) })
) )
export class DefaultQueryErrorHandler extends Effect.Service<DefaultQueryErrorHandler>()("@reffuse/extension-query/DefaultQueryErrorHandler", {
effect: make<never>()(identity)
}) {}