/**
 * @fileoverview OrdoJS Code Generator - Refactored modular implementation
 * @author OrdoJS Framework Team
 */
import type { ComponentAST, GeneratedCode, Props, SourceMap } from '../types/index.js';
/**
 * Code generation target environments
 */
export type CodeGenTarget = 'client' | 'server' | 'static' | 'universal';
/**
 * Code generation options
 */
export interface CodeGeneratorOptions {
    /** Target environment */
    target?: 'development' | 'production';
    /** Enable code minification */
    minify?: boolean;
    /** Generate source maps */
    sourceMaps?: boolean;
    /** Target ES version */
    esTarget?: 'es2022' | 'es2020' | 'es2018' | 'es5';
    /** Enable tree shaking */
    treeShaking?: boolean;
    /** Custom transformers */
    transformers?: CodeTransformer[];
    /** Output format */
    format?: 'esm' | 'cjs' | 'umd' | 'iife';
    /** Enable hot module replacement */
    hmr?: boolean;
    /** Bundle splitting strategy */
    splitting?: 'none' | 'chunks' | 'modules';
}
/**
 * Code transformer interface for plugin-based transformations
 */
export interface CodeTransformer {
    /** Transformer name */
    name: string;
    /** Target phase */
    phase: 'pre' | 'post' | 'optimize';
    /** Target code type */
    targets: CodeGenTarget[];
    /** Transform function */
    transform(code: string, context: TransformContext): TransformResult;
}
/**
 * Transform context for code transformers
 */
export interface TransformContext {
    /** Original AST */
    ast: ComponentAST;
    /** Generation options */
    options: Required<CodeGeneratorOptions>;
    /** Target environment */
    target: CodeGenTarget;
    /** Component metadata */
    metadata: ComponentMetadata;
    /** Source map builder */
    sourceMapBuilder?: SourceMapBuilder;
}
/**
 * Transform result
 */
export interface TransformResult {
    /** Transformed code */
    code: string;
    /** Source map changes */
    sourceMap?: SourceMapSegment[];
    /** Additional metadata */
    metadata?: Record<string, any>;
}
/**
 * Component metadata for code generation
 */
export interface ComponentMetadata {
    name: string;
    hasClientCode: boolean;
    hasServerCode: boolean;
    hasStyles: boolean;
    dependencies: string[];
    exports: string[];
    props: string[];
    state: string[];
    functions: string[];
    lifecycle: string[];
}
/**
 * Source map segment
 */
export interface SourceMapSegment {
    generatedLine: number;
    generatedColumn: number;
    originalLine: number;
    originalColumn: number;
    source: string;
    name?: string;
}
/**
 * Source map builder utility
 */
export declare class SourceMapBuilder {
    private segments;
    private sources;
    private names;
    addMapping(generatedLine: number, generatedColumn: number, originalLine: number, originalColumn: number, source: string, name?: string): void;
    build(): SourceMap;
    private encodeMappings;
}
/**
 * Code generation context for tracking state
 */
export interface CodeGenContext {
    /** Current indentation level */
    indent: number;
    /** Generated code lines */
    lines: string[];
    /** Source map builder */
    sourceMap?: SourceMapBuilder;
    /** Variable scope tracking */
    scopes: Map<string, Set<string>>;
    /** Current scope depth */
    scopeDepth: number;
    /** Import statements */
    imports: Map<string, Set<string>>;
    /** Export statements */
    exports: Set<string>;
}
/**
 * Enhanced OrdoJS Code Generator with modular architecture
 */
export declare class OrdoJSCodeGenerator {
    private options;
    private transformers;
    constructor(options?: CodeGeneratorOptions);
    /**
     * Generate code for all targets
     */
    generate(ast: ComponentAST): GeneratedCode;
    /**
     * Generate client-side code
     */
    generateClientCode(ast: ComponentAST, context: TransformContext): string;
    /**
     * Generate server-side code
     */
    generateServerCode(ast: ComponentAST, context: TransformContext): string;
    /**
     * Generate HTML template
     */
    generateHTML(ast: ComponentAST, context: TransformContext, props?: Props): string;
    /**
     * Generate CSS styles
     */
    generateCSS(ast: ComponentAST, context: TransformContext): string;
    /**
     * Add custom transformer
     */
    addTransformer(transformer: CodeTransformer): void;
    /**
     * Remove transformer by name
     */
    removeTransformer(name: string): boolean;
    private registerDefaultTransformers;
    private registerCustomTransformers;
    private extractMetadata;
    private createTransformContext;
    private createCodeGenContext;
    private generateClientImports;
    private generateClientComponent;
    private generateReactiveVariable;
    private generateFunction;
    private generateLifecycleHook;
    private generateRenderFunction;
    private generateHTMLElement;
    private generateStatement;
    private generateExpression;
    private generateServerImports;
    private generateServerFunctions;
    private generateServerFunction;
    private generateServerExports;
    private generateClientExports;
    private generateHTMLStructure;
    private applyTransformers;
    private createEmptySourceMap;
    private capitalize;
}
/**
 * Default code transformers
 */
export declare const defaultTransformers: CodeTransformer[];
//# sourceMappingURL=code-generator-refactored.d.ts.map