0.1.13 #18
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}) {}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user