import { ScopeManager } from "../scopeManager";
import * as ESTree from "estree";
import { ModuleScope } from "../scope";
import { RefsToModuleExtractor } from "./childScopesTraverser";
import { Variable } from "../variable";
import { VirtualScope } from "./virtualScope";
export interface Dictionary<T> {
    [index: string]: T;
}
export interface ExportInfo {
    sourceName: string | true;
    moduleName: string;
}
export declare class ModuleAnalyser {
    readonly name: string;
    readonly module: any;
    scopeManager: ScopeManager | null;
    readonly extractorMap: Map<string, RefsToModuleExtractor>;
    readonly virtualScopeMap: WeakMap<Variable, VirtualScope>;
    readonly virtualScopes: VirtualScope[];
    readonly initVirtualScopes: VirtualScope[];
    private comments;
    constructor(name: string, module: any, scopeManager?: ScopeManager | null);
    defaultOptions(): {
        optimistic: boolean;
        directive: boolean;
        nodejsScope: boolean;
        impliedStrict: boolean;
        sourceType: string;
        ecmaVersion: number;
        childVisitorKeys: null;
        fallback: string;
        comments: never[];
    };
    analyze(tree: ESTree.Node, providedOptions?: any): void;
    private processComments;
    private handleExportDefaultDeclaration;
    generateExportInfo(usedExports: string[]): Dictionary<boolean | string[] | Set<string>>;
    private traverseIndependentScopes;
    private handleNotExportReferences;
    private updateDeeply;
    readonly moduleScope: ModuleScope;
}