import { DiProgramOptions, DiIsolatedModulesOptions } from "./di-options.js";
import { TS } from "./type.js";
import { EvaluateResult } from "ts-evaluator";
import { SourceFileToImportedSymbolSet } from "./imported-symbol.js";
interface BaseVisitorContextShared {
    compilerOptions: TS.CompilerOptions;
    evaluate(node: TS.Declaration | TS.Expression | TS.Statement): EvaluateResult;
    needsImportPreservationLogic: boolean;
    sourceFileToAddTslibDefinition: Map<string, boolean>;
    sourceFileToRequiredImportedSymbolSet: SourceFileToImportedSymbolSet;
}
interface BaseVisitorContextProgram extends BaseVisitorContextShared, Required<DiProgramOptions> {
    typeChecker: TS.TypeChecker;
}
interface BaseVisitorContextIsolatedModules extends BaseVisitorContextShared, Required<DiIsolatedModulesOptions> {
}
type BaseVisitorContext = BaseVisitorContextProgram | BaseVisitorContextIsolatedModules;
interface VisitorContextShared {
    factory: TS.NodeFactory;
    transformationContext: TS.TransformationContext;
}
interface VisitorContextProgram extends BaseVisitorContextProgram, VisitorContextShared {
}
interface VisitorContextIsolatedModules extends BaseVisitorContextIsolatedModules, VisitorContextShared {
}
type VisitorContext = VisitorContextProgram | VisitorContextIsolatedModules;
export { BaseVisitorContextShared, BaseVisitorContext, VisitorContext };
