{"version":3,"sources":["../../src/types.ts","../../src/builder/parser.ts","../../src/builder/builder.ts","../../src/builder/static-generator.ts"],"names":["z","readFileSync","readdirSync","join","statSync","existsSync","relative","mkdirSync","dirname","writeFileSync","marked"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\n\nexport const DocItemTypeSchema = z.enum([\"section\", \"page\"]);\n\nexport const DocItemSchema = z.object({\n  name: z.string().min(1),\n  type: DocItemTypeSchema,\n  label: z.string().min(1),\n  collapsed: z.boolean().optional(),\n  url: z.string().url().optional()\n});\n\nexport const IndexSchema = z.object({\n  items: z.array(DocItemSchema)\n});\n\nexport type DocItem = z.infer<typeof DocItemSchema>;\nexport type IndexFile = z.infer<typeof IndexSchema>;\n\n// Navigation tree types\nexport interface NavigationItem extends DocItem {\n  path?: string;\n  items?: NavigationItem[];\n  parent?: NavigationItem | undefined;\n}\n\nexport interface NavigationTree {\n  items: NavigationItem[];\n}\n\n// Build output types\nexport interface BuildOptions {\n  appOutput?: string;\n  websiteOutput?: string;\n  staticOutput?: string;\n  includeContent?: boolean;\n  autoDiscover?: boolean; // Enable auto-discovery when .index.json is missing\n}\n\nexport interface BuildResult {\n  navigation: NavigationTree;\n  content?: Record<string, string> | undefined;\n  pages?: Array<{\n    path: string;\n    content: string;\n    html: string;\n  }> | undefined;\n}\n\n// Content processing types\nexport interface ContentProcessor {\n  process(content: string): string;\n}\n\nexport interface ContentProcessorOptional {\n  process(content: string): string;\n}\n\nexport interface StaticPageOptions {\n  title?: string;\n  baseUrl?: string;\n  css?: string;\n  js?: string;\n}\n\nexport interface StaticSiteResult {\n  pages: Array<{\n    path: string;\n    content: string;\n    html: string;\n  }>;\n  index?: {\n    path: string;\n    html: string;\n  } | undefined;\n}","import { readFileSync, readdirSync, statSync, existsSync } from 'fs';\nimport { join, relative } from 'path';\nimport { IndexSchema, NavigationItem, NavigationTree, DocItem } from '../types.js';\n\nexport class ParserError extends Error {\n  constructor(message: string, public filePath?: string) {\n    super(message);\n    this.name = 'ParserError';\n  }\n}\n\nexport interface ParseOptions {\n  basePath?: string;\n  validateFiles?: boolean;\n  autoDiscover?: boolean;\n}\n\nexport function parseIndexFile(filePath: string): DocItem[] {\n  try {\n    const content = readFileSync(filePath, 'utf-8');\n    const data = JSON.parse(content);\n    const result = IndexSchema.safeParse(data);\n    \n    if (!result.success) {\n      throw new ParserError(\n        `Invalid .index.json format: ${result.error.message}`,\n        filePath\n      );\n    }\n    \n    return result.data.items;\n  } catch (error) {\n    if (error instanceof ParserError) {\n      throw error;\n    }\n    \n    if (error instanceof SyntaxError) {\n      throw new ParserError(\n        `Invalid JSON in .index.json: ${error.message}`,\n        filePath\n      );\n    }\n    \n    throw new ParserError(\n      `Failed to read .index.json: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      filePath\n    );\n  }\n}\n\n/**\n * Auto-discovers content in a directory when no .index.json is present\n */\nfunction autoDiscoverContent(dirPath: string): DocItem[] {\n  try {\n    const items = readdirSync(dirPath, { withFileTypes: true });\n    const discoveredItems: DocItem[] = [];\n    \n    // Filter and sort items\n    const markdownFiles = items\n      .filter(item => item.isFile() && item.name.endsWith('.md'))\n      .map(item => ({ ...item, name: item.name.slice(0, -3) })) // Remove .md extension\n      .sort((a, b) => a.name.localeCompare(b.name));\n    \n    const directories = items\n      .filter(item => item.isDirectory() && !item.name.startsWith('.'))\n      .sort((a, b) => a.name.localeCompare(b.name));\n    \n    // Add markdown files as pages, but exclude index.md and README.md\n    for (const file of markdownFiles) {\n      // Skip index.md and README.md as they will be handled as section roots\n      if (file.name.toLowerCase() !== 'index' && file.name.toLowerCase() !== 'readme') {\n        discoveredItems.push({\n          name: file.name,\n          type: 'page',\n          label: generateLabel(file.name)\n        });\n      }\n    }\n    \n    // Add directories as sections\n    for (const dir of directories) {\n      discoveredItems.push({\n        name: dir.name,\n        type: 'section',\n        label: generateLabel(dir.name)\n      });\n    }\n    \n    return discoveredItems;\n  } catch (error) {\n    throw new ParserError(\n      `Failed to auto-discover content in directory: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      dirPath\n    );\n  }\n}\n\n/**\n * Generates a human-readable label from a filename/directory name\n */\nfunction generateLabel(name: string): string {\n  return name\n    .replace(/[-_]/g, ' ') // Replace hyphens and underscores with spaces\n    .replace(/\\b\\w/g, l => l.toUpperCase()) // Capitalize first letter of each word\n    .trim();\n}\n\n/**\n * Checks if a directory has an .index.json file\n */\nfunction hasIndexFile(dirPath: string): boolean {\n  try {\n    const indexPath = join(dirPath, '.index.json');\n    return statSync(indexPath).isFile();\n  } catch {\n    return false;\n  }\n}\n\nexport function buildNavigationTree(\n  contentPath: string,\n  options: ParseOptions = {}\n): NavigationTree {\n  const { basePath = contentPath, validateFiles = true, autoDiscover = true } = options;\n  \n  try {\n    if (!statSync(contentPath).isDirectory()) {\n      throw new ParserError(`Content path is not a directory: ${contentPath}`);\n    }\n  } catch (error) {\n    if (error instanceof ParserError) {\n      throw error;\n    }\n    throw new ParserError(`Content path does not exist: ${contentPath}`, contentPath);\n  }\n  \n  const rootIndexPath = join(contentPath, '.index.json');\n  let rootItems: DocItem[];\n  \n  // Check if .index.json exists\n  const hasIndex = hasIndexFile(contentPath);\n  \n  if (hasIndex) {\n    // Use existing .index.json\n    try {\n      rootItems = parseIndexFile(rootIndexPath);\n    } catch (error) {\n      if (error instanceof ParserError) {\n        throw error;\n      }\n      throw new ParserError(`Root .index.json not found: ${rootIndexPath}`, rootIndexPath);\n    }\n  } else if (autoDiscover) {\n    // Auto-discover content\n    rootItems = autoDiscoverContent(contentPath);\n  } else {\n    // Auto-discovery disabled and no .index.json\n    throw new ParserError(`Root .index.json not found: ${rootIndexPath}`, rootIndexPath);\n  }\n  \n  const navigationItems: NavigationItem[] = [];\n  \n  for (const item of rootItems) {\n    const navigationItem = processNavigationItem(\n      item,\n      contentPath,\n      basePath,\n      validateFiles,\n      autoDiscover\n    );\n    navigationItems.push(navigationItem);\n  }\n  \n  return { items: navigationItems };\n}\n\nfunction processNavigationItem(\n  item: DocItem,\n  currentPath: string,\n  basePath: string,\n  validateFiles: boolean,\n  autoDiscover: boolean\n): NavigationItem {\n  const navigationItem: NavigationItem = { ...item };\n  \n  if (item.type === 'section') {\n    const sectionPath = join(currentPath, item.name);\n    \n    // Check if section has .index.json\n    if (hasIndexFile(sectionPath)) {\n      // Use existing .index.json\n      const sectionIndexPath = join(sectionPath, '.index.json');\n      \n      if (validateFiles) {\n        try {\n          if (!statSync(sectionIndexPath).isFile()) {\n            throw new ParserError(\n              `Section .index.json not found: ${sectionIndexPath}`,\n              sectionIndexPath\n            );\n          }\n        } catch (error) {\n          if (error instanceof ParserError) {\n            throw error;\n          }\n          throw new ParserError(\n            `Section .index.json not found: ${sectionIndexPath}`,\n            sectionIndexPath\n          );\n        }\n      }\n      \n      try {\n        const sectionItems = parseIndexFile(sectionIndexPath);\n        navigationItem.items = sectionItems.map(subItem =>\n          processNavigationItem(subItem, sectionPath, basePath, validateFiles, autoDiscover)\n        );\n      } catch (error) {\n        if (error instanceof ParserError) {\n          throw error;\n        }\n        throw new ParserError(\n          `Failed to process section ${item.name}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n          sectionIndexPath\n        );\n      }\n    } else if (autoDiscover) {\n      // Auto-discover section content\n      try {\n        const sectionItems = autoDiscoverContent(sectionPath);\n        navigationItem.items = sectionItems.map(subItem =>\n          processNavigationItem(subItem, sectionPath, basePath, validateFiles, autoDiscover)\n        );\n      } catch (error) {\n        if (error instanceof ParserError) {\n          throw error;\n        }\n        throw new ParserError(\n          `Failed to auto-discover section ${item.name}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n          sectionPath\n        );\n      }\n    } else {\n      // Auto-discovery disabled and no .index.json\n      const sectionIndexPath = join(sectionPath, '.index.json');\n      throw new ParserError(\n        `Section .index.json not found: ${sectionIndexPath}`,\n        sectionIndexPath\n      );\n    }\n    \n    // Check for index.md or README.md as section root (for all sections)\n    const indexPath = join(sectionPath, 'index.md');\n    const readmePath = join(sectionPath, 'README.md');\n    const readmeLowerPath = join(sectionPath, 'readme.md');\n    \n    let sectionRootPath: string | undefined;\n    \n    // Priority: index.md > README.md > readme.md\n    if (validateFiles) {\n      // When validating files, check each one individually\n      try {\n        if (statSync(indexPath).isFile()) {\n          sectionRootPath = indexPath;\n        }\n      } catch {\n        // index.md doesn't exist, try README.md\n        try {\n          if (statSync(readmePath).isFile()) {\n            sectionRootPath = readmePath;\n          }\n        } catch {\n          // README.md doesn't exist, try readme.md\n          try {\n            if (statSync(readmeLowerPath).isFile()) {\n              sectionRootPath = readmeLowerPath;\n            }\n          } catch {\n            // readme.md doesn't exist, continue without section root\n          }\n        }\n      }\n    } else {\n      // If not validating files, just check if they exist\n      if (existsSync(indexPath)) {\n        sectionRootPath = indexPath;\n      } else if (existsSync(readmePath)) {\n        sectionRootPath = readmePath;\n      } else if (existsSync(readmeLowerPath)) {\n        sectionRootPath = readmeLowerPath;\n      }\n    }\n    \n\n    \n    if (sectionRootPath) {\n      navigationItem.path = relative(basePath, sectionRootPath);\n    }\n  } else if (item.type === 'page') {\n    const pagePath = join(currentPath, `${item.name}.md`);\n    const relativePath = relative(basePath, pagePath);\n    \n    if (validateFiles) {\n      try {\n        if (!statSync(pagePath).isFile()) {\n          throw new ParserError(\n            `Page markdown file not found: ${pagePath}`,\n            pagePath\n          );\n        }\n      } catch (error) {\n        if (error instanceof ParserError) {\n          throw error;\n        }\n        throw new ParserError(\n          `Page markdown file not found: ${pagePath}`,\n          pagePath\n        );\n      }\n    }\n    \n    navigationItem.path = relativePath;\n  }\n  \n  return navigationItem;\n}\n\nexport function validateContentStructure(contentPath: string, options: ParseOptions = {}): void {\n  const { autoDiscover = true } = options;\n  const errors: string[] = [];\n  \n  function validateDirectory(dirPath: string, depth = 0): void {\n    if (depth > 10) {\n      errors.push(`Maximum directory depth exceeded: ${dirPath}`);\n      return;\n    }\n    \n    const indexPath = join(dirPath, '.index.json');\n    \n    // Check if .index.json exists\n    if (hasIndexFile(dirPath)) {\n      // Validate using .index.json\n      try {\n        const items = parseIndexFile(indexPath);\n        \n        for (const item of items) {\n          if (item.type === 'section') {\n            const sectionPath = join(dirPath, item.name);\n            \n            try {\n              if (!statSync(sectionPath).isDirectory()) {\n                errors.push(`Section directory not found: ${sectionPath}`);\n                continue;\n              }\n            } catch (error) {\n              errors.push(`Section directory not found: ${sectionPath}`);\n              continue;\n            }\n            \n            validateDirectory(sectionPath, depth + 1);\n          } else if (item.type === 'page') {\n            const pagePath = join(dirPath, `${item.name}.md`);\n            \n            try {\n              if (!statSync(pagePath).isFile()) {\n                errors.push(`Page markdown file not found: ${pagePath}`);\n              }\n            } catch (error) {\n              errors.push(`Page markdown file not found: ${pagePath}`);\n            }\n          }\n        }\n      } catch (error) {\n        errors.push(`Failed to parse ${indexPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n      }\n    } else if (autoDiscover) {\n      // Validate auto-discovered content\n      try {\n        const items = autoDiscoverContent(dirPath);\n        \n        for (const item of items) {\n          if (item.type === 'section') {\n            const sectionPath = join(dirPath, item.name);\n            \n            try {\n              if (!statSync(sectionPath).isDirectory()) {\n                errors.push(`Section directory not found: ${sectionPath}`);\n                continue;\n              }\n            } catch (error) {\n              errors.push(`Section directory not found: ${sectionPath}`);\n              continue;\n            }\n            \n            validateDirectory(sectionPath, depth + 1);\n          } else if (item.type === 'page') {\n            const pagePath = join(dirPath, `${item.name}.md`);\n            \n            try {\n              if (!statSync(pagePath).isFile()) {\n                errors.push(`Page markdown file not found: ${pagePath}`);\n              }\n            } catch (error) {\n              errors.push(`Page markdown file not found: ${pagePath}`);\n            }\n          }\n        }\n      } catch (error) {\n        errors.push(`Failed to auto-discover content in ${dirPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n      }\n    } else {\n      // Auto-discovery disabled and no .index.json\n      errors.push(`Missing .index.json: ${indexPath}`);\n      return;\n    }\n  }\n  \n  validateDirectory(contentPath);\n  \n  if (errors.length > 0) {\n    throw new ParserError(\n      `Content structure validation failed:\\n${errors.join('\\n')}`,\n      contentPath\n    );\n  }\n}","import { readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { marked } from 'marked';\nimport { buildNavigationTree, validateContentStructure } from './parser.js';\nimport { BuildOptions, BuildResult, NavigationTree, ContentProcessor } from '../types.js';\n\nexport class BuilderError extends Error {\n  constructor(message: string, public filePath?: string) {\n    super(message);\n    this.name = 'BuilderError';\n  }\n}\n\nexport interface ContentBundle {\n  [path: string]: string;\n}\n\nexport async function buildPages(\n  contentPath: string,\n  options: BuildOptions = {}\n): Promise<BuildResult> {\n  try {\n    // Validate content structure\n    validateContentStructure(contentPath, { autoDiscover: options.autoDiscover });\n    \n    // Build navigation tree\n    const navigation = buildNavigationTree(contentPath, { autoDiscover: options.autoDiscover });\n    \n    // Bundle markdown content if requested\n    let content: ContentBundle | undefined;\n    if (options.includeContent !== false) {\n      content = bundleMarkdownContent(navigation, contentPath);\n    }\n    \n    // Write outputs\n    if (options.appOutput) {\n      await writeAppOutput(navigation, content, options.appOutput);\n    }\n    \n    if (options.websiteOutput) {\n      await writeWebsiteOutput(navigation, options.websiteOutput);\n    }\n    \n    return {\n      navigation,\n      content: content || undefined\n    };\n  } catch (error) {\n    if (error instanceof BuilderError) {\n      throw error;\n    }\n    \n    throw new BuilderError(\n      `Build failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      contentPath\n    );\n  }\n}\n\nfunction bundleMarkdownContent(\n  navigation: NavigationTree,\n  basePath: string\n): ContentBundle {\n  const content: ContentBundle = {};\n  \n  function processItems(items: NavigationTree['items']): void {\n    for (const item of items) {\n      if (item.type === 'page' && item.path) {\n        const filePath = join(basePath, item.path);\n        try {\n          const markdownContent = readFileSync(filePath, 'utf-8');\n          content[item.path] = markdownContent;\n        } catch (error) {\n          throw new BuilderError(\n            `Failed to read markdown file: ${error instanceof Error ? error.message : 'Unknown error'}`,\n            filePath\n          );\n        }\n      } else if (item.items) {\n        processItems(item.items);\n      }\n    }\n  }\n  \n  processItems(navigation.items);\n  return content;\n}\n\nasync function writeAppOutput(\n  navigation: NavigationTree,\n  content: ContentBundle | undefined,\n  outputPath: string\n): Promise<void> {\n  try {\n    mkdirSync(dirname(outputPath), { recursive: true });\n    \n    // Write navigation\n    const navigationPath = join(outputPath, 'navigation.json');\n    writeFileSync(navigationPath, JSON.stringify(navigation, null, 2));\n    \n    // Write content if available\n    if (content) {\n      const contentPath = join(outputPath, 'content.json');\n      writeFileSync(contentPath, JSON.stringify(content, null, 2));\n    }\n  } catch (error) {\n    throw new BuilderError(\n      `Failed to write app output: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      outputPath\n    );\n  }\n}\n\nasync function writeWebsiteOutput(\n  navigation: NavigationTree,\n  outputPath: string\n): Promise<void> {\n  try {\n    mkdirSync(dirname(outputPath), { recursive: true });\n    \n    const navigationPath = join(outputPath, 'navigation.json');\n    writeFileSync(navigationPath, JSON.stringify(navigation, null, 2));\n  } catch (error) {\n    throw new BuilderError(\n      `Failed to write website output: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      outputPath\n    );\n  }\n}\n\nexport function processMarkdown(\n  content: string,\n  processor?: ContentProcessor\n): string {\n  if (processor) {\n    content = processor.process(content);\n  }\n  \n  return marked(content);\n}\n\nexport function generateStaticPages(\n  navigation: NavigationTree,\n  basePath: string,\n  options: {\n    processor?: ContentProcessor;\n    pageOptions?: {\n      title?: string;\n      baseUrl?: string;\n      css?: string;\n      js?: string;\n    };\n  } = {}\n): Array<{\n  path: string;\n  content: string;\n  html: string;\n}> {\n  const pages: Array<{\n    path: string;\n    content: string;\n    html: string;\n  }> = [];\n  \n  function processItems(items: NavigationTree['items']): void {\n    for (const item of items) {\n      if (item.type === 'page' && item.path) {\n        const filePath = join(basePath, item.path);\n        try {\n          const markdownContent = readFileSync(filePath, 'utf-8');\n          const htmlContent = processMarkdown(markdownContent, options.processor);\n          const fullHtml = generateHTMLPage(htmlContent, item.label, options.pageOptions);\n          \n          pages.push({\n            path: item.path.replace(/\\.md$/, '.html'),\n            content: markdownContent,\n            html: fullHtml\n          });\n        } catch (error) {\n          throw new BuilderError(\n            `Failed to process page ${item.path}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n            filePath\n          );\n        }\n      } else if (item.items) {\n        processItems(item.items);\n      }\n    }\n  }\n  \n  processItems(navigation.items);\n  return pages;\n}\n\nfunction generateHTMLPage(\n  content: string,\n  title: string,\n  options: {\n    title?: string;\n    baseUrl?: string;\n    css?: string;\n    js?: string;\n  } = {}\n): string {\n  const pageTitle = options.title || title;\n  const baseUrl = options.baseUrl || '';\n  const css = options.css || '';\n  const js = options.js || '';\n  \n  return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>${pageTitle}</title>\n    <base href=\"${baseUrl}\">\n    ${css ? `<style>${css}</style>` : ''}\n</head>\n<body>\n    <div class=\"content\">\n        ${content}\n    </div>\n    ${js ? `<script>${js}</script>` : ''}\n</body>\n</html>`;\n}","import { writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { buildNavigationTree, validateContentStructure } from './parser.js';\nimport { generateStaticPages, processMarkdown } from './builder.js';\nimport { ContentProcessor, StaticPageOptions } from '../types.js';\n\nexport class StaticGeneratorError extends Error {\n  constructor(message: string, public filePath?: string) {\n    super(message);\n    this.name = 'StaticGeneratorError';\n  }\n}\n\nexport interface StaticSiteOptions {\n  title?: string;\n  baseUrl?: string;\n  css?: string;\n  js?: string;\n  processor?: ContentProcessor;\n  includeIndex?: boolean;\n  indexTitle?: string;\n  autoDiscover?: boolean;\n}\n\nexport interface StaticSiteResult {\n  pages: Array<{\n    path: string;\n    content: string;\n    html: string;\n  }>;\n  index?: {\n    path: string;\n    html: string;\n  };\n}\n\nexport async function generateStaticSite(\n  contentPath: string,\n  outputPath: string,\n  options: StaticSiteOptions = {}\n): Promise<StaticSiteResult> {\n  try {\n    // Validate content structure\n    validateContentStructure(contentPath, { autoDiscover: options.autoDiscover });\n    \n    // Build navigation tree\n    const navigation = buildNavigationTree(contentPath, { autoDiscover: options.autoDiscover });\n    \n    // Generate static pages\n    const pages = generateStaticPages(navigation, contentPath, {\n      processor: options.processor,\n      pageOptions: {\n        title: options.title,\n        baseUrl: options.baseUrl,\n        css: options.css,\n        js: options.js\n      }\n    });\n    \n    // Create output directory\n    mkdirSync(outputPath, { recursive: true });\n    \n    // Write pages\n    for (const page of pages) {\n      const pageOutputPath = join(outputPath, page.path);\n      mkdirSync(dirname(pageOutputPath), { recursive: true });\n      writeFileSync(pageOutputPath, page.html);\n    }\n    \n    // Generate index page if requested\n    let index: { path: string; html: string } | undefined;\n    if (options.includeIndex !== false) {\n      const indexPage = generateIndexPage(navigation, options);\n      const indexPath = join(outputPath, 'index.html');\n      writeFileSync(indexPath, indexPage.html);\n      index = { ...indexPage, path: 'index.html' };\n    }\n    \n    return {\n      pages,\n      index: index || undefined\n    };\n  } catch (error) {\n    if (error instanceof StaticGeneratorError) {\n      throw error;\n    }\n    \n    throw new StaticGeneratorError(\n      `Static site generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n      contentPath\n    );\n  }\n}\n\nfunction generateIndexPage(\n  navigation: { items: Array<{ label: string; type: string; path?: string; items?: any[] }> },\n  options: StaticSiteOptions\n): { html: string } {\n  const title = options.indexTitle || options.title || 'Documentation';\n  const baseUrl = options.baseUrl || '';\n  const css = options.css || '';\n  const js = options.js || '';\n  \n  const navigationHtml = generateNavigationHtml(navigation.items);\n  \n  const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>${title}</title>\n    <base href=\"${baseUrl}\">\n    ${css ? `<style>${css}</style>` : ''}\n</head>\n<body>\n    <div class=\"container\">\n        <header>\n            <h1>${title}</h1>\n        </header>\n        <nav class=\"navigation\">\n            ${navigationHtml}\n        </nav>\n        <main class=\"content\">\n            <p>Welcome to the documentation. Please select a page from the navigation.</p>\n        </main>\n    </div>\n    ${js ? `<script>${js}</script>` : ''}\n</body>\n</html>`;\n  \n  return { html };\n}\n\nfunction generateNavigationHtml(items: Array<{ label: string; type: string; path?: string; items?: any[] }>): string {\n  let html = '<ul class=\"nav-list\">';\n  \n  for (const item of items) {\n    html += '<li class=\"nav-item\">';\n    \n    if (item.type === 'page' && item.path) {\n      const href = item.path.replace(/\\.md$/, '.html');\n      html += `<a href=\"${href}\" class=\"nav-link\">${item.label}</a>`;\n    } else {\n      html += `<span class=\"nav-section\">${item.label}</span>`;\n    }\n    \n    if (item.items && item.items.length > 0) {\n      html += generateNavigationHtml(item.items);\n    }\n    \n    html += '</li>';\n  }\n  \n  html += '</ul>';\n  return html;\n}\n\nexport function generateSitemap(\n  pages: Array<{ path: string }>,\n  baseUrl: string\n): string {\n  const sitemap = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${pages.map(page => {\n  const url = `${baseUrl}/${page.path}`;\n  return `  <url>\n    <loc>${url}</loc>\n    <lastmod>${new Date().toISOString()}</lastmod>\n  </url>`;\n}).join('\\n')}\n</urlset>`;\n  \n  return sitemap;\n}\n\nexport function generateRobotsTxt(baseUrl: string): string {\n  return `User-agent: *\nAllow: /\n\nSitemap: ${baseUrl}/sitemap.xml`;\n}"]}