import { type ClassDeclaration } from 'ts-morph'; /** * Metadata about property initialization in constructor. */ export interface PropertyInitialization { propertyName: string; initializationCode: string; } /** * Extracts constructor initialization logic for properties. * * Supports the following initialization patterns: * * 1. **RxJS Subjects:** * ```typescript * this.dataStream = new BehaviorSubject(initialData); * this.events = new Subject(); * ``` * * 2. **Dependency-based initialization:** * ```typescript * this.apiUrl = this.config.get('apiUrl'); * this.timeout = this.config.timeout || DEFAULT_TIMEOUT; * ``` * * 3. **Method calls:** * ```typescript * this.transformedData = this.processData(initialData); * ``` * * 4. **Complex expressions:** * ```typescript * this.isEnabled = environment.production && this.config.enabled; * ``` * * 5. **Constructor parameters:** * ```typescript * this.initialConfig = { ...config }; * ``` * * @example * ```typescript * const analyzer = new ConstructorInitializationAnalyzer(); * const inits = analyzer.extractPropertyInitializations(classDecl, ['dataStream', 'apiUrl']); * // Returns: * // [ * // { propertyName: 'dataStream', initializationCode: 'new BehaviorSubject(initialData)' }, * // { propertyName: 'apiUrl', initializationCode: "this.config.get('apiUrl')" } * // ] * ``` */ export declare class ConstructorInitializationAnalyzer { /** * Extracts constructor initialization statements for specific properties. * * Focuses on: * - RxJS Subject/BehaviorSubject instantiation * - Property assignments in constructor body * - Initialization with dependencies * * @param classDecl - The class declaration * @param propertyNames - Names of properties to extract initializations for * @returns Array of property initialization metadata */ extractPropertyInitializations(classDecl: ClassDeclaration, propertyNames: string[]): PropertyInitialization[]; /** * Parses constructor body to find initialization statements. * * Handles various patterns: * - Simple assignments: `this.propertyName = value;` * - RxJS instantiation: `this.propertyName = new Subject()` * - Dependency calls: `this.propertyName = this.service.method()` * - Complex expressions: `this.propertyName = expr1 && expr2` * - Multi-line objects: `this.propertyName = { ... }` * * The regex pattern captures everything between `=` and the next semicolon, * including multi-line statements and complex object literals. * * @param constructor - The constructor declaration * @param propertyNames - Names of properties to extract initializations for * @returns Array of property initialization metadata */ private parseConstructorBody; } //# sourceMappingURL=constructor-initialization-analyzer.d.ts.map