From e063eb06f745588247660defc6891670bfb4822f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 24 Feb 2025 13:17:10 +0100 Subject: [PATCH] Extension work --- packages/reffuse/src/ReffuseExtension.ts | 32 +++++++++++------------- packages/reffuse/src/ReffuseHelpers.ts | 27 +++++++++++++------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/packages/reffuse/src/ReffuseExtension.ts b/packages/reffuse/src/ReffuseExtension.ts index 46e381b..2160bf9 100644 --- a/packages/reffuse/src/ReffuseExtension.ts +++ b/packages/reffuse/src/ReffuseExtension.ts @@ -4,7 +4,7 @@ import * as ReffuseHelpers from "./ReffuseHelpers.js" import type { Merge, StaticType } from "./types.js" -class Reffuse extends ReffuseHelpers.ReffuseHelpers {} +class Reffuse extends ReffuseHelpers.make([]) {} class MyService extends Effect.Service()("MyService", { succeed: {} @@ -15,15 +15,15 @@ const MyContext = ReffuseContext.make() const make = (extension: Ext) => < - BaseClass extends typeof Reffuse, - R, + BaseClass extends ReffuseHelpers.ReffuseHelpersClass, + R >( - base: BaseClass & typeof Reffuse + self: BaseClass & ReffuseHelpers.ReffuseHelpersClass ): ( { new(): Merge, Ext> } & StaticType ) => { - const class_ = class extends base {} + const class_ = class extends self {} return class_ } @@ -31,10 +31,10 @@ export const withContexts = >( ...contexts: [...{ [K in keyof R2]: ReffuseContext.ReffuseContext }] ) => < - BaseClass extends typeof ReffuseHelpers.ReffuseHelpers, + BaseClass extends ReffuseHelpers.ReffuseHelpersClass, R1 >( - self: BaseClass & { new(): ReffuseHelpers.ReffuseHelpers } + self: BaseClass & ReffuseHelpers.ReffuseHelpersClass ): ( { new(): Merge< @@ -42,12 +42,13 @@ export const withContexts = >( ReffuseHelpers.ReffuseHelpers > } & - StaticType - ) => new self().pipe( - instance => class extends self { - readonly contexts = [...instance.contexts, ...contexts] as any - } as any - ) + Merge< + StaticType, + StaticType> + > + ) => class extends self { + readonly contexts = [...self.contexts, ...contexts] + } as any const withMyContext = withContexts(MyContext) @@ -56,13 +57,8 @@ class ReffuseWithMyContext extends clsWithMyContext {} const t = new ReffuseWithMyContext() - const cls1 = make({ prout(this: ReffuseHelpers.ReffuseHelpers) {} })(Reffuse) class Cls1 extends cls1 {} - -const cls2 = make({ - aya() {} -})(cls) diff --git a/packages/reffuse/src/ReffuseHelpers.ts b/packages/reffuse/src/ReffuseHelpers.ts index 0ac8c55..47a0160 100644 --- a/packages/reffuse/src/ReffuseHelpers.ts +++ b/packages/reffuse/src/ReffuseHelpers.ts @@ -5,7 +5,17 @@ import * as ReffuseRuntime from "./ReffuseRuntime.js" import * as SetStateAction from "./SetStateAction.js" -export class ReffuseHelpers { +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 +} + + +export abstract class ReffuseHelpers { declare ["constructor"]: ReffuseHelpersClass @@ -373,16 +383,15 @@ ReffuseHelpers.prototype.pipe = function pipe() { export interface ReffuseHelpersClass extends Pipeable.Pipeable { new(): ReffuseHelpers - prototype: ReffuseHelpers readonly contexts: readonly ReffuseContext.ReffuseContext[] } - -export interface RenderOptions { - /** Prevents re-executing the effect when the Effect runtime or context changes. Defaults to `false`. */ - readonly doNotReExecuteOnRuntimeOrContextChange?: boolean +(ReffuseHelpers as ReffuseHelpersClass).pipe = function pipe() { + return Pipeable.pipeArguments(this, arguments) } -export interface ScopeOptions { - readonly finalizerExecutionStrategy?: ExecutionStrategy.ExecutionStrategy -} + +export const make = (contexts: readonly ReffuseContext.ReffuseContext[]): ReffuseHelpersClass => + class extends (ReffuseHelpers as ReffuseHelpersClass) { + static readonly contexts = contexts + }