0.1.8 #11

Merged
Thilawyn merged 233 commits from next into master 2025-04-21 02:08:14 +02:00
4 changed files with 33 additions and 68 deletions
Showing only changes of commit e4bacd1ca7 - Show all commits

View File

@@ -5,7 +5,7 @@ import { Layer } from "effect"
import { StrictMode } from "react" import { StrictMode } from "react"
import { createRoot } from "react-dom/client" import { createRoot } from "react-dom/client"
import { ReffuseRuntime } from "reffuse" import { ReffuseRuntime } from "reffuse"
import { AppQueryClientLive, AppQueryErrorHandlerLive } from "./query" import { AppQueryClient, AppQueryErrorHandlerLive } from "./query"
import { GlobalContext } from "./reffuse" import { GlobalContext } from "./reffuse"
import { routeTree } from "./routeTree.gen" import { routeTree } from "./routeTree.gen"
@@ -15,7 +15,7 @@ const layer = Layer.empty.pipe(
Layer.provideMerge(Geolocation.layer), Layer.provideMerge(Geolocation.layer),
Layer.provideMerge(Permissions.layer), Layer.provideMerge(Permissions.layer),
Layer.provideMerge(FetchHttpClient.layer), Layer.provideMerge(FetchHttpClient.layer),
Layer.provideMerge(AppQueryClientLive), Layer.provideMerge(AppQueryClient.Live),
Layer.provideMerge(AppQueryErrorHandlerLive), Layer.provideMerge(AppQueryErrorHandlerLive),
) )

View File

@@ -7,4 +7,5 @@ export class AppQueryErrorHandler extends ErrorHandler.Tag("AppQueryErrorHandler
>() {} >() {}
export const AppQueryErrorHandlerLive = ErrorHandler.layer(AppQueryErrorHandler) export const AppQueryErrorHandlerLive = ErrorHandler.layer(AppQueryErrorHandler)
export const [AppQueryClient, AppQueryClientLive] = QueryClient.make({ ErrorHandler: AppQueryErrorHandler })
export class AppQueryClient extends QueryClient.Service({ ErrorHandler: AppQueryErrorHandler })<AppQueryClient>() {}

View File

@@ -2,7 +2,6 @@ import { HttpClient } from "@effect/platform"
import { Clipboard, Geolocation, Permissions } from "@effect/platform-browser" import { Clipboard, Geolocation, Permissions } from "@effect/platform-browser"
import { LazyRefExtension } from "@reffuse/extension-lazyref" import { LazyRefExtension } from "@reffuse/extension-lazyref"
import { QueryExtension } from "@reffuse/extension-query" import { QueryExtension } from "@reffuse/extension-query"
import { Context } from "effect"
import { Reffuse, ReffuseContext } from "reffuse" import { Reffuse, ReffuseContext } from "reffuse"
import { AppQueryClient, AppQueryErrorHandler } from "./query" import { AppQueryClient, AppQueryErrorHandler } from "./query"
@@ -12,7 +11,7 @@ export const GlobalContext = ReffuseContext.make<
| Geolocation.Geolocation | Geolocation.Geolocation
| Permissions.Permissions | Permissions.Permissions
| HttpClient.HttpClient | HttpClient.HttpClient
| Context.Tag.Service<typeof AppQueryClient> | AppQueryClient
| AppQueryErrorHandler | AppQueryErrorHandler
>() >()

View File

@@ -1,4 +1,5 @@
import { Context, Effect, Layer } from "effect" import { Context, Effect, Layer } from "effect"
import type { Mutable } from "effect/Types"
import * as ErrorHandler from "./ErrorHandler.js" import * as ErrorHandler from "./ErrorHandler.js"
@@ -18,71 +19,35 @@ export interface ServiceProps<EH, HandledE> {
readonly ErrorHandler?: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>> readonly ErrorHandler?: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
} }
export const Service: < export interface ServiceResult<Self, EH, HandledE> extends Context.TagClass<Self, typeof Id, QueryClient<EH, HandledE>> {
readonly Live: Layer.Layer<
| Self
| (EH extends ErrorHandler.DefaultErrorHandler
? ErrorHandler.DefaultErrorHandler
: never)
>
}
export const Service = <
EH = ErrorHandler.DefaultErrorHandler, EH = ErrorHandler.DefaultErrorHandler,
HandledE = never, HandledE = never,
>( >(
props?: ServiceProps<EH, HandledE> props?: ServiceProps<EH, HandledE>
) => ) => (
<Self>() => <Self>(): ServiceResult<Self, EH, HandledE> => {
& Context.TagClass<Self, typeof Id, QueryClient<EH, HandledE>> const TagClass = Context.Tag(Id)() as ServiceResult<Self, EH, HandledE>
& { readonly Live: Layer.Layer< (TagClass as Mutable<typeof TagClass>).Live = Layer.empty.pipe(
| QueryClient<EH, HandledE>
| (EH extends ErrorHandler.DefaultErrorHandler
? ErrorHandler.DefaultErrorHandler
: never)
> }
= props => () => {
const TagClass = Context.Tag(Id)() as any
TagClass.Live = Layer.empty.pipe(
Layer.provideMerge( Layer.provideMerge(
Layer.effect(TagClass, Effect.succeed({ Layer.effect(TagClass, Effect.succeed({
ErrorHandler: props?.ErrorHandler ?? ErrorHandler.DefaultErrorHandler ErrorHandler: (props?.ErrorHandler ?? ErrorHandler.DefaultErrorHandler) as Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
})) }))
), ),
Layer.provideMerge((props?.ErrorHandler Layer.provideMerge((props?.ErrorHandler
? Layer.empty ? Layer.empty
: ErrorHandler.DefaultErrorHandlerLive : ErrorHandler.DefaultErrorHandlerLive
), ) as Layer.Layer<ErrorHandler.DefaultErrorHandler>),
)) )
return TagClass return TagClass
} }
)
// export interface MakeProps<EH, HandledE> {
// readonly ErrorHandler?: Context.Tag<EH, ErrorHandler.ErrorHandler<HandledE>>
// }
// 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?: MakeProps<EH, HandledE>
// ): MakeResult<EH, HandledE> => [
// makeTag(),
// 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>),
// ),
// ]