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