import MagicString from "magic-string";
import type * as Estree from "acorn";
import { Message } from '../adapters.js';
import type { HeuristicDetailsBase, HeuristicFunc, IndexTracker, ScriptDeclType, TransformOutput, HeuristicDetails, RuntimeConf, CatalogExpr, CodePattern, UrlMatcher, HeuristicResultChecked, MessageType } from "../adapters.js";
import { type RuntimeVars, type CommentDirectives } from "../adapter-utils/index.js";
export declare const scriptParseOptions: Estree.Options;
export declare function scriptParseOptionsWithComments(): [Estree.Options, Estree.Comment[][]];
export declare function parseScript(content: string): [Estree.Program, Estree.Comment[][]];
type InitRuntimeFunc = (file: string, funcName?: string, parentFunc?: string, additional?: object) => string | undefined;
export declare class Transformer {
    index: IndexTracker;
    heuristic: HeuristicFunc;
    content: string;
    comments: Estree.Comment[][];
    filename: string;
    mstr: MagicString;
    patterns: CodePattern[];
    matchUrl: UrlMatcher;
    initRuntime: InitRuntimeFunc;
    currentRtVar: string;
    vars: () => RuntimeVars;
    commentDirectives: CommentDirectives;
    insideProgram: boolean;
    declaring?: ScriptDeclType;
    currentFuncNested: boolean;
    currentFuncDef?: string;
    currentCall: string;
    currentTopLevelCall?: string;
    /** .start of the first statements in their respective parents, to put the runtime init before */
    realBodyStarts: Set<number>;
    /** for subclasses. right now for svelte, if in <script module> */
    additionalState: object;
    constructor(content: string, filename: string, index: IndexTracker, heuristic: HeuristicFunc, patterns: CodePattern[], catalogExpr: CatalogExpr, rtConf: RuntimeConf, matchUrl: UrlMatcher, rtBaseVars?: string[]);
    fullHeuristicDetails: (detailsBase: HeuristicDetailsBase) => HeuristicDetails;
    getHeuristicMessageType: (msg: Message) => HeuristicResultChecked;
    checkHeuristic: (msgStr: string, detailsBase: HeuristicDetailsBase) => [MessageType, Message] | [false, null];
    visitLiteral: (node: Estree.Literal, heuristicDetailsBase?: HeuristicDetailsBase) => Message[];
    visitArrayExpression: (node: Estree.ArrayExpression) => Message[];
    visitSequenceExpression: (node: Estree.SequenceExpression) => Message[];
    visitObjectExpression: (node: Estree.ObjectExpression) => Message[];
    visitObjectPattern: (node: Estree.ObjectPattern) => Message[];
    visitRestElement: (node: Estree.RestElement) => Message[];
    visitProperty: (node: Estree.Property) => Message[];
    visitSpreadElement: (node: Estree.SpreadElement) => Message[];
    visitMemberExpression: (node: Estree.MemberExpression) => Message[];
    visitChainExpression: (node: Estree.ChainExpression) => Message[];
    visitNewExpression: (node: Estree.NewExpression) => Message[];
    defaultVisitCallExpression: (node: Estree.CallExpression) => Message[];
    visitCallExpression: (node: Estree.CallExpression) => Message[];
    visitBinaryExpression: (node: Estree.BinaryExpression) => Message[];
    visitConditionalExpression: (node: Estree.ConditionalExpression) => Message[];
    visitUnaryExpression: (node: Estree.UnaryExpression) => Message[];
    visitLogicalExpression: (node: Estree.LogicalExpression) => Message[];
    visitAwaitExpression: (node: Estree.AwaitExpression) => Message[];
    visitAssignmentExpression: (node: Estree.BinaryExpression) => Message[];
    visitAssignmentPattern: (node: Estree.AssignmentPattern) => Message[];
    visitExpressionStatement: (node: Estree.ExpressionStatement) => Message[];
    visitForOfStatement: (node: Estree.ForOfStatement) => Message[];
    visitForInStatement: (node: Estree.ForInStatement) => Message[];
    visitForStatement: (node: Estree.ForStatement) => Message[];
    getMemberChainName: (node: Estree.MemberExpression) => string;
    getCalleeName: (callee: Estree.Expression | Estree.Super) => string;
    defaultVisitVariableDeclarator: (node: Estree.VariableDeclarator) => Message[];
    visitVariableDeclarator: (node: Estree.VariableDeclarator) => Message[];
    visitVariableDeclaration: (node: Estree.VariableDeclaration) => Message[];
    visitExportNamedDeclaration: (node: Estree.ExportNamedDeclaration) => Message[];
    visitExportDefaultDeclaration: (node: Estree.ExportNamedDeclaration) => Message[];
    visitStatementsNSaveRealBodyStart: (nodes: (Estree.Statement | Estree.ModuleDeclaration)[]) => Message[];
    getRealBodyStart: (nodes: (Estree.Statement | Estree.ModuleDeclaration)[]) => number | undefined;
    visitFunctionBody: (node: Estree.BlockStatement | Estree.Expression, name?: string, end?: number) => Message[];
    visitFunctionDeclaration: (node: Estree.FunctionDeclaration) => Message[];
    visitArrowFunctionExpression: (node: Estree.ArrowFunctionExpression) => Message[];
    visitFunctionExpression: (node: Estree.FunctionExpression) => Message[];
    visitBlockStatement: (node: Estree.BlockStatement) => Message[];
    visitReturnStatement: (node: Estree.ReturnStatement) => Message[];
    visitIfStatement: (node: Estree.IfStatement) => Message[];
    visitClassDeclaration: (node: Estree.ClassDeclaration) => Message[];
    checkHeuristicTemplateLiteral: (node: Estree.TemplateLiteral, heurDetails?: HeuristicDetailsBase) => HeuristicResultChecked;
    visitTemplateLiteralQuasis: (node: Estree.TemplateLiteral, msgTyp: MessageType) => [number, Message[]];
    visitTemplateLiteral: (node: Estree.TemplateLiteral, heurDetails?: HeuristicDetailsBase | boolean) => Message[];
    visitTaggedTemplateExpression: (node: Estree.TaggedTemplateExpression) => Message[];
    visitSwitchStatement: (node: Estree.SwitchStatement) => Message[];
    visitTryStatement: (node: Estree.TryStatement) => Message[];
    visitTSAsExpression: (node: {
        expression: Estree.AnyNode;
    }) => Message[];
    visitTSTypeAssertion: (node: {
        expression: Estree.AnyNode;
    }) => Message[];
    visitProgram: (node: Estree.Program) => Message[];
    visitWithCommentDirectives: (node: Estree.AnyNode, func: Function) => any;
    visit: (node: Estree.AnyNode) => Message[];
    finalize: (msgs: Message[], hmrHeaderIndex: number, additionalHeader?: string) => TransformOutput;
    transform: () => TransformOutput;
}
export {};
