import { type Location, type Position, type Range } from "../parser"; /** * The minimal source an {@link Extractor} needs to maintain a source mapping. * A Marko `Parsed` satisfies it, as does any other parsed source (eg a CSS * module). */ export interface ExtractorSource { code: string; filename: string; positionAt(offset: number): Position; locationAt(range: Range): Location; } declare const enum Mapping { full = 0, alias = 1, anchor = 2 } interface Token { generatedStart: number; sourceStart: number; generatedLength: number; sourceLength: number; mapping: Mapping; linkedSources: Range[] | undefined; } /** * Utility to build up generate code from source ranges while maintaining a source mapping. */ export declare class Extractor { #private; constructor(parsed: ExtractorSource); write(str: string): this; copy(range: Range | Range[] | string | false | void | undefined | null): this; anchor(range: Range | false | void | undefined | null): this; end(): Extracted; } export declare class Extracted { #private; parsed: ExtractorSource; constructor(parsed: ExtractorSource, generated: string, tokens: Token[]); sourceOffsetAt(generatedOffset: number): number | undefined; sourcePositionAt(generatedOffset: number): Position | undefined; sourceRangeAt(generatedStart: number, generatedEnd: number): { start: number; end: number; } | undefined; sourceLocationAt(generatedStart: number, generatedEnd: number): Location | undefined; generatedOffsetAt(sourceOffset: number): number | undefined; generatedOffsetsAt(sourceOffset: number): number[]; sourceRangesAt(generatedStart: number, generatedEnd: number): Range[]; generatedPositionAt(sourceOffset: number): Position | undefined; generatedRangeAt(sourceStart: number, sourceEnd: number): { start: number; end: number; } | undefined; generatedLocationAt(sourceStart: number, sourceEnd: number): Location | undefined; toString(): string; } export {};