import { destructor, observe } from '@synnaxlabs/x'; import { aether } from '../../aether/aether'; import { CompoundFactory, CreateOptions, Factory } from './factory'; import { Sink, Source, Spec } from './telem'; /** Provides utilities for creating and managing telemetry sources and sinks. */ export declare class Context { private factory; readonly key: string; readonly parent?: Context; constructor(factory: CompoundFactory, parent?: Context); child(factories: Factory | Factory[], parent?: Context): Context; create(spec: Spec, options?: CreateOptions): T; } export declare const CONTEXT_KEY = "pluto-telem-context"; export declare const useContext: (ctx: aether.Context) => Context; export declare const setContext: (ctx: aether.Context, prov: Context) => void; export declare const useChildContext: (ctx: aether.Context, factories: Factory | Factory[], prev: Context) => Context; declare class Memoized { private readonly spec; readonly wrapped: V; private readonly prevProv; constructor(wrapped: V, prevProv: Context, prevSpec: Spec); shouldUpdate(prov: Context, spec: Spec): boolean; } export declare class MemoizedSource = Source> extends Memoized { value(): V; loading(): boolean; cleanup(): void; onChange(handler: observe.Handler): destructor.Destructor; } declare class MemoizedSink extends Memoized> { set(...values: V[]): void; cleanup(): void; } export declare const useSource: = Source>(ctx: aether.Context, spec: Spec, prev: S | MemoizedSource, options?: CreateOptions) => MemoizedSource; export declare const useSink: (ctx: aether.Context, spec: Spec, prev: Sink, options?: CreateOptions) => MemoizedSink; export {}; //# sourceMappingURL=context.d.ts.map