import { MatchContext, ResultFormatter, LogLevelContext, Logger, MatchContextWithoutLookup, MatchResult } from '@contract-case/case-plugin-base';
import { AnyCaseMatcher } from '@contract-case/case-entities-internal';
import { AnyCaseMatcherOrData, AnyData, AnyLeafOrStructure } from '@contract-case/case-plugin-dsl-types';
import type { CaseConfig, DefaultConfig } from './config/types';
import { ContractData, CaseContractDescription } from '../entities/types';
type UserProvidedFunction = (...args: unknown[]) => Promise<unknown>;
export declare class BaseCaseContract {
    currentContract: ContractData;
    initialContext: MatchContext;
    /**
     * The currently executing context. Used to make it easy to do things
     * like get state variables during a stripMatchers call inside a test trigger
     */
    runningContext: MatchContext;
    userProvidedFunctions: Record<string, UserProvidedFunction>;
    constructor(description: CaseContractDescription, config: CaseConfig, defaultConfig: DefaultConfig, resultPrinter: ResultFormatter, makeLogger: (context: LogLevelContext) => Logger, parentVersions: Array<string>, userProvidedFunctions?: Record<string, UserProvidedFunction>);
    registerFunction(handle: string, invokeableFn: UserProvidedFunction): void;
    invokeFunctionByHandle(handle: string, callerArguments: unknown[], context: MatchContextWithoutLookup): Promise<unknown>;
    lookupVariable(name: string, context: MatchContextWithoutLookup): AnyCaseMatcherOrData;
    addVariable(name: string, type: 'default' | 'state', stateName: string, value: AnyCaseMatcherOrData, context: MatchContextWithoutLookup): [name: string, value: AnyCaseMatcherOrData];
    saveLookupableMatcher(namedMatcher: AnyCaseMatcherOrData, context: MatchContextWithoutLookup): ContractData;
    lookupMatcher(uniqueName: string, context: MatchContextWithoutLookup): AnyCaseMatcherOrData;
    /**
     * Strips the matchers from a (potentially) case matcher and returns
     * the concrete example it would match.
     *
     * Note this isn't the only example it could match - just the default version.
     *
     * WARNING: If called outside a test, this function runs using the context of
     * the last test run. This means that state variables might not be correct.
     * Perhaps we should consider making it an error to call this if a test
     * isn't running?
     *
     * @param matcherOrData - the matcher or data to strip the matchers from
     * @returns the concrete example
     */
    stripMatchers(matcherOrData: AnyCaseMatcher | AnyLeafOrStructure): AnyData;
    /**
     * Checks if a matcher matchers some actual data.
     *
     * This is only exposed for tests at the moment - if it were exposed further,
     * we'd need to use the running test context like stripMatchers does.
     *
     *
     * WARNING: If called outside a test, this function runs using the context of
     * the last test run. This means that state variables might not be correct.
     *
     * @param matcherOrData - the matcher or data that is expected
     * @param actual - the actual data to match against
     * @returns a {@link MatchResult} object with the results of the match
     */
    checkMatch(matcherOrData: AnyCaseMatcher | AnyLeafOrStructure, actual: unknown): Promise<MatchResult>;
}
export {};
//# sourceMappingURL=BaseCaseContract.d.ts.map