Files
reffuse/packages/extension-query/src/QueryClient.ts
Julien Valverdé 68c68417d8
All checks were successful
Lint / lint (push) Successful in 12s
QueryClient work
2025-03-14 03:56:54 +01:00

38 lines
1.1 KiB
TypeScript

import { Context, Effect, Layer } from "effect"
import * as ErrorHandler from "./ErrorHandler.js"
export interface QueryClient<EH, HandledE> {
readonly ErrorHandler: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}
export interface LayerProps<EH, HandledE> {
readonly ErrorHandler?: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}
export const layer = <
EH = ErrorHandler.DefaultErrorHandler,
HandledE = never,
>(
props: LayerProps<EH, HandledE>
): Layer.Layer<
QueryClient<EH, HandledE>,
never,
typeof props.ErrorHandler extends undefined
? ErrorHandler.DefaultErrorHandler
: never
> => Layer.empty.pipe(
Layer.provideMerge(Layer.effect(
Context.GenericTag<QueryClient<EH, HandledE>>("@reffuse/extension-query/QueryClient"),
Effect.succeed({
ErrorHandler: (props.ErrorHandler ?? ErrorHandler.DefaultErrorHandler) as Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
})),
),
Layer.provideMerge(props.ErrorHandler
? Layer.empty
: ErrorHandler.DefaultErrorHandlerLive
),
)