@vaadin/hilla-react-signals
Version:
Signals for Hilla React
59 lines (58 loc) • 2.47 kB
TypeScript
import type { ConnectClient, EndpointRequestInit, Subscription } from '@vaadin/hilla-frontend';
import { type SignalCommand } from './commands.js';
import { Signal } from './core.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>;
}>;
declare class ServerConnection {
#private;
readonly config: ServerConnectionConfig;
constructor(id: string, config: ServerConnectionConfig);
get subscription(): Subscription<Readonly<{
commandId: import("./commands.js").Id;
targetNodeId: import("./commands.js").Id;
'@type': string;
}>> | undefined;
connect(): Subscription<Readonly<{
commandId: import("./commands.js").Id;
targetNodeId: import("./commands.js").Id;
'@type': string;
}>>;
update(command: SignalCommand, init?: EndpointRequestInit): 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>;
protected readonly parent?: FullStackSignal<any>;
constructor(value: T | undefined, config: ServerConnectionConfig, id?: string, parent?: FullStackSignal<any>);
protected [$createOperation]({ id, promise }: {
id?: string;
promise?: Promise<void>;
}): Operation;
protected [$setValueQuietly](value: T): void;
protected [$update](command: SignalCommand): Promise<void>;
protected [$resolveOperation](commandId: string, reason?: string): void;
protected abstract [$processServerResponse](command: SignalCommand): void;
}
export {};