import { F } from "../util/Utils.js";
import { Operation, MemberOptions } from "../Options.js";
import { FieldKey, ObjectHandle, FieldVersion, Reaction, Subscription, AbstractChangeset } from "./Data.js";
import { Transaction } from "./Transaction.js";
import { OptionsImpl } from "./Mvcc.js";
export declare class OperationImpl implements Operation<any> {
    readonly ownerHandle: ObjectHandle;
    readonly fieldKey: FieldKey;
    configure(options: Partial<MemberOptions>): MemberOptions;
    get options(): MemberOptions;
    get nonreactive(): any;
    get args(): ReadonlyArray<any>;
    get result(): any;
    get error(): boolean;
    get stamp(): number;
    get isReusable(): boolean;
    markObsolete(): void;
    pullLastResult(args?: any[]): any;
    constructor(h: ObjectHandle, fk: FieldKey);
    reuseOrRelaunch(weak: boolean, args: any[] | undefined): Launch;
    static getControllerOf(method: F<any>): Operation<any>;
    static configureImpl(self: OperationImpl | undefined, options: Partial<MemberOptions>): MemberOptions;
    static proceedWithinGivenLaunch<T>(launch: Launch | undefined, func: F<T>, ...args: any[]): T;
    static why(): string;
    static briefWhy(): string;
    static dependencies(): string[];
    private peek;
    private use;
    private edit;
    private acquireFromObjectVersion;
    private relaunch;
    private static markObsolete;
}
declare class Launch extends FieldVersion implements Reaction {
    static current?: Launch;
    static queuedReactions: Array<Reaction>;
    static deferredReactiveOperations: Array<Launch>;
    readonly margin: number;
    readonly transaction: Transaction;
    readonly operation: OperationImpl;
    readonly changeset: AbstractChangeset;
    triggers: Map<FieldVersion, Subscription> | undefined;
    options: OptionsImpl;
    cause: string | undefined;
    args: any[];
    result: any;
    error: any;
    started: number;
    obsoleteDueTo: string | undefined;
    obsoleteSince: number;
    successor: Launch | undefined;
    constructor(transaction: Transaction, operation: OperationImpl, changeset: AbstractChangeset, former: Launch | OptionsImpl, clone: boolean);
    get isLaunch(): boolean;
    hint(): string;
    get order(): number;
    get ["#this#"](): string;
    clone(t: Transaction, cs: AbstractChangeset): FieldVersion;
    why(): string;
    briefWhy(): string;
    dependencies(): string[];
    wrap<T>(func: F<T>): F<T>;
    proceed(proxy: any, args: any[] | undefined): void;
    markObsoleteDueTo(trigger: FieldVersion, fk: FieldKey, changeset: AbstractChangeset, h: ObjectHandle, outer: string, since: number, collector: Reaction[]): void;
    relaunchIfNotUpToDate(now: boolean, nothrow: boolean): void;
    isNotUpToDate(): boolean;
    reenterOver(head: Launch): this;
    private static proceed;
    private enter;
    private leaveOrAsync;
    private leave;
    private indicatorEnter;
    private indicatorLeave;
    private addToDeferredReactiveFunctions;
    private static processDeferredReactiveFunctions;
    private static markUsed;
    private static markEdited;
    private static tryResolveConflict;
    private static propagateAllChangesThroughSubscriptions;
    private static revokeAllSubscriptions;
    private static propagateFieldChangeThroughSubscriptions;
    private static enqueueReactionsToRun;
    private static migrateFieldVersion;
    private static processQueuedReactions;
    private unsubscribeFromAllTriggers;
    private subscribeTo;
    private static canSubscribeTo;
    private static createOperation;
    private static rememberOperationOptions;
    static init(): void;
}
export declare function resolveReturn(value: any): any;
export declare function rejectRethrow(error: any): never;
export {};
