diff --git a/packages/extension-query/src/ErrorHandler.ts b/packages/extension-query/src/ErrorHandler.ts index bc10c75..3dcdd9e 100644 --- a/packages/extension-query/src/ErrorHandler.ts +++ b/packages/extension-query/src/ErrorHandler.ts @@ -24,3 +24,7 @@ export const layer = ( return { errors, handle } })) + + +export class DefaultErrorHandler extends Tag("@reffuse/extension-query/DefaultErrorHandler")() {} +export const DefaultErrorHandlerLive = layer(DefaultErrorHandler) diff --git a/packages/extension-query/src/QueryClient.ts b/packages/extension-query/src/QueryClient.ts index fdbe679..6fc27ab 100644 --- a/packages/extension-query/src/QueryClient.ts +++ b/packages/extension-query/src/QueryClient.ts @@ -11,9 +11,27 @@ export interface LayerProps { readonly ErrorHandler?: Context.Tag> } -export const layer = ( +export const layer = < + EH = ErrorHandler.DefaultErrorHandler, + HandledE = never, +>( props: LayerProps -): Layer.Layer> => - Layer.effect(Context.GenericTag>("@reffuse/extension-query/QueryClient"), Effect.succeed({ - ErrorHandler: props.ErrorHandler - })) +): Layer.Layer< + QueryClient, + never, + typeof props.ErrorHandler extends undefined + ? ErrorHandler.DefaultErrorHandler + : never +> => Layer.empty.pipe( + Layer.provideMerge(Layer.effect( + Context.GenericTag>("@reffuse/extension-query/QueryClient"), + Effect.succeed({ + ErrorHandler: (props.ErrorHandler ?? ErrorHandler.DefaultErrorHandler) as Context.Tag> + })), + ), + + Layer.provideMerge(props.ErrorHandler + ? Layer.empty + : ErrorHandler.DefaultErrorHandlerLive + ), +)