import { type CacheBindingInvalidation } from '../models/CacheBindingInvalidation.js';
import { type GetPlanOptions } from '../models/GetPlanOptions.js';
import { type NonCachedServiceNodeContext } from '../models/NonCachedServiceNodeContext.js';
import { type PlanResult } from '../models/PlanResult.js';
import { type PlanServiceNode } from '../models/PlanServiceNode.js';
/**
 * Service to cache plans.
 *
 * This class is used to cache plans and to notify PlanService subscribers when the cache is cleared.
 * The cache should be cleared when a new binding is registered or when a binding is unregistered.
 *
 * Subscribers are supposed to be plan services from child containers.
 *
 * Ancestor binding constraints are the reason to avoid reusing plans from plan children nodes.
 */
export declare class PlanResultCacheService {
    #private;
    constructor();
    clearCache(): void;
    get(options: GetPlanOptions): PlanResult | undefined;
    invalidateServiceBinding(invalidation: CacheBindingInvalidation): void;
    set(options: GetPlanOptions, planResult: PlanResult): void;
    setNonCachedServiceNode(node: PlanServiceNode, context: NonCachedServiceNodeContext): void;
    subscribe(subscriber: PlanResultCacheService): void;
}
//# sourceMappingURL=PlanResultCacheService.d.ts.map