@vaadin/hilla-react-signals
Version:
Signals for Hilla React
63 lines (62 loc) • 2.36 kB
TypeScript
import type { ConnectClient, Subscription } from '@vaadin/hilla-frontend';
import { Signal } from './core.js';
import { type StateEvent } from './events.js';
export interface Operation {
result: Promise<void>;
}
export declare abstract class DependencyTrackingSignal<T> extends Signal<T> {
#private;
protected constructor(value: T | undefined, onFirstSubscribe: () => void, onLastUnsubscribe: () => void);
protected S(node: unknown): void;
protected U(node: unknown): void;
}
export type ServerConnectionConfig = Readonly<{
client: ConnectClient;
endpoint: string;
method: string;
params?: Record<string, unknown>;
parentClientSignalId?: string;
}>;
declare class ServerConnection {
#private;
readonly config: ServerConnectionConfig;
constructor(id: string, config: ServerConnectionConfig);
get subscription(): Subscription<Readonly<{
id: string;
type: string;
value: unknown;
accepted: boolean;
parentSignalId?: string;
}>> | undefined;
connect(): Subscription<Readonly<{
id: string;
type: string;
value: unknown;
accepted: boolean;
parentSignalId?: string;
}>>;
update(event: StateEvent): Promise<void>;
disconnect(): void;
}
export declare const $update: unique symbol;
export declare const $processServerResponse: unique symbol;
export declare const $setValueQuietly: unique symbol;
export declare const $resolveOperation: unique symbol;
export declare const $createOperation: unique symbol;
export declare abstract class FullStackSignal<T> extends DependencyTrackingSignal<T> {
#private;
readonly id: string;
readonly server: ServerConnection;
readonly pending: import("@preact/signals-core").ReadonlySignal<boolean>;
readonly error: import("@preact/signals-core").ReadonlySignal<Error | undefined>;
constructor(value: T | undefined, config: ServerConnectionConfig, id?: string);
protected [$createOperation]({ id, promise }: {
id?: string;
promise?: Promise<void>;
}): Operation;
protected [$setValueQuietly](value: T): void;
protected [$update](event: StateEvent): Promise<void>;
protected [$resolveOperation](eventId: string, reason?: string): void;
protected abstract [$processServerResponse](event: StateEvent): void;
}
export {};