/**
 * Yii3 migration audit (M4) — decision-support tool.
 *
 * Inventories Yii2-specific API usage across a codebase and projects an
 * effort estimate so the team can choose between staying on Yii 2.0.49+
 * with PHP 8 vs migrating to Yii3. The tool is grep-style by design: it
 * does not try to understand semantics, only to count call sites by
 * category and surface the highest-leverage blockers.
 *
 * Every category maps a Yii2 idiom to its Yii3 equivalent and assigns a
 * severity + per-call effort estimate. The aggregated effort_estimate
 * gives a rough hours-low/hours-high range. Severity reflects how hard
 * the migration is, NOT how dangerous the current code is.
 *
 * Out of scope:
 *   - Vendor / third-party packages (we strip vendor/ paths before scan).
 *   - Semantic disambiguation (e.g. `Yii::$app->db` is service-locator
 *     even when the property is dynamically resolved at runtime — we
 *     don't try to detect that).
 *   - Migration plans for non-Yii frameworks (Laravel/Symfony).
 */
export type Yii3MigrationCategoryName = "service-locator" | "object-factory" | "aliases" | "i18n" | "logger" | "application-props" | "module" | "request" | "response" | "session" | "user-identity" | "active-record" | "validators" | "form-model" | "widgets" | "view" | "url-manager" | "console" | "migrations" | "queue" | "rbac";
export type Severity = "critical" | "high" | "medium" | "low";
export type EffortBucket = "trivial" | "small" | "medium" | "large";
export interface CategoryDefinition {
    category: Yii3MigrationCategoryName;
    severity: Severity;
    description: string;
    yii3_replacement: string;
    effort_per_call: EffortBucket;
    /** One or more regexes; a file is counted once per match. The regex must
     *  be globally flagged so we can iterate matches in a single source pass. */
    patterns: RegExp[];
}
export interface CategoryFinding {
    category: Yii3MigrationCategoryName;
    severity: Severity;
    count: number;
    effort_per_call: EffortBucket;
    description: string;
    yii3_replacement: string;
    /** First few file:line:snippet triples — capped to keep output tight. */
    sample_files: Array<{
        file: string;
        line: number;
        snippet: string;
    }>;
}
export interface Yii3MigrationAudit {
    repo: string;
    scanned_files: number;
    total_call_sites: number;
    by_category: CategoryFinding[];
    by_severity: Record<Severity, number>;
    blockers: Array<{
        category: Yii3MigrationCategoryName;
        reason: string;
        related_files_count: number;
    }>;
    effort_estimate: {
        hours_low: number;
        hours_high: number;
        note: string;
    };
    decision_signal: "stay-on-yii2" | "consider-yii3" | "high-effort-yii3" | "blocked";
    yii_version_detected: string | null;
    php_version_required: string | null;
}
export declare function yii3MigrationAudit(repo: string, options?: {
    file_pattern?: string;
    max_samples_per_category?: number;
    include_vendor?: boolean;
}): Promise<Yii3MigrationAudit>;
//# sourceMappingURL=yii3-migration-tools.d.ts.map