import type { Atom, WritableAtom } from './atom'; declare type AnyAtom = Atom; declare type OnUnmount = () => void; declare type NonPromise = T extends Promise ? V : T; declare const IS_EQUAL_PROMISE: unique symbol; declare const INTERRUPT_PROMISE: unique symbol; declare type InterruptablePromise = Promise & { [IS_EQUAL_PROMISE]: (p: Promise) => boolean; [INTERRUPT_PROMISE]: () => void; }; declare type Revision = number; declare type InvalidatedRevision = number; declare type ReadDependencies = Map; export declare type AtomState = { e?: Error; p?: InterruptablePromise; c?: () => void; w?: Promise; v?: NonPromise; r: Revision; i?: InvalidatedRevision; d: ReadDependencies; }; declare type AtomStateMap = WeakMap; declare type Listeners = Set<() => void>; declare type Dependents = Set; declare type Mounted = { l: Listeners; d: Dependents; u: OnUnmount | void; }; declare type MountedMap = WeakMap; declare type StateListener = (updatedAtom: AnyAtom, isNewAtom: boolean) => void; declare type StateVersion = number; declare type PendingAtoms = Set; export declare type State = { l?: StateListener; v: StateVersion; a: AtomStateMap; m: MountedMap; p: PendingAtoms; }; export declare const createState: (initialValues?: Iterable | undefined, stateListener?: StateListener | undefined) => State; export declare const readAtom: (state: State, readingAtom: Atom) => AtomState; export declare const writeAtom: (state: State, writingAtom: WritableAtom, update: Update) => void | Promise; export declare const subscribeAtom: (state: State, atom: AnyAtom, callback: () => void) => () => void; export declare const restoreAtoms: (state: State, values: Iterable) => void; export {};