[{"data":1,"prerenderedAt":62},["Reactive",2],{"blog-post-markdown-dynamic-content-generation-complete-guide":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":37,"related":38},"markdown-dynamic-content-generation-complete-guide","Markdown Dynamic Content Generation: Complete Guide for Automated Documentation and Data-Driven Content Creation","Master dynamic Markdown content generation with templating systems, data binding, automated documentation generation, and programmatic content creation. Learn to build scalable, maintainable documentation workflows that generate content from data sources automatically.","Dynamic Markdown content generation transforms static documentation workflows into powerful, data-driven systems that automatically create, update, and maintain content based on external data…","2025-10-13","Tutorial","Matthew Rathbone","markdown dynamic content, markdown templates, automated documentation generation, data-driven markdown, markdown templating systems, programmatic content creation, dynamic documentation workflows, markdown automation",33,"\u003Cp>Dynamic Markdown content generation transforms static documentation workflows into powerful, data-driven systems that automatically create, update, and maintain content based on external data sources, templates, and programmatic logic. By implementing sophisticated templating systems, data binding mechanisms, and automated generation pipelines, development teams can create scalable documentation architectures that ensure content accuracy, reduce manual maintenance overhead, and enable real-time synchronization between code changes and documentation updates.\u003C/p>\n\u003Ch2 id=\"why-master-dynamic-content-generation\">Why Master Dynamic Content Generation?\u003C/h2>\n\u003Cp>Dynamic content generation provides essential capabilities for modern documentation systems:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Automated Synchronization\u003C/strong>: Keep documentation automatically synchronized with code changes, API updates, and system configurations\u003C/li>\n\u003Cli>\u003Cstrong>Scalability\u003C/strong>: Generate thousands of documentation pages from structured data without manual writing\u003C/li>\n\u003Cli>\u003Cstrong>Consistency\u003C/strong>: Ensure uniform formatting, structure, and content patterns across all generated documentation\u003C/li>\n\u003Cli>\u003Cstrong>Real-time Updates\u003C/strong>: Automatically update content when underlying data sources change\u003C/li>\n\u003Cli>\u003Cstrong>Reduced Maintenance\u003C/strong>: Eliminate manual documentation maintenance through programmatic content generation\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"foundation-dynamic-content-concepts\">Foundation Dynamic Content Concepts\u003C/h2>\n\u003Ch3 id=\"core-template-engine-implementation\">Core Template Engine Implementation\u003C/h3>\n\u003Cp>Building a flexible template engine for Markdown content generation:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// markdown-template-engine.js - Dynamic content generation system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">templateDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">templateDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./templates&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">outputDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">outputDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./output&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">dataDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">dataDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./data&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">partialDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">partialDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./partials&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">cacheTemplates\u003C/span>: options.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">enableIncludes\u003C/span>: options.\u003Cspan class=\"hljs-property\">enableIncludes\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">enableHelpers\u003C/span>: options.\u003Cspan class=\"hljs-property\">enableHelpers\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">dateFormat\u003C/span>: options.\u003Cspan class=\"hljs-property\">dateFormat\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;YYYY-MM-DD&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">encoding\u003C/span>: options.\u003Cspan class=\"hljs-property\">encoding\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>,\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateCache\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">partialCache\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataCache\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">globals\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDefaultHelpers\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDefaultFilters\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDefaultHelpers\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Date formatting helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;formatDate&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">date, format = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.options.dateFormat\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!date) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> dateObj = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>(date);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">formatDate\u003C/span>(dateObj, format);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Conditional helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;if&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">condition, trueValue, falseValue = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> condition ? trueValue : falseValue;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Loop helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;each&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, template\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(items)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> items.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">item, index\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> context = {\n                    ...item,\n                    \u003Cspan class=\"hljs-string\">&#x27;@index&#x27;\u003C/span>: index,\n                    \u003Cspan class=\"hljs-string\">&#x27;@first&#x27;\u003C/span>: index === \u003Cspan class=\"hljs-number\">0\u003C/span>,\n                    \u003Cspan class=\"hljs-string\">&#x27;@last&#x27;\u003C/span>: index === items.\u003Cspan class=\"hljs-property\">length\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>,\n                    \u003Cspan class=\"hljs-string\">&#x27;@length&#x27;\u003C/span>: items.\u003Cspan class=\"hljs-property\">length\u003C/span>\n                };\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(template, context);\n            }).\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Join helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;join&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, separator = \u003Cspan class=\"hljs-string\">&#x27;, &#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(items)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> items.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(separator);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Uppercase helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;upper&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">text\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> text === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span> ? text.\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>() : text;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Lowercase helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;lower&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">text\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> text === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span> ? text.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>() : text;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Title case helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;title&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">text\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> text === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span> \n                ? text.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\w\\S*/g\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">txt\u003C/span>) =&gt;\u003C/span> txt.\u003Cspan class=\"hljs-title function_\">charAt\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>).\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>() + txt.\u003Cspan class=\"hljs-title function_\">substr\u003C/span>(\u003Cspan class=\"hljs-number\">1\u003C/span>).\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>())\n                : text;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Markdown escape helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;escape&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">text\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> text !== \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> text;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> text.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/([\\\\`*_{}\\[\\]()#+\\-.!])/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;\\\\$1&#x27;\u003C/span>);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Code block helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;codeblock&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">code, language = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\\`\\`\\`\u003Cspan class=\"hljs-subst\">${language}\u003C/span>\\n\u003Cspan class=\"hljs-subst\">${code}\u003C/span>\\n\\`\\`\\``\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Link helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;link&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">text, url, title = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> titleAttr = title ? \u003Cspan class=\"hljs-string\">` &quot;\u003Cspan class=\"hljs-subst\">${title}\u003C/span>&quot;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`[\u003Cspan class=\"hljs-subst\">${text}\u003C/span>](\u003Cspan class=\"hljs-subst\">${url}\u003C/span>\u003Cspan class=\"hljs-subst\">${titleAttr}\u003C/span>)`\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Image helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;image&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">alt, src, title = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> titleAttr = title ? \u003Cspan class=\"hljs-string\">` &quot;\u003Cspan class=\"hljs-subst\">${title}\u003C/span>&quot;`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`![\u003Cspan class=\"hljs-subst\">${alt}\u003C/span>](\u003Cspan class=\"hljs-subst\">${src}\u003C/span>\u003Cspan class=\"hljs-subst\">${titleAttr}\u003C/span>)`\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Table helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;table&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">data, headers = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(data) || data.\u003Cspan class=\"hljs-property\">length\u003C/span> === \u003Cspan class=\"hljs-number\">0\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> actualHeaders = headers || \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(data[\u003Cspan class=\"hljs-number\">0\u003C/span>]);\n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> table = \u003Cspan class=\"hljs-string\">`| \u003Cspan class=\"hljs-subst\">${actualHeaders.join(\u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>)}\u003C/span> |\\n`\u003C/span>;\n            table += \u003Cspan class=\"hljs-string\">`|\u003Cspan class=\"hljs-subst\">${actualHeaders.map(() =&gt; \u003Cspan class=\"hljs-string\">&#x27;---&#x27;\u003C/span>).join(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>)}\u003C/span>|\\n`\u003C/span>;\n            \n            data.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">row\u003C/span> =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> values = actualHeaders.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">header\u003C/span> =&gt;\u003C/span> row[header] || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n                table += \u003Cspan class=\"hljs-string\">`| \u003Cspan class=\"hljs-subst\">${values.join(\u003Cspan class=\"hljs-string\">&#x27; | &#x27;\u003C/span>)}\u003C/span> |\\n`\u003C/span>;\n            });\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> table;\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDefaultFilters\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;length&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">value\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(value) || \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> value === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> value.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            }\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;first&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array, count = \u003Cspan class=\"hljs-number\">1\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> [];\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> count === \u003Cspan class=\"hljs-number\">1\u003C/span> ? array[\u003Cspan class=\"hljs-number\">0\u003C/span>] : array.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, count);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;last&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array, count = \u003Cspan class=\"hljs-number\">1\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> [];\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> count === \u003Cspan class=\"hljs-number\">1\u003C/span> ? array[array.\u003Cspan class=\"hljs-property\">length\u003C/span> - \u003Cspan class=\"hljs-number\">1\u003C/span>] : array.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(-count);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;sort&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array, key = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> array;\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> array.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>().\u003Cspan class=\"hljs-title function_\">sort\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">a, b\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> valueA = key ? a[key] : a;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> valueB = key ? b[key] : b;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> valueA === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> valueB === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> valueA.\u003Cspan class=\"hljs-title function_\">localeCompare\u003C/span>(valueB);\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> valueA &lt; valueB ? -\u003Cspan class=\"hljs-number\">1\u003C/span> : valueA &gt; valueB ? \u003Cspan class=\"hljs-number\">1\u003C/span> : \u003Cspan class=\"hljs-number\">0\u003C/span>;\n            });\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;reverse&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> array;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> array.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>().\u003Cspan class=\"hljs-title function_\">reverse\u003C/span>();\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;unique&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array, key = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> array;\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> seen = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> array.\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">item\u003C/span> =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> value = key ? item[key] : item;\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (seen.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(value)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n                seen.\u003Cspan class=\"hljs-title function_\">add\u003C/span>(value);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n            });\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;where&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">array, key, value\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-title class_\">Array\u003C/span>.\u003Cspan class=\"hljs-title function_\">isArray\u003C/span>(array)) \u003Cspan class=\"hljs-keyword\">return\u003C/span> array;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> array.\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">item\u003C/span> =&gt;\u003C/span> item[key] === value);\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-params\">name, helperFunction\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, helperFunction);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerGlobal\u003C/span>(\u003Cspan class=\"hljs-params\">name, value\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">globals\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, value);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">templateName\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(templateName)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(templateName);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> templatePath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">templateDirectory\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${templateName}\u003C/span>.md`\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> templateContent = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(templatePath, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">encoding\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span>) {\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(templateName, templateContent);\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> templateContent;\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Template &#x27;\u003Cspan class=\"hljs-subst\">${templateName}\u003C/span>&#x27; not found at \u003Cspan class=\"hljs-subst\">${templatePath}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadPartial\u003C/span>(\u003Cspan class=\"hljs-params\">partialName\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">partialCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(partialName)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">partialCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(partialName);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> partialPath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">partialDirectory\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${partialName}\u003C/span>.md`\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> partialContent = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(partialPath, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">encoding\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span>) {\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">partialCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(partialName, partialContent);\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> partialContent;\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Partial &#x27;\u003Cspan class=\"hljs-subst\">${partialName}\u003C/span>&#x27; not found at \u003Cspan class=\"hljs-subst\">${partialPath}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(\u003Cspan class=\"hljs-params\">dataName\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span> &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(dataName)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(dataName);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Try different file extensions\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> extensions = [\u003Cspan class=\"hljs-string\">&#x27;.json&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;.yaml&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;.yml&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;.js&#x27;\u003C/span>];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> ext \u003Cspan class=\"hljs-keyword\">of\u003C/span> extensions) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> dataPath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">dataDirectory\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${dataName}\u003C/span>\u003Cspan class=\"hljs-subst\">${ext}\u003C/span>`\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> data;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (ext === \u003Cspan class=\"hljs-string\">&#x27;.json&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(dataPath, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">encoding\u003C/span>);\n                    data = \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (ext === \u003Cspan class=\"hljs-string\">&#x27;.yaml&#x27;\u003C/span> || ext === \u003Cspan class=\"hljs-string\">&#x27;.yml&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> yaml = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;yaml&#x27;\u003C/span>);\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(dataPath, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">encoding\u003C/span>);\n                    data = yaml.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (ext === \u003Cspan class=\"hljs-string\">&#x27;.js&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">delete\u003C/span> \u003Cspan class=\"hljs-built_in\">require\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>[\u003Cspan class=\"hljs-built_in\">require\u003C/span>.\u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(path.\u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(dataPath))];\n                    data = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(path.\u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(dataPath));\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTemplates\u003C/span>) {\n                    \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(dataName, data);\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> data;\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-keyword\">continue\u003C/span>; \u003Cspan class=\"hljs-comment\">// Try next extension\u003C/span>\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Data file &#x27;\u003Cspan class=\"hljs-subst\">${dataName}\u003C/span>&#x27; not found with extensions: \u003Cspan class=\"hljs-subst\">${extensions.join(\u003Cspan class=\"hljs-string\">&#x27;, &#x27;\u003C/span>)}\u003C/span>`\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">template, context = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> mergedContext = {\n            ...\u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">fromEntries\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">globals\u003C/span>),\n            ...context\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processed = template;\n        \n        \u003Cspan class=\"hljs-comment\">// Process includes first\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableIncludes\u003C/span>) {\n            processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processIncludes\u003C/span>(processed, mergedContext);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Process template variables and expressions\u003C/span>\n        processed = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processVariables\u003C/span>(processed, mergedContext);\n        \n        \u003Cspan class=\"hljs-comment\">// Process helpers\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableHelpers\u003C/span>) {\n            processed = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processHelpers\u003C/span>(processed, mergedContext);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Process filters\u003C/span>\n        processed = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processFilters\u003C/span>(processed, mergedContext);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> processed;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processIncludes\u003C/span>(\u003Cspan class=\"hljs-params\">template, context\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> includePattern = \u003Cspan class=\"hljs-regexp\">/{{&gt;\\s*(\\w+)(?:\\s+(.+?))?\\s*}}/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processed = template;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = includePattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(template)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> partialName = match[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> partialContextStr = match[\u003Cspan class=\"hljs-number\">2\u003C/span>];\n            \n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> partial = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadPartial\u003C/span>(partialName);\n                \u003Cspan class=\"hljs-keyword\">let\u003C/span> partialContext = context;\n                \n                \u003Cspan class=\"hljs-comment\">// Parse additional context for partial\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (partialContextStr) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> additionalContext = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseContextExpression\u003C/span>(partialContextStr, context);\n                    partialContext = { ...context, ...additionalContext };\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> processedPartial = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(partial, partialContext);\n                processed = processed.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(match[\u003Cspan class=\"hljs-number\">0\u003C/span>], processedPartial);\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">`Include error: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n                processed = processed.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(match[\u003Cspan class=\"hljs-number\">0\u003C/span>], \u003Cspan class=\"hljs-string\">`&lt;!-- Include error: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span> --&gt;`\u003C/span>);\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> processed;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processVariables\u003C/span>(\u003Cspan class=\"hljs-params\">template, context\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Simple variable substitution: {{variable}}\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> variablePattern = \u003Cspan class=\"hljs-regexp\">/{{(\\w+(?:\\.\\w+)*)}}/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(variablePattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, variablePath\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> value = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resolveVariable\u003C/span>(variablePath, context);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> value !== \u003Cspan class=\"hljs-literal\">undefined\u003C/span> ? \u003Cspan class=\"hljs-title class_\">String\u003C/span>(value) : match;\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processHelpers\u003C/span>(\u003Cspan class=\"hljs-params\">template, context\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Helper pattern: {{helper_name arg1 arg2 ...}}\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> helperPattern = \u003Cspan class=\"hljs-regexp\">/{{(\\w+)\\s+([^}]+)}}/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(helperPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, helperName, argsStr\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(helperName)) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> match;\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> helper = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(helperName);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> args = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseArguments\u003C/span>(argsStr, context);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-title function_\">helper\u003C/span>(...args);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> result !== \u003Cspan class=\"hljs-literal\">undefined\u003C/span> ? \u003Cspan class=\"hljs-title class_\">String\u003C/span>(result) : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">`Helper error in \u003Cspan class=\"hljs-subst\">${helperName}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`&lt;!-- Helper error: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span> --&gt;`\u003C/span>;\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processFilters\u003C/span>(\u003Cspan class=\"hljs-params\">template, context\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Filter pattern: {{variable | filter1 | filter2:arg}}\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> filterPattern = \u003Cspan class=\"hljs-regexp\">/{{([^}]+\\|[^}]+)}}/g\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(filterPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, expression\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.evaluateFilterExpression(expression, context);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> result !== \u003Cspan class=\"hljs-literal\">undefined\u003C/span> ? \u003Cspan class=\"hljs-title class_\">String\u003C/span>(result) : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">`Filter error: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`&lt;!-- Filter error: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span> --&gt;`\u003C/span>;\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">evaluateFilterExpression\u003C/span>(\u003Cspan class=\"hljs-params\">expression, context\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> parts = expression.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;|&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">part\u003C/span> =&gt;\u003C/span> part.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>());\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> value = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resolveVariable\u003C/span>(parts[\u003Cspan class=\"hljs-number\">0\u003C/span>], context);\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">1\u003C/span>; i &lt; parts.\u003Cspan class=\"hljs-property\">length\u003C/span>; i++) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> filterPart = parts[i];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [filterName, ...filterArgs] = filterPart.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;:&#x27;\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(filterName.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>())) {\n                \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Unknown filter: \u003Cspan class=\"hljs-subst\">${filterName}\u003C/span>`\u003C/span>);\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> filter = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">filters\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(filterName.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>());\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> args = [value, ...filterArgs.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">arg\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseValue\u003C/span>(arg.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>(), context))];\n            value = \u003Cspan class=\"hljs-title function_\">filter\u003C/span>(...args);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> value;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">resolveVariable\u003C/span>(\u003Cspan class=\"hljs-params\">path, context\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> parts = path.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> value = context;\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> part \u003Cspan class=\"hljs-keyword\">of\u003C/span> parts) {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (value &amp;&amp; \u003Cspan class=\"hljs-keyword\">typeof\u003C/span> value === \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span> &amp;&amp; part \u003Cspan class=\"hljs-keyword\">in\u003C/span> value) {\n                value = value[part];\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">undefined\u003C/span>;\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> value;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseArguments\u003C/span>(\u003Cspan class=\"hljs-params\">argsStr, context\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> args = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> argPattern = \u003Cspan class=\"hljs-regexp\">/(&quot;.*?&quot;|&#x27;.*?&#x27;|\\S+)/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = argPattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(argsStr)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            args.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseValue\u003C/span>(match[\u003Cspan class=\"hljs-number\">1\u003C/span>], context));\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> args;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseValue\u003C/span>(\u003Cspan class=\"hljs-params\">valueStr, context\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Remove quotes if present\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ((valueStr.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&quot;&#x27;\u003C/span>) &amp;&amp; valueStr.\u003Cspan class=\"hljs-title function_\">endsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&quot;&#x27;\u003C/span>)) ||\n            (valueStr.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span>) &amp;&amp; valueStr.\u003Cspan class=\"hljs-title function_\">endsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&quot;&#x27;&quot;\u003C/span>))) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> valueStr.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">1\u003C/span>, -\u003Cspan class=\"hljs-number\">1\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Check if it&#x27;s a number\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-regexp\">/^\\d+(\\.\\d+)?$/\u003C/span>.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(valueStr)) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-built_in\">parseFloat\u003C/span>(valueStr);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Check if it&#x27;s a boolean\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (valueStr === \u003Cspan class=\"hljs-string\">&#x27;true&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (valueStr === \u003Cspan class=\"hljs-string\">&#x27;false&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (valueStr === \u003Cspan class=\"hljs-string\">&#x27;null&#x27;\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Try to resolve as variable\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> resolved = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">resolveVariable\u003C/span>(valueStr, context);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> resolved !== \u003Cspan class=\"hljs-literal\">undefined\u003C/span> ? resolved : valueStr;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseContextExpression\u003C/span>(\u003Cspan class=\"hljs-params\">expression, baseContext\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> context = {};\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> assignments = expression.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\s+/\u003C/span>);\n        \n        assignments.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">assignment\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [key, value] = assignment.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;=&#x27;\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (key &amp;&amp; value) {\n                context[key] = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseValue\u003C/span>(value, baseContext);\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> context;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">formatDate\u003C/span>(\u003Cspan class=\"hljs-params\">date, format\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> formatMap = {\n            \u003Cspan class=\"hljs-string\">&#x27;YYYY&#x27;\u003C/span>: date.\u003Cspan class=\"hljs-title function_\">getFullYear\u003C/span>(),\n            \u003Cspan class=\"hljs-string\">&#x27;MM&#x27;\u003C/span>: \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getMonth\u003C/span>() + \u003Cspan class=\"hljs-number\">1\u003C/span>).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;DD&#x27;\u003C/span>: \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getDate\u003C/span>()).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;HH&#x27;\u003C/span>: \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getHours\u003C/span>()).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;mm&#x27;\u003C/span>: \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getMinutes\u003C/span>()).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>),\n            \u003Cspan class=\"hljs-string\">&#x27;ss&#x27;\u003C/span>: \u003Cspan class=\"hljs-title class_\">String\u003C/span>(date.\u003Cspan class=\"hljs-title function_\">getSeconds\u003C/span>()).\u003Cspan class=\"hljs-title function_\">padStart\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;0&#x27;\u003C/span>)\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> formatted = format;\n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(formatMap).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[pattern, value]\u003C/span>) =&gt;\u003C/span> {\n            formatted = formatted.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(pattern, \u003Cspan class=\"hljs-string\">&#x27;g&#x27;\u003C/span>), value);\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> formatted;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generate\u003C/span>(\u003Cspan class=\"hljs-params\">templateName, data = {}, outputName = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> template = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(templateName);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(template, data);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (outputName) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> outputPath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">outputDirectory\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${outputName}\u003C/span>.md`\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">mkdir\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">outputDirectory\u003C/span>, { \u003Cspan class=\"hljs-attr\">recursive\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> });\n                \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">writeFile\u003C/span>(outputPath, processed, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">encoding\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">content\u003C/span>: processed, outputPath, \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> };\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">content\u003C/span>: processed, \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> };\n            \n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">error\u003C/span>: error.\u003Cspan class=\"hljs-property\">message\u003C/span>, \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span> };\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateFromDataFile\u003C/span>(\u003Cspan class=\"hljs-params\">templateName, dataName, outputName = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(dataName);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(templateName, data, outputName || dataName);\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">error\u003C/span>: error.\u003Cspan class=\"hljs-property\">message\u003C/span>, \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span> };\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateBatch\u003C/span>(\u003Cspan class=\"hljs-params\">configurations\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = [];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> config \u003Cspan class=\"hljs-keyword\">of\u003C/span> configurations) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> { template, data, output, dataFile } = config;\n            \n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> result;\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (dataFile) {\n                result = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateFromDataFile\u003C/span>(template, dataFile, output);\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                result = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(template, data || {}, output);\n            }\n            \n            results.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                ...config,\n                ...result\n            });\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> results;\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">demonstrateTemplateEngine\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> engine = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>({\n        \u003Cspan class=\"hljs-attr\">templateDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./templates&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">dataDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./data&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">outputDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./output&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">cacheTemplates\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>\n    });\n    \n    \u003Cspan class=\"hljs-comment\">// Register custom helper\u003C/span>\n    engine.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;pluralize&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">count, singular, plural\u003C/span>) =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> count === \u003Cspan class=\"hljs-number\">1\u003C/span> ? singular : plural;\n    });\n    \n    \u003Cspan class=\"hljs-comment\">// Set global variables\u003C/span>\n    engine.\u003Cspan class=\"hljs-title function_\">registerGlobal\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;site_name&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;My Documentation Site&#x27;\u003C/span>);\n    engine.\u003Cspan class=\"hljs-title function_\">registerGlobal\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;version&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;2.0.0&#x27;\u003C/span>);\n    \n    \u003Cspan class=\"hljs-comment\">// Generate single document\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> apiData = {\n        \u003Cspan class=\"hljs-attr\">endpoints\u003C/span>: [\n            { \u003Cspan class=\"hljs-attr\">method\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;GET&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">path\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;/users&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Get all users&#x27;\u003C/span> },\n            { \u003Cspan class=\"hljs-attr\">method\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;POST&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">path\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;/users&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Create a user&#x27;\u003C/span> },\n            { \u003Cspan class=\"hljs-attr\">method\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;GET&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">path\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;/users/:id&#x27;\u003C/span>, \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Get user by ID&#x27;\u003C/span> }\n        ],\n        \u003Cspan class=\"hljs-attr\">version\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;1.0&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">baseUrl\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;https://api.example.com&#x27;\u003C/span>\n    };\n    \n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-keyword\">await\u003C/span> engine.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;api-documentation&#x27;\u003C/span>, apiData, \u003Cspan class=\"hljs-string\">&#x27;api-docs&#x27;\u003C/span>);\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (result.\u003Cspan class=\"hljs-property\">success\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Generated API documentation:&#x27;\u003C/span>, result.\u003Cspan class=\"hljs-property\">outputPath\u003C/span>);\n    } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Generation failed:&#x27;\u003C/span>, result.\u003Cspan class=\"hljs-property\">error\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Generate batch\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> batchConfig = [\n        {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;user-guide&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">dataFile\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;user-guide-data&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">output\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;user-guide&#x27;\u003C/span>\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;api-reference&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">dataFile\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;api-data&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">output\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;api-reference&#x27;\u003C/span>\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;changelog&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">dataFile\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;releases&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">output\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;changelog&#x27;\u003C/span>\n        }\n    ];\n    \n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> batchResults = \u003Cspan class=\"hljs-keyword\">await\u003C/span> engine.\u003Cspan class=\"hljs-title function_\">generateBatch\u003C/span>(batchConfig);\n    \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Batch generation results:&#x27;\u003C/span>, batchResults);\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>;\n\u003C/code>\u003C/pre>\u003Ch3 id=\"advanced-data-source-integration\">Advanced Data Source Integration\u003C/h3>\n\u003Cp>Connecting with various data sources for dynamic content generation:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// data-source-manager.js - Multi-source data integration\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">DataSourceManager\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">cacheTimeout\u003C/span>: options.\u003Cspan class=\"hljs-property\">cacheTimeout\u003C/span> || \u003Cspan class=\"hljs-number\">300000\u003C/span>, \u003Cspan class=\"hljs-comment\">// 5 minutes\u003C/span>\n            \u003Cspan class=\"hljs-attr\">retryAttempts\u003C/span>: options.\u003Cspan class=\"hljs-property\">retryAttempts\u003C/span> || \u003Cspan class=\"hljs-number\">3\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">retryDelay\u003C/span>: options.\u003Cspan class=\"hljs-property\">retryDelay\u003C/span> || \u003Cspan class=\"hljs-number\">1000\u003C/span>,\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataSources\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerDefaultSources\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerDefaultSources\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// File system data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;file&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (path) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> pathModule = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> ext = pathModule.\u003Cspan class=\"hljs-title function_\">extname\u003C/span>(path).\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>();\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(path, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (ext) {\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.json&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.yaml&#x27;\u003C/span>:\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.yml&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">const\u003C/span> yaml = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;yaml&#x27;\u003C/span>);\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> yaml.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.csv&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseCSV\u003C/span>(content);\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;.md&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseMarkdownWithFrontmatter\u003C/span>(content);\n                    \u003Cspan class=\"hljs-attr\">default\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> content;\n                }\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// HTTP/REST API data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;http&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (url, options = {}) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> response = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">fetch\u003C/span>(url, {\n                    \u003Cspan class=\"hljs-attr\">method\u003C/span>: options.\u003Cspan class=\"hljs-property\">method\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;GET&#x27;\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">headers\u003C/span>: {\n                        \u003Cspan class=\"hljs-string\">&#x27;Content-Type&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>,\n                        \u003Cspan class=\"hljs-string\">&#x27;User-Agent&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Markdown-Generator/1.0&#x27;\u003C/span>,\n                        ...options.\u003Cspan class=\"hljs-property\">headers\u003C/span>\n                    },\n                    \u003Cspan class=\"hljs-attr\">body\u003C/span>: options.\u003Cspan class=\"hljs-property\">body\u003C/span> ? \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(options.\u003Cspan class=\"hljs-property\">body\u003C/span>) : \u003Cspan class=\"hljs-literal\">undefined\u003C/span>\n                });\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!response.\u003Cspan class=\"hljs-property\">ok\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`HTTP \u003Cspan class=\"hljs-subst\">${response.status}\u003C/span>: \u003Cspan class=\"hljs-subst\">${response.statusText}\u003C/span>`\u003C/span>);\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> contentType = response.\u003Cspan class=\"hljs-property\">headers\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;content-type&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (contentType &amp;&amp; contentType.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>)) {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> response.\u003Cspan class=\"hljs-title function_\">json\u003C/span>();\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> response.\u003Cspan class=\"hljs-title function_\">text\u003C/span>();\n                }\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Database data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;database&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (connectionString, query) =&gt; {\n                \u003Cspan class=\"hljs-comment\">// This would integrate with actual database drivers\u003C/span>\n                \u003Cspan class=\"hljs-comment\">// Example with PostgreSQL using pg library\u003C/span>\n                \u003Cspan class=\"hljs-comment\">/*\n                const { Client } = require(&#x27;pg&#x27;);\n                const client = new Client(connectionString);\n                \n                await client.connect();\n                const result = await client.query(query);\n                await client.end();\n                \n                return result.rows;\n                */\u003C/span>\n                \n                \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Database integration requires specific database driver&#x27;\u003C/span>);\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Git repository data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;git&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (repoPath, options = {}) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> { exec } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;child_process&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> { promisify } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;util&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> execAsync = \u003Cspan class=\"hljs-title function_\">promisify\u003C/span>(exec);\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> commands = {\n                    \u003Cspan class=\"hljs-attr\">commits\u003C/span>: \u003Cspan class=\"hljs-string\">`git -C \u003Cspan class=\"hljs-subst\">${repoPath}\u003C/span> log --pretty=format:&#x27;{&quot;hash&quot;:&quot;%H&quot;,&quot;author&quot;:&quot;%an&quot;,&quot;date&quot;:&quot;%ad&quot;,&quot;message&quot;:&quot;%s&quot;}&#x27; --date=iso`\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">tags\u003C/span>: \u003Cspan class=\"hljs-string\">`git -C \u003Cspan class=\"hljs-subst\">${repoPath}\u003C/span> tag --sort=-version:refname`\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">branches\u003C/span>: \u003Cspan class=\"hljs-string\">`git -C \u003Cspan class=\"hljs-subst\">${repoPath}\u003C/span> branch -a`\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">contributors\u003C/span>: \u003Cspan class=\"hljs-string\">`git -C \u003Cspan class=\"hljs-subst\">${repoPath}\u003C/span> shortlog -sn`\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">stats\u003C/span>: \u003Cspan class=\"hljs-string\">`git -C \u003Cspan class=\"hljs-subst\">${repoPath}\u003C/span> log --stat --pretty=format:&#x27;&#x27;`\u003C/span>\n                };\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> command = commands[options.\u003Cspan class=\"hljs-property\">type\u003C/span>] || commands.\u003Cspan class=\"hljs-property\">commits\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> { stdout } = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">execAsync\u003C/span>(command);\n                \n                \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (options.\u003Cspan class=\"hljs-property\">type\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;commits&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> stdout.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n                            .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>())\n                            .\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(line));\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;tags&#x27;\u003C/span>:\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;branches&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> stdout.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>());\n                    \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;contributors&#x27;\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> stdout.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>)\n                            .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>())\n                            .\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> {\n                                \u003Cspan class=\"hljs-keyword\">const\u003C/span> match = line.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^\\s*(\\d+)\\s+(.+)$/\u003C/span>);\n                                \u003Cspan class=\"hljs-keyword\">return\u003C/span> match ? {\n                                    \u003Cspan class=\"hljs-attr\">commits\u003C/span>: \u003Cspan class=\"hljs-built_in\">parseInt\u003C/span>(match[\u003Cspan class=\"hljs-number\">1\u003C/span>]),\n                                    \u003Cspan class=\"hljs-attr\">name\u003C/span>: match[\u003Cspan class=\"hljs-number\">2\u003C/span>]\n                                } : \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n                            })\n                            .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-title class_\">Boolean\u003C/span>);\n                    \u003Cspan class=\"hljs-attr\">default\u003C/span>:\n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> stdout;\n                }\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Environment variables data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;env&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (prefix = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> env = {};\n                \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(process.\u003Cspan class=\"hljs-property\">env\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">key\u003C/span> =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!prefix || key.\u003Cspan class=\"hljs-title function_\">startsWith\u003C/span>(prefix)) {\n                        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cleanKey = prefix ? key.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(prefix.\u003Cspan class=\"hljs-property\">length\u003C/span>) : key;\n                        env[cleanKey.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()] = process.\u003Cspan class=\"hljs-property\">env\u003C/span>[key];\n                    }\n                });\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> env;\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Package.json data source\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;package&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">load\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (packagePath = \u003Cspan class=\"hljs-string\">&#x27;./package.json&#x27;\u003C/span>) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(packagePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerSource\u003C/span>(\u003Cspan class=\"hljs-params\">name, source\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataSources\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, source);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(\u003Cspan class=\"hljs-params\">sourceType, sourceIdentifier, options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cacheKey = \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${sourceType}\u003C/span>:\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-built_in\">JSON\u003C/span>.stringify(sourceIdentifier)}\u003C/span>:\u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-built_in\">JSON\u003C/span>.stringify(options)}\u003C/span>`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-comment\">// Check cache\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(cacheKey)) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> cached = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(cacheKey);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() - cached.\u003Cspan class=\"hljs-property\">timestamp\u003C/span> &lt; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheTimeout\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> cached.\u003Cspan class=\"hljs-property\">data\u003C/span>;\n            }\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Load from source\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataSources\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(sourceType)) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Unknown data source type: \u003Cspan class=\"hljs-subst\">${sourceType}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> source = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataSources\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(sourceType);\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> attempts = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> (attempts &lt; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">retryAttempts\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = \u003Cspan class=\"hljs-keyword\">await\u003C/span> source.\u003Cspan class=\"hljs-title function_\">load\u003C/span>(sourceIdentifier, options);\n                \n                \u003Cspan class=\"hljs-comment\">// Cache the result\u003C/span>\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(cacheKey, {\n                    data,\n                    \u003Cspan class=\"hljs-attr\">timestamp\u003C/span>: \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>()\n                });\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> data;\n                \n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                attempts++;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (attempts &gt;= \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">retryAttempts\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to load data after \u003Cspan class=\"hljs-subst\">${attempts}\u003C/span> attempts: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">resolve\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-built_in\">setTimeout\u003C/span>(resolve, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">retryDelay\u003C/span> * attempts));\n            }\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadMultiple\u003C/span>(\u003Cspan class=\"hljs-params\">sources\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = {};\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> promises = sources.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-keyword\">async\u003C/span> ({ name, type, identifier, options }) =&gt; {\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(type, identifier, options);\n                results[name] = data;\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to load \u003Cspan class=\"hljs-subst\">${name}\u003C/span>:`\u003C/span>, error.\u003Cspan class=\"hljs-property\">message\u003C/span>);\n                results[name] = \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>.\u003Cspan class=\"hljs-title function_\">all\u003C/span>(promises);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> results;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseCSV\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> lines = content.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> line.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>());\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (lines.\u003Cspan class=\"hljs-property\">length\u003C/span> === \u003Cspan class=\"hljs-number\">0\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> [];\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headers = lines[\u003Cspan class=\"hljs-number\">0\u003C/span>].\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">h\u003C/span> =&gt;\u003C/span> h.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/&quot;/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>));\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> rows = lines.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">1\u003C/span>).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">line\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> values = line.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;,&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">v\u003C/span> =&gt;\u003C/span> v.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>().\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/&quot;/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>));\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> row = {};\n            headers.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">header, index\u003C/span>) =&gt;\u003C/span> {\n                row[header] = values[index] || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            });\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> row;\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> rows;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseMarkdownWithFrontmatter\u003C/span>(\u003Cspan class=\"hljs-params\">content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> frontmatterRegex = \u003Cspan class=\"hljs-regexp\">/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)$/\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> match = content.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(frontmatterRegex);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (match) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> yaml = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;yaml&#x27;\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> frontmatter = yaml.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(match[\u003Cspan class=\"hljs-number\">1\u003C/span>]);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> body = match[\u003Cspan class=\"hljs-number\">2\u003C/span>];\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n                frontmatter,\n                \u003Cspan class=\"hljs-attr\">content\u003C/span>: body,\n                \u003Cspan class=\"hljs-attr\">raw\u003C/span>: content\n            };\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">frontmatter\u003C/span>: {},\n            \u003Cspan class=\"hljs-attr\">content\u003C/span>: content,\n            \u003Cspan class=\"hljs-attr\">raw\u003C/span>: content\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">clearCache\u003C/span>(\u003Cspan class=\"hljs-params\">pattern = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (pattern) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> regex = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(pattern);\n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> key \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>()) {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (regex.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(key)) {\n                    \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">delete\u003C/span>(key);\n                }\n            }\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">clear\u003C/span>();\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getCacheStats\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">totalEntries\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-property\">size\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">memoryUsage\u003C/span>: \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>([...\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>()]).\u003Cspan class=\"hljs-property\">length\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">oldestEntry\u003C/span>: \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">min\u003C/span>(...[...\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>()].\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">entry\u003C/span> =&gt;\u003C/span> entry.\u003Cspan class=\"hljs-property\">timestamp\u003C/span>)),\n            \u003Cspan class=\"hljs-attr\">newestEntry\u003C/span>: \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">max\u003C/span>(...[...\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>()].\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">entry\u003C/span> =&gt;\u003C/span> entry.\u003Cspan class=\"hljs-property\">timestamp\u003C/span>))\n        };\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Integration example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">demonstrateDataIntegration\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> dataManager = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">DataSourceManager\u003C/span>({\n        \u003Cspan class=\"hljs-attr\">cacheTimeout\u003C/span>: \u003Cspan class=\"hljs-number\">300000\u003C/span>, \u003Cspan class=\"hljs-comment\">// 5 minutes\u003C/span>\n        \u003Cspan class=\"hljs-attr\">retryAttempts\u003C/span>: \u003Cspan class=\"hljs-number\">3\u003C/span>\n    });\n    \n    \u003Cspan class=\"hljs-comment\">// Load multiple data sources\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> dataSources = [\n        {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;package_info&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;package&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">identifier\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./package.json&#x27;\u003C/span>\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;api_data&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;http&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">identifier\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;https://api.github.com/repos/user/repo&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">options\u003C/span>: {\n                \u003Cspan class=\"hljs-attr\">headers\u003C/span>: {\n                    \u003Cspan class=\"hljs-string\">&#x27;Authorization&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;token YOUR_TOKEN&#x27;\u003C/span>\n                }\n            }\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;config&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;file&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">identifier\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./config/app.yaml&#x27;\u003C/span>\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;git_commits&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;git&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">identifier\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;.&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">options\u003C/span>: { \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;commits&#x27;\u003C/span> }\n        },\n        {\n            \u003Cspan class=\"hljs-attr\">name\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;environment&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;env&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">identifier\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;APP_&#x27;\u003C/span>\n        }\n    ];\n    \n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> allData = \u003Cspan class=\"hljs-keyword\">await\u003C/span> dataManager.\u003Cspan class=\"hljs-title function_\">loadMultiple\u003C/span>(dataSources);\n    \n    \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Loaded data sources:&#x27;\u003C/span>, \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(allData));\n    \n    \u003Cspan class=\"hljs-comment\">// Use with template engine\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> templateEngine = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>();\n    \n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> generationResult = \u003Cspan class=\"hljs-keyword\">await\u003C/span> templateEngine.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(\n        \u003Cspan class=\"hljs-string\">&#x27;comprehensive-documentation&#x27;\u003C/span>,\n        allData,\n        \u003Cspan class=\"hljs-string\">&#x27;generated-docs&#x27;\u003C/span>\n    );\n    \n    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (generationResult.\u003Cspan class=\"hljs-property\">success\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Documentation generated successfully&#x27;\u003C/span>);\n    }\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = \u003Cspan class=\"hljs-title class_\">DataSourceManager\u003C/span>;\n\u003C/code>\u003C/pre>\u003Ch2 id=\"automated-documentation-generation\">Automated Documentation Generation\u003C/h2>\n\u003Ch3 id=\"api-documentation-generator\">API Documentation Generator\u003C/h3>\n\u003Cp>Creating comprehensive API documentation from code and configuration:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// api-doc-generator.js - Automated API documentation system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">APIDocumentationGenerator\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">sourceDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">sourceDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./src&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">outputDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">outputDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./docs/api&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">templateDirectory\u003C/span>: options.\u003Cspan class=\"hljs-property\">templateDirectory\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;./templates/api&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">includePrivate\u003C/span>: options.\u003Cspan class=\"hljs-property\">includePrivate\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">includeInternal\u003C/span>: options.\u003Cspan class=\"hljs-property\">includeInternal\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">generateExamples\u003C/span>: options.\u003Cspan class=\"hljs-property\">generateExamples\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">includeSchemas\u003C/span>: options.\u003Cspan class=\"hljs-property\">includeSchemas\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">format\u003C/span>: options.\u003Cspan class=\"hljs-property\">format\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;markdown&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">groupBy\u003C/span>: options.\u003Cspan class=\"hljs-property\">groupBy\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;module&#x27;\u003C/span>, \u003Cspan class=\"hljs-comment\">// module, tag, path\u003C/span>\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateEngine\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">MarkdownTemplateEngine\u003C/span>({\n            \u003Cspan class=\"hljs-attr\">templateDirectory\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">templateDirectory\u003C/span>\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataManager\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">DataSourceManager\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">parsers\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">generators\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDefaultParsers\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDefaultGenerators\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDefaultParsers\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// OpenAPI/Swagger parser\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerParser\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;openapi&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">pattern\u003C/span>: \u003Cspan class=\"hljs-regexp\">/\\.(yaml|yml|json)$/\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">parse\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (filePath) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> data = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataManager\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;file&#x27;\u003C/span>, filePath);\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">isOpenAPISpec\u003C/span>(data)) {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseOpenAPISpec\u003C/span>(data);\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// JSDoc parser\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerParser\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;jsdoc&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">pattern\u003C/span>: \u003Cspan class=\"hljs-regexp\">/\\.(js|ts|jsx|tsx)$/\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">parse\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (filePath) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(filePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseJSDocComments\u003C/span>(content, filePath);\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Python docstring parser\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerParser\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;python&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">pattern\u003C/span>: \u003Cspan class=\"hljs-regexp\">/\\.py$/\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">parse\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (filePath) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(filePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parsePythonDocstrings\u003C/span>(content, filePath);\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Go doc parser\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerParser\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;go&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">pattern\u003C/span>: \u003Cspan class=\"hljs-regexp\">/\\.go$/\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">parse\u003C/span>: \u003Cspan class=\"hljs-keyword\">async\u003C/span> (filePath) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(filePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">parseGoComments\u003C/span>(content, filePath);\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDefaultGenerators\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Endpoint documentation generator\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerGenerator\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;endpoints&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;endpoint-list&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">process\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">apiData\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> endpoints = [];\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>) {\n                    \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[path, methods]\u003C/span>) =&gt;\u003C/span> {\n                        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(methods).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[method, spec]\u003C/span>) =&gt;\u003C/span> {\n                            endpoints.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                                \u003Cspan class=\"hljs-attr\">method\u003C/span>: method.\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>(),\n                                path,\n                                \u003Cspan class=\"hljs-attr\">summary\u003C/span>: spec.\u003Cspan class=\"hljs-property\">summary\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                                \u003Cspan class=\"hljs-attr\">description\u003C/span>: spec.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                                \u003Cspan class=\"hljs-attr\">parameters\u003C/span>: spec.\u003Cspan class=\"hljs-property\">parameters\u003C/span> || [],\n                                \u003Cspan class=\"hljs-attr\">responses\u003C/span>: spec.\u003Cspan class=\"hljs-property\">responses\u003C/span> || {},\n                                \u003Cspan class=\"hljs-attr\">tags\u003C/span>: spec.\u003Cspan class=\"hljs-property\">tags\u003C/span> || [],\n                                \u003Cspan class=\"hljs-attr\">operationId\u003C/span>: spec.\u003Cspan class=\"hljs-property\">operationId\u003C/span>,\n                                \u003Cspan class=\"hljs-attr\">deprecated\u003C/span>: spec.\u003Cspan class=\"hljs-property\">deprecated\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n                                \u003Cspan class=\"hljs-attr\">examples\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateEndpointExamples\u003C/span>(method, path, spec)\n                            });\n                        });\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">endpoints\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">groupEndpoints\u003C/span>(endpoints) };\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Schema documentation generator\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerGenerator\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;schemas&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;schema-definitions&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">process\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">apiData\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> schemas = {};\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (apiData.\u003Cspan class=\"hljs-property\">components\u003C/span> &amp;&amp; apiData.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">schemas\u003C/span>) {\n                    \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">schemas\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, schema]\u003C/span>) =&gt;\u003C/span> {\n                        schemas[name] = {\n                            name,\n                            \u003Cspan class=\"hljs-attr\">type\u003C/span>: schema.\u003Cspan class=\"hljs-property\">type\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">description\u003C/span>: schema.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">properties\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processSchemaProperties\u003C/span>(schema.\u003Cspan class=\"hljs-property\">properties\u003C/span> || {}),\n                            \u003Cspan class=\"hljs-attr\">required\u003C/span>: schema.\u003Cspan class=\"hljs-property\">required\u003C/span> || [],\n                            \u003Cspan class=\"hljs-attr\">example\u003C/span>: schema.\u003Cspan class=\"hljs-property\">example\u003C/span> || \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateSchemaExample\u003C/span>(schema)\n                        };\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { schemas };\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Authentication documentation generator\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerGenerator\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;authentication&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;auth-methods&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">process\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">apiData\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> authMethods = [];\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (apiData.\u003Cspan class=\"hljs-property\">components\u003C/span> &amp;&amp; apiData.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">securitySchemes\u003C/span>) {\n                    \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">securitySchemes\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, scheme]\u003C/span>) =&gt;\u003C/span> {\n                        authMethods.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                            name,\n                            \u003Cspan class=\"hljs-attr\">type\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">type\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">description\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">scheme\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">scheme\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">bearerFormat\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">bearerFormat\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">flows\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">flows\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">openIdConnectUrl\u003C/span>: scheme.\u003Cspan class=\"hljs-property\">openIdConnectUrl\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">examples\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateAuthExamples\u003C/span>(scheme)\n                        });\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { authMethods };\n            }\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Error code documentation generator\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerGenerator\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;errors&#x27;\u003C/span>, {\n            \u003Cspan class=\"hljs-attr\">template\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;error-codes&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">process\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">apiData\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> errorCodes = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>();\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> errors = {};\n                \n                \u003Cspan class=\"hljs-comment\">// Extract error codes from all endpoint responses\u003C/span>\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>) {\n                    \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">methods\u003C/span> =&gt;\u003C/span> {\n                        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>(methods).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">spec\u003C/span> =&gt;\u003C/span> {\n                            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (spec.\u003Cspan class=\"hljs-property\">responses\u003C/span>) {\n                                \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(spec.\u003Cspan class=\"hljs-property\">responses\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[code, response]\u003C/span>) =&gt;\u003C/span> {\n                                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-built_in\">parseInt\u003C/span>(code) &gt;= \u003Cspan class=\"hljs-number\">400\u003C/span>) {\n                                        errorCodes.\u003Cspan class=\"hljs-title function_\">add\u003C/span>(code);\n                                        errors[code] = {\n                                            code,\n                                            \u003Cspan class=\"hljs-attr\">description\u003C/span>: response.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                                            \u003Cspan class=\"hljs-attr\">schema\u003C/span>: response.\u003Cspan class=\"hljs-property\">content\u003C/span> &amp;&amp; \n                                                   response.\u003Cspan class=\"hljs-property\">content\u003C/span>[\u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>] &amp;&amp;\n                                                   response.\u003Cspan class=\"hljs-property\">content\u003C/span>[\u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>].\u003Cspan class=\"hljs-property\">schema\u003C/span>,\n                                            \u003Cspan class=\"hljs-attr\">examples\u003C/span>: response.\u003Cspan class=\"hljs-property\">examples\u003C/span> || {}\n                                        };\n                                    }\n                                });\n                            }\n                        });\n                    });\n                }\n                \n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">errors\u003C/span>: \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">values\u003C/span>(errors) };\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerParser\u003C/span>(\u003Cspan class=\"hljs-params\">name, parser\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">parsers\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, parser);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerGenerator\u003C/span>(\u003Cspan class=\"hljs-params\">name, generator\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">generators\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, generator);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateDocumentation\u003C/span>(\u003Cspan class=\"hljs-params\">configPath = \u003Cspan class=\"hljs-literal\">null\u003C/span>\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> config = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (configPath) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> configData = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataManager\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadData\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;file&#x27;\u003C/span>, configPath);\n            config = { ...config, ...configData };\n        }\n        \n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Starting API documentation generation...&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Discover and parse API specifications\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> apiData = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">discoverAndParseAPIs\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Generate documentation sections\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = [];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> [generatorName, generator] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">generators\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Generating \u003Cspan class=\"hljs-subst\">${generatorName}\u003C/span> documentation...`\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> processedData = generator.\u003Cspan class=\"hljs-title function_\">process\u003C/span>(apiData);\n                \n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateEngine\u003C/span>.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(\n                    generator.\u003Cspan class=\"hljs-property\">template\u003C/span>,\n                    {\n                        ...processedData,\n                        \u003Cspan class=\"hljs-attr\">apiInfo\u003C/span>: apiData.\u003Cspan class=\"hljs-property\">info\u003C/span> || {},\n                        \u003Cspan class=\"hljs-attr\">generated_at\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n                        \u003Cspan class=\"hljs-attr\">generator_version\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;1.0.0&#x27;\u003C/span>\n                    },\n                    generatorName\n                );\n                \n                results.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                    \u003Cspan class=\"hljs-attr\">section\u003C/span>: generatorName,\n                    \u003Cspan class=\"hljs-attr\">success\u003C/span>: result.\u003Cspan class=\"hljs-property\">success\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">outputPath\u003C/span>: result.\u003Cspan class=\"hljs-property\">outputPath\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">error\u003C/span>: result.\u003Cspan class=\"hljs-property\">error\u003C/span>\n                });\n                \n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to generate \u003Cspan class=\"hljs-subst\">${generatorName}\u003C/span>:`\u003C/span>, error.\u003Cspan class=\"hljs-property\">message\u003C/span>);\n                results.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                    \u003Cspan class=\"hljs-attr\">section\u003C/span>: generatorName,\n                    \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n                    \u003Cspan class=\"hljs-attr\">error\u003C/span>: error.\u003Cspan class=\"hljs-property\">message\u003C/span>\n                });\n            }\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Generate index/overview page\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateIndexPage\u003C/span>(apiData, results);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> results;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">discoverAndParseAPIs\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> glob = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;glob&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { promisify } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;util&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> globAsync = \u003Cspan class=\"hljs-title function_\">promisify\u003C/span>(glob);\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> allApiData = {\n            \u003Cspan class=\"hljs-attr\">info\u003C/span>: {},\n            \u003Cspan class=\"hljs-attr\">paths\u003C/span>: {},\n            \u003Cspan class=\"hljs-attr\">components\u003C/span>: { \u003Cspan class=\"hljs-attr\">schemas\u003C/span>: {}, \u003Cspan class=\"hljs-attr\">securitySchemes\u003C/span>: {} },\n            \u003Cspan class=\"hljs-attr\">tags\u003C/span>: []\n        };\n        \n        \u003Cspan class=\"hljs-comment\">// Find all potential API definition files\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> patterns = [\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.yaml&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.yml&#x27;\u003C/span>, \n            \u003Cspan class=\"hljs-string\">&#x27;**/*.json&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.js&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.ts&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.py&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;**/*.go&#x27;\u003C/span>\n        ];\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> pattern \u003Cspan class=\"hljs-keyword\">of\u003C/span> patterns) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> files = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">globAsync\u003C/span>(path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">sourceDirectory\u003C/span>, pattern), {\n                \u003Cspan class=\"hljs-attr\">ignore\u003C/span>: [\u003Cspan class=\"hljs-string\">&#x27;**/node_modules/**&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;**/vendor/**&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;**/.git/**&#x27;\u003C/span>]\n            });\n            \n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> file \u003Cspan class=\"hljs-keyword\">of\u003C/span> files) {\n                \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> [parserName, parser] \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">parsers\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (parser.\u003Cspan class=\"hljs-property\">pattern\u003C/span>.\u003Cspan class=\"hljs-title function_\">test\u003C/span>(file)) {\n                        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                            \u003Cspan class=\"hljs-keyword\">const\u003C/span> parsed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> parser.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(file);\n                            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (parsed) {\n                                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">mergeApiData\u003C/span>(allApiData, parsed);\n                            }\n                        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n                            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to parse \u003Cspan class=\"hljs-subst\">${file}\u003C/span> with \u003Cspan class=\"hljs-subst\">${parserName}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n                        }\n                    }\n                }\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> allApiData;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">isOpenAPISpec\u003C/span>(\u003Cspan class=\"hljs-params\">data\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> data &amp;&amp; (data.\u003Cspan class=\"hljs-property\">openapi\u003C/span> || data.\u003Cspan class=\"hljs-property\">swagger\u003C/span>) &amp;&amp; data.\u003Cspan class=\"hljs-property\">paths\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseOpenAPISpec\u003C/span>(\u003Cspan class=\"hljs-params\">spec\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            \u003Cspan class=\"hljs-attr\">info\u003C/span>: spec.\u003Cspan class=\"hljs-property\">info\u003C/span> || {},\n            \u003Cspan class=\"hljs-attr\">paths\u003C/span>: spec.\u003Cspan class=\"hljs-property\">paths\u003C/span> || {},\n            \u003Cspan class=\"hljs-attr\">components\u003C/span>: spec.\u003Cspan class=\"hljs-property\">components\u003C/span> || {},\n            \u003Cspan class=\"hljs-attr\">tags\u003C/span>: spec.\u003Cspan class=\"hljs-property\">tags\u003C/span> || [],\n            \u003Cspan class=\"hljs-attr\">servers\u003C/span>: spec.\u003Cspan class=\"hljs-property\">servers\u003C/span> || []\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseJSDocComments\u003C/span>(\u003Cspan class=\"hljs-params\">content, filePath\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> apiData = { \u003Cspan class=\"hljs-attr\">paths\u003C/span>: {}, \u003Cspan class=\"hljs-attr\">components\u003C/span>: { \u003Cspan class=\"hljs-attr\">schemas\u003C/span>: {} } };\n        \n        \u003Cspan class=\"hljs-comment\">// Extract JSDoc comments\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> jsdocPattern = \u003Cspan class=\"hljs-regexp\">/\\/\\*\\*\\s*([\\s\\S]*?)\\s*\\*\\//g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = jsdocPattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> comment = match[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n            \n            \u003Cspan class=\"hljs-comment\">// Look for API endpoint definitions\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> routeMatch = comment.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/@route\\s+(\\w+)\\s+([^\\n]+)/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> descMatch = comment.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/@description\\s+([^\\n]+)/\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> paramMatches = [...comment.\u003Cspan class=\"hljs-title function_\">matchAll\u003C/span>(\u003Cspan class=\"hljs-regexp\">/@param\\s+{([^}]+)}\\s+(\\w+)\\s+([^\\n]+)/g\u003C/span>)];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> returnMatch = comment.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/@returns\\s+{([^}]+)}\\s+([^\\n]+)/\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (routeMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> [, method, path] = routeMatch;\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> description = descMatch ? descMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>] : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path]) {\n                    apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path] = {};\n                }\n                \n                apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path][method.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()] = {\n                    \u003Cspan class=\"hljs-attr\">summary\u003C/span>: description,\n                    \u003Cspan class=\"hljs-attr\">description\u003C/span>: description,\n                    \u003Cspan class=\"hljs-attr\">parameters\u003C/span>: paramMatches.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[, type, name, desc]\u003C/span>) =&gt;\u003C/span> ({\n                        name,\n                        \u003Cspan class=\"hljs-attr\">in\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;query&#x27;\u003C/span>, \u003Cspan class=\"hljs-comment\">// Default, could be enhanced\u003C/span>\n                        \u003Cspan class=\"hljs-attr\">description\u003C/span>: desc,\n                        \u003Cspan class=\"hljs-attr\">schema\u003C/span>: { \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">mapJSTypeToOpenAPI\u003C/span>(type) }\n                    })),\n                    \u003Cspan class=\"hljs-attr\">responses\u003C/span>: {\n                        \u003Cspan class=\"hljs-string\">&#x27;200&#x27;\u003C/span>: {\n                            \u003Cspan class=\"hljs-attr\">description\u003C/span>: returnMatch ? returnMatch[\u003Cspan class=\"hljs-number\">2\u003C/span>] : \u003Cspan class=\"hljs-string\">&#x27;Success&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">content\u003C/span>: {\n                                \u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>: {\n                                    \u003Cspan class=\"hljs-attr\">schema\u003C/span>: returnMatch ? \n                                        { \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">mapJSTypeToOpenAPI\u003C/span>(returnMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>]) } : \n                                        { \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span> }\n                                }\n                            }\n                        }\n                    }\n                };\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>).\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> ? apiData : \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parsePythonDocstrings\u003C/span>(\u003Cspan class=\"hljs-params\">content, filePath\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Basic Python docstring parsing\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> apiData = { \u003Cspan class=\"hljs-attr\">paths\u003C/span>: {}, \u003Cspan class=\"hljs-attr\">components\u003C/span>: { \u003Cspan class=\"hljs-attr\">schemas\u003C/span>: {} } };\n        \n        \u003Cspan class=\"hljs-comment\">// Look for Flask/FastAPI decorators and docstrings\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> routePattern = \u003Cspan class=\"hljs-regexp\">/@app\\.(get|post|put|delete|patch)\\([&#x27;&quot;]([^&#x27;&quot;]+)[&#x27;&quot;]\\)/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = routePattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [fullMatch, method, path] = match;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> methodIndex = match.\u003Cspan class=\"hljs-property\">index\u003C/span> + fullMatch.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            \n            \u003Cspan class=\"hljs-comment\">// Look for the function and its docstring\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> funcPattern = \u003Cspan class=\"hljs-regexp\">/def\\s+(\\w+)\\s*\\([^)]*\\):\\s*&quot;&quot;&quot;([^&quot;]+)&quot;&quot;&quot;/\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> funcMatch = content.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(methodIndex).\u003Cspan class=\"hljs-title function_\">match\u003C/span>(funcPattern);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (funcMatch) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> [, funcName, docstring] = funcMatch;\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path]) {\n                    apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path] = {};\n                }\n                \n                apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path][method] = {\n                    \u003Cspan class=\"hljs-attr\">summary\u003C/span>: funcName.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/_/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27; &#x27;\u003C/span>),\n                    \u003Cspan class=\"hljs-attr\">description\u003C/span>: docstring.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>(),\n                    \u003Cspan class=\"hljs-attr\">operationId\u003C/span>: funcName,\n                    \u003Cspan class=\"hljs-attr\">responses\u003C/span>: {\n                        \u003Cspan class=\"hljs-string\">&#x27;200&#x27;\u003C/span>: {\n                            \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Success&#x27;\u003C/span>,\n                            \u003Cspan class=\"hljs-attr\">content\u003C/span>: {\n                                \u003Cspan class=\"hljs-string\">&#x27;application/json&#x27;\u003C/span>: {\n                                    \u003Cspan class=\"hljs-attr\">schema\u003C/span>: { \u003Cspan class=\"hljs-attr\">type\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span> }\n                                }\n                            }\n                        }\n                    }\n                };\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>).\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> ? apiData : \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">parseGoComments\u003C/span>(\u003Cspan class=\"hljs-params\">content, filePath\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Basic Go comment parsing\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> apiData = { \u003Cspan class=\"hljs-attr\">paths\u003C/span>: {}, \u003Cspan class=\"hljs-attr\">components\u003C/span>: { \u003Cspan class=\"hljs-attr\">schemas\u003C/span>: {} } };\n        \n        \u003Cspan class=\"hljs-comment\">// Look for HTTP handlers with comments\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> handlerPattern = \u003Cspan class=\"hljs-regexp\">/\\/\\/\\s*@(\\w+)\\s+([^\\n]+)\\n.*?func\\s+(\\w+)/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = handlerPattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(content)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [, annotation, details, funcName] = match;\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (annotation.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>() === \u003Cspan class=\"hljs-string\">&#x27;route&#x27;\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> routeMatch = details.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/(\\w+)\\s+([^\\s]+)/\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (routeMatch) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> [, method, path] = routeMatch;\n                    \n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path]) {\n                        apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path] = {};\n                    }\n                    \n                    apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path][method.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>()] = {\n                        \u003Cspan class=\"hljs-attr\">summary\u003C/span>: funcName,\n                        \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">`Handler function: \u003Cspan class=\"hljs-subst\">${funcName}\u003C/span>`\u003C/span>,\n                        \u003Cspan class=\"hljs-attr\">operationId\u003C/span>: funcName,\n                        \u003Cspan class=\"hljs-attr\">responses\u003C/span>: {\n                            \u003Cspan class=\"hljs-string\">&#x27;200&#x27;\u003C/span>: {\n                                \u003Cspan class=\"hljs-attr\">description\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;Success&#x27;\u003C/span>\n                            }\n                        }\n                    };\n                }\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span>).\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> ? apiData : \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">mergeApiData\u003C/span>(\u003Cspan class=\"hljs-params\">target, source\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Merge paths\u003C/span>\n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(source.\u003Cspan class=\"hljs-property\">paths\u003C/span> || {}).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[path, methods]\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!target.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path]) {\n                target.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path] = {};\n            }\n            \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">assign\u003C/span>(target.\u003Cspan class=\"hljs-property\">paths\u003C/span>[path], methods);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Merge components\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (source.\u003Cspan class=\"hljs-property\">components\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (source.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">schemas\u003C/span>) {\n                \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">assign\u003C/span>(target.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">schemas\u003C/span>, source.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">schemas\u003C/span>);\n            }\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (source.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">securitySchemes\u003C/span>) {\n                \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">assign\u003C/span>(target.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">securitySchemes\u003C/span>, source.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-property\">securitySchemes\u003C/span>);\n            }\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Merge info (prefer first found)\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (source.\u003Cspan class=\"hljs-property\">info\u003C/span> &amp;&amp; !target.\u003Cspan class=\"hljs-property\">info\u003C/span>.\u003Cspan class=\"hljs-property\">title\u003C/span>) {\n            target.\u003Cspan class=\"hljs-property\">info\u003C/span> = source.\u003Cspan class=\"hljs-property\">info\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Merge tags\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (source.\u003Cspan class=\"hljs-property\">tags\u003C/span>) {\n            target.\u003Cspan class=\"hljs-property\">tags\u003C/span> = [...target.\u003Cspan class=\"hljs-property\">tags\u003C/span>, ...source.\u003Cspan class=\"hljs-property\">tags\u003C/span>];\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">mapJSTypeToOpenAPI\u003C/span>(\u003Cspan class=\"hljs-params\">jsType\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> typeMap = {\n            \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;number&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;number&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;boolean&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;boolean&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;array&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;array&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Array&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;array&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Object&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;String&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Number&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;number&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;Boolean&#x27;\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;boolean&#x27;\u003C/span>\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> typeMap[jsType] || \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">groupEndpoints\u003C/span>(\u003Cspan class=\"hljs-params\">endpoints\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> grouped = {};\n        \n        endpoints.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">endpoint\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> groupKey;\n            \n            \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">groupBy\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;tag&#x27;\u003C/span>:\n                    groupKey = endpoint.\u003Cspan class=\"hljs-property\">tags\u003C/span>.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span> ? endpoint.\u003Cspan class=\"hljs-property\">tags\u003C/span>[\u003Cspan class=\"hljs-number\">0\u003C/span>] : \u003Cspan class=\"hljs-string\">&#x27;untagged&#x27;\u003C/span>;\n                    \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>:\n                    groupKey = endpoint.\u003Cspan class=\"hljs-property\">path\u003C/span>.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/&#x27;\u003C/span>)[\u003Cspan class=\"hljs-number\">1\u003C/span>] || \u003Cspan class=\"hljs-string\">&#x27;root&#x27;\u003C/span>;\n                    \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;method&#x27;\u003C/span>:\n                    groupKey = endpoint.\u003Cspan class=\"hljs-property\">method\u003C/span>;\n                    \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                \u003Cspan class=\"hljs-attr\">default\u003C/span>:\n                    groupKey = \u003Cspan class=\"hljs-string\">&#x27;api&#x27;\u003C/span>;\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!grouped[groupKey]) {\n                grouped[groupKey] = [];\n            }\n            \n            grouped[groupKey].\u003Cspan class=\"hljs-title function_\">push\u003C/span>(endpoint);\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> grouped;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateEndpointExamples\u003C/span>(\u003Cspan class=\"hljs-params\">method, path, spec\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> examples = {};\n        \n        \u003Cspan class=\"hljs-comment\">// Generate curl example\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> curl = \u003Cspan class=\"hljs-string\">`curl -X \u003Cspan class=\"hljs-subst\">${method.toUpperCase()}\u003C/span> &quot;\u003Cspan class=\"hljs-subst\">${path}\u003C/span>&quot;`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (spec.\u003Cspan class=\"hljs-property\">parameters\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> queryParams = spec.\u003Cspan class=\"hljs-property\">parameters\u003C/span>\n                .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">p\u003C/span> =&gt;\u003C/span> p.\u003Cspan class=\"hljs-property\">in\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;query&#x27;\u003C/span>)\n                .\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">p\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${p.name}\u003C/span>=example_value`\u003C/span>)\n                .\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;&amp;&#x27;\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (queryParams) {\n                curl += \u003Cspan class=\"hljs-string\">`?\u003Cspan class=\"hljs-subst\">${queryParams}\u003C/span>`\u003C/span>;\n            }\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ([\u003Cspan class=\"hljs-string\">&#x27;POST&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PUT&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PATCH&#x27;\u003C/span>].\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(method.\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>())) {\n            curl += \u003Cspan class=\"hljs-string\">&#x27; -H &quot;Content-Type: application/json&quot;&#x27;\u003C/span>;\n            curl += \u003Cspan class=\"hljs-string\">&#x27; -d \\&#x27;{&quot;example&quot;: &quot;data&quot;}\\&#x27;&#x27;\u003C/span>;\n        }\n        \n        examples.\u003Cspan class=\"hljs-property\">curl\u003C/span> = curl;\n        \n        \u003Cspan class=\"hljs-comment\">// Generate JavaScript example\u003C/span>\n        examples.\u003Cspan class=\"hljs-property\">javascript\u003C/span> = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateJavaScriptExample\u003C/span>(method, path, spec);\n        \n        \u003Cspan class=\"hljs-comment\">// Generate Python example  \u003C/span>\n        examples.\u003Cspan class=\"hljs-property\">python\u003C/span> = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generatePythonExample\u003C/span>(method, path, spec);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> examples;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateJavaScriptExample\u003C/span>(\u003Cspan class=\"hljs-params\">method, path, spec\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> js = \u003Cspan class=\"hljs-string\">`const response = await fetch(&#x27;\u003Cspan class=\"hljs-subst\">${path}\u003C/span>&#x27;, {\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`  method: &#x27;\u003Cspan class=\"hljs-subst\">${method.toUpperCase()}\u003C/span>&#x27;,\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`  headers: {\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`    &#x27;Content-Type&#x27;: &#x27;application/json&#x27;,\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`  },\\n`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ([\u003Cspan class=\"hljs-string\">&#x27;POST&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PUT&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PATCH&#x27;\u003C/span>].\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(method.\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>())) {\n            js += \u003Cspan class=\"hljs-string\">`  body: JSON.stringify({\\n`\u003C/span>;\n            js += \u003Cspan class=\"hljs-string\">`    example: &#x27;data&#x27;\\n`\u003C/span>;\n            js += \u003Cspan class=\"hljs-string\">`  })\\n`\u003C/span>;\n        }\n        \n        js += \u003Cspan class=\"hljs-string\">`});\\n\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`const data = await response.json();\\n`\u003C/span>;\n        js += \u003Cspan class=\"hljs-string\">`console.log(data);`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> js;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generatePythonExample\u003C/span>(\u003Cspan class=\"hljs-params\">method, path, spec\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> python = \u003Cspan class=\"hljs-string\">`import requests\\n\\n`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> ([\u003Cspan class=\"hljs-string\">&#x27;POST&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PUT&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;PATCH&#x27;\u003C/span>].\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(method.\u003Cspan class=\"hljs-title function_\">toUpperCase\u003C/span>())) {\n            python += \u003Cspan class=\"hljs-string\">`response = requests.\u003Cspan class=\"hljs-subst\">${method.toLowerCase()}\u003C/span>(\\n`\u003C/span>;\n            python += \u003Cspan class=\"hljs-string\">`    &#x27;\u003Cspan class=\"hljs-subst\">${path}\u003C/span>&#x27;,\\n`\u003C/span>;\n            python += \u003Cspan class=\"hljs-string\">`    json={&#x27;example&#x27;: &#x27;data&#x27;},\\n`\u003C/span>;\n            python += \u003Cspan class=\"hljs-string\">`    headers={&#x27;Content-Type&#x27;: &#x27;application/json&#x27;}\\n`\u003C/span>;\n            python += \u003Cspan class=\"hljs-string\">`)\\n`\u003C/span>;\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            python += \u003Cspan class=\"hljs-string\">`response = requests.\u003Cspan class=\"hljs-subst\">${method.toLowerCase()}\u003C/span>(&#x27;\u003Cspan class=\"hljs-subst\">${path}\u003C/span>&#x27;)\\n`\u003C/span>;\n        }\n        \n        python += \u003Cspan class=\"hljs-string\">`\\nif response.status_code == 200:\\n`\u003C/span>;\n        python += \u003Cspan class=\"hljs-string\">`    data = response.json()\\n`\u003C/span>;\n        python += \u003Cspan class=\"hljs-string\">`    print(data)\\n`\u003C/span>;\n        python += \u003Cspan class=\"hljs-string\">`else:\\n`\u003C/span>;\n        python += \u003Cspan class=\"hljs-string\">`    print(f&quot;Error: {response.status_code}&quot;)`\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> python;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">processSchemaProperties\u003C/span>(\u003Cspan class=\"hljs-params\">properties\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> processed = {};\n        \n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(properties).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, prop]\u003C/span>) =&gt;\u003C/span> {\n            processed[name] = {\n                \u003Cspan class=\"hljs-attr\">type\u003C/span>: prop.\u003Cspan class=\"hljs-property\">type\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">description\u003C/span>: prop.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">example\u003C/span>: prop.\u003Cspan class=\"hljs-property\">example\u003C/span> || \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generatePropertyExample\u003C/span>(prop),\n                \u003Cspan class=\"hljs-attr\">required\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span> \u003Cspan class=\"hljs-comment\">// Will be set by parent schema\u003C/span>\n            };\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> processed;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateSchemaExample\u003C/span>(\u003Cspan class=\"hljs-params\">schema\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (schema.\u003Cspan class=\"hljs-property\">example\u003C/span>) \u003Cspan class=\"hljs-keyword\">return\u003C/span> schema.\u003Cspan class=\"hljs-property\">example\u003C/span>;\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> example = {};\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (schema.\u003Cspan class=\"hljs-property\">properties\u003C/span>) {\n            \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(schema.\u003Cspan class=\"hljs-property\">properties\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, prop]\u003C/span>) =&gt;\u003C/span> {\n                example[name] = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generatePropertyExample\u003C/span>(prop);\n            });\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> example;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generatePropertyExample\u003C/span>(\u003Cspan class=\"hljs-params\">property\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (property.\u003Cspan class=\"hljs-property\">type\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> property.\u003Cspan class=\"hljs-property\">format\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;email&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">&#x27;example@email.com&#x27;\u003C/span> :\n                       property.\u003Cspan class=\"hljs-property\">format\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;date&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">&#x27;2023-12-25&#x27;\u003C/span> :\n                       property.\u003Cspan class=\"hljs-property\">format\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;uuid&#x27;\u003C/span> ? \u003Cspan class=\"hljs-string\">&#x27;123e4567-e89b-12d3-a456-426614174000&#x27;\u003C/span> :\n                       \u003Cspan class=\"hljs-string\">&#x27;example string&#x27;\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;number&#x27;\u003C/span>:\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;integer&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-number\">42\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;boolean&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;array&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> [\u003Cspan class=\"hljs-string\">&#x27;example item&#x27;\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">example\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;value&#x27;\u003C/span> };\n            \u003Cspan class=\"hljs-attr\">default\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;example&#x27;\u003C/span>;\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateAuthExamples\u003C/span>(\u003Cspan class=\"hljs-params\">scheme\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> examples = {};\n        \n        \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (scheme.\u003Cspan class=\"hljs-property\">type\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;apiKey&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (scheme.\u003Cspan class=\"hljs-property\">in\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;header&#x27;\u003C/span>) {\n                    examples.\u003Cspan class=\"hljs-property\">curl\u003C/span> = \u003Cspan class=\"hljs-string\">`curl -H &quot;\u003Cspan class=\"hljs-subst\">${scheme.name}\u003C/span>: YOUR_API_KEY&quot; https://api.example.com/endpoint`\u003C/span>;\n                    examples.\u003Cspan class=\"hljs-property\">javascript\u003C/span> = \u003Cspan class=\"hljs-string\">`fetch(&#x27;https://api.example.com/endpoint&#x27;, {\\n  headers: {\\n    &#x27;\u003Cspan class=\"hljs-subst\">${scheme.name}\u003C/span>&#x27;: &#x27;YOUR_API_KEY&#x27;\\n  }\\n})`\u003C/span>;\n                }\n                \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                \n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;http&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (scheme.\u003Cspan class=\"hljs-property\">scheme\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;bearer&#x27;\u003C/span>) {\n                    examples.\u003Cspan class=\"hljs-property\">curl\u003C/span> = \u003Cspan class=\"hljs-string\">`curl -H &quot;Authorization: Bearer YOUR_TOKEN&quot; https://api.example.com/endpoint`\u003C/span>;\n                    examples.\u003Cspan class=\"hljs-property\">javascript\u003C/span> = \u003Cspan class=\"hljs-string\">`fetch(&#x27;https://api.example.com/endpoint&#x27;, {\\n  headers: {\\n    &#x27;Authorization&#x27;: &#x27;Bearer YOUR_TOKEN&#x27;\\n  }\\n})`\u003C/span>;\n                }\n                \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n                \n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;oauth2&#x27;\u003C/span>:\n                examples.\u003Cspan class=\"hljs-property\">description\u003C/span> = \u003Cspan class=\"hljs-string\">&#x27;OAuth2 authentication flow required&#x27;\u003C/span>;\n                \u003Cspan class=\"hljs-keyword\">break\u003C/span>;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> examples;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateIndexPage\u003C/span>(\u003Cspan class=\"hljs-params\">apiData, results\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> indexData = {\n            \u003Cspan class=\"hljs-attr\">title\u003C/span>: apiData.\u003Cspan class=\"hljs-property\">info\u003C/span>.\u003Cspan class=\"hljs-property\">title\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;API Documentation&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">version\u003C/span>: apiData.\u003Cspan class=\"hljs-property\">info\u003C/span>.\u003Cspan class=\"hljs-property\">version\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;1.0.0&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">description\u003C/span>: apiData.\u003Cspan class=\"hljs-property\">info\u003C/span>.\u003Cspan class=\"hljs-property\">description\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">sections\u003C/span>: results.\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">r\u003C/span> =&gt;\u003C/span> r.\u003Cspan class=\"hljs-property\">success\u003C/span>),\n            \u003Cspan class=\"hljs-attr\">generationTime\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Date\u003C/span>().\u003Cspan class=\"hljs-title function_\">toISOString\u003C/span>(),\n            \u003Cspan class=\"hljs-attr\">totalEndpoints\u003C/span>: \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">paths\u003C/span> || {}).\u003Cspan class=\"hljs-property\">length\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">totalSchemas\u003C/span>: \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(apiData.\u003Cspan class=\"hljs-property\">components\u003C/span>?.\u003Cspan class=\"hljs-property\">schemas\u003C/span> || {}).\u003Cspan class=\"hljs-property\">length\u003C/span>\n        };\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateEngine\u003C/span>.\u003Cspan class=\"hljs-title function_\">generate\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;api-index&#x27;\u003C/span>, indexData, \u003Cspan class=\"hljs-string\">&#x27;index&#x27;\u003C/span>);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Usage example\u003C/span>\n\u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-keyword\">function\u003C/span> \u003Cspan class=\"hljs-title function_\">demonstrateAPIGeneration\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> generator = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">APIDocumentationGenerator\u003C/span>({\n        \u003Cspan class=\"hljs-attr\">sourceDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./src/api&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">outputDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./docs/api&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">templateDirectory\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;./templates/api&#x27;\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">includeExamples\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n        \u003Cspan class=\"hljs-attr\">groupBy\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;tag&#x27;\u003C/span>\n    });\n    \n    \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = \u003Cspan class=\"hljs-keyword\">await\u003C/span> generator.\u003Cspan class=\"hljs-title function_\">generateDocumentation\u003C/span>();\n    \n    \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;API Documentation Generation Results:&#x27;\u003C/span>);\n    results.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">result\u003C/span> =&gt;\u003C/span> {\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${result.section}\u003C/span>: \u003Cspan class=\"hljs-subst\">${result.success ? \u003Cspan class=\"hljs-string\">&#x27;Success&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;Failed&#x27;\u003C/span>}\u003C/span>`\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (result.\u003Cspan class=\"hljs-property\">error\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">error\u003C/span>(\u003Cspan class=\"hljs-string\">`  Error: \u003Cspan class=\"hljs-subst\">${result.error}\u003C/span>`\u003C/span>);\n        }\n    });\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = \u003Cspan class=\"hljs-title class_\">APIDocumentationGenerator\u003C/span>;\n\u003C/code>\u003C/pre>\u003Ch2 id=\"integration-with-modern-development-workflows\">Integration with Modern Development Workflows\u003C/h2>\n\u003Cp>Dynamic Markdown content generation integrates seamlessly with comprehensive documentation ecosystems. When combined with \u003Ca href=\"/blog/markdown-automation-workflows-complete-guide\">automated workflow systems and pipeline management\u003C/a>, dynamic generation becomes part of continuous integration processes, ensuring that documentation updates automatically whenever code changes occur.\u003C/p>\n\u003Cp>For sophisticated content architectures, dynamic generation works effectively with \u003Ca href=\"/blog/markdown-content-validation-automated-quality-assurance-complete-guide\">content validation and quality assurance systems\u003C/a> to ensure that generated content meets organizational standards for accuracy, formatting, and accessibility, creating documentation pipelines that maintain both automation and quality.\u003C/p>\n\u003Cp>When building scalable documentation platforms, dynamic content generation complements \u003Ca href=\"/blog/markdown-version-control-git-integration-complete-guide\">version control and Git integration features\u003C/a> by automatically committing generated documentation updates, managing documentation versioning in sync with code releases, and ensuring that documentation branches remain synchronized with development workflows.\u003C/p>\n\u003Ch2 id=\"advanced-template-systems-and-customization\">Advanced Template Systems and Customization\u003C/h2>\n\u003Ch3 id=\"complex-template-inheritance-and-composition\">Complex Template Inheritance and Composition\u003C/h3>\n\u003Cp>Building sophisticated template hierarchies for maintainable documentation systems:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// advanced-template-system.js - Sophisticated template management\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">AdvancedTemplateSystem\u003C/span> \u003Cspan class=\"hljs-keyword\">extends\u003C/span> \u003Cspan class=\"hljs-title class_ inherited__\">MarkdownTemplateEngine\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">super\u003C/span>(options);\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">layouts\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">mixins\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">themes\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">preprocessors\u003C/span> = [];\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">postprocessors\u003C/span> = [];\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupAdvancedFeatures\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupAdvancedFeatures\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Layout system\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;layout&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">layoutName, content\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">applyLayout\u003C/span>(layoutName, content);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Component system\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;component&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">componentName, props = {}\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">renderComponent\u003C/span>(componentName, props);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Mixin system\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;mixin&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">mixinName, ...args\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">applyMixin\u003C/span>(mixinName, ...args);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Conditional blocks\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;ifblock&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">condition, ifContent, elseContent = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> condition ? ifContent : elseContent;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Switch/case helper\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;switch&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">value, cases\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> cases[value] || cases.\u003Cspan class=\"hljs-property\">default\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Template inheritance\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;extends&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">parentTemplate\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`&lt;!-- EXTENDS: \u003Cspan class=\"hljs-subst\">${parentTemplate}\u003C/span> --&gt;`\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Block definitions\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;block&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">blockName, defaultContent = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`&lt;!-- BLOCK: \u003Cspan class=\"hljs-subst\">${blockName}\u003C/span> --&gt;\u003Cspan class=\"hljs-subst\">${defaultContent}\u003C/span>&lt;!-- /BLOCK: \u003Cspan class=\"hljs-subst\">${blockName}\u003C/span> --&gt;`\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Include with fallback\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;include_safe&#x27;\u003C/span>, \u003Cspan class=\"hljs-keyword\">async\u003C/span> (templateName, fallbackContent = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>) =&gt; {\n            \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(templateName);\n            } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> fallbackContent;\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">registerLayout\u003C/span>(\u003Cspan class=\"hljs-params\">name, template\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">layouts\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, template);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">registerComponent\u003C/span>(\u003Cspan class=\"hljs-params\">name, template\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, template);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerMixin\u003C/span>(\u003Cspan class=\"hljs-params\">name, mixinFunction\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">mixins\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, mixinFunction);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addPreprocessor\u003C/span>(\u003Cspan class=\"hljs-params\">processor\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">preprocessors\u003C/span>.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(processor);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addPostprocessor\u003C/span>(\u003Cspan class=\"hljs-params\">processor\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">postprocessors\u003C/span>.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(processor);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(\u003Cspan class=\"hljs-params\">template, context = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> processed = template;\n        \n        \u003Cspan class=\"hljs-comment\">// Apply preprocessors\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> processor \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">preprocessors\u003C/span>) {\n            processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">processor\u003C/span>(processed, context);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Handle template inheritance\u003C/span>\n        processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processInheritance\u003C/span>(processed, context);\n        \n        \u003Cspan class=\"hljs-comment\">// Apply standard template processing\u003C/span>\n        processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">super\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(processed, context);\n        \n        \u003Cspan class=\"hljs-comment\">// Apply postprocessors\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> processor \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">postprocessors\u003C/span>) {\n            processed = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title function_\">processor\u003C/span>(processed, context);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> processed;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processInheritance\u003C/span>(\u003Cspan class=\"hljs-params\">template, context\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> extendsMatch = template.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/&lt;!--\\s*EXTENDS:\\s*(\\w+)\\s*--&gt;/\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (extendsMatch) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> parentName = extendsMatch[\u003Cspan class=\"hljs-number\">1\u003C/span>];\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> parentTemplate = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(parentName);\n            \n            \u003Cspan class=\"hljs-comment\">// Extract blocks from child template\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> blocks = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">extractBlocks\u003C/span>(template);\n            \n            \u003Cspan class=\"hljs-comment\">// Replace blocks in parent template\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> processed = parentTemplate;\n            \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(blocks).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[blockName, blockContent]\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> blockPattern = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RegExp\u003C/span>(\n                    \u003Cspan class=\"hljs-string\">`&lt;!--\\\\s*BLOCK:\\\\s*\u003Cspan class=\"hljs-subst\">${blockName}\u003C/span>\\\\s*--&gt;([\\\\s\\\\S]*?)&lt;!--\\\\s*/BLOCK:\\\\s*\u003Cspan class=\"hljs-subst\">${blockName}\u003C/span>\\\\s*--&gt;`\u003C/span>,\n                    \u003Cspan class=\"hljs-string\">&#x27;g&#x27;\u003C/span>\n                );\n                processed = processed.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(blockPattern, \u003Cspan class=\"hljs-string\">`&lt;!-- BLOCK: \u003Cspan class=\"hljs-subst\">${blockName}\u003C/span> --&gt;\u003Cspan class=\"hljs-subst\">${blockContent}\u003C/span>&lt;!-- /BLOCK: \u003Cspan class=\"hljs-subst\">${blockName}\u003C/span> --&gt;`\u003C/span>);\n            });\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> processed;\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> template;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">extractBlocks\u003C/span>(\u003Cspan class=\"hljs-params\">template\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> blocks = {};\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> blockPattern = \u003Cspan class=\"hljs-regexp\">/&lt;!--\\s*BLOCK:\\s*(\\w+)\\s*--&gt;([\\s\\S]*?)&lt;!--\\s*\\/BLOCK:\\s*\\1\\s*--&gt;/g\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> match;\n        \n        \u003Cspan class=\"hljs-keyword\">while\u003C/span> ((match = blockPattern.\u003Cspan class=\"hljs-title function_\">exec\u003C/span>(template)) !== \u003Cspan class=\"hljs-literal\">null\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> [, blockName, blockContent] = match;\n            blocks[blockName] = blockContent.\u003Cspan class=\"hljs-title function_\">trim\u003C/span>();\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> blocks;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">applyLayout\u003C/span>(\u003Cspan class=\"hljs-params\">layoutName, content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">layouts\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(layoutName)) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> layout = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(\u003Cspan class=\"hljs-string\">`layouts/\u003Cspan class=\"hljs-subst\">${layoutName}\u003C/span>`\u003C/span>);\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">layouts\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(layoutName, layout);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> layout = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">layouts\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(layoutName);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> layout.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/{{content}}/g\u003C/span>, content);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">renderComponent\u003C/span>(\u003Cspan class=\"hljs-params\">componentName, props\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(componentName)) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> component = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTemplate\u003C/span>(\u003Cspan class=\"hljs-string\">`components/\u003Cspan class=\"hljs-subst\">${componentName}\u003C/span>`\u003C/span>);\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(componentName, component);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> component = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">components\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(componentName);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processTemplate\u003C/span>(component, props);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">applyMixin\u003C/span>(\u003Cspan class=\"hljs-params\">mixinName, ...args\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">mixins\u003C/span>.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(mixinName)) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Unknown mixin: \u003Cspan class=\"hljs-subst\">${mixinName}\u003C/span>`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> mixin = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">mixins\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(mixinName);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title function_\">mixin\u003C/span>(...args);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Advanced data transformation helpers\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">setupDataTransformers\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;transform&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">data, transformer\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> transformers = {\n                \u003Cspan class=\"hljs-string\">&#x27;group_by&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, key\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> grouped = {};\n                    items.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">item\u003C/span> =&gt;\u003C/span> {\n                        \u003Cspan class=\"hljs-keyword\">const\u003C/span> groupKey = item[key];\n                        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!grouped[groupKey]) {\n                            grouped[groupKey] = [];\n                        }\n                        grouped[groupKey].\u003Cspan class=\"hljs-title function_\">push\u003C/span>(item);\n                    });\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> grouped;\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;sort_by&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, key, order = \u003Cspan class=\"hljs-string\">&#x27;asc&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> items.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>().\u003Cspan class=\"hljs-title function_\">sort\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">a, b\u003C/span>) =&gt;\u003C/span> {\n                        \u003Cspan class=\"hljs-keyword\">const\u003C/span> valueA = a[key];\n                        \u003Cspan class=\"hljs-keyword\">const\u003C/span> valueB = b[key];\n                        \n                        \u003Cspan class=\"hljs-keyword\">let\u003C/span> comparison = \u003Cspan class=\"hljs-number\">0\u003C/span>;\n                        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (valueA &gt; valueB) comparison = \u003Cspan class=\"hljs-number\">1\u003C/span>;\n                        \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (valueA &lt; valueB) comparison = -\u003Cspan class=\"hljs-number\">1\u003C/span>;\n                        \n                        \u003Cspan class=\"hljs-keyword\">return\u003C/span> order === \u003Cspan class=\"hljs-string\">&#x27;desc&#x27;\u003C/span> ? -comparison : comparison;\n                    });\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;filter_by&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, key, value\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> items.\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">item\u003C/span> =&gt;\u003C/span> item[key] === value);\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;map&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, key\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> items.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">item\u003C/span> =&gt;\u003C/span> item[key]);\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;flatten&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">nestedArray\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> nestedArray.\u003Cspan class=\"hljs-title function_\">flat\u003C/span>(\u003Cspan class=\"hljs-title class_\">Infinity\u003C/span>);\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;unique&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> [...\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>(items)];\n                },\n                \n                \u003Cspan class=\"hljs-string\">&#x27;chunk&#x27;\u003C/span>: \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">items, size\u003C/span>) =&gt;\u003C/span> {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> chunks = [];\n                    \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt; items.\u003Cspan class=\"hljs-property\">length\u003C/span>; i += size) {\n                        chunks.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(items.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(i, i + size));\n                    }\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> chunks;\n                }\n            };\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> transformerFn = transformers[transformer];\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> transformerFn ? \u003Cspan class=\"hljs-title function_\">transformerFn\u003C/span>(data) : data;\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Multi-step transformation pipeline\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;pipeline&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">data, ...transformers\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> transformers.\u003Cspan class=\"hljs-title function_\">reduce\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">result, transformer\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> transformer === \u003Cspan class=\"hljs-string\">&#x27;string&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;transform&#x27;\u003C/span>)(result, transformer);\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-keyword\">typeof\u003C/span> transformer === \u003Cspan class=\"hljs-string\">&#x27;object&#x27;\u003C/span>) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> { name, args = [] } = transformer;\n                    \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;transform&#x27;\u003C/span>)(result, name, ...args);\n                }\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> result;\n            }, data);\n        });\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Theme support\u003C/span>\n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">loadTheme\u003C/span>(\u003Cspan class=\"hljs-params\">themeName\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> themeDir = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">templateDirectory\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;themes&#x27;\u003C/span>, themeName);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> themeConfigPath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(themeDir, \u003Cspan class=\"hljs-string\">&#x27;theme.json&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> themeConfig = \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(\u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(themeConfigPath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>));\n            \n            \u003Cspan class=\"hljs-comment\">// Load theme templates\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> themeTemplates = {};\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (themeConfig.\u003Cspan class=\"hljs-property\">templates\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> templateName \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(themeConfig.\u003Cspan class=\"hljs-property\">templates\u003C/span>)) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> templatePath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(themeDir, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${templateName}\u003C/span>.md`\u003C/span>);\n                    themeTemplates[templateName] = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(templatePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                }\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Load theme partials\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> themePartials = {};\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (themeConfig.\u003Cspan class=\"hljs-property\">partials\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> partialName \u003Cspan class=\"hljs-keyword\">of\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">keys\u003C/span>(themeConfig.\u003Cspan class=\"hljs-property\">partials\u003C/span>)) {\n                    \u003Cspan class=\"hljs-keyword\">const\u003C/span> partialPath = path.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(themeDir, \u003Cspan class=\"hljs-string\">&#x27;partials&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${partialName}\u003C/span>.md`\u003C/span>);\n                    themePartials[partialName] = \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(partialPath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n                }\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> theme = {\n                \u003Cspan class=\"hljs-attr\">config\u003C/span>: themeConfig,\n                \u003Cspan class=\"hljs-attr\">templates\u003C/span>: themeTemplates,\n                \u003Cspan class=\"hljs-attr\">partials\u003C/span>: themePartials\n            };\n            \n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">themes\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(themeName, theme);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> theme;\n            \n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to load theme \u003Cspan class=\"hljs-subst\">${themeName}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">applyTheme\u003C/span>(\u003Cspan class=\"hljs-params\">themeName\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> theme = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">loadTheme\u003C/span>(themeName);\n        \n        \u003Cspan class=\"hljs-comment\">// Override templates with theme templates\u003C/span>\n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(theme.\u003Cspan class=\"hljs-property\">templates\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, template]\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, template);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Override partials with theme partials\u003C/span>\n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(theme.\u003Cspan class=\"hljs-property\">partials\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, partial]\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">partialCache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, partial);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Apply theme configuration\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (theme.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">globals\u003C/span>) {\n            \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(theme.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">globals\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, value]\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerGlobal\u003C/span>(name, value);\n            });\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (theme.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>) {\n            \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(theme.\u003Cspan class=\"hljs-property\">config\u003C/span>.\u003Cspan class=\"hljs-property\">helpers\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[name, helperConfig]\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-comment\">// Custom helper registration logic\u003C/span>\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerThemeHelper\u003C/span>(name, helperConfig);\n            });\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">registerThemeHelper\u003C/span>(\u003Cspan class=\"hljs-params\">name, config\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Implementation would depend on helper configuration format\u003C/span>\n        \u003Cspan class=\"hljs-comment\">// This is a placeholder for theme-specific helper registration\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Registering theme helper: \u003Cspan class=\"hljs-subst\">${name}\u003C/span>`\u003C/span>, config);\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Conditional compilation\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">setupConditionalCompilation\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addPreprocessor\u003C/span>(\u003Cspan class=\"hljs-keyword\">async\u003C/span> (template, context) =&gt; {\n            \u003Cspan class=\"hljs-comment\">// Process conditional blocks: {{#ifdef VARIABLE}}...{{/ifdef}}\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> ifdefPattern = \u003Cspan class=\"hljs-regexp\">/{{#ifdef\\s+(\\w+)}}([\\s\\S]*?){{\\/ifdef}}/g\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(ifdefPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, variable, content\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> context[variable] !== \u003Cspan class=\"hljs-literal\">undefined\u003C/span> ? content : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            });\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addPreprocessor\u003C/span>(\u003Cspan class=\"hljs-keyword\">async\u003C/span> (template, context) =&gt; {\n            \u003Cspan class=\"hljs-comment\">// Process environment-specific blocks: {{#env production}}...{{/env}}\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> envPattern = \u003Cspan class=\"hljs-regexp\">/{{#env\\s+(\\w+)}}([\\s\\S]*?){{\\/env}}/g\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> template.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(envPattern, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">match, env, content\u003C/span>) =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> process.\u003Cspan class=\"hljs-property\">env\u003C/span>.\u003Cspan class=\"hljs-property\">NODE_ENV\u003C/span> === env ? content : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            });\n        });\n    }\n    \n    \u003Cspan class=\"hljs-comment\">// Advanced caching strategies\u003C/span>\n    \u003Cspan class=\"hljs-title function_\">setupAdvancedCaching\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Template dependency tracking\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateDependencies\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Invalidation strategies\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addCacheInvalidationRule\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;time&#x27;\u003C/span>, \u003Cspan class=\"hljs-number\">3600000\u003C/span>); \u003Cspan class=\"hljs-comment\">// 1 hour\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addCacheInvalidationRule\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;file_change&#x27;\u003C/span>, \u003Cspan class=\"hljs-literal\">true\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">addCacheInvalidationRule\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;data_change&#x27;\u003C/span>, \u003Cspan class=\"hljs-literal\">true\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">addCacheInvalidationRule\u003C/span>(\u003Cspan class=\"hljs-params\">type, value\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Implementation for cache invalidation rules\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Added cache invalidation rule: \u003Cspan class=\"hljs-subst\">${type}\u003C/span>`\u003C/span>, value);\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// Specialized generators using advanced template system\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">DocumentationSiteGenerator\u003C/span> \u003Cspan class=\"hljs-keyword\">extends\u003C/span> \u003Cspan class=\"hljs-title class_ inherited__\">AdvancedTemplateSystem\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">super\u003C/span>(options);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDocumentationSpecificFeatures\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDocumentationSpecificFeatures\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Documentation-specific helpers\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;toc&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">content, maxDepth = \u003Cspan class=\"hljs-number\">3\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateTableOfContents\u003C/span>(content, maxDepth);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;breadcrumb&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">currentPath, siteStructure\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateBreadcrumb\u003C/span>(currentPath, siteStructure);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;nav&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">currentPage, navigation\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateNavigation\u003C/span>(currentPage, navigation);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;search_index&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">pages\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateSearchIndex\u003C/span>(pages);\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerHelper\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;related_pages&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">currentPage, allPages, limit = \u003Cspan class=\"hljs-number\">5\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">findRelatedPages\u003C/span>(currentPage, allPages, limit);\n        });\n        \n        \u003Cspan class=\"hljs-comment\">// Setup documentation-specific mixins\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupDocumentationMixins\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupDocumentationMixins\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerMixin\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;code_example&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">code, language, title = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${title ? \u003Cspan class=\"hljs-string\">`**\u003Cspan class=\"hljs-subst\">${title}\u003C/span>**\\n\\n`\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>}\u003C/span>\\`\\`\\`\u003Cspan class=\"hljs-subst\">${language}\u003C/span>\\n\u003Cspan class=\"hljs-subst\">${code}\u003C/span>\\n\\`\\`\\``\u003C/span>;\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerMixin\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;api_endpoint&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">method, path, description, params = []\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">let\u003C/span> output = \u003Cspan class=\"hljs-string\">`### \u003Cspan class=\"hljs-subst\">${method.toUpperCase()}\u003C/span> \u003Cspan class=\"hljs-subst\">${path}\u003C/span>\\n\\n\u003Cspan class=\"hljs-subst\">${description}\u003C/span>\\n\\n`\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (params.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n                output += \u003Cspan class=\"hljs-string\">`**Parameters:**\\n\\n`\u003C/span>;\n                params.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">param\u003C/span> =&gt;\u003C/span> {\n                    output += \u003Cspan class=\"hljs-string\">`- **\u003Cspan class=\"hljs-subst\">${param.name}\u003C/span>** (\u003Cspan class=\"hljs-subst\">${param.type}\u003C/span>): \u003Cspan class=\"hljs-subst\">${param.description}\u003C/span>\\n`\u003C/span>;\n                });\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> output;\n        });\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">registerMixin\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;warning_box&#x27;\u003C/span>, \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">message, type = \u003Cspan class=\"hljs-string\">&#x27;warning&#x27;\u003C/span>\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> icons = {\n                \u003Cspan class=\"hljs-attr\">warning\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;⚠️&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">info\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;ℹ️&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">danger\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;🚨&#x27;\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-string\">&#x27;✅&#x27;\u003C/span>\n            };\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-string\">`&gt; \u003Cspan class=\"hljs-subst\">${icons[type] || icons.warning}\u003C/span> **\u003Cspan class=\"hljs-subst\">${type.toUpperCase()}\u003C/span>**\\n&gt; \\n&gt; \u003Cspan class=\"hljs-subst\">${message}\u003C/span>`\u003C/span>;\n        });\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateTableOfContents\u003C/span>(\u003Cspan class=\"hljs-params\">content, maxDepth\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> headings = content.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^#{1,6}\\s+.+$/gm\u003C/span>) || [];\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> toc = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        \n        headings.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">heading\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> level = heading.\u003Cspan class=\"hljs-title function_\">match\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^#+/\u003C/span>)[\u003Cspan class=\"hljs-number\">0\u003C/span>].\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (level &lt;= maxDepth) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> text = heading.\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/^#+\\s+/\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> anchor = text.\u003Cspan class=\"hljs-title function_\">toLowerCase\u003C/span>().\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/[^\\w\\s-]/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">replace\u003C/span>(\u003Cspan class=\"hljs-regexp\">/\\s+/g\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;-&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> indent = \u003Cspan class=\"hljs-string\">&#x27;  &#x27;\u003C/span>.\u003Cspan class=\"hljs-title function_\">repeat\u003C/span>(level - \u003Cspan class=\"hljs-number\">1\u003C/span>);\n                toc += \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${indent}\u003C/span>- [\u003Cspan class=\"hljs-subst\">${text}\u003C/span>](#\u003Cspan class=\"hljs-subst\">${anchor}\u003C/span>)\\n`\u003C/span>;\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> toc;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateBreadcrumb\u003C/span>(\u003Cspan class=\"hljs-params\">currentPath, siteStructure\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> pathParts = currentPath.\u003Cspan class=\"hljs-title function_\">split\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;/&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">part\u003C/span> =&gt;\u003C/span> part);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> breadcrumbs = [\u003Cspan class=\"hljs-string\">&#x27;Home&#x27;\u003C/span>];\n        \n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> currentLevel = siteStructure;\n        pathParts.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">part\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (currentLevel[part]) {\n                breadcrumbs.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(currentLevel[part].\u003Cspan class=\"hljs-property\">title\u003C/span> || part);\n                currentLevel = currentLevel[part].\u003Cspan class=\"hljs-property\">children\u003C/span> || {};\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> breadcrumbs.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27; &gt; &#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateNavigation\u003C/span>(\u003Cspan class=\"hljs-params\">currentPage, navigation\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">let\u003C/span> nav = \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n        \n        \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(navigation).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[key, item]\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> isActive = currentPage === key;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> activeClass = isActive ? \u003Cspan class=\"hljs-string\">&#x27; (current)&#x27;\u003C/span> : \u003Cspan class=\"hljs-string\">&#x27;&#x27;\u003C/span>;\n            \n            nav += \u003Cspan class=\"hljs-string\">`- [\u003Cspan class=\"hljs-subst\">${item.title}\u003C/span>](\u003Cspan class=\"hljs-subst\">${item.path}\u003C/span>)\u003Cspan class=\"hljs-subst\">${activeClass}\u003C/span>\\n`\u003C/span>;\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (item.\u003Cspan class=\"hljs-property\">children\u003C/span> &amp;&amp; isActive) {\n                \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">entries\u003C/span>(item.\u003Cspan class=\"hljs-property\">children\u003C/span>).\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">[childKey, child]\u003C/span>) =&gt;\u003C/span> {\n                    nav += \u003Cspan class=\"hljs-string\">`  - [\u003Cspan class=\"hljs-subst\">${child.title}\u003C/span>](\u003Cspan class=\"hljs-subst\">${child.path}\u003C/span>)\\n`\u003C/span>;\n                });\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> nav;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">generateSearchIndex\u003C/span>(\u003Cspan class=\"hljs-params\">pages\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> searchIndex = pages.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">page\u003C/span> =&gt;\u003C/span> ({\n            \u003Cspan class=\"hljs-attr\">title\u003C/span>: page.\u003Cspan class=\"hljs-property\">title\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">path\u003C/span>: page.\u003Cspan class=\"hljs-property\">path\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">excerpt\u003C/span>: page.\u003Cspan class=\"hljs-property\">content\u003C/span>.\u003Cspan class=\"hljs-title function_\">substring\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, \u003Cspan class=\"hljs-number\">200\u003C/span>),\n            \u003Cspan class=\"hljs-attr\">keywords\u003C/span>: page.\u003Cspan class=\"hljs-property\">keywords\u003C/span> || [],\n            \u003Cspan class=\"hljs-attr\">section\u003C/span>: page.\u003Cspan class=\"hljs-property\">section\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;general&#x27;\u003C/span>\n        }));\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(searchIndex, \u003Cspan class=\"hljs-literal\">null\u003C/span>, \u003Cspan class=\"hljs-number\">2\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">findRelatedPages\u003C/span>(\u003Cspan class=\"hljs-params\">currentPage, allPages, limit\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Simple related pages algorithm based on shared keywords\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> currentKeywords = currentPage.\u003Cspan class=\"hljs-property\">keywords\u003C/span> || [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> scored = allPages\n            .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">page\u003C/span> =&gt;\u003C/span> page.\u003Cspan class=\"hljs-property\">path\u003C/span> !== currentPage.\u003Cspan class=\"hljs-property\">path\u003C/span>)\n            .\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">page\u003C/span> =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> sharedKeywords = (page.\u003Cspan class=\"hljs-property\">keywords\u003C/span> || [])\n                    .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">keyword\u003C/span> =&gt;\u003C/span> currentKeywords.\u003Cspan class=\"hljs-title function_\">includes\u003C/span>(keyword));\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n                    ...page,\n                    \u003Cspan class=\"hljs-attr\">score\u003C/span>: sharedKeywords.\u003Cspan class=\"hljs-property\">length\u003C/span>\n                };\n            })\n            .\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">page\u003C/span> =&gt;\u003C/span> page.\u003Cspan class=\"hljs-property\">score\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>)\n            .\u003Cspan class=\"hljs-title function_\">sort\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">a, b\u003C/span>) =&gt;\u003C/span> b.\u003Cspan class=\"hljs-property\">score\u003C/span> - a.\u003Cspan class=\"hljs-property\">score\u003C/span>)\n            .\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(\u003Cspan class=\"hljs-number\">0\u003C/span>, limit);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> scored;\n    }\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = { \u003Cspan class=\"hljs-title class_\">AdvancedTemplateSystem\u003C/span>, \u003Cspan class=\"hljs-title class_\">DocumentationSiteGenerator\u003C/span> };\n\u003C/code>\u003C/pre>\u003Ch2 id=\"performance-optimization-and-scalability\">Performance Optimization and Scalability\u003C/h2>\n\u003Ch3 id=\"high-performance-generation-pipeline\">High-Performance Generation Pipeline\u003C/h3>\n\u003Cp>Optimizing dynamic content generation for large-scale documentation systems:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-javascript\">\u003Cspan class=\"hljs-comment\">// performance-optimized-generator.js - Scalable content generation\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">PerformanceOptimizedGenerator\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">maxConcurrency\u003C/span>: options.\u003Cspan class=\"hljs-property\">maxConcurrency\u003C/span> || \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;os&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">cpus\u003C/span>().\u003Cspan class=\"hljs-property\">length\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">cacheStrategy\u003C/span>: options.\u003Cspan class=\"hljs-property\">cacheStrategy\u003C/span> || \u003Cspan class=\"hljs-string\">&#x27;memory&#x27;\u003C/span>, \u003Cspan class=\"hljs-comment\">// memory, file, redis\u003C/span>\n            \u003Cspan class=\"hljs-attr\">batchSize\u003C/span>: options.\u003Cspan class=\"hljs-property\">batchSize\u003C/span> || \u003Cspan class=\"hljs-number\">50\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">enableProfiling\u003C/span>: options.\u003Cspan class=\"hljs-property\">enableProfiling\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">enableMetrics\u003C/span>: options.\u003Cspan class=\"hljs-property\">enableMetrics\u003C/span> || \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">compressionEnabled\u003C/span>: options.\u003Cspan class=\"hljs-property\">compressionEnabled\u003C/span> || \u003Cspan class=\"hljs-literal\">true\u003C/span>,\n            \u003Cspan class=\"hljs-attr\">incrementalGeneration\u003C/span>: options.\u003Cspan class=\"hljs-property\">incrementalGeneration\u003C/span> !== \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n            ...options\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateEngine\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">AdvancedTemplateSystem\u003C/span>(options);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span> = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupCache\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dependencyGraph\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">generationQueue\u003C/span> = [];\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">workers\u003C/span> = [];\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupPerformanceOptimizations\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupCache\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">switch\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheStrategy\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;memory&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;file&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">FileCache\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">cacheDirectory\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">case\u003C/span> \u003Cspan class=\"hljs-string\">&#x27;redis&#x27;\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">RedisCache\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">redisConfig\u003C/span>);\n            \u003Cspan class=\"hljs-attr\">default\u003C/span>:\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupPerformanceOptimizations\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Template compilation caching\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">compiledTemplates\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Dependency tracking\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">templateDependencies\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">dataDependencies\u003C/span> = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Performance monitoring\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableProfiling\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupProfiling\u003C/span>();\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableMetrics\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupMetrics\u003C/span>();\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Worker pool setup\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setupWorkerPool\u003C/span>();\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupWorkerPool\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { \u003Cspan class=\"hljs-title class_\">Worker\u003C/span> } = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;worker_threads&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">maxConcurrency\u003C/span>; i++) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> worker = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Worker\u003C/span>(\u003Cspan class=\"hljs-string\">`\n                const { parentPort } = require(&#x27;worker_threads&#x27;);\n                const MarkdownTemplateEngine = require(&#x27;./markdown-template-engine&#x27;);\n                \n                const engine = new MarkdownTemplateEngine();\n                \n                parentPort.on(&#x27;message&#x27;, async ({ id, template, data, options }) =&gt; {\n                    try {\n                        const result = await engine.processTemplate(template, data);\n                        parentPort.postMessage({ id, success: true, result });\n                    } catch (error) {\n                        parentPort.postMessage({ id, success: false, error: error.message });\n                    }\n                });\n            `\u003C/span>, { \u003Cspan class=\"hljs-attr\">eval\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> });\n            \n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">workers\u003C/span>.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({\n                worker,\n                \u003Cspan class=\"hljs-attr\">busy\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">queue\u003C/span>: []\n            });\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateBatchOptimized\u003C/span>(\u003Cspan class=\"hljs-params\">configurations, options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> startTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>();\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableProfiling\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Starting batch generation of \u003Cspan class=\"hljs-subst\">${configurations.length}\u003C/span> items...`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Build dependency graph\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> dependencyGraph = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">buildDependencyGraph\u003C/span>(configurations);\n        \n        \u003Cspan class=\"hljs-comment\">// Determine generation order\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> generationOrder = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">topologicalSort\u003C/span>(dependencyGraph);\n        \n        \u003Cspan class=\"hljs-comment\">// Process in batches with dependency awareness\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = [];\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> batches = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">createBatches\u003C/span>(generationOrder, \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">batchSize\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> batch \u003Cspan class=\"hljs-keyword\">of\u003C/span> batches) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> batchResults = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processBatch\u003C/span>(batch, options);\n            results.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(...batchResults);\n            \n            \u003Cspan class=\"hljs-comment\">// Update cache and metrics\u003C/span>\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">updateBatchMetrics\u003C/span>(batch, batchResults);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> totalTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() - startTime;\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">enableProfiling\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Batch generation completed in \u003Cspan class=\"hljs-subst\">${totalTime}\u003C/span>ms`\u003C/span>);\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">logPerformanceMetrics\u003C/span>();\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> {\n            results,\n            \u003Cspan class=\"hljs-attr\">metrics\u003C/span>: {\n                totalTime,\n                \u003Cspan class=\"hljs-attr\">itemsGenerated\u003C/span>: results.\u003Cspan class=\"hljs-property\">length\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">itemsPerSecond\u003C/span>: results.\u003Cspan class=\"hljs-property\">length\u003C/span> / (totalTime / \u003Cspan class=\"hljs-number\">1000\u003C/span>),\n                \u003Cspan class=\"hljs-attr\">cacheHits\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheHits&#x27;\u003C/span>) || \u003Cspan class=\"hljs-number\">0\u003C/span>,\n                \u003Cspan class=\"hljs-attr\">cacheMisses\u003C/span>: \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheMisses&#x27;\u003C/span>) || \u003Cspan class=\"hljs-number\">0\u003C/span>\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">buildDependencyGraph\u003C/span>(\u003Cspan class=\"hljs-params\">configurations\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> graph = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>();\n        \n        configurations.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">config\u003C/span> =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> { id, dependencies = [], template, data } = config;\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!graph.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(id)) {\n                graph.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(id, { config, \u003Cspan class=\"hljs-attr\">dependencies\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>(dependencies), \u003Cspan class=\"hljs-attr\">dependents\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>() });\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Build reverse dependencies\u003C/span>\n            dependencies.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">depId\u003C/span> =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (!graph.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(depId)) {\n                    graph.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(depId, { \u003Cspan class=\"hljs-attr\">config\u003C/span>: \u003Cspan class=\"hljs-literal\">null\u003C/span>, \u003Cspan class=\"hljs-attr\">dependencies\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>(), \u003Cspan class=\"hljs-attr\">dependents\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>() });\n                }\n                graph.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(depId).\u003Cspan class=\"hljs-property\">dependents\u003C/span>.\u003Cspan class=\"hljs-title function_\">add\u003C/span>(id);\n            });\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> graph;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">topologicalSort\u003C/span>(\u003Cspan class=\"hljs-params\">graph\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> visited = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> visiting = \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Set\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = [];\n        \n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> \u003Cspan class=\"hljs-title function_\">visit\u003C/span> = (\u003Cspan class=\"hljs-params\">nodeId\u003C/span>) =&gt; {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (visiting.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(nodeId)) {\n                \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Circular dependency detected involving \u003Cspan class=\"hljs-subst\">${nodeId}\u003C/span>`\u003C/span>);\n            }\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (visited.\u003Cspan class=\"hljs-title function_\">has\u003C/span>(nodeId)) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span>;\n            }\n            \n            visiting.\u003Cspan class=\"hljs-title function_\">add\u003C/span>(nodeId);\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> node = graph.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(nodeId);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (node &amp;&amp; node.\u003Cspan class=\"hljs-property\">dependencies\u003C/span>) {\n                node.\u003Cspan class=\"hljs-property\">dependencies\u003C/span>.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">depId\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-title function_\">visit\u003C/span>(depId));\n            }\n            \n            visiting.\u003Cspan class=\"hljs-title function_\">delete\u003C/span>(nodeId);\n            visited.\u003Cspan class=\"hljs-title function_\">add\u003C/span>(nodeId);\n            \n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (node &amp;&amp; node.\u003Cspan class=\"hljs-property\">config\u003C/span>) {\n                result.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(node.\u003Cspan class=\"hljs-property\">config\u003C/span>);\n            }\n        };\n        \n        graph.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">node, nodeId\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (node.\u003Cspan class=\"hljs-property\">config\u003C/span>) {\n                \u003Cspan class=\"hljs-title function_\">visit\u003C/span>(nodeId);\n            }\n        });\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> result;\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">createBatches\u003C/span>(\u003Cspan class=\"hljs-params\">items, batchSize\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> batches = [];\n        \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">let\u003C/span> i = \u003Cspan class=\"hljs-number\">0\u003C/span>; i &lt; items.\u003Cspan class=\"hljs-property\">length\u003C/span>; i += batchSize) {\n            batches.\u003Cspan class=\"hljs-title function_\">push\u003C/span>(items.\u003Cspan class=\"hljs-title function_\">slice\u003C/span>(i, i + batchSize));\n        }\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> batches;\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processBatch\u003C/span>(\u003Cspan class=\"hljs-params\">batch, options\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> promises = batch.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">config\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">generateSingleOptimized\u003C/span>(config, options));\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> results = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>.\u003Cspan class=\"hljs-title function_\">allSettled\u003C/span>(promises);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> results.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">result, index\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> config = batch[index];\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (result.\u003Cspan class=\"hljs-property\">status\u003C/span> === \u003Cspan class=\"hljs-string\">&#x27;fulfilled&#x27;\u003C/span>) {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { ...config, ...result.\u003Cspan class=\"hljs-property\">value\u003C/span>, \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> };\n            } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \n                    ...config, \n                    \u003Cspan class=\"hljs-attr\">success\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span>, \n                    \u003Cspan class=\"hljs-attr\">error\u003C/span>: result.\u003Cspan class=\"hljs-property\">reason\u003C/span>.\u003Cspan class=\"hljs-property\">message\u003C/span> || result.\u003Cspan class=\"hljs-property\">reason\u003C/span> \n                };\n            }\n        });\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">generateSingleOptimized\u003C/span>(\u003Cspan class=\"hljs-params\">config, options = {}\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { id, template, data, outputPath, cacheKey } = config;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> startTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>();\n        \n        \u003Cspan class=\"hljs-comment\">// Check cache first\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (cacheKey &amp;&amp; \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">incrementalGeneration\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> cached = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">checkCache\u003C/span>(cacheKey);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (cached) {\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheHits&#x27;\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \u003Cspan class=\"hljs-attr\">content\u003C/span>: cached, \u003Cspan class=\"hljs-attr\">fromCache\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span>, \u003Cspan class=\"hljs-attr\">generationTime\u003C/span>: \u003Cspan class=\"hljs-number\">0\u003C/span> };\n            }\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheMisses&#x27;\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-comment\">// Use worker pool for CPU-intensive template processing\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> worker = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getAvailableWorker\u003C/span>();\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> result = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">processWithWorker\u003C/span>(worker, template, data);\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> generationTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() - startTime;\n            \n            \u003Cspan class=\"hljs-comment\">// Cache the result\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (cacheKey) {\n                \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">setCache\u003C/span>(cacheKey, result);\n            }\n            \n            \u003Cspan class=\"hljs-comment\">// Write to file if output path specified\u003C/span>\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (outputPath) {\n                \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">writeOutputFile\u003C/span>(outputPath, result);\n            }\n            \n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">recordGenerationMetrics\u003C/span>(id, generationTime);\n            \n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> { \n                \u003Cspan class=\"hljs-attr\">content\u003C/span>: result, \n                generationTime, \n                \u003Cspan class=\"hljs-attr\">fromCache\u003C/span>: \u003Cspan class=\"hljs-literal\">false\u003C/span> \n            };\n            \n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-keyword\">throw\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed to generate \u003Cspan class=\"hljs-subst\">${id}\u003C/span>: \u003Cspan class=\"hljs-subst\">${error.message}\u003C/span>`\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">getAvailableWorker\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> availableWorker = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">workers\u003C/span>.\u003Cspan class=\"hljs-title function_\">find\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">w\u003C/span> =&gt;\u003C/span> !w.\u003Cspan class=\"hljs-property\">busy\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (availableWorker) {\n            availableWorker.\u003Cspan class=\"hljs-property\">busy\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> availableWorker;\n        }\n        \n        \u003Cspan class=\"hljs-comment\">// Wait for a worker to become available\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">resolve\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> \u003Cspan class=\"hljs-title function_\">checkWorker\u003C/span> = (\u003Cspan class=\"hljs-params\">\u003C/span>) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> worker = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">workers\u003C/span>.\u003Cspan class=\"hljs-title function_\">find\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">w\u003C/span> =&gt;\u003C/span> !w.\u003Cspan class=\"hljs-property\">busy\u003C/span>);\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (worker) {\n                    worker.\u003Cspan class=\"hljs-property\">busy\u003C/span> = \u003Cspan class=\"hljs-literal\">true\u003C/span>;\n                    \u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(worker);\n                } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                    \u003Cspan class=\"hljs-built_in\">setTimeout\u003C/span>(checkWorker, \u003Cspan class=\"hljs-number\">10\u003C/span>);\n                }\n            };\n            \u003Cspan class=\"hljs-title function_\">checkWorker\u003C/span>();\n        });\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">processWithWorker\u003C/span>(\u003Cspan class=\"hljs-params\">workerInfo, template, data\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> { worker } = workerInfo;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> taskId = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>().\u003Cspan class=\"hljs-title function_\">toString\u003C/span>(\u003Cspan class=\"hljs-number\">36\u003C/span>) + \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">random\u003C/span>().\u003Cspan class=\"hljs-title function_\">toString\u003C/span>(\u003Cspan class=\"hljs-number\">36\u003C/span>).\u003Cspan class=\"hljs-title function_\">substr\u003C/span>(\u003Cspan class=\"hljs-number\">2\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">resolve, reject\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> timeout = \u003Cspan class=\"hljs-built_in\">setTimeout\u003C/span>(\u003Cspan class=\"hljs-function\">() =&gt;\u003C/span> {\n                \u003Cspan class=\"hljs-title function_\">reject\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Worker timeout&#x27;\u003C/span>));\n            }, \u003Cspan class=\"hljs-number\">30000\u003C/span>);\n            \n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> \u003Cspan class=\"hljs-title function_\">messageHandler\u003C/span> = (\u003Cspan class=\"hljs-params\">message\u003C/span>) =&gt; {\n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (message.\u003Cspan class=\"hljs-property\">id\u003C/span> === taskId) {\n                    \u003Cspan class=\"hljs-built_in\">clearTimeout\u003C/span>(timeout);\n                    worker.\u003Cspan class=\"hljs-title function_\">off\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;message&#x27;\u003C/span>, messageHandler);\n                    workerInfo.\u003Cspan class=\"hljs-property\">busy\u003C/span> = \u003Cspan class=\"hljs-literal\">false\u003C/span>;\n                    \n                    \u003Cspan class=\"hljs-keyword\">if\u003C/span> (message.\u003Cspan class=\"hljs-property\">success\u003C/span>) {\n                        \u003Cspan class=\"hljs-title function_\">resolve\u003C/span>(message.\u003Cspan class=\"hljs-property\">result\u003C/span>);\n                    } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n                        \u003Cspan class=\"hljs-title function_\">reject\u003C/span>(\u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Error\u003C/span>(message.\u003Cspan class=\"hljs-property\">error\u003C/span>));\n                    }\n                }\n            };\n            \n            worker.\u003Cspan class=\"hljs-title function_\">on\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;message&#x27;\u003C/span>, messageHandler);\n            worker.\u003Cspan class=\"hljs-title function_\">postMessage\u003C/span>({ \u003Cspan class=\"hljs-attr\">id\u003C/span>: taskId, template, data });\n        });\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">checkCache\u003C/span>(\u003Cspan class=\"hljs-params\">key\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span> \u003Cspan class=\"hljs-keyword\">instanceof\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(key);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(key);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">setCache\u003C/span>(\u003Cspan class=\"hljs-params\">key, value\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span> \u003Cspan class=\"hljs-keyword\">instanceof\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(key, value);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(key, value);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">writeOutputFile\u003C/span>(\u003Cspan class=\"hljs-params\">outputPath, content\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> fs = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> path = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">mkdir\u003C/span>(path.\u003Cspan class=\"hljs-title function_\">dirname\u003C/span>(outputPath), { \u003Cspan class=\"hljs-attr\">recursive\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> });\n        \n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">options\u003C/span>.\u003Cspan class=\"hljs-property\">compressionEnabled\u003C/span> &amp;&amp; outputPath.\u003Cspan class=\"hljs-title function_\">endsWith\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;.md&#x27;\u003C/span>)) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> zlib = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;zlib&#x27;\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> compressed = zlib.\u003Cspan class=\"hljs-title function_\">gzipSync\u003C/span>(content);\n            \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">writeFile\u003C/span>(\u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${outputPath}\u003C/span>.gz`\u003C/span>, compressed);\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">await\u003C/span> fs.\u003Cspan class=\"hljs-title function_\">writeFile\u003C/span>(outputPath, content, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n        }\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-params\">name\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> current = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(name) || \u003Cspan class=\"hljs-number\">0\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, current + \u003Cspan class=\"hljs-number\">1\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">recordGenerationMetrics\u003C/span>(\u003Cspan class=\"hljs-params\">id, generationTime\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> times = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;generationTimes&#x27;\u003C/span>) || [];\n        times.\u003Cspan class=\"hljs-title function_\">push\u003C/span>({ id, \u003Cspan class=\"hljs-attr\">time\u003C/span>: generationTime, \u003Cspan class=\"hljs-attr\">timestamp\u003C/span>: \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() });\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;generationTimes&#x27;\u003C/span>, times);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">updateBatchMetrics\u003C/span>(\u003Cspan class=\"hljs-params\">batch, results\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> batchTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>();\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> successful = results.\u003Cspan class=\"hljs-title function_\">filter\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">r\u003C/span> =&gt;\u003C/span> r.\u003Cspan class=\"hljs-property\">success\u003C/span>).\u003Cspan class=\"hljs-property\">length\u003C/span>;\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> failed = results.\u003Cspan class=\"hljs-property\">length\u003C/span> - successful;\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;batchesProcessed&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;totalGenerated&#x27;\u003C/span>, successful);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">incrementMetric\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;totalFailed&#x27;\u003C/span>, failed);\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;lastBatchTime&#x27;\u003C/span>, batchTime);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;lastBatchSize&#x27;\u003C/span>, batch.\u003Cspan class=\"hljs-property\">length\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupProfiling\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">profiler\u003C/span> = {\n            \u003Cspan class=\"hljs-attr\">marks\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>(),\n            \u003Cspan class=\"hljs-attr\">measures\u003C/span>: \u003Cspan class=\"hljs-keyword\">new\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>()\n        };\n        \n        \u003Cspan class=\"hljs-comment\">// Add performance marks\u003C/span>\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">mark\u003C/span> = \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">name\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">profiler\u003C/span>.\u003Cspan class=\"hljs-property\">marks\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, process.\u003Cspan class=\"hljs-property\">hrtime\u003C/span>.\u003Cspan class=\"hljs-title function_\">bigint\u003C/span>());\n        };\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">measure\u003C/span> = \u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">name, startMark\u003C/span>) =&gt;\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> start = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">profiler\u003C/span>.\u003Cspan class=\"hljs-property\">marks\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(startMark);\n            \u003Cspan class=\"hljs-keyword\">if\u003C/span> (start) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> duration = \u003Cspan class=\"hljs-title class_\">Number\u003C/span>(process.\u003Cspan class=\"hljs-property\">hrtime\u003C/span>.\u003Cspan class=\"hljs-title function_\">bigint\u003C/span>() - start) / \u003Cspan class=\"hljs-number\">1000000\u003C/span>; \u003Cspan class=\"hljs-comment\">// Convert to ms\u003C/span>\n                \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">profiler\u003C/span>.\u003Cspan class=\"hljs-property\">measures\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, duration);\n            }\n        };\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">setupMetrics\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Initialize metric counters\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> metricNames = [\n            \u003Cspan class=\"hljs-string\">&#x27;cacheHits&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;cacheMisses&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;batchesProcessed&#x27;\u003C/span>,\n            \u003Cspan class=\"hljs-string\">&#x27;totalGenerated&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;totalFailed&#x27;\u003C/span>, \u003Cspan class=\"hljs-string\">&#x27;templateCompilations&#x27;\u003C/span>\n        ];\n        \n        metricNames.\u003Cspan class=\"hljs-title function_\">forEach\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">name\u003C/span> =&gt;\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(name, \u003Cspan class=\"hljs-number\">0\u003C/span>));\n        \n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;startTime&#x27;\u003C/span>, \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>());\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;generationTimes&#x27;\u003C/span>, []);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">logPerformanceMetrics\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> totalTime = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() - \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;startTime&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> totalGenerated = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;totalGenerated&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> cacheHitRate = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheHits&#x27;\u003C/span>) / \n            (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheHits&#x27;\u003C/span>) + \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;cacheMisses&#x27;\u003C/span>)) * \u003Cspan class=\"hljs-number\">100\u003C/span>;\n        \n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;\\n=== Performance Metrics ===&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Total time: \u003Cspan class=\"hljs-subst\">${totalTime}\u003C/span>ms`\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Items generated: \u003Cspan class=\"hljs-subst\">${totalGenerated}\u003C/span>`\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Items per second: \u003Cspan class=\"hljs-subst\">${(totalGenerated / (totalTime / \u003Cspan class=\"hljs-number\">1000\u003C/span>)).toFixed(\u003Cspan class=\"hljs-number\">2\u003C/span>)}\u003C/span>`\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Cache hit rate: \u003Cspan class=\"hljs-subst\">${cacheHitRate.toFixed(\u003Cspan class=\"hljs-number\">1\u003C/span>)}\u003C/span>%`\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Batches processed: \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.metrics.get(\u003Cspan class=\"hljs-string\">&#x27;batchesProcessed&#x27;\u003C/span>)}\u003C/span>`\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Failed generations: \u003Cspan class=\"hljs-subst\">${\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.metrics.get(\u003Cspan class=\"hljs-string\">&#x27;totalFailed&#x27;\u003C/span>)}\u003C/span>`\u003C/span>);\n        \n        \u003Cspan class=\"hljs-comment\">// Generation time statistics\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> times = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>.\u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;generationTimes&#x27;\u003C/span>) || [];\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (times.\u003Cspan class=\"hljs-property\">length\u003C/span> &gt; \u003Cspan class=\"hljs-number\">0\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> timesOnly = times.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">t\u003C/span> =&gt;\u003C/span> t.\u003Cspan class=\"hljs-property\">time\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> avgTime = timesOnly.\u003Cspan class=\"hljs-title function_\">reduce\u003C/span>(\u003Cspan class=\"hljs-function\">(\u003Cspan class=\"hljs-params\">a, b\u003C/span>) =&gt;\u003C/span> a + b, \u003Cspan class=\"hljs-number\">0\u003C/span>) / timesOnly.\u003Cspan class=\"hljs-property\">length\u003C/span>;\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> maxTime = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">max\u003C/span>(...timesOnly);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> minTime = \u003Cspan class=\"hljs-title class_\">Math\u003C/span>.\u003Cspan class=\"hljs-title function_\">min\u003C/span>(...timesOnly);\n            \n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Avg generation time: \u003Cspan class=\"hljs-subst\">${avgTime.toFixed(\u003Cspan class=\"hljs-number\">2\u003C/span>)}\u003C/span>ms`\u003C/span>);\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Max generation time: \u003Cspan class=\"hljs-subst\">${maxTime}\u003C/span>ms`\u003C/span>);\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">`Min generation time: \u003Cspan class=\"hljs-subst\">${minTime}\u003C/span>ms`\u003C/span>);\n        }\n        \n        \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">log\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;===========================\\n&#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getMetrics\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">Object\u003C/span>.\u003Cspan class=\"hljs-title function_\">fromEntries\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">metrics\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">cleanup\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Cleanup workers\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-title class_\">Promise\u003C/span>.\u003Cspan class=\"hljs-title function_\">all\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">workers\u003C/span>.\u003Cspan class=\"hljs-title function_\">map\u003C/span>(\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-params\">w\u003C/span> =&gt;\u003C/span> w.\u003Cspan class=\"hljs-property\">worker\u003C/span>.\u003Cspan class=\"hljs-title function_\">terminate\u003C/span>()));\n        \n        \u003Cspan class=\"hljs-comment\">// Clear caches\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span> \u003Cspan class=\"hljs-keyword\">instanceof\u003C/span> \u003Cspan class=\"hljs-title class_\">Map\u003C/span>) {\n            \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">clear\u003C/span>();\n        } \u003Cspan class=\"hljs-keyword\">else\u003C/span> \u003Cspan class=\"hljs-keyword\">if\u003C/span> (\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-property\">cleanup\u003C/span>) {\n            \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cache\u003C/span>.\u003Cspan class=\"hljs-title function_\">cleanup\u003C/span>();\n        }\n    }\n}\n\n\u003Cspan class=\"hljs-comment\">// File-based cache implementation\u003C/span>\n\u003Cspan class=\"hljs-keyword\">class\u003C/span> \u003Cspan class=\"hljs-title class_\">FileCache\u003C/span> {\n    \u003Cspan class=\"hljs-title function_\">constructor\u003C/span>(\u003Cspan class=\"hljs-params\">cacheDirectory\u003C/span>) {\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cacheDir\u003C/span> = cacheDirectory;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span> = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;fs&#x27;\u003C/span>).\u003Cspan class=\"hljs-property\">promises\u003C/span>;\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">path\u003C/span> = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;path&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">crypto\u003C/span> = \u003Cspan class=\"hljs-built_in\">require\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;crypto&#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">get\u003C/span>(\u003Cspan class=\"hljs-params\">key\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> filePath = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getFilePath\u003C/span>(key);\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> content = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">readFile\u003C/span>(filePath, \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">parse\u003C/span>(content);\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-literal\">null\u003C/span>;\n        }\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">set\u003C/span>(\u003Cspan class=\"hljs-params\">key, value\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> filePath = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-title function_\">getFilePath\u003C/span>(key);\n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">mkdir\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">path\u003C/span>.\u003Cspan class=\"hljs-title function_\">dirname\u003C/span>(filePath), { \u003Cspan class=\"hljs-attr\">recursive\u003C/span>: \u003Cspan class=\"hljs-literal\">true\u003C/span> });\n        \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">writeFile\u003C/span>(filePath, \u003Cspan class=\"hljs-title class_\">JSON\u003C/span>.\u003Cspan class=\"hljs-title function_\">stringify\u003C/span>(value), \u003Cspan class=\"hljs-string\">&#x27;utf-8&#x27;\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-title function_\">getFilePath\u003C/span>(\u003Cspan class=\"hljs-params\">key\u003C/span>) {\n        \u003Cspan class=\"hljs-keyword\">const\u003C/span> hash = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">crypto\u003C/span>.\u003Cspan class=\"hljs-title function_\">createHash\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;md5&#x27;\u003C/span>).\u003Cspan class=\"hljs-title function_\">update\u003C/span>(key).\u003Cspan class=\"hljs-title function_\">digest\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;hex&#x27;\u003C/span>);\n        \u003Cspan class=\"hljs-keyword\">return\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">path\u003C/span>.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cacheDir\u003C/span>, \u003Cspan class=\"hljs-string\">`\u003Cspan class=\"hljs-subst\">${hash}\u003C/span>.json`\u003C/span>);\n    }\n    \n    \u003Cspan class=\"hljs-keyword\">async\u003C/span> \u003Cspan class=\"hljs-title function_\">cleanup\u003C/span>(\u003Cspan class=\"hljs-params\">\u003C/span>) {\n        \u003Cspan class=\"hljs-comment\">// Remove old cache files\u003C/span>\n        \u003Cspan class=\"hljs-keyword\">try\u003C/span> {\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> files = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">readdir\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cacheDir\u003C/span>);\n            \u003Cspan class=\"hljs-keyword\">const\u003C/span> cutoff = \u003Cspan class=\"hljs-title class_\">Date\u003C/span>.\u003Cspan class=\"hljs-title function_\">now\u003C/span>() - (\u003Cspan class=\"hljs-number\">7\u003C/span> * \u003Cspan class=\"hljs-number\">24\u003C/span> * \u003Cspan class=\"hljs-number\">60\u003C/span> * \u003Cspan class=\"hljs-number\">60\u003C/span> * \u003Cspan class=\"hljs-number\">1000\u003C/span>); \u003Cspan class=\"hljs-comment\">// 7 days\u003C/span>\n            \n            \u003Cspan class=\"hljs-keyword\">for\u003C/span> (\u003Cspan class=\"hljs-keyword\">const\u003C/span> file \u003Cspan class=\"hljs-keyword\">of\u003C/span> files) {\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> filePath = \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">path\u003C/span>.\u003Cspan class=\"hljs-title function_\">join\u003C/span>(\u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">cacheDir\u003C/span>, file);\n                \u003Cspan class=\"hljs-keyword\">const\u003C/span> stats = \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">stat\u003C/span>(filePath);\n                \n                \u003Cspan class=\"hljs-keyword\">if\u003C/span> (stats.\u003Cspan class=\"hljs-property\">mtime\u003C/span>.\u003Cspan class=\"hljs-title function_\">getTime\u003C/span>() &lt; cutoff) {\n                    \u003Cspan class=\"hljs-keyword\">await\u003C/span> \u003Cspan class=\"hljs-variable language_\">this\u003C/span>.\u003Cspan class=\"hljs-property\">fs\u003C/span>.\u003Cspan class=\"hljs-title function_\">unlink\u003C/span>(filePath);\n                }\n            }\n        } \u003Cspan class=\"hljs-keyword\">catch\u003C/span> (error) {\n            \u003Cspan class=\"hljs-variable language_\">console\u003C/span>.\u003Cspan class=\"hljs-title function_\">warn\u003C/span>(\u003Cspan class=\"hljs-string\">&#x27;Cache cleanup failed:&#x27;\u003C/span>, error.\u003Cspan class=\"hljs-property\">message\u003C/span>);\n        }\n    }\n}\n\n\u003Cspan class=\"hljs-variable language_\">module\u003C/span>.\u003Cspan class=\"hljs-property\">exports\u003C/span> = \u003Cspan class=\"hljs-title class_\">PerformanceOptimizedGenerator\u003C/span>;\n\u003C/code>\u003C/pre>\u003Ch2 id=\"conclusion\">Conclusion\u003C/h2>\n\u003Cp>Dynamic Markdown content generation represents a transformative approach to documentation management that enables organizations to build scalable, maintainable, and automatically synchronized documentation systems. By implementing sophisticated templating engines, data source integration capabilities, and performance-optimized generation pipelines, development teams can create documentation workflows that eliminate manual maintenance overhead while ensuring content accuracy and consistency across large-scale projects.\u003C/p>\n\u003Cp>The key to successful dynamic content generation lies in designing flexible template architectures that can accommodate diverse content types and data sources while maintaining high performance and reliability. Whether you&#39;re building API documentation systems, user guide generators, or comprehensive documentation portals, the techniques covered in this guide provide the foundation for creating robust, automated content generation systems that scale effectively with organizational growth.\u003C/p>\n\u003Cp>Remember to implement proper caching strategies, dependency management, and performance monitoring to ensure that your dynamic generation systems remain responsive and reliable as content volume increases. With careful implementation of these advanced techniques, your documentation can achieve both the automation benefits of dynamic generation and the quality standards required for professional technical communication.\u003C/p>\n",[15,19,22,25,28,31,34],{"id":16,"text":17,"level":18},"why-master-dynamic-content-generation","Why Master Dynamic Content Generation?",2,{"id":20,"text":21,"level":18},"foundation-dynamic-content-concepts","Foundation Dynamic Content Concepts",{"id":23,"text":24,"level":18},"automated-documentation-generation","Automated Documentation Generation",{"id":26,"text":27,"level":18},"integration-with-modern-development-workflows","Integration with Modern Development Workflows",{"id":29,"text":30,"level":18},"advanced-template-systems-and-customization","Advanced Template Systems and Customization",{"id":32,"text":33,"level":18},"performance-optimization-and-scalability","Performance Optimization and Scalability",{"id":35,"text":36,"level":18},"conclusion","Conclusion",[],[39,47,54],{"slug":40,"title":41,"description":42,"excerpt":43,"date":44,"category":9,"author":10,"keywords":45,"readingMinutes":46},"markdown-dynamic-content-generation-automation-workflows-complete-guide","Markdown Dynamic Content Generation and Automation Workflows: Complete Guide for Automated Documentation, Template Systems, and Content Pipeline Management","Master dynamic content generation in Markdown with comprehensive automation workflows, template engines, data-driven documentation systems, and intelligent content pipeline management for scalable technical writing.","Advanced Markdown dynamic content generation and automation workflows enable systematic creation of data-driven documentation, template-based content systems, and intelligent content pipelines…","2025-12-22","markdown automation, dynamic content generation markdown, markdown templates, automated documentation markdown, content pipeline markdown, markdown workflows, data driven documentation, template engines markdown",37,{"slug":48,"title":49,"description":50,"excerpt":51,"date":52,"category":9,"author":10,"keywords":53,"readingMinutes":12},"markdown-custom-html-components-complete-guide","Markdown Custom HTML Components and Extensions: Complete Guide for Dynamic Content Creation and Interactive Documentation","Master Markdown custom HTML components, shortcodes, and extensions for interactive documentation, dynamic content generation, and enhanced reader experiences. Learn component development, templating, and integration strategies.","Advanced Markdown custom HTML components and extensions enable the creation of dynamic, interactive documentation that transcends traditional static content limitations through sophisticated…","2025-10-03","markdown custom components, markdown html extensions, markdown shortcodes, interactive markdown, dynamic markdown content, custom markdown elements, markdown templating, markdown component development",{"slug":55,"title":56,"description":57,"excerpt":58,"date":59,"category":9,"author":10,"keywords":60,"readingMinutes":61},"markdown-emoji-guide-complete-reference","Markdown Emoji Guide: Complete Reference for Technical Documentation and Content Creation","Master emoji usage in Markdown for enhanced technical documentation and content creation. Learn platform-specific implementations, accessibility considerations, and professional best practices for emoji integration.","Emoji integration in Markdown elevates technical documentation and content creation from plain text to engaging, visually enhanced communication that improves reader comprehension and adds…","2025-09-11","markdown emoji, markdown emoticons, github emoji markdown, emoji in documentation, technical writing emoji, markdown symbols, emoji accessibility, professional emoji usage",18,1792184943133]