import { AnyAtomInstance, AtomGetters } from '../types/index';
import { StackItem } from '../utils/index';
import { Ecosystem } from './Ecosystem';
import { SelectorCache } from './Selectors';
/**
 * A stack of AtomInstances and AtomSelectors that are currently evaluating -
 * innermost instance/selector (the one that's actually currently evaluating) at
 * the end of the array.
 *
 * This has to live in the module scope so `readInstance` can access it without
 * any ecosystem context. That's how injectors work.
 */
export declare let stack: StackItem[];
export declare const readInstance: () => AnyAtomInstance<"any">;
export declare const setStack: (newStack: StackItem[]) => StackItem[];
export declare class EvaluationStack {
    private readonly ecosystem;
    atomGetters: AtomGetters;
    constructor(ecosystem: Ecosystem);
    finish(): void;
    read(): StackItem | undefined;
    start(node: AnyAtomInstance | SelectorCache<any, any>): void;
}
