effex-monorepo
    Preparing search index...

    Interface ISuspenseBoundaryCtx<N>

    Context interface for suspense boundary operations. Abstracts SSR/Hydration/Client differences behind a unified API.

    Each environment provides an implementation:

    • SSR: Creates container with hydration markers, renders fallback only
    • Hydration: Finds existing container, forks async render
    • Client: Creates slot, handles delay logic, forks async render
    interface ISuspenseBoundaryCtx<N> {
        createSuspensionPoint: () => Effect<N, never, RendererContext>;
        forkRender: <E, R1, RC>(
            render: () => Element<N, E, R1>,
            catchRender: ((error: E) => Element<N, never, RC>) | undefined,
            fallbackFiber: Option<Fiber<void, never>>,
        ) => Effect<void, never, Scope>;
        showFallback: (
            element: N,
            delay: Option<Duration>,
        ) => Effect<Option<Fiber<void, never>>, never, Scope>;
    }

    Type Parameters

    • N
    Index

    Properties

    createSuspensionPoint: () => Effect<N, never, RendererContext>

    Create a suspension point, returns the element we'll return from suspense. The implementation stores internal state for subsequent method calls.

    • SSR: Creates container with hydration markers, returns it
    • Hydration: Finds existing container by ID, returns it
    • Client: Creates a Slot, returns slot.marker
    forkRender: <E, R1, RC>(
        render: () => Element<N, E, R1>,
        catchRender: ((error: E) => Element<N, never, RC>) | undefined,
        fallbackFiber: Option<Fiber<void, never>>,
    ) => Effect<void, never, Scope>

    Fork the async render. Interrupts fallback fiber if render completes first.

    • SSR: Noop
    • Hydration: Forks render, replaces content on complete, updates state marker
    • Client: Forks render, interrupts fallbackFiber if Some, sets content

    Note: R1 and RC context requirements are satisfied through the parent fiber's inherited context when the forked fiber runs, not through the returned Effect.

    showFallback: (
        element: N,
        delay: Option<Duration>,
    ) => Effect<Option<Fiber<void, never>>, never, Scope>

    Show fallback content. Returns Some(fiber) if display is deferred and can be interrupted.

    • SSR: Appends to container immediately, returns None
    • Hydration: Noop (fallback already in DOM), returns None
    • Client (no delay): Sets in slot immediately, returns None
    • Client (with delay): Forks delayed display, returns Some(fiber)