markmv
Version:
TypeScript CLI for markdown file operations with intelligent link refactoring
106 lines • 3.83 kB
TypeScript
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