legal-markdown-js
Version:
Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version
85 lines • 2.86 kB
TypeScript
/**
* Enhanced Remark plugin for Legal Markdown cross-references using custom AST nodes
*
* This plugin creates custom 'reference' AST nodes for |key| patterns, enabling:
* - Single-pass AST processing for better performance
* - More extensible architecture with custom node types
* - Support for additional attributes (type, format) on references
* - Independent from complex regex patterns
* - Better integration with other remark plugins
*
* Architecture:
* 1. Parse phase: Convert |key| patterns into custom 'reference' nodes
* 2. Collection phase: Extract definitions from headers in single pass
* 3. Resolution phase: Resolve all reference nodes in single pass
* 4. Cleanup phase: Remove definition markers from headers
*
* @example
* ```typescript
* import { unified } from 'unified';
* import remarkParse from 'remark-parse';
* import { remarkCrossReferencesAST } from './cross-references-ast';
*
* const processor = unified()
* .use(remarkParse)
* .use(remarkCrossReferencesAST, { metadata: frontmatterData });
*
* const result = await processor.process(content);
* ```
*
* @module
*/
import type { Plugin } from 'unified';
import type { Root, Node } from 'mdast';
/**
* Custom AST node type for cross-references
*/
interface ReferenceNode extends Node {
type: 'reference';
/** The reference key */
key: string;
/** Reference type: 'definition' for |key| in headers, 'usage' for |key| in content */
referenceType: 'definition' | 'usage';
/** Optional reference format/style */
format?: string;
/** Optional reference category */
category?: string;
/** Resolved value (set during processing) */
resolvedValue?: string;
/** Whether this reference has been resolved */
resolved?: boolean;
/** Original text that was replaced */
originalText: string;
}
/**
* Cross-reference definition extracted from headers
*/
interface CrossReferenceDefinition {
key: string;
level: number;
sectionNumber: string;
sectionText: string;
headerText: string;
position?: {
line: number;
column: number;
};
}
/**
* Plugin options for enhanced cross-reference processing
*/
interface CrossReferenceASTOptions {
/** Document metadata containing level formats and other data */
metadata: Record<string, any>;
/** Enable debug logging */
debug?: boolean;
/** Enable field tracking with highlighting during AST processing */
enableFieldTracking?: boolean;
}
/**
* Enhanced remark plugin for processing cross-references using custom AST nodes
*/
export declare const remarkCrossReferencesAST: Plugin<[CrossReferenceASTOptions], Root>;
export default remarkCrossReferencesAST;
export type { CrossReferenceASTOptions, CrossReferenceDefinition, ReferenceNode };
//# sourceMappingURL=cross-references-ast.d.ts.map