UNPKG

legal-markdown-js

Version:

Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version

111 lines 4.24 kB
/** * Remark Plugin for Optional Clause Processing * * This plugin processes optional clauses in legal documents using conditional * syntax. It evaluates conditions based on metadata values and includes or * excludes content blocks accordingly. * * Features: * - Conditional content inclusion/exclusion * - Complex boolean expressions * - Nested conditional blocks * - Multiple condition operators * - Variable-based conditions * * @example * ```typescript * import { unified } from 'unified'; * import remarkParse from 'remark-parse'; * import remarkStringify from 'remark-stringify'; * import { remarkClauses } from './clauses.js'; * * const processor = unified() * .use(remarkParse) * .use(remarkClauses, { * metadata: { jurisdiction: 'US', hasWarranty: true } * }) * .use(remarkStringify); * ``` * * @module */ import { Plugin } from 'unified'; import { Root, Text } from 'mdast'; import type { YamlValue } from '../../types/index.js'; /** * Options for the remark clauses plugin * @interface RemarkClausesOptions */ export interface RemarkClausesOptions { /** Document metadata for condition evaluation */ metadata: Record<string, YamlValue>; /** Enable debug logging */ debug?: boolean; /** Enable field tracking (to coordinate with template fields plugin) */ enableFieldTracking?: boolean; } /** * Conditional block information */ interface ConditionalBlock { /** The condition expression */ condition: string; /** Content to include if condition is true */ content: string; /** Alternative content if condition is false */ elseContent?: string; /** Start and end positions in the text */ start: number; end: number; } /** * Remark plugin for processing optional clauses * * This plugin identifies and processes conditional blocks in markdown text, * evaluating conditions against document metadata and including or excluding * content based on the results. * * @param options - Configuration options for clause processing * @returns Remark plugin transformer function */ export declare const remarkClauses: Plugin<[RemarkClausesOptions], Root>; /** * Process a text node for conditional blocks */ declare function processTextNode(node: Text, metadata: Record<string, YamlValue>, debug: boolean, enableFieldTracking: boolean): void; /** * Process an HTML node for conditional blocks */ declare function processHtmlNode(node: { value: string; }, metadata: Record<string, YamlValue>, debug: boolean, enableFieldTracking: boolean): void; /** * Extract conditional blocks from text */ declare function extractConditionalBlocks(text: string): ConditionalBlock[]; /** * Evaluate a conditional block against metadata */ declare function evaluateConditionalBlock(block: ConditionalBlock, metadata: Record<string, YamlValue>, debug: boolean, enableFieldTracking: boolean): string; /** * Sanitize condition to prevent code injection */ declare function sanitizeCondition(condition: string): string | null; /** * Evaluate simple condition expressions */ declare function evaluateSimpleCondition(condition: string, metadata: Record<string, YamlValue>): boolean; /** * Evaluate boolean expressions (&&, ||) */ declare function evaluateBooleanExpression(condition: string, metadata: Record<string, YamlValue>): boolean; /** * Evaluate comparison expressions (==, !=, >, <) */ declare function evaluateComparisonExpression(condition: string, metadata: Record<string, YamlValue>): boolean; /** * Process an array loop, iterating over each item */ declare function processArrayLoop(_variable: string, content: string, items: YamlValue[], metadata: Record<string, YamlValue>, debug: boolean, enableFieldTracking: boolean): string; export { processTextNode as _processTextNode, processHtmlNode as _processHtmlNode, extractConditionalBlocks as _extractConditionalBlocks, evaluateConditionalBlock as _evaluateConditionalBlock, sanitizeCondition as _sanitizeCondition, evaluateSimpleCondition as _evaluateSimpleCondition, evaluateBooleanExpression as _evaluateBooleanExpression, evaluateComparisonExpression as _evaluateComparisonExpression, processArrayLoop as _processArrayLoop, }; //# sourceMappingURL=clauses.d.ts.map