import { DataCache } from "./DataCache";
import { ContextArgs } from "./utils";
import { Contextual } from "../interfaces/Contextual";
import { OperationKeys } from "../operations/constants";
import { Constructor, Model } from "@decaf-ts/decorator-validation";
export declare class Context<M extends Model> extends DataCache {
    protected operation: OperationKeys;
    protected model?: Constructor<M> | undefined;
    protected parent?: Context<any> | undefined;
    protected constructor(operation: OperationKeys, model?: Constructor<M> | undefined, parent?: Context<any> | undefined);
    get timestamp(): Date;
    get(key: string): Promise<any>;
    pop(key: string): Promise<any>;
    child<N extends Model>(operation: OperationKeys, model?: Constructor<N>): Context<N>;
    static from<M extends Model, C extends Context<M>>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, model: Constructor<M>, ...args: any[]): Promise<C>;
    static args<M extends Model>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, model: Constructor<M>, args: any[], contextual?: Contextual<M>): Promise<ContextArgs<M>>;
}
