export type GroupByMode = 'owner' | 'directory' | 'package' | 'section'; export interface GroupEntry { label: string; items: T[]; } export interface AttributedInstance { filePath: string; startLine: number; endLine: number; owner: string; } export interface AttributedCloneGroup { id: number; instances: AttributedInstance[]; primaryOwner: string; duplicatedLines: number; } export interface PackageResolver { packages: Array<{ root: string; name: string; }>; resolve(filePath: string): string; } export declare function createPackageResolver(packages: Array<{ root: string; name: string; }>): PackageResolver; export declare function resolveDirectoryGroup(filePath: string, depth?: number): string; export declare function groupItemsByFile(items: T[], resolve: (filePath: string) => string): GroupEntry[]; /** Attribution: most instances wins, alphabetical tiebreak. */ export declare function largestOwner(instances: Array<{ filePath: string; }>, resolveOwner: (filePath: string) => string): string; export declare function attributeCloneGroup(group: { id: number; duplicatedLines: number; instances: Array<{ filePath: string; startLine: number; endLine: number; }>; }, resolveOwner: (filePath: string) => string): AttributedCloneGroup; export type OwnershipResolverKind = 'owner' | 'directory' | 'package' | 'section'; export interface ResultGroup { key: string; owners?: string[]; results: T[]; fileCount: number; } export declare function groupResultsByOwner(items: T[], resolver: (filePath: string) => string): Map; export declare function partitionByOwner(items: T[], resolver: (filePath: string) => string): ResultGroup[]; export declare function resolveWithPattern(filePath: string, ownerMap: Map): { owner: string; pattern: string | null; }; //# sourceMappingURL=grouping.d.ts.map