import type { LineAndColumnData, PostCSSSPNode } from "../../../types";
declare class SourceCodeLocationResolver {
    private readonly text;
    private readonly lineStartIndices;
    constructor(code: string);
    getLocFromIndex(index: number): LineAndColumnData;
    getIndexFromLoc(loc: LineAndColumnData): number;
}
declare class RemapIndexContext {
    private readonly mappers;
    private orgIndex;
    private newIndex;
    private batchLengthOrg;
    private batchLengthNew;
    applyEq(length: number): void;
    applyIns(length: number): void;
    applyDel(length: number): void;
    flush(): void;
    private addMap;
    hasMapping(): boolean;
    remapIndex(index: number): number;
}
interface ReplaceInfo {
    start: number;
    original: string;
    random: string;
    replace: string;
    restore?: (node: PostCSSSPNode, random: string, original: string) => PostCSSSPNode | null;
}
export declare function definePatternsSearchGenerator<REGS extends {
    [name: string]: RegExp;
}>(regexps: REGS, str: string): Generator<{
    name: keyof REGS & string;
    result: RegExpExecArray;
}>;
export declare class ReplaceSelectorContext {
    readonly cssSelector: string;
    readonly remapContext: RemapIndexContext;
    readonly replaces: ReplaceInfo[];
    readonly comments: ReplaceInfo[];
    readonly cssSourceCode: SourceCodeLocationResolver;
    readonly originalSourceCode: SourceCodeLocationResolver;
    constructor(cssSelector: string, originalSelector: string, remapContext: RemapIndexContext, replaces: ReplaceInfo[], comments: ReplaceInfo[]);
    hasReplace(): boolean;
}
export type SelectorReplacer = {
    regexp: RegExp;
    replace: (result: RegExpExecArray, random: string, info: {
        beforeCss: string[];
    }) => string;
    restore?: (node: PostCSSSPNode, random: string, original: string) => PostCSSSPNode | null;
};
export declare function replaceSelector(selector: string, regexps: SelectorReplacer[], commentRegexps?: SelectorReplacer[], trivialRegexps?: SelectorReplacer[]): ReplaceSelectorContext;
export declare function restoreReplacedSelector(orgNode: PostCSSSPNode, replaceSelectorContext: ReplaceSelectorContext): PostCSSSPNode;
export {};
