import type { Workspace } from '../pm/index.ts';
/** How aggressively to run ESLint for a workspace package. */
export type LintPackageMode = 'full' | 'light' | 'skip';
export interface LintPackageClassification {
    mode: LintPackageMode;
    /** Human-readable reason for light/skip (for verbose/profile logs). */
    reason?: string;
    /** Approximate count of lintable source files (best-effort, fast walk). */
    sourceFiles: number;
}
export interface ClassifyLintPackageOptions {
    /**
     * Use non-type-checked (light) lint for meta packages (private root / no src)
     * when the monorepo has other workspaces. Use `skip` to omit them entirely.
     * @default 'light'
     */
    meta?: 'full' | 'light' | 'skip';
    /**
     * Skip packages with zero lintable sources.
     * @default true
     */
    skipEmpty?: boolean;
}
/**
 * Fast count of lintable sources under a package. For the monorepo root
 * (location `.`), ignores a top-level `packages/` directory so nested
 * workspaces are not double-counted (matches worker ignorePatterns).
 */
export declare function countLintableSourceFiles(packageDir: string, isRootWorkspace: boolean): number;
/**
 * Meta package: monorepo root or private package without a `src/` tree, with
 * few lintable files — typically config/tooling only.
 */
export declare function isMetaLintPackage(packageDir: string, workspace: Workspace, sourceFiles: number, monorepoHasOtherPackages: boolean): boolean;
/**
 * Classify how a workspace should be linted for performance.
 */
export declare function classifyLintPackage(rootDir: string, workspace: Workspace, allWorkspaces: readonly Workspace[], options?: ClassifyLintPackageOptions & {
    /** Explicit `xy lint <package>` target — always full lint. */
    forceFull?: boolean;
}): LintPackageClassification;
/** True when the path exists and is a directory. */
export declare function isDirectory(dir: string): boolean;
//# sourceMappingURL=lintPackageFilter.d.ts.map