0.2.2 #31

Merged
Thilawyn merged 184 commits from next into master 2026-01-16 17:05:31 +01:00
2 changed files with 9 additions and 6 deletions
Showing only changes of commit 6d52c4ee31 - Show all commits

View File

@@ -2,6 +2,7 @@
import { Effect, Function, Predicate, Runtime, Scope } from "effect" import { Effect, Function, Predicate, Runtime, Scope } from "effect"
import * as React from "react" import * as React from "react"
import * as Component from "./Component.js" import * as Component from "./Component.js"
import * as ErrorObserver from "./ErrorObserver.js"
export const TypeId: unique symbol = Symbol.for("@effect-fc/Async/Async") export const TypeId: unique symbol = Symbol.for("@effect-fc/Async/Async")
@@ -31,10 +32,10 @@ const SuspenseProto = Object.freeze({
return ({ fallback, name, ...props }: Async.Props) => { return ({ fallback, name, ...props }: Async.Props) => {
const promise = Runtime.runPromise(runtimeRef.current)( const promise = Runtime.runPromise(runtimeRef.current)(
Effect.andThen( ErrorObserver.handle(Effect.andThen(
Component.useScope([], this), Component.useScope([], this),
scope => Effect.provideService(this.body(props as P), Scope.Scope, scope), scope => Effect.provideService(this.body(props as P), Scope.Scope, scope),
) ))
) )
return React.createElement( return React.createElement(

View File

@@ -2,6 +2,7 @@
/** biome-ignore-all lint/complexity/useArrowFunction: necessary for class prototypes */ /** biome-ignore-all lint/complexity/useArrowFunction: necessary for class prototypes */
import { Context, type Duration, Effect, Effectable, Equivalence, ExecutionStrategy, Exit, Fiber, Function, HashMap, Layer, ManagedRuntime, Option, Predicate, Ref, Runtime, Scope, Tracer, type Utils } from "effect" import { Context, type Duration, Effect, Effectable, Equivalence, ExecutionStrategy, Exit, Fiber, Function, HashMap, Layer, ManagedRuntime, Option, Predicate, Ref, Runtime, Scope, Tracer, type Utils } from "effect"
import * as React from "react" import * as React from "react"
import * as ErrorObserver from "./ErrorObserver.js"
import { Memoized } from "./index.js" import { Memoized } from "./index.js"
@@ -75,10 +76,10 @@ const ComponentProto = Object.freeze({
runtimeRef: React.RefObject<Runtime.Runtime<Exclude<R, Scope.Scope>>>, runtimeRef: React.RefObject<Runtime.Runtime<Exclude<R, Scope.Scope>>>,
) { ) {
return (props: P) => Runtime.runSync(runtimeRef.current)( return (props: P) => Runtime.runSync(runtimeRef.current)(
Effect.andThen( ErrorObserver.handle(Effect.andThen(
useScope([], this), useScope([], this),
scope => Effect.provideService(this.body(props), Scope.Scope, scope), scope => Effect.provideService(this.body(props), Scope.Scope, scope),
) ))
) )
}, },
} as const) } as const)
@@ -547,14 +548,15 @@ const runReactEffect = <E, R>(
() => { () => {
switch (options?.finalizerExecutionMode ?? "fork") { switch (options?.finalizerExecutionMode ?? "fork") {
case "sync": case "sync":
Runtime.runSync(runtime)(Scope.close(scope, Exit.void)) Runtime.runSync(runtime)(ErrorObserver.handle(Scope.close(scope, Exit.void)))
break break
case "fork": case "fork":
Runtime.runFork(runtime)(Scope.close(scope, Exit.void)) Runtime.runFork(runtime)(ErrorObserver.handle(Scope.close(scope, Exit.void)))
break break
} }
} }
), ),
ErrorObserver.handle,
Runtime.runSync(runtime), Runtime.runSync(runtime),
) )