From 690dec1f1a989b5fa9a9a0921003fa41e300e91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 24 Feb 2025 20:18:56 +0100 Subject: [PATCH] Finalized --- packages/example/src/reffuse.ts | 6 ++- packages/example/src/todos/reffuse.ts | 7 ++- packages/reffuse/src/ReffuseExtension.ts | 29 +----------- packages/reffuse/src/ReffuseHelper.ts | 57 ------------------------ packages/reffuse/src/index.ts | 2 + 5 files changed, 13 insertions(+), 88 deletions(-) delete mode 100644 packages/reffuse/src/ReffuseHelper.ts diff --git a/packages/example/src/reffuse.ts b/packages/example/src/reffuse.ts index beba3d3..ac2e2b8 100644 --- a/packages/example/src/reffuse.ts +++ b/packages/example/src/reffuse.ts @@ -10,4 +10,8 @@ export const GlobalContext = ReffuseContext.make< | HttpClient.HttpClient >() -export const R = Reffuse.make(GlobalContext) +export class GlobalReffuse extends Reffuse.Reffuse.pipe( + Reffuse.withContexts(GlobalContext) +) {} + +export const R = new GlobalReffuse() diff --git a/packages/example/src/todos/reffuse.ts b/packages/example/src/todos/reffuse.ts index 8502e12..d01357c 100644 --- a/packages/example/src/todos/reffuse.ts +++ b/packages/example/src/todos/reffuse.ts @@ -1,7 +1,10 @@ -import { GlobalContext } from "@/reffuse" +import { GlobalReffuse } from "@/reffuse" import { Reffuse, ReffuseContext } from "reffuse" import { TodosState } from "./services" export const TodosContext = ReffuseContext.make() -export const R = Reffuse.make(GlobalContext, TodosContext) + +export const R = new class TodosReffuse extends GlobalReffuse.pipe( + Reffuse.withContexts(TodosContext) +) {} diff --git a/packages/reffuse/src/ReffuseExtension.ts b/packages/reffuse/src/ReffuseExtension.ts index 2e0d69a..0ba7909 100644 --- a/packages/reffuse/src/ReffuseExtension.ts +++ b/packages/reffuse/src/ReffuseExtension.ts @@ -1,18 +1,8 @@ -import { Effect } from "effect" -import * as Reffuse from "./Reffuse.js" -import * as ReffuseContext from "./ReffuseContext.js" import * as ReffuseHelpers from "./ReffuseHelpers.js" import type { Merge, StaticType } from "./types.js" -class MyService extends Effect.Service()("MyService", { - succeed: {} -}) {} - -const MyContext = ReffuseContext.make() - - -const make = (extension: Ext) => +export const make = (extension: Ext) => < BaseClass extends ReffuseHelpers.ReffuseHelpersClass, R @@ -26,20 +16,3 @@ const make = (extension: Ext) => class_.prototype = { ...class_.prototype, ...extension } as any return class_ as any } - - -const withMyContext = Reffuse.withContexts(MyContext) -const clsWithMyContext = withMyContext(Reffuse.Reffuse) -class ReffuseWithMyContext extends clsWithMyContext {} - - -const withProut = make({ - prout(this: ReffuseHelpers.ReffuseHelpers) {} -}) - -class MyReffuse extends Reffuse.Reffuse.pipe( - withProut, - Reffuse.withContexts(MyContext), -) {} - -new MyReffuse().useFork() diff --git a/packages/reffuse/src/ReffuseHelper.ts b/packages/reffuse/src/ReffuseHelper.ts deleted file mode 100644 index d41f572..0000000 --- a/packages/reffuse/src/ReffuseHelper.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { Context, Effect, ExecutionStrategy, Fiber, Pipeable, Runtime, Scope, SubscriptionRef } from "effect" -import type * as React from "react" - - -export interface ReffuseHelper extends Pipeable.Pipeable { - useContext(): Context.Context - - useRunSync(): (effect: Effect.Effect) => A - useRunPromise(): (effect: Effect.Effect, options?: { - readonly signal?: AbortSignal - }) => Promise - useRunFork(): (effect: Effect.Effect, options?: Runtime.RunForkOptions) => Fiber.RuntimeFiber - useRunCallback(): (effect: Effect.Effect, options?: Runtime.RunCallbackOptions) => Runtime.Cancel - - useMemo( - effect: Effect.Effect, - deps?: React.DependencyList, - options?: RenderOptions, - ): A - - useMemoScoped( - effect: Effect.Effect, - deps?: React.DependencyList, - options?: RenderOptions & ScopeOptions, - ): A - - useLayoutEffect( - effect: Effect.Effect, - deps?: React.DependencyList, - options?: RenderOptions & ScopeOptions, - ): void - - useFork( - effect: Effect.Effect, - deps?: React.DependencyList, - options?: Runtime.RunForkOptions & RenderOptions & ScopeOptions, - ): void - - usePromise( - effect: Effect.Effect, - deps?: React.DependencyList, - options?: { readonly signal?: AbortSignal } & Runtime.RunForkOptions & RenderOptions & ScopeOptions, - ): Promise - - useRef(value: A): SubscriptionRef.SubscriptionRef - useRefState(ref: SubscriptionRef.SubscriptionRef): readonly [A, React.Dispatch>] -} - - -export interface RenderOptions { - /** Prevents re-executing the effect when the Effect runtime or context changes. Defaults to `false`. */ - readonly doNotReExecuteOnRuntimeOrContextChange?: boolean -} - -export interface ScopeOptions { - readonly finalizerExecutionStrategy?: ExecutionStrategy.ExecutionStrategy -} diff --git a/packages/reffuse/src/index.ts b/packages/reffuse/src/index.ts index 01c00cb..63af29b 100644 --- a/packages/reffuse/src/index.ts +++ b/packages/reffuse/src/index.ts @@ -1,4 +1,6 @@ export * as Reffuse from "./Reffuse.js" export * as ReffuseContext from "./ReffuseContext.js" +export * as ReffuseExtension from "./ReffuseExtension.js" +export * as ReffuseHelpers from "./ReffuseHelpers.js" export * as ReffuseRuntime from "./ReffuseRuntime.js" export * as SetStateAction from "./SetStateAction.js"