import { type HygieneCommonOptions } from "../shared.js"; export interface AuditSlugConflictsOptions extends HygieneCommonOptions { /** Content root. Default `/sitecore/content`. */ root?: string; index?: string; limit?: number; includeSystem?: boolean; language?: string; batchSize?: number; concurrency?: number; pageParallelism?: number; cache?: boolean; exclude?: string[]; since?: string; owner?: string; baseline?: boolean; output?: string; format?: "json" | "csv" | "markdown"; /** * Use case-insensitive matching for the slug comparison. Default * true. Sitecore item names are case-sensitive on disk but URL * resolution is case-insensitive on most renderers. */ caseInsensitive?: boolean; } export interface SlugConflictGroup { parentPath: string; slug: string; count: number; members: Array<{ itemId: string; path: string; name: string; templateName: string | null; language: string | null; }>; } /** * Audit content for siblings sharing the same item name (slug). * * URL resolution under Sitecore typically uses the item name as the * URL segment. Two siblings with identical names (case-insensitively) * produce ambiguous URLs and unpredictable routing. * * Strategy: * 1. Enumerate items via `scanItemsAndFields` (no fields needed → * `skipFields: true`). * 2. Group by `(parentPath, lowercased-name)`. * 3. Emit groups with >= 2 members. * * Notes: * - Cross-language siblings (en + fr versions of the same item) * share an itemId and don't show as conflicts — they're the same * item with different language entries. * - True conflicts are two distinct itemIds under the same parent * with the same name. Rare but high-impact when present. */ export declare const runAuditSlugConflicts: (options: AuditSlugConflictsOptions) => Promise;