diff --git a/packages/example/src/routes/tests.tsx b/packages/example/src/routes/tests.tsx index 0869fe6..64bac4d 100644 --- a/packages/example/src/routes/tests.tsx +++ b/packages/example/src/routes/tests.tsx @@ -2,8 +2,7 @@ import { R } from "@/reffuse" import { Button, Flex, Text } from "@radix-ui/themes" import { createFileRoute } from "@tanstack/react-router" import { GetRandomValues, makeUuid4 } from "@typed/id" -import { Console, Effect, Ref, Stream } from "effect" -import { useState } from "react" +import { Console, Effect, Ref } from "effect" export const Route = createFileRoute("/tests")({ diff --git a/packages/extension-lazyref/src/index.ts b/packages/extension-lazyref/src/index.ts index ab2704b..42b76ec 100644 --- a/packages/extension-lazyref/src/index.ts +++ b/packages/extension-lazyref/src/index.ts @@ -1,12 +1,12 @@ import * as LazyRef from "@typed/lazy-ref" import { Effect, Stream } from "effect" import * as React from "react" -import { ReffuseExtension, type ReffuseHelpers, SetStateAction } from "reffuse" +import { ReffuseExtension, type ReffuseNamespace, SetStateAction } from "reffuse" export const LazyRefExtension = ReffuseExtension.make(() => ({ useLazyRefState( - this: ReffuseHelpers.ReffuseHelpers, + this: ReffuseNamespace.ReffuseNamespace, ref: LazyRef.LazyRef, ): [A, React.Dispatch>] { const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true }) diff --git a/packages/extension-query/src/QueryExtension.ts b/packages/extension-query/src/QueryExtension.ts index eee7860..ddd6b07 100644 --- a/packages/extension-query/src/QueryExtension.ts +++ b/packages/extension-query/src/QueryExtension.ts @@ -1,7 +1,7 @@ import type * as AsyncData from "@typed/async-data" import { type Cause, type Context, Effect, type Fiber, Layer, type Option, type Stream, type SubscriptionRef } from "effect" import * as React from "react" -import { ReffuseExtension, type ReffuseHelpers } from "reffuse" +import { ReffuseExtension, type ReffuseNamespace } from "reffuse" import type * as MutationService from "./MutationService.js" import * as QueryClient from "./QueryClient.js" import type * as QueryProgress from "./QueryProgress.js" @@ -59,7 +59,7 @@ export const QueryExtension = ReffuseExtension.make(() => ({ QR extends R, R, >( - this: ReffuseHelpers.ReffuseHelpers>, + this: ReffuseNamespace.ReffuseNamespace>, props: UseQueryProps, ): UseQueryResult> { const runner = this.useMemo(() => QueryRunner.make({ @@ -98,7 +98,7 @@ export const QueryExtension = ReffuseExtension.make(() => ({ QR extends R, R, >( - this: ReffuseHelpers.ReffuseHelpers>, + this: ReffuseNamespace.ReffuseNamespace>, props: UseMutationProps, ): UseMutationResult> { const runner = this.useMemo(() => MutationRunner.make({ diff --git a/packages/reffuse/src/Reffuse.ts b/packages/reffuse/src/Reffuse.ts index ccfcfe1..547342a 100644 --- a/packages/reffuse/src/Reffuse.ts +++ b/packages/reffuse/src/Reffuse.ts @@ -1,30 +1,30 @@ import type * as ReffuseContext from "./ReffuseContext.js" import type * as ReffuseExtension from "./ReffuseExtension.js" -import * as ReffuseHelpers from "./ReffuseHelpers.js" +import * as ReffuseNamespace from "./ReffuseNamespace.js" import type { Merge, StaticType } from "./types.js" -export class Reffuse extends ReffuseHelpers.make() {} +export class Reffuse extends ReffuseNamespace.makeClass() {} export const withContexts = >( ...contexts: [...{ [K in keyof R2]: ReffuseContext.ReffuseContext }] ) => ( < - BaseClass extends ReffuseHelpers.ReffuseHelpersClass, + BaseClass extends ReffuseNamespace.ReffuseNamespaceClass, R1 >( - self: BaseClass & ReffuseHelpers.ReffuseHelpersClass + self: BaseClass & ReffuseNamespace.ReffuseNamespaceClass ): ( { new(): Merge< InstanceType, - { constructor: ReffuseHelpers.ReffuseHelpersClass } + { constructor: ReffuseNamespace.ReffuseNamespaceClass } > } & Merge< StaticType, - StaticType> + StaticType> > ) => class extends self { static readonly contexts = [...self.contexts, ...contexts] @@ -33,10 +33,10 @@ export const withContexts = >( export const withExtension = (extension: ReffuseExtension.ReffuseExtension) => ( < - BaseClass extends ReffuseHelpers.ReffuseHelpersClass, + BaseClass extends ReffuseNamespace.ReffuseNamespaceClass, R >( - self: BaseClass & ReffuseHelpers.ReffuseHelpersClass + self: BaseClass & ReffuseNamespace.ReffuseNamespaceClass ): ( { new(): Merge, A> } & StaticType diff --git a/packages/reffuse/src/ReffuseHelpers.ts b/packages/reffuse/src/ReffuseNamespace.ts similarity index 92% rename from packages/reffuse/src/ReffuseHelpers.ts rename to packages/reffuse/src/ReffuseNamespace.ts index 15716ab..7bf1549 100644 --- a/packages/reffuse/src/ReffuseHelpers.ts +++ b/packages/reffuse/src/ReffuseNamespace.ts @@ -15,8 +15,8 @@ export interface ScopeOptions { } -export abstract class ReffuseHelpers { - declare ["constructor"]: ReffuseHelpersClass +export abstract class ReffuseNamespace { + declare ["constructor"]: ReffuseNamespaceClass constructor() { this.SubscribeRefs = this.SubscribeRefs.bind(this as any) as any @@ -24,16 +24,16 @@ export abstract class ReffuseHelpers { } - useContext(this: ReffuseHelpers): Context.Context { + useContext(this: ReffuseNamespace): Context.Context { return ReffuseContext.useMergeAll(...this.constructor.contexts) } - useLayer(this: ReffuseHelpers): Layer.Layer { + useLayer(this: ReffuseNamespace): Layer.Layer { return ReffuseContext.useMergeAllLayers(...this.constructor.contexts) } - useRunSync(this: ReffuseHelpers): (effect: Effect.Effect) => A { + useRunSync(this: ReffuseNamespace): (effect: Effect.Effect) => A { const runtime = ReffuseRuntime.useRuntime() const context = this.useContext() @@ -43,7 +43,7 @@ export abstract class ReffuseHelpers { ), [runtime, context]) } - useRunPromise(this: ReffuseHelpers): ( + useRunPromise(this: ReffuseNamespace): ( effect: Effect.Effect, options?: { readonly signal?: AbortSignal }, ) => Promise { @@ -56,7 +56,7 @@ export abstract class ReffuseHelpers { ), [runtime, context]) } - useRunFork(this: ReffuseHelpers): ( + useRunFork(this: ReffuseNamespace): ( effect: Effect.Effect, options?: Runtime.RunForkOptions, ) => Fiber.RuntimeFiber { @@ -69,7 +69,7 @@ export abstract class ReffuseHelpers { ), [runtime, context]) } - useRunCallback(this: ReffuseHelpers): ( + useRunCallback(this: ReffuseNamespace): ( effect: Effect.Effect, options?: Runtime.RunCallbackOptions, ) => Runtime.Cancel { @@ -92,7 +92,7 @@ export abstract class ReffuseHelpers { * You can disable this behavior by setting `doNotReExecuteOnRuntimeOrContextChange` to `true` in `options`. */ useMemo( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps: React.DependencyList, options?: RenderOptions, @@ -106,7 +106,7 @@ export abstract class ReffuseHelpers { } useMemoScoped( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps: React.DependencyList, options?: RenderOptions & ScopeOptions, @@ -179,7 +179,7 @@ export abstract class ReffuseHelpers { * ``` */ useEffect( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps?: React.DependencyList, options?: RenderOptions & ScopeOptions, @@ -227,7 +227,7 @@ export abstract class ReffuseHelpers { * ``` */ useLayoutEffect( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps?: React.DependencyList, options?: RenderOptions & ScopeOptions, @@ -275,7 +275,7 @@ export abstract class ReffuseHelpers { * ``` */ useFork( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps?: React.DependencyList, options?: Runtime.RunForkOptions & RenderOptions & ScopeOptions, @@ -298,7 +298,7 @@ export abstract class ReffuseHelpers { } usePromise( - this: ReffuseHelpers, + this: ReffuseNamespace, effect: () => Effect.Effect, deps?: React.DependencyList, options?: { readonly signal?: AbortSignal } & Runtime.RunForkOptions & RenderOptions & ScopeOptions, @@ -345,7 +345,7 @@ export abstract class ReffuseHelpers { } useCallbackSync( - this: ReffuseHelpers, + this: ReffuseNamespace, callback: (...args: Args) => Effect.Effect, deps: React.DependencyList, options?: RenderOptions, @@ -359,7 +359,7 @@ export abstract class ReffuseHelpers { } useCallbackPromise( - this: ReffuseHelpers, + this: ReffuseNamespace, callback: (...args: Args) => Effect.Effect, deps: React.DependencyList, options?: { readonly signal?: AbortSignal } & RenderOptions, @@ -373,7 +373,7 @@ export abstract class ReffuseHelpers { } useRef( - this: ReffuseHelpers, + this: ReffuseNamespace, value: A, ): SubscriptionRef.SubscriptionRef { return this.useMemo( @@ -387,7 +387,7 @@ export abstract class ReffuseHelpers { const Refs extends readonly SubscriptionRef.SubscriptionRef[], R, >( - this: ReffuseHelpers, + this: ReffuseNamespace, ...refs: Refs ): [...{ [K in keyof Refs]: Effect.Effect.Success }] { const [reactStateValue, setReactStateValue] = React.useState(this.useMemo( @@ -415,7 +415,7 @@ export abstract class ReffuseHelpers { * Note that the rules of React's immutable state still apply: updating a ref with the same value will not trigger a re-render. */ useRefState( - this: ReffuseHelpers, + this: ReffuseNamespace, ref: SubscriptionRef.SubscriptionRef, ): [A, React.Dispatch>] { const initialState = this.useMemo(() => ref, [], { doNotReExecuteOnRuntimeOrContextChange: true }) @@ -436,7 +436,7 @@ export abstract class ReffuseHelpers { } useStreamFromValues( - this: ReffuseHelpers, + this: ReffuseNamespace, values: A, ): Stream.Stream { const [queue, stream] = this.useMemo(() => Queue.unbounded().pipe( @@ -453,7 +453,7 @@ export abstract class ReffuseHelpers { const Refs extends readonly SubscriptionRef.SubscriptionRef[], R, >( - this: ReffuseHelpers, + this: ReffuseNamespace, props: { readonly refs: Refs readonly children: (...args: [...{ [K in keyof Refs]: Effect.Effect.Success }]) => React.ReactNode @@ -463,7 +463,7 @@ export abstract class ReffuseHelpers { } RefState( - this: ReffuseHelpers, + this: ReffuseNamespace, props: { readonly ref: SubscriptionRef.SubscriptionRef readonly children: (state: [A, React.Dispatch>]) => React.ReactNode @@ -474,30 +474,30 @@ export abstract class ReffuseHelpers { } -export interface ReffuseHelpers extends Pipeable.Pipeable {} +export interface ReffuseNamespace extends Pipeable.Pipeable {} -ReffuseHelpers.prototype.pipe = function pipe() { +ReffuseNamespace.prototype.pipe = function pipe() { return Pipeable.pipeArguments(this, arguments) }; -export interface ReffuseHelpersClass extends Pipeable.Pipeable { - new(): ReffuseHelpers +export interface ReffuseNamespaceClass extends Pipeable.Pipeable { + new(): ReffuseNamespace make(this: new () => Self): Self readonly contexts: readonly ReffuseContext.ReffuseContext[] } -(ReffuseHelpers as ReffuseHelpersClass).make = function make() { +(ReffuseNamespace as ReffuseNamespaceClass).make = function make() { return new this() }; -(ReffuseHelpers as ReffuseHelpersClass).pipe = function pipe() { +(ReffuseNamespace as ReffuseNamespaceClass).pipe = function pipe() { return Pipeable.pipeArguments(this, arguments) }; -export const make = (): ReffuseHelpersClass => ( - class extends (ReffuseHelpers as ReffuseHelpersClass) { +export const makeClass = (): ReffuseNamespaceClass => ( + class extends (ReffuseNamespace as ReffuseNamespaceClass) { static readonly contexts = [] } ) diff --git a/packages/reffuse/src/index.ts b/packages/reffuse/src/index.ts index 63af29b..01fb88f 100644 --- a/packages/reffuse/src/index.ts +++ b/packages/reffuse/src/index.ts @@ -1,6 +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 ReffuseNamespace from "./ReffuseNamespace.js" export * as ReffuseRuntime from "./ReffuseRuntime.js" export * as SetStateAction from "./SetStateAction.js"