import { SourceFile, Node, ImportDeclaration } from 'typescript';
import OutputContext, { Scenario } from './OutputContext';
import TypeInterpreter from './interpreter/type';
import LiteralInterpreter from './interpreter/literal';
import DecoratorInterpreter from './interpreter/decorator';
import DeclarationInterpreter from './interpreter/declaration';
import StatementInterpreter from './interpreter/statement';
import MetadataInterpreter from './interpreter/metadata';
import InliningInterpreter from './interpreter/inlining';
import type { FileInfo } from 'SmartTS';
declare enum InterpreterKind {
    Declaration = "Declaration",
    Decorator = "Decorator",
    Literal = "Literal",
    Statement = "Statement",
    Type = "Type",
    Metadata = "Metadata",
    Inlining = "Inlining"
}
export declare type Interpreters = Readonly<{
    [InterpreterKind.Declaration]: DeclarationInterpreter;
    [InterpreterKind.Decorator]: DecoratorInterpreter;
    [InterpreterKind.Literal]: LiteralInterpreter;
    [InterpreterKind.Statement]: StatementInterpreter;
    [InterpreterKind.Type]: TypeInterpreter;
    [InterpreterKind.Metadata]: MetadataInterpreter;
    [InterpreterKind.Inlining]: InliningInterpreter;
}>;
export declare class Transpiler {
    sourceFile: SourceFile;
    output: OutputContext;
    interpreters: Interpreters;
    constructor(source: FileInfo);
    transpile: () => Promise<Scenario[]>;
    /**
     * @description Extract node name.
     * @param {Node} node
     * @returns {string} node name
     */
    extractName: (node: Node) => string;
    /**
     * @description Extract expression namespace.
     * @param {Node} node
     * @returns {string[]} namespace path
     */
    extractNamespace: (expr: Node) => string[];
    /**
     * @description Get Imported module name
     * @param {ImportDeclaration} node
     * @returns {string} Module name
     */
    getImportName: (node: ImportDeclaration) => string;
    /**
     * @description Visit import declaration and apply transformations
     * @param {ImportDeclaration} node
     * @returns {@Promise<void>}
     */
    visitImportDeclaration(node: ImportDeclaration): Promise<void>;
}
export default Transpiler;
