import type { INext, NextOptions, NextNode, BailOptions } from '../interfaces';
import type { SurrogateUnwrapped } from '../../interfaces';
import type { SurrogateProxy } from '../../proxy/handler';
import type { HandlerContainer } from '../../containers';
import type { ContextController } from '../context';
import { Which, HookType } from '../../which';
export interface NextConstruct<T extends object> {
    new (controller: ContextController<T>, proxy: SurrogateProxy<T>, container: HandlerContainer<T>, hookFor: Which): NextNode<T>;
}
export declare abstract class BaseNext<T extends object> implements INext {
    controller: ContextController<T>;
    proxy: SurrogateProxy<T>;
    container: HandlerContainer<T>;
    hookFor: Which;
    nextNode: NextNode<T>;
    prevNode: NextNode<T>;
    didError: Error;
    constructor(controller: ContextController<T>, proxy: SurrogateProxy<T>, container: HandlerContainer<T>, hookFor: Which);
    skip(times?: number): void;
    next({ using, ...options }?: NextOptions): void;
    shouldRun(using: any[]): boolean;
    get instance(): SurrogateUnwrapped<T>;
    get hookType(): HookType;
    get context(): import("../../context").Context<T>;
    addNext(next: NextNode<T>): void;
    get useContext(): import("../../interfaces").Contexts;
    private shouldReplace;
    protected replace(options: NextOptions): void;
    bail(bailOptions?: BailOptions): void;
    abstract skipWith(times?: number, ...args: any[]): void;
    abstract handleNext(options?: NextOptions): void;
}
