UNPKG

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
/** * 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