legal-markdown-js 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +168 -0
  3. package/dist/browser.d.ts +87 -0
  4. package/dist/browser.d.ts.map +1 -0
  5. package/dist/browser.js +157 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/cli/index.d.ts +34 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +221 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/service.d.ts +128 -0
  12. package/dist/cli/service.d.ts.map +1 -0
  13. package/dist/cli/service.js +284 -0
  14. package/dist/cli/service.js.map +1 -0
  15. package/dist/constants/index.d.ts +229 -0
  16. package/dist/constants/index.d.ts.map +1 -0
  17. package/dist/constants/index.js +232 -0
  18. package/dist/constants/index.js.map +1 -0
  19. package/dist/core/exporters/metadata-exporter.d.ts +104 -0
  20. package/dist/core/exporters/metadata-exporter.d.ts.map +1 -0
  21. package/dist/core/exporters/metadata-exporter.js +201 -0
  22. package/dist/core/exporters/metadata-exporter.js.map +1 -0
  23. package/dist/core/index.d.ts +40 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +56 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/core/parsers/yaml-parser.d.ts +149 -0
  28. package/dist/core/parsers/yaml-parser.d.ts.map +1 -0
  29. package/dist/core/parsers/yaml-parser.js +321 -0
  30. package/dist/core/parsers/yaml-parser.js.map +1 -0
  31. package/dist/core/processors/clause-processor.d.ts +74 -0
  32. package/dist/core/processors/clause-processor.d.ts.map +1 -0
  33. package/dist/core/processors/clause-processor.js +213 -0
  34. package/dist/core/processors/clause-processor.js.map +1 -0
  35. package/dist/core/processors/date-processor.d.ts +90 -0
  36. package/dist/core/processors/date-processor.d.ts.map +1 -0
  37. package/dist/core/processors/date-processor.js +336 -0
  38. package/dist/core/processors/date-processor.js.map +1 -0
  39. package/dist/core/processors/header-processor.d.ts +104 -0
  40. package/dist/core/processors/header-processor.d.ts.map +1 -0
  41. package/dist/core/processors/header-processor.js +585 -0
  42. package/dist/core/processors/header-processor.js.map +1 -0
  43. package/dist/core/processors/import-processor.d.ts +116 -0
  44. package/dist/core/processors/import-processor.d.ts.map +1 -0
  45. package/dist/core/processors/import-processor.js +236 -0
  46. package/dist/core/processors/import-processor.js.map +1 -0
  47. package/dist/core/processors/mixin-processor.d.ts +93 -0
  48. package/dist/core/processors/mixin-processor.d.ts.map +1 -0
  49. package/dist/core/processors/mixin-processor.js +378 -0
  50. package/dist/core/processors/mixin-processor.js.map +1 -0
  51. package/dist/core/processors/reference-processor.d.ts +115 -0
  52. package/dist/core/processors/reference-processor.d.ts.map +1 -0
  53. package/dist/core/processors/reference-processor.js +273 -0
  54. package/dist/core/processors/reference-processor.js.map +1 -0
  55. package/dist/errors/index.d.ts +234 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +267 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/extensions/batch-processor.d.ts +197 -0
  60. package/dist/extensions/batch-processor.d.ts.map +1 -0
  61. package/dist/extensions/batch-processor.js +392 -0
  62. package/dist/extensions/batch-processor.js.map +1 -0
  63. package/dist/extensions/formatters/index.d.ts +99 -0
  64. package/dist/extensions/formatters/index.d.ts.map +1 -0
  65. package/dist/extensions/formatters/index.js +128 -0
  66. package/dist/extensions/formatters/index.js.map +1 -0
  67. package/dist/extensions/index.d.ts +53 -0
  68. package/dist/extensions/index.d.ts.map +1 -0
  69. package/dist/extensions/index.js +71 -0
  70. package/dist/extensions/index.js.map +1 -0
  71. package/dist/extensions/latex-parser.d.ts +111 -0
  72. package/dist/extensions/latex-parser.d.ts.map +1 -0
  73. package/dist/extensions/latex-parser.js +563 -0
  74. package/dist/extensions/latex-parser.js.map +1 -0
  75. package/dist/extensions/rst-parser.d.ts +112 -0
  76. package/dist/extensions/rst-parser.d.ts.map +1 -0
  77. package/dist/extensions/rst-parser.js +268 -0
  78. package/dist/extensions/rst-parser.js.map +1 -0
  79. package/dist/extensions/template-loops.d.ts +61 -0
  80. package/dist/extensions/template-loops.d.ts.map +1 -0
  81. package/dist/extensions/template-loops.js +418 -0
  82. package/dist/extensions/template-loops.js.map +1 -0
  83. package/dist/extensions/utilities/index.d.ts +114 -0
  84. package/dist/extensions/utilities/index.d.ts.map +1 -0
  85. package/dist/extensions/utilities/index.js +137 -0
  86. package/dist/extensions/utilities/index.js.map +1 -0
  87. package/dist/extensions/validators/index.d.ts +65 -0
  88. package/dist/extensions/validators/index.d.ts.map +1 -0
  89. package/dist/extensions/validators/index.js +88 -0
  90. package/dist/extensions/validators/index.js.map +1 -0
  91. package/dist/generators/html-generator.d.ts +184 -0
  92. package/dist/generators/html-generator.d.ts.map +1 -0
  93. package/dist/generators/html-generator.js +361 -0
  94. package/dist/generators/html-generator.js.map +1 -0
  95. package/dist/generators/pdf-generator.d.ts +165 -0
  96. package/dist/generators/pdf-generator.d.ts.map +1 -0
  97. package/dist/generators/pdf-generator.js +275 -0
  98. package/dist/generators/pdf-generator.js.map +1 -0
  99. package/dist/helpers/date-helpers.d.ts +216 -0
  100. package/dist/helpers/date-helpers.d.ts.map +1 -0
  101. package/dist/helpers/date-helpers.js +402 -0
  102. package/dist/helpers/date-helpers.js.map +1 -0
  103. package/dist/helpers/index.d.ts +87 -0
  104. package/dist/helpers/index.d.ts.map +1 -0
  105. package/dist/helpers/index.js +149 -0
  106. package/dist/helpers/index.js.map +1 -0
  107. package/dist/helpers/number-helpers.d.ts +269 -0
  108. package/dist/helpers/number-helpers.d.ts.map +1 -0
  109. package/dist/helpers/number-helpers.js +406 -0
  110. package/dist/helpers/number-helpers.js.map +1 -0
  111. package/dist/helpers/string-helpers.d.ts +391 -0
  112. package/dist/helpers/string-helpers.d.ts.map +1 -0
  113. package/dist/helpers/string-helpers.js +549 -0
  114. package/dist/helpers/string-helpers.js.map +1 -0
  115. package/dist/index.d.ts +229 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +384 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/legal-markdown.umd.min.js +2 -0
  120. package/dist/legal-markdown.umd.min.js.LICENSE.txt +14 -0
  121. package/dist/legal-markdown.umd.min.js.map +1 -0
  122. package/dist/lib/index.d.ts +150 -0
  123. package/dist/lib/index.d.ts.map +1 -0
  124. package/dist/lib/index.js +265 -0
  125. package/dist/lib/index.js.map +1 -0
  126. package/dist/parsers/content-detector.d.ts +131 -0
  127. package/dist/parsers/content-detector.d.ts.map +1 -0
  128. package/dist/parsers/content-detector.js +220 -0
  129. package/dist/parsers/content-detector.js.map +1 -0
  130. package/dist/parsers/fallback-parsers.d.ts +14 -0
  131. package/dist/parsers/fallback-parsers.d.ts.map +1 -0
  132. package/dist/parsers/fallback-parsers.js +188 -0
  133. package/dist/parsers/fallback-parsers.js.map +1 -0
  134. package/dist/parsers/implementations/pandoc-native.d.ts +13 -0
  135. package/dist/parsers/implementations/pandoc-native.d.ts.map +1 -0
  136. package/dist/parsers/implementations/pandoc-native.js +63 -0
  137. package/dist/parsers/implementations/pandoc-native.js.map +1 -0
  138. package/dist/parsers/implementations/pandoc-wasm.d.ts +14 -0
  139. package/dist/parsers/implementations/pandoc-wasm.d.ts.map +1 -0
  140. package/dist/parsers/implementations/pandoc-wasm.js +64 -0
  141. package/dist/parsers/implementations/pandoc-wasm.js.map +1 -0
  142. package/dist/parsers/pandoc-factory.d.ts +97 -0
  143. package/dist/parsers/pandoc-factory.d.ts.map +1 -0
  144. package/dist/parsers/pandoc-factory.js +146 -0
  145. package/dist/parsers/pandoc-factory.js.map +1 -0
  146. package/dist/parsers/pandoc-loader.d.ts +24 -0
  147. package/dist/parsers/pandoc-loader.d.ts.map +1 -0
  148. package/dist/parsers/pandoc-loader.js +124 -0
  149. package/dist/parsers/pandoc-loader.js.map +1 -0
  150. package/dist/parsers/pandoc-parser.d.ts +27 -0
  151. package/dist/parsers/pandoc-parser.d.ts.map +1 -0
  152. package/dist/parsers/pandoc-parser.js +3 -0
  153. package/dist/parsers/pandoc-parser.js.map +1 -0
  154. package/dist/styles/default.css +125 -0
  155. package/dist/styles/headers.css +146 -0
  156. package/dist/styles/highlight.css +171 -0
  157. package/dist/tracking/field-tracker.d.ts +206 -0
  158. package/dist/tracking/field-tracker.d.ts.map +1 -0
  159. package/dist/tracking/field-tracker.js +247 -0
  160. package/dist/tracking/field-tracker.js.map +1 -0
  161. package/dist/types.d.ts +186 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +33 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/utils/logger.d.ts +107 -0
  166. package/dist/utils/logger.d.ts.map +1 -0
  167. package/dist/utils/logger.js +122 -0
  168. package/dist/utils/logger.js.map +1 -0
  169. package/dist/web/bundle-standalone.js +28 -0
  170. package/dist/web/bundle.js +17 -0
  171. package/dist/web/index.html +1465 -0
  172. package/dist/web/legal-markdown.umd.min.js +2 -0
  173. package/dist/web/standalone.html +390 -0
  174. package/dist/web/styles.css +874 -0
  175. package/package.json +118 -0
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Template Loop Processing Extension for Legal Markdown
4
+ *
5
+ * This extension adds support for template loops and conditional blocks using
6
+ * the {{#variable}}...{{/variable}} syntax. It enables iteration over arrays
7
+ * and conditional rendering of template sections.
8
+ *
9
+ * Features:
10
+ * - Array iteration: {{#items}}...{{/items}}
11
+ * - Conditional blocks: {{#loyaltyMember}}...{{/loyaltyMember}}
12
+ * - Nested loops support
13
+ * - Context management for loop variables
14
+ * - Integration with field tracking
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import { processTemplateLoops } from './template-loops';
19
+ *
20
+ * const content = `
21
+ * {{#items}}
22
+ * - {{name}} {{onSale ? "(ON SALE!)" : ""}} - ${{price}}
23
+ * {{/items}}
24
+ * `;
25
+ *
26
+ * const metadata = {
27
+ * items: [
28
+ * { name: "Product A", price: 10.99, onSale: true },
29
+ * { name: "Product B", price: 15.50, onSale: false }
30
+ * ]
31
+ * };
32
+ *
33
+ * const result = processTemplateLoops(content, metadata);
34
+ * ```
35
+ */
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.processTemplateLoops = processTemplateLoops;
38
+ const field_tracker_1 = require("../tracking/field-tracker");
39
+ /**
40
+ * Escapes HTML attribute values to prevent breaking HTML structure
41
+ * @param value - The value to escape
42
+ * @returns Escaped value safe for HTML attributes
43
+ */
44
+ function escapeHtmlAttribute(value) {
45
+ return value
46
+ .replace(/&/g, '&')
47
+ .replace(/"/g, '"')
48
+ .replace(/'/g, ''')
49
+ .replace(/</g, '&lt;')
50
+ .replace(/>/g, '&gt;');
51
+ }
52
+ /**
53
+ * Processes template loops and conditional blocks in content
54
+ *
55
+ * @param content - The template content containing loop patterns
56
+ * @param metadata - The metadata object containing loop data
57
+ * @param context - Current loop context for nested loops
58
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
59
+ * @returns Processed content with loops expanded
60
+ */
61
+ function processTemplateLoops(content, metadata, context, enableFieldTracking = true) {
62
+ // Find all loop blocks in the content
63
+ const loopBlocks = findLoopBlocks(content);
64
+ if (loopBlocks.length === 0) {
65
+ return content;
66
+ }
67
+ // Process loop blocks from last to first to avoid position shifting
68
+ let processedContent = content;
69
+ for (let i = loopBlocks.length - 1; i >= 0; i--) {
70
+ const loopBlock = loopBlocks[i];
71
+ const expandedContent = expandLoopBlock(loopBlock, metadata, context, enableFieldTracking);
72
+ // Replace the loop block with expanded content
73
+ processedContent =
74
+ processedContent.slice(0, loopBlock.start) +
75
+ expandedContent +
76
+ processedContent.slice(loopBlock.end);
77
+ }
78
+ return processedContent;
79
+ }
80
+ /**
81
+ * Finds all loop blocks in the content using regex pattern matching
82
+ *
83
+ * @param content - The content to search for loop blocks
84
+ * @returns Array of parsed loop blocks
85
+ */
86
+ function findLoopBlocks(content) {
87
+ const loopBlocks = [];
88
+ const loopPattern = /\{\{#(\w+)\}\}([\s\S]*?)\{\{\/\1\}\}/g;
89
+ let match;
90
+ while ((match = loopPattern.exec(content)) !== null) {
91
+ const [fullMatch, variable, loopContent] = match;
92
+ loopBlocks.push({
93
+ variable,
94
+ content: loopContent,
95
+ start: match.index,
96
+ end: match.index + fullMatch.length,
97
+ fullMatch,
98
+ });
99
+ }
100
+ return loopBlocks;
101
+ }
102
+ /**
103
+ * Expands a single loop block into its final content
104
+ *
105
+ * @param loopBlock - The loop block to expand
106
+ * @param metadata - The metadata object containing loop data
107
+ * @param parentContext - Parent loop context for nested loops
108
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
109
+ * @returns Expanded content string
110
+ */
111
+ function expandLoopBlock(loopBlock, metadata, parentContext, enableFieldTracking = true) {
112
+ const { variable, content } = loopBlock;
113
+ // Resolve the loop variable value from metadata or parent context
114
+ const loopValue = resolveLoopVariable(variable, metadata, parentContext);
115
+ // Track field usage
116
+ field_tracker_1.fieldTracker.trackField(variable, {
117
+ value: loopValue,
118
+ hasLogic: true,
119
+ mixinUsed: 'loop',
120
+ });
121
+ // Handle different types of loop values
122
+ if (Array.isArray(loopValue)) {
123
+ return expandArrayLoop(variable, content, loopValue, metadata, parentContext, enableFieldTracking);
124
+ }
125
+ else if (loopValue) {
126
+ // Conditional block - render if truthy
127
+ return expandConditionalBlock(variable, content, loopValue, metadata, parentContext, enableFieldTracking);
128
+ }
129
+ else {
130
+ // Falsy value - don't render
131
+ return '';
132
+ }
133
+ }
134
+ /**
135
+ * Expands an array loop, iterating over each item
136
+ *
137
+ * @param variable - The loop variable name
138
+ * @param content - The loop content template
139
+ * @param items - The array to iterate over
140
+ * @param metadata - The metadata object
141
+ * @param parentContext - Parent loop context
142
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
143
+ * @returns Expanded content for all array items
144
+ */
145
+ function expandArrayLoop(variable, content, items, metadata, parentContext, enableFieldTracking = true) {
146
+ const expandedParts = [];
147
+ for (let i = 0; i < items.length; i++) {
148
+ const item = items[i];
149
+ // Create loop context for this iteration
150
+ const loopContext = {
151
+ variable,
152
+ item,
153
+ index: i,
154
+ total: items.length,
155
+ parent: parentContext,
156
+ };
157
+ // Create enhanced metadata with current item properties
158
+ const enhancedMetadata = createEnhancedMetadata(metadata, item, loopContext);
159
+ // Process the content with the enhanced metadata
160
+ let processedContent = content;
161
+ // First, process any nested loops
162
+ processedContent = processTemplateLoops(processedContent, enhancedMetadata, loopContext, enableFieldTracking);
163
+ // Then process regular mixins in the content
164
+ processedContent = processItemMixins(processedContent, enhancedMetadata, loopContext, enableFieldTracking);
165
+ // Convert markdown list items to HTML li elements if content starts with -
166
+ processedContent = convertMarkdownListToHtml(processedContent);
167
+ expandedParts.push(processedContent);
168
+ }
169
+ return expandedParts.join('\n');
170
+ }
171
+ /**
172
+ * Expands a conditional block if the condition is truthy
173
+ *
174
+ * @param variable - The condition variable name
175
+ * @param content - The conditional content template
176
+ * @param value - The condition value
177
+ * @param metadata - The metadata object
178
+ * @param parentContext - Parent loop context
179
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
180
+ * @returns Expanded content if condition is truthy, empty string otherwise
181
+ */
182
+ function expandConditionalBlock(variable, content, value, metadata, parentContext, enableFieldTracking = true) {
183
+ // Create enhanced metadata with the condition value
184
+ const enhancedMetadata = {
185
+ ...metadata,
186
+ [variable]: value,
187
+ };
188
+ // Process any nested loops first
189
+ let processedContent = processTemplateLoops(content, enhancedMetadata, parentContext, enableFieldTracking);
190
+ // Then process regular mixins
191
+ processedContent = processItemMixins(processedContent, enhancedMetadata, parentContext, enableFieldTracking);
192
+ return processedContent;
193
+ }
194
+ /**
195
+ * Resolves a loop variable from metadata or parent context
196
+ *
197
+ * @param variable - The variable name to resolve
198
+ * @param metadata - The metadata object
199
+ * @param parentContext - Parent loop context
200
+ * @returns The resolved variable value
201
+ */
202
+ function resolveLoopVariable(variable, metadata, parentContext) {
203
+ // First check if it's available in current metadata
204
+ if (Object.prototype.hasOwnProperty.call(metadata, variable)) {
205
+ return metadata[variable];
206
+ }
207
+ // Then check parent context (for nested loops)
208
+ if (parentContext &&
209
+ parentContext.item &&
210
+ Object.prototype.hasOwnProperty.call(parentContext.item, variable)) {
211
+ return parentContext.item[variable];
212
+ }
213
+ // Check parent context's parent (for deeper nesting)
214
+ let ctx = parentContext;
215
+ while (ctx && ctx.parent) {
216
+ ctx = ctx.parent;
217
+ if (ctx.item && Object.prototype.hasOwnProperty.call(ctx.item, variable)) {
218
+ return ctx.item[variable];
219
+ }
220
+ }
221
+ return undefined;
222
+ }
223
+ /**
224
+ * Creates enhanced metadata by merging current item properties
225
+ *
226
+ * @param metadata - Original metadata
227
+ * @param item - Current loop item
228
+ * @param context - Loop context
229
+ * @returns Enhanced metadata object
230
+ */
231
+ function createEnhancedMetadata(metadata, item, context) {
232
+ const enhanced = { ...metadata };
233
+ // Add current item properties if it's an object
234
+ if (item && typeof item === 'object' && !Array.isArray(item)) {
235
+ Object.assign(enhanced, item);
236
+ }
237
+ // Add loop context variables
238
+ enhanced['@index'] = context.index;
239
+ enhanced['@total'] = context.total;
240
+ enhanced['@first'] = context.index === 0;
241
+ enhanced['@last'] = context.index === context.total - 1;
242
+ return enhanced;
243
+ }
244
+ /**
245
+ * Processes mixins within loop content with enhanced metadata
246
+ *
247
+ * @param content - The content to process
248
+ * @param metadata - Enhanced metadata with loop context
249
+ * @param context - Loop context
250
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
251
+ * @returns Processed content with mixins resolved
252
+ */
253
+ function processItemMixins(content, metadata, context, enableFieldTracking = true) {
254
+ // Use a simple regex to find and replace mixins
255
+ const mixinPattern = /\{\{([^}]+)\}\}/g;
256
+ return content.replace(mixinPattern, (match, variable) => {
257
+ const trimmedVar = variable.trim();
258
+ // Handle conditional expressions (ternary operator)
259
+ if (trimmedVar.includes('?') && trimmedVar.includes(':')) {
260
+ const result = processConditionalExpression(trimmedVar, metadata, enableFieldTracking);
261
+ if (enableFieldTracking) {
262
+ return `<span class="highlight">${result}</span>`;
263
+ }
264
+ return result;
265
+ }
266
+ // Handle simple variable substitution
267
+ const value = resolveVariablePath(trimmedVar, metadata, context);
268
+ if (value === undefined || value === null) {
269
+ if (enableFieldTracking) {
270
+ return (`<span class="missing-value" data-field="${escapeHtmlAttribute(trimmedVar)}">` +
271
+ `[[${trimmedVar}]]</span>`);
272
+ }
273
+ return `{{${trimmedVar}}}`;
274
+ }
275
+ if (enableFieldTracking) {
276
+ return (`<span class="imported-value" data-field="${escapeHtmlAttribute(trimmedVar)}">` +
277
+ `${String(value)}</span>`);
278
+ }
279
+ return String(value);
280
+ });
281
+ }
282
+ /**
283
+ * Processes conditional expressions (ternary operator)
284
+ *
285
+ * @param expression - The conditional expression
286
+ * @param metadata - The metadata object
287
+ * @param enableFieldTracking - Whether to enable field tracking HTML spans
288
+ * @returns Resolved conditional value
289
+ */
290
+ function processConditionalExpression(expression, metadata, enableFieldTracking = true) {
291
+ // Find the question mark and colon, but be careful about quoted strings
292
+ const questionIndex = findOperatorIndex(expression, '?');
293
+ const colonIndex = findOperatorIndex(expression, ':', questionIndex);
294
+ if (questionIndex === -1 || colonIndex === -1) {
295
+ return expression; // Invalid ternary, return as-is
296
+ }
297
+ const condition = expression.substring(0, questionIndex).trim();
298
+ const truePart = expression.substring(questionIndex + 1, colonIndex).trim();
299
+ const falsePart = expression.substring(colonIndex + 1).trim();
300
+ // Resolve condition value
301
+ const conditionValue = resolveVariablePath(condition, metadata);
302
+ // Choose appropriate part based on condition
303
+ const selectedPart = conditionValue ? truePart : falsePart;
304
+ // Remove quotes if present
305
+ if ((selectedPart.startsWith('"') && selectedPart.endsWith('"')) ||
306
+ (selectedPart.startsWith("'") && selectedPart.endsWith("'"))) {
307
+ const unquotedValue = selectedPart.slice(1, -1);
308
+ if (enableFieldTracking) {
309
+ return (`<span class="imported-value" data-field="${escapeHtmlAttribute(expression)}">` +
310
+ `${unquotedValue}</span>`);
311
+ }
312
+ return unquotedValue;
313
+ }
314
+ // Process as expression (might contain variables or concatenation)
315
+ const processedValue = processExpression(selectedPart, metadata);
316
+ if (enableFieldTracking) {
317
+ return (`<span class="imported-value" data-field="${escapeHtmlAttribute(expression)}">` +
318
+ `${processedValue}</span>`);
319
+ }
320
+ return processedValue;
321
+ }
322
+ /**
323
+ * Finds the index of an operator outside of quoted strings
324
+ *
325
+ * @param expression - The expression to search
326
+ * @param operator - The operator to find
327
+ * @param startIndex - Starting index for the search
328
+ * @returns The index of the operator or -1 if not found
329
+ */
330
+ function findOperatorIndex(expression, operator, startIndex = 0) {
331
+ let inQuotes = false;
332
+ let quoteChar = '';
333
+ for (let i = startIndex; i < expression.length; i++) {
334
+ const char = expression[i];
335
+ if (!inQuotes && (char === '"' || char === "'")) {
336
+ inQuotes = true;
337
+ quoteChar = char;
338
+ }
339
+ else if (inQuotes && char === quoteChar) {
340
+ inQuotes = false;
341
+ quoteChar = '';
342
+ }
343
+ else if (!inQuotes && char === operator) {
344
+ return i;
345
+ }
346
+ }
347
+ return -1;
348
+ }
349
+ /**
350
+ * Processes expressions that might contain variables or concatenation
351
+ *
352
+ * @param expression - The expression to process
353
+ * @param metadata - The metadata object
354
+ * @returns Processed expression result
355
+ */
356
+ function processExpression(expression, metadata) {
357
+ // Handle concatenation with +
358
+ if (expression.includes('+')) {
359
+ return expression
360
+ .split('+')
361
+ .map(part => {
362
+ const trimmed = part.trim();
363
+ // Handle quoted strings
364
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
365
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
366
+ return trimmed.slice(1, -1);
367
+ }
368
+ // Handle variables
369
+ const value = resolveVariablePath(trimmed, metadata);
370
+ return value !== undefined ? String(value) : trimmed;
371
+ })
372
+ .join('');
373
+ }
374
+ // Handle single variable
375
+ const value = resolveVariablePath(expression, metadata);
376
+ return value !== undefined ? String(value) : expression;
377
+ }
378
+ /**
379
+ * Resolves a variable path with dot notation support
380
+ *
381
+ * @param path - The variable path (e.g., 'item.name')
382
+ * @param metadata - The metadata object
383
+ * @param context - Loop context
384
+ * @returns Resolved variable value
385
+ */
386
+ function resolveVariablePath(path, metadata, context) {
387
+ // Split path by dots
388
+ const parts = path.split('.');
389
+ let current = metadata;
390
+ for (const part of parts) {
391
+ if (current &&
392
+ typeof current === 'object' &&
393
+ Object.prototype.hasOwnProperty.call(current, part)) {
394
+ current = current[part];
395
+ }
396
+ else {
397
+ return undefined;
398
+ }
399
+ }
400
+ return current;
401
+ }
402
+ /**
403
+ * Converts markdown list items to HTML li elements
404
+ *
405
+ * @param content - The content to convert
406
+ * @returns Content with markdown list items converted to HTML li elements
407
+ */
408
+ function convertMarkdownListToHtml(content) {
409
+ // Check if content starts with markdown list item syntax
410
+ const trimmedContent = content.trim();
411
+ if (trimmedContent.startsWith('- ')) {
412
+ // Convert "- content" to "<li>content</li>"
413
+ const listItemContent = trimmedContent.substring(2).trim();
414
+ return `<li>${listItemContent}</li>`;
415
+ }
416
+ return content;
417
+ }
418
+ //# sourceMappingURL=template-loops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-loops.js","sourceRoot":"","sources":["../../src/extensions/template-loops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fileoverview Utility Functions for Legal Document Analysis
3
+ *
4
+ * This module provides utility functions for analyzing and extracting information
5
+ * from Legal Markdown documents. These are extensions beyond the core functionality
6
+ * that provide insights into document structure, content, and usage patterns.
7
+ *
8
+ * Features:
9
+ * - Document statistics and analysis
10
+ * - Reference extraction and analysis
11
+ * - Condition extraction from optional clauses
12
+ * - Word count and character count metrics
13
+ * - Header and structure analysis
14
+ * - Import usage tracking
15
+ * - Extensions not present in the original legal-markdown
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { analyzeDocument, extractReferences, extractConditions } from './utilities';
20
+ *
21
+ * // Analyze document statistics
22
+ * const stats = analyzeDocument(content);
23
+ * console.log(`Document contains ${stats.wordCount} words and ${stats.headerCount} headers`);
24
+ *
25
+ * // Extract references
26
+ * const references = extractReferences(content);
27
+ * console.log('References used:', references);
28
+ *
29
+ * // Extract conditions
30
+ * const conditions = extractConditions(content);
31
+ * console.log('Conditions used:', conditions);
32
+ * ```
33
+ */
34
+ /**
35
+ * Analyzes document statistics and structure
36
+ *
37
+ * Provides comprehensive analysis of Legal Markdown document content including
38
+ * word counts, structural elements, and usage patterns. This is an extension
39
+ * not present in the original legal-markdown specification.
40
+ *
41
+ * @function analyzeDocument
42
+ * @param {string} content - The legal document content to analyze
43
+ * @returns {Object} Object containing document statistics
44
+ * @returns {number} returns.wordCount - Total number of words in the document
45
+ * @returns {number} returns.characterCount - Total number of characters in the document
46
+ * @returns {number} returns.headerCount - Number of header structures (l., ll., etc.)
47
+ * @returns {number} returns.optionalClauseCount - Number of optional clauses found
48
+ * @returns {number} returns.crossReferenceCount - Number of cross-references found
49
+ * @returns {number} returns.importCount - Number of import statements found
50
+ * @example
51
+ * ```typescript
52
+ * import { analyzeDocument } from './utilities';
53
+ *
54
+ * const stats = analyzeDocument(documentContent);
55
+ * console.log(`Document Analysis:`);
56
+ * console.log(`- Words: ${stats.wordCount}`);
57
+ * console.log(`- Characters: ${stats.characterCount}`);
58
+ * console.log(`- Headers: ${stats.headerCount}`);
59
+ * console.log(`- Optional Clauses: ${stats.optionalClauseCount}`);
60
+ * console.log(`- Cross References: ${stats.crossReferenceCount}`);
61
+ * console.log(`- Imports: ${stats.importCount}`);
62
+ * ```
63
+ */
64
+ export declare function analyzeDocument(content: string): {
65
+ wordCount: number;
66
+ characterCount: number;
67
+ headerCount: number;
68
+ optionalClauseCount: number;
69
+ crossReferenceCount: number;
70
+ importCount: number;
71
+ };
72
+ /**
73
+ * Extracts all references used in a document
74
+ *
75
+ * Scans the document content for cross-reference patterns and returns a unique
76
+ * list of all references found. Useful for understanding document dependencies
77
+ * and reference usage patterns.
78
+ *
79
+ * @function extractReferences
80
+ * @param {string} content - The legal document content to analyze
81
+ * @returns {string[]} Array of unique reference names found in the document
82
+ * @example
83
+ * ```typescript
84
+ * import { extractReferences } from './utilities';
85
+ *
86
+ * const references = extractReferences(documentContent);
87
+ * console.log('References used in document:', references);
88
+ *
89
+ * // Example output: ['section-1', 'definitions', 'termination-clause']
90
+ * ```
91
+ */
92
+ export declare function extractReferences(content: string): string[];
93
+ /**
94
+ * Extracts all conditions used in optional clauses
95
+ *
96
+ * Scans the document content for conditional clause patterns and returns a unique
97
+ * list of all conditions found. Useful for understanding document logic and
98
+ * conditional content usage.
99
+ *
100
+ * @function extractConditions
101
+ * @param {string} content - The legal document content to analyze
102
+ * @returns {string[]} Array of unique condition names found in the document
103
+ * @example
104
+ * ```typescript
105
+ * import { extractConditions } from './utilities';
106
+ *
107
+ * const conditions = extractConditions(documentContent);
108
+ * console.log('Conditions used in document:', conditions);
109
+ *
110
+ * // Example output: ['include-warranty', 'corporate-client', 'international-law']
111
+ * ```
112
+ */
113
+ export declare function extractConditions(content: string): string[];
114
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/utilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,CAeA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D"}