export interface ParsedFrontmatter {
    data: Record<string, unknown>;
    body: string;
    hasFrontmatter: boolean;
}
export declare const parseFrontmatter: (raw: string) => ParsedFrontmatter;
/** GitHub-style heading anchors. */
export declare const slugify: (text: string) => string;
export interface RawSection {
    heading: string;
    level: number;
    anchor: string;
    headingPath: string[];
    content: string;
    startLine: number;
}
/**
 * Split a markdown body on ATX headings. Headings inside fenced code blocks are
 * ignored. The preamble (text before the first heading) becomes a level-0
 * section when non-empty.
 */
export declare const splitSections: (body: string) => RawSection[];
/** Relative link targets in the body. Images, external, mailto and pure-anchor links are skipped. */
export declare const extractLinks: (body: string) => string[];
/** Reduce markdown to readable plain text, for snippets and word counts. */
export declare const toPlainText: (md: string) => string;
export declare const countWords: (md: string) => number;
export declare const titleFromPath: (path: string) => string;
/** Frontmatter `title`, else the first H1, else a title derived from the filename. */
export declare const deriveTitle: (frontmatter: Record<string, unknown>, sections: RawSection[], path: string) => string;
/** A parseable date from frontmatter, if present. */
export declare const frontmatterDate: (frontmatter: Record<string, unknown>) => Date | null;
/** Short excerpt around the first query term hit, or the start of the text. */
export declare const makeSnippet: (plain: string, terms: string[], width?: number) => string;
//# sourceMappingURL=markdown.d.ts.map