import type { ContractData, MatchContext, ContractDescription, LogLevelContext, Logger, MatchContextWithoutLookup, AnyCaseNodeOrData, LookupableMatcher, AnyCaseNodeType, DataOrCaseNodeFor, AnyData, MatchResult, ResultPrinter } from '../entities/types';
import type { CaseConfig } from './config/types';
export declare class BaseCaseContract {
    currentContract: ContractData;
    initialContext: MatchContext;
    constructor(description: ContractDescription, config: CaseConfig, defaultConfig: CaseConfig, resultPrinter: ResultPrinter, makeLogger: (context: LogLevelContext) => Logger);
    lookupVariable(name: string, context: MatchContextWithoutLookup): AnyCaseNodeOrData;
    addVariable(name: string, type: 'default' | 'state', stateName: string, value: AnyCaseNodeOrData, context: MatchContextWithoutLookup): [name: string, value: AnyCaseNodeOrData];
    saveLookupableMatcher(namedMatcher: LookupableMatcher, context: MatchContextWithoutLookup): ContractData;
    lookupMatcher(uniqueName: string, context: MatchContextWithoutLookup): AnyCaseNodeOrData;
    stripMatchers<T extends AnyCaseNodeType>(matcherOrData: DataOrCaseNodeFor<T>): AnyData;
    checkMatch<T extends AnyCaseNodeType>(matcherOrData: DataOrCaseNodeFor<T>, actual: unknown): Promise<MatchResult>;
}
