From 3343b245d71bd9b1402d2d666150279d791624cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Sat, 9 Aug 2025 01:38:33 +0200 Subject: [PATCH] Fix --- packages/effect-fc/src/Component.ts | 34 +++++++++---------- packages/effect-fc/src/Suspense.ts | 2 +- .../src/routes/dev/async-rendering.tsx | 6 ++-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/effect-fc/src/Component.ts b/packages/effect-fc/src/Component.ts index 75f3650..bc637f4 100644 --- a/packages/effect-fc/src/Component.ts +++ b/packages/effect-fc/src/Component.ts @@ -7,7 +7,7 @@ import * as Memoized from "./Memoized.js" export const TypeId: unique symbol = Symbol.for("effect-fc/Component") export type TypeId = typeof TypeId -export interface Component +export interface Component

extends Effect.Effect<(props: P) => A, never, Exclude>, Component.Options @@ -49,7 +49,7 @@ const ComponentProto = Object.freeze({ ...Effectable.CommitPrototype, [TypeId]: TypeId, - commit: Effect.fnUntraced(function* ( + commit: Effect.fnUntraced(function*

( this: Component ) { const self = this @@ -72,11 +72,11 @@ const ComponentProto = Object.freeze({ : f }, [scope]) - return React.createElement(FC as React.FC<{}>, props as {}) + return React.createElement(FC, props) }, []) }), - makeFunctionComponent( + makeFunctionComponent

( this: Component, runtimeRef: React.RefObject>>, scope: Scope.Scope, @@ -95,18 +95,18 @@ const defaultOptions = { const nonReactiveTags = [Tracer.ParentSpan] as const -export const isComponent = (u: unknown): u is Component => Predicate.hasProperty(u, TypeId) +export const isComponent = (u: unknown): u is Component<{}, React.ReactNode, unknown, unknown> => Predicate.hasProperty(u, TypeId) export namespace make { export type Gen = { - >, A extends React.ReactNode, P = never>( + >, A extends React.ReactNode, P extends {} = {}>( body: (props: P) => Generator ): Component< P, A, [Eff] extends [never] ? never : [Eff] extends [Utils.YieldWrap>] ? E : never, [Eff] extends [never] ? never : [Eff] extends [Utils.YieldWrap>] ? R : never > - >, A, B extends Effect.Effect, P = never>( + >, A, B extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -117,7 +117,7 @@ export namespace make { props: NoInfer

, ) => B, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C extends Effect.Effect, P = never>( + >, A, B, C extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -129,7 +129,7 @@ export namespace make { ) => B, b: (_: B, props: NoInfer

) => C, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D extends Effect.Effect, P = never>( + >, A, B, C, D extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -142,7 +142,7 @@ export namespace make { b: (_: B, props: NoInfer

) => C, c: (_: C, props: NoInfer

) => D, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E extends Effect.Effect, P = never>( + >, A, B, C, D, E extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -156,7 +156,7 @@ export namespace make { c: (_: C, props: NoInfer

) => D, d: (_: D, props: NoInfer

) => E, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E, F extends Effect.Effect, P = never>( + >, A, B, C, D, E, F extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -171,7 +171,7 @@ export namespace make { d: (_: D, props: NoInfer

) => E, e: (_: E, props: NoInfer

) => F, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E, F, G extends Effect.Effect, P = never>( + >, A, B, C, D, E, F, G extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -187,7 +187,7 @@ export namespace make { e: (_: E, props: NoInfer

) => F, f: (_: F, props: NoInfer

) => G, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E, F, G, H extends Effect.Effect, P = never>( + >, A, B, C, D, E, F, G, H extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -204,7 +204,7 @@ export namespace make { f: (_: F, props: NoInfer

) => G, g: (_: G, props: NoInfer

) => H, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E, F, G, H, I extends Effect.Effect, P = never>( + >, A, B, C, D, E, F, G, H, I extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -222,7 +222,7 @@ export namespace make { g: (_: G, props: NoInfer

) => H, h: (_: H, props: NoInfer

) => I, ): Component>, Effect.Effect.Error, Effect.Effect.Context> - >, A, B, C, D, E, F, G, H, I, J extends Effect.Effect, P = never>( + >, A, B, C, D, E, F, G, H, I, J extends Effect.Effect, P extends {} = {}>( body: (props: P) => Generator, a: ( _: Effect.Effect< @@ -384,10 +384,10 @@ export const withOptions: { )) export const withRuntime: { - ( +

( context: React.Context>, ): (self: Component>) => (props: P) => A - ( +

( self: Component>, context: React.Context>, ): (props: P) => A diff --git a/packages/effect-fc/src/Suspense.ts b/packages/effect-fc/src/Suspense.ts index e89c539..3a906eb 100644 --- a/packages/effect-fc/src/Suspense.ts +++ b/packages/effect-fc/src/Suspense.ts @@ -22,7 +22,7 @@ export namespace Suspense { const SuspenseProto = Object.freeze({ [TypeId]: TypeId, - makeFunctionComponent( + makeFunctionComponent

( this: Component.Component & Suspense, runtimeRef: React.RefObject>>, scope: Scope.Scope, diff --git a/packages/example/src/routes/dev/async-rendering.tsx b/packages/example/src/routes/dev/async-rendering.tsx index fff7f45..64ad8ea 100644 --- a/packages/example/src/routes/dev/async-rendering.tsx +++ b/packages/example/src/routes/dev/async-rendering.tsx @@ -3,7 +3,7 @@ import { Flex, Text, TextField } from "@radix-ui/themes" import { createFileRoute } from "@tanstack/react-router" import { GetRandomValues, makeUuid4 } from "@typed/id" import { Effect } from "effect" -import { Component, Memoized } from "effect-fc" +import { Component, Memoized, Suspense } from "effect-fc" import { Hooks } from "effect-fc/hooks" import * as React from "react" @@ -64,8 +64,8 @@ class AsyncComponent extends Component.makeUntraced(function* AsyncComponent() { ) }).pipe( - // Suspense.suspense, - // Suspense.withOptions({ defaultFallback:

Loading...

}), + Suspense.suspense, + Suspense.withOptions({ defaultFallback:

Loading...

}), ) {} class MemoizedAsyncComponent extends Memoized.memo(AsyncComponent) {}