QueryClient.make
All checks were successful
Lint / lint (push) Successful in 12s

This commit is contained in:
Julien Valverdé
2025-03-15 22:27:15 +01:00
parent c2bc406a5f
commit c943d81702
5 changed files with 50 additions and 39 deletions

View File

@@ -6,34 +6,42 @@ export interface QueryClient<EH, HandledE> {
readonly ErrorHandler: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}
export type Tag<EH, HandledE> = Context.Tag<QueryClient<EH, HandledE>, QueryClient<EH, HandledE>>
export const makeTag = <EH = never, HandledE = never>(): Tag<EH, HandledE> => Context.GenericTag("@reffuse/extension-query/QueryClient")
export interface LayerProps<EH, HandledE> {
export interface MakeProps<EH, HandledE> {
readonly ErrorHandler?: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}
export const layer = <
export type MakeResult<EH, HandledE> = [
tag: Tag<EH, HandledE>,
layer: Layer.Layer<
| QueryClient<EH, HandledE>
| (EH extends ErrorHandler.DefaultErrorHandler
? ErrorHandler.DefaultErrorHandler
: never)
>,
]
export const make = <
EH = ErrorHandler.DefaultErrorHandler,
HandledE = never,
>(
props?: LayerProps<EH, HandledE>
): Layer.Layer<
| QueryClient<EH, HandledE>
| (EH extends ErrorHandler.DefaultErrorHandler
? ErrorHandler.DefaultErrorHandler
: never)
> => Layer.empty.pipe(
Layer.provideMerge(
Layer.effect(makeTag<EH, HandledE>(), Effect.succeed({
ErrorHandler: (props?.ErrorHandler ?? ErrorHandler.DefaultErrorHandler) as Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}))
),
props?: MakeProps<EH, HandledE>
): MakeResult<EH, HandledE> => [
makeTag(),
Layer.provideMerge((props?.ErrorHandler
? Layer.empty
: ErrorHandler.DefaultErrorHandlerLive
) as Layer.Layer<ErrorHandler.DefaultErrorHandler>),
)
Layer.empty.pipe(
Layer.provideMerge(
Layer.effect(makeTag<EH, HandledE>(), Effect.succeed({
ErrorHandler: (props?.ErrorHandler ?? ErrorHandler.DefaultErrorHandler) as Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
}))
),
Layer.provideMerge((props?.ErrorHandler
? Layer.empty
: ErrorHandler.DefaultErrorHandlerLive
) as Layer.Layer<ErrorHandler.DefaultErrorHandler>),
),
]