UNPKG

markmv

Version:

TypeScript CLI for markdown file operations with intelligent link refactoring

106 lines 3.83 kB
import type { BrokenLink, ValidationResult } from '../types/config.js'; import type { MarkdownLink, ParsedMarkdownFile } from '../types/links.js'; /** * Configuration options for link validation operations. * * Controls which types of links are validated and how validation is performed, including external * link checking, timeout settings, and strictness levels. * * @category Core */ export interface LinkValidatorOptions { /** Check external links (http/https) */ checkExternal?: boolean; /** Timeout for external link checks in milliseconds */ externalTimeout?: number; /** Treat missing files as errors */ strictInternal?: boolean; /** Check Claude import links */ checkClaudeImports?: boolean; } /** * Validates markdown links and identifies broken or problematic references. * * The LinkValidator checks various types of links including internal file references, external * URLs, and Claude import syntax. It provides comprehensive reporting of validation issues and * supports different validation modes for different use cases. * * @category Core * * @example * Basic link validation * ```typescript * const validator = new LinkValidator({ * checkExternal: true, * strictInternal: true, * externalTimeout: 10000 * }); * * const result = await validator.validateFile('docs/api.md'); * * if (!result.isValid) { * console.log(`Found ${result.brokenLinks.length} broken links`); * result.brokenLinks.forEach(link => { * console.log(`- ${link.href} (line ${link.line}): ${link.reason}`); * }); * } * ``` * * @example * Batch validation * ```typescript * const validator = new LinkValidator(); * const files = ['docs/guide.md', 'docs/api.md', 'docs/examples.md']; * * const results = await validator.validateFiles(files); * const totalBroken = results.reduce((sum, r) => sum + r.brokenLinks.length, 0); * console.log(`Found ${totalBroken} broken links across ${files.length} files`); * ``` */ export declare class LinkValidator { private options; constructor(options?: LinkValidatorOptions); validateFiles(files: ParsedMarkdownFile[]): Promise<ValidationResult>; validateFile(file: ParsedMarkdownFile): Promise<BrokenLink[]>; validateLink(link: MarkdownLink, sourceFile: string): Promise<BrokenLink | null>; private validateInternalLink; private validateClaudeImportLink; private validateExternalLink; private validateImageLink; validateLinkIntegrity(files: ParsedMarkdownFile[]): Promise<{ valid: boolean; circularReferences: string[][]; brokenLinks: BrokenLink[]; warnings: string[]; }>; /** * Validates a specific array of links from a single file. * * @param links - Array of links to validate * @param sourceFile - Path to the source file containing the links * * @returns Promise resolving to validation result with broken links */ validateLinks(links: MarkdownLink[], sourceFile: string): Promise<{ brokenLinks: BrokenLink[]; }>; /** * Check for circular references - overloaded method that supports both parsed files and file * paths. */ checkCircularReferences(files: ParsedMarkdownFile[]): Promise<string[][]>; checkCircularReferences(files: string[]): Promise<{ hasCircularReferences: boolean; circularPaths?: string[] | undefined; }>; /** * Validates anchor links by checking if the target heading exists in the file. * * @param link - The anchor link to validate * @param sourceFile - Path to the file containing the link * * @returns Promise resolving to BrokenLink if invalid, null if valid */ private validateAnchorLink; } //# sourceMappingURL=link-validator.d.ts.map