/** * DataBus — warstwa stanu aplikacji. * * "Co istnieje" (w przeciwieństwie do EventBus, który zajmuje się "co się stało"). * Reaktywny strumień + request/response z cache, dedupe, retry (tylko dla idempotentnych read'ów). * * Widget NIE subskrybuje DataBus bezpośrednio — runtime resolve'uje bindingi * i podaje wartości przez inputs (patrz WidgetHost). */ import type { Observable } from 'rxjs'; import type { DatasourceId } from '../identity/index.js'; import type { EchelonError } from '../errors/index.js'; /** Snapshot wartości datasource w danej chwili. */ export interface DataSnapshot { readonly value: T | undefined; readonly status: DataStatus; readonly at: number; readonly error?: EchelonError; readonly stale: boolean; } export type DataStatus = 'idle' | 'loading' | 'ready' | 'stale' | 'error'; export interface DataSource { readonly id: DatasourceId; readonly value$: Observable>; /** Wymusza re-fetch (np. po zmianie params). */ refresh(): void; /** Ostatnia znana wartość synchronizcznie — do UI overlay / log kontekstu. */ snapshot(): DataSnapshot; } export interface DataBus { /** Zwraca istniejący strumień lub tworzy nowy. Subskrypcje są deduplikowane. */ source(id: DatasourceId): DataSource; /** Invalidate cache dla konkretnego ID (albo wszystkich). */ invalidate(id?: DatasourceId): void; /** Invalidate wszystkich datasources oznaczonych dowolnym z podanych tagów. */ invalidateByTags?(tags: readonly string[]): void; /** * Invalidate wszystkich datasources, których `cache.invalidateOn` zawiera * podany event. Wywoływane przez runtime po publikacji eventu na EventBusie. */ invalidateByEvent?(eventName: string): void; } export declare const DATA_BUS: import("../index.js").EchelonToken; //# sourceMappingURL=index.d.ts.map