aeo.js 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/robots.ts","../src/core/detect.ts","../src/core/utils.ts","../src/core/llms-txt.ts","../src/core/llms-full.ts","../src/core/raw-markdown.ts","../src/core/manifest.ts","../src/core/sitemap.ts","../src/core/ai-index.ts","../src/core/schema.ts","../src/core/generate-wrapper.ts","../src/core/html-extract.ts","../src/plugins/angular.ts"],"names":["join","existsSync","readFileSync","readdirSync","statSync","extname","relative","mkdirSync","dirname","copyFileSync","writeFileSync","createHash","index","extractTitle"],"mappings":"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","file":"angular.js","sourcesContent":["import type { ResolvedAeoConfig } from '../types';\n\nconst AI_CRAWLERS = [\n 'GPTBot',\n 'OAI-SearchBot',\n 'ChatGPT-User',\n 'ClaudeBot',\n 'Claude-Web',\n 'anthropic-ai',\n 'PerplexityBot',\n 'Google-Extended',\n 'Gemini-Deep-Research',\n 'Bingbot',\n 'FacebookBot',\n 'meta-externalagent',\n 'Amazonbot',\n 'Applebot',\n 'DeepSeekBot',\n 'Bytespider',\n 'cohere-ai',\n 'CCBot',\n 'DiffBot',\n 'YouBot',\n 'FirecrawlAgent',\n 'Crawl4AI',\n 'BraveBot',\n 'SemrushBot',\n 'AhrefsBot',\n 'MJ12bot',\n 'DotBot',\n 'DataForSeoBot',\n 'Screaming Frog SEO Spider',\n 'SEOkicks',\n 'SEMrushBot',\n 'BLEXBot',\n 'Yandex',\n 'Baiduspider',\n 'Sogou',\n 'Exabot',\n 'facebookexternalhit',\n 'LinkedInBot',\n 'WhatsApp',\n 'Slackbot',\n 'TwitterBot',\n 'TelegramBot',\n 'Discordbot',\n 'PinterestBot',\n 'TumblrBot',\n 'ViberBot',\n 'SkypeUriPreview',\n 'redditbot',\n 'Snapchat',\n 'TikTok',\n];\n\nexport function generateRobotsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n '# robots.txt generated by aeo.js',\n '# Allow AI crawlers to index this site',\n '',\n '# Traditional search engines',\n 'User-agent: Googlebot',\n 'Allow: /',\n '',\n 'User-agent: Bingbot',\n 'Allow: /',\n '',\n '# AI crawlers and answer engines',\n ];\n \n for (const crawler of AI_CRAWLERS) {\n lines.push(`User-agent: ${crawler}`);\n lines.push('Allow: /');\n lines.push('');\n }\n \n lines.push('# Default for all other bots');\n lines.push('User-agent: *');\n lines.push('Allow: /');\n lines.push('');\n \n if (config.url) {\n lines.push(`Sitemap: ${config.url}/sitemap.xml`);\n }\n \n lines.push('');\n lines.push('# AEO (Answer Engine Optimization) files');\n lines.push('# These help LLMs understand your content better');\n lines.push(`# ${config.url}/llms.txt`);\n lines.push(`# ${config.url}/llms-full.txt`);\n lines.push(`# ${config.url}/docs.json`);\n lines.push(`# ${config.url}/ai-index.json`);\n \n return lines.join('\\n');\n}","import type { FrameworkType, FrameworkInfo } from '../types';\nimport { readPackageJson } from './utils';\n\nexport function detectFramework(projectRoot: string = process.cwd()): FrameworkInfo {\n const packageJson = readPackageJson(projectRoot);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n \n if (dependencies['next']) {\n return {\n framework: 'next',\n contentDir: 'app',\n outDir: 'out',\n };\n }\n \n if (dependencies['nuxt'] || dependencies['@nuxt/kit']) {\n return {\n framework: 'nuxt',\n contentDir: 'content',\n outDir: '.output/public',\n };\n }\n \n if (dependencies['astro'] || dependencies['@astrojs/astro']) {\n return {\n framework: 'astro',\n contentDir: 'src/content',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@remix-run/dev']) {\n return {\n framework: 'remix',\n contentDir: 'app',\n outDir: 'build/client',\n };\n }\n \n if (dependencies['@sveltejs/kit']) {\n return {\n framework: 'sveltekit',\n contentDir: 'src',\n outDir: 'build',\n };\n }\n \n if (dependencies['@angular/core']) {\n return {\n framework: 'angular',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@docusaurus/core']) {\n return {\n framework: 'docusaurus',\n contentDir: 'docs',\n outDir: 'build',\n };\n }\n \n if (dependencies['vite']) {\n return {\n framework: 'vite',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n return {\n framework: 'unknown',\n contentDir: 'src',\n outDir: 'dist',\n };\n}","import { readFileSync, existsSync, readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { detectFramework } from './detect';\nimport { minimatch } from 'minimatch';\n\nexport function validateConfig(config: AeoConfig): string[] {\n const warnings: string[] = [];\n\n if (config.url && !/^https?:\\/\\//.test(config.url)) {\n warnings.push(`url \"${config.url}\" should start with http:// or https://`);\n }\n\n if (config.url === 'https://example.com') {\n warnings.push('url is set to the default \"https://example.com\" — set your actual site URL');\n }\n\n if (!config.title) {\n warnings.push('title is not set — your generated files will use \"My Site\"');\n }\n\n if (config.robots?.crawlDelay && config.robots.crawlDelay < 0) {\n warnings.push('robots.crawlDelay should be a positive number');\n }\n\n return warnings;\n}\n\nexport function resolveConfig(config: AeoConfig = {}): ResolvedAeoConfig {\n const frameworkInfo = detectFramework();\n\n return {\n title: config.title || 'My Site',\n description: config.description || '',\n url: config.url || 'https://example.com',\n contentDir: config.contentDir || frameworkInfo.contentDir,\n outDir: config.outDir || frameworkInfo.outDir,\n pages: config.pages || [],\n generators: {\n robotsTxt: config.generators?.robotsTxt !== false,\n llmsTxt: config.generators?.llmsTxt !== false,\n llmsFullTxt: config.generators?.llmsFullTxt !== false,\n rawMarkdown: config.generators?.rawMarkdown !== false,\n manifest: config.generators?.manifest !== false,\n sitemap: config.generators?.sitemap !== false,\n aiIndex: config.generators?.aiIndex !== false,\n schema: config.generators?.schema !== false,\n },\n robots: {\n allow: config.robots?.allow || ['/'],\n disallow: config.robots?.disallow || [],\n crawlDelay: config.robots?.crawlDelay || 0,\n sitemap: config.robots?.sitemap || '',\n },\n schema: {\n enabled: config.schema?.enabled !== false,\n organization: {\n name: config.schema?.organization?.name || config.title || 'My Site',\n url: config.schema?.organization?.url || config.url || 'https://example.com',\n logo: config.schema?.organization?.logo || '',\n sameAs: config.schema?.organization?.sameAs || [],\n },\n defaultType: config.schema?.defaultType || 'WebPage',\n },\n og: {\n enabled: config.og?.enabled !== false,\n image: config.og?.image || '',\n twitterHandle: config.og?.twitterHandle || '',\n type: config.og?.type || 'website',\n },\n widget: {\n enabled: config.widget?.enabled !== false,\n position: config.widget?.position || 'bottom-right',\n theme: {\n background: config.widget?.theme?.background || 'rgba(18, 18, 24, 0.9)',\n text: config.widget?.theme?.text || '#C0C0C5',\n accent: config.widget?.theme?.accent || '#E8E8EA',\n badge: config.widget?.theme?.badge || '#4ADE80',\n },\n humanLabel: config.widget?.humanLabel || 'Human',\n aiLabel: config.widget?.aiLabel || 'AI',\n showBadge: config.widget?.showBadge !== false,\n },\n };\n}\n\nexport function parseFrontmatter(content: string): { frontmatter: Record<string, any>; content: string } {\n const frontmatterMatch = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)/);\n \n if (frontmatterMatch) {\n const frontmatterStr = frontmatterMatch[1];\n const contentWithoutFrontmatter = frontmatterMatch[2];\n \n const frontmatter: Record<string, any> = {};\n const lines = frontmatterStr.split('\\n');\n \n for (const line of lines) {\n const [key, ...valueParts] = line.split(':');\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim();\n frontmatter[key.trim()] = value.replace(/^[\"']|[\"']$/g, '');\n }\n }\n \n return { frontmatter, content: contentWithoutFrontmatter };\n }\n \n return { frontmatter: {}, content };\n}\n\nexport function bumpHeadings(content: string, levels: number = 1): string {\n return content.replace(/^(#{1,6})\\s/gm, (match, hashes) => {\n const newLevel = Math.min(hashes.length + levels, 6);\n return '#'.repeat(newLevel) + ' ';\n });\n}\n\nexport function extractTitle(content: string): string {\n const h1Match = content.match(/^#\\s+(.+)$/m);\n if (h1Match) return h1Match[1];\n \n const h2Match = content.match(/^##\\s+(.+)$/m);\n if (h2Match) return h2Match[1];\n \n const firstLine = content.split('\\n')[0];\n return firstLine.slice(0, 100);\n}\n\nexport function readPackageJson(projectRoot: string = process.cwd()): Record<string, any> {\n const packageJsonPath = join(projectRoot, 'package.json');\n \n if (!existsSync(packageJsonPath)) {\n return {};\n }\n \n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\nexport function getAllMarkdownFiles(\n projectRoot: string,\n include: string[] = ['**/*.md'],\n exclude: string[] = ['**/node_modules/**']\n): string[] {\n const files: string[] = [];\n \n function scanDirectory(dir: string): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = relative(projectRoot, fullPath);\n \n // Check if path should be excluded\n const shouldExclude = exclude.some(pattern => \n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldExclude) {\n continue;\n }\n \n const stat = statSync(fullPath);\n \n if (stat.isDirectory()) {\n // Skip hidden directories\n if (!entry.startsWith('.')) {\n scanDirectory(fullPath);\n }\n } else if (stat.isFile()) {\n // Check if file matches include patterns\n const shouldInclude = include.some(pattern =>\n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldInclude) {\n files.push(fullPath);\n }\n }\n }\n } catch (error) {\n // Silently skip directories we can't read\n }\n }\n \n scanDirectory(projectRoot);\n return files;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectMarkdownFiles(dir: string, base: string = dir): MarkdownFile[] {\n const files: MarkdownFile[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n files.push(...collectMarkdownFiles(fullPath, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n files.push({\n path: relativePath,\n content: mainContent,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n frontmatter,\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return files;\n}\n\nexport function generateLlmsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title}`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## About');\n lines.push('');\n lines.push('This file provides a structured overview of the documentation and content available on this site,');\n lines.push('optimized for consumption by Large Language Models (LLMs) and AI assistants.');\n lines.push('');\n \n // List discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n lines.push('## Pages');\n lines.push('');\n\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n lines.push(`- [${title}](${url})`);\n if (page.description) {\n lines.push(` ${page.description}`);\n }\n }\n lines.push('');\n }\n\n // List markdown content files\n const markdownFiles = collectMarkdownFiles(config.contentDir);\n\n if (markdownFiles.length > 0) {\n lines.push('## Documentation');\n lines.push('');\n\n const grouped: Record<string, MarkdownFile[]> = {};\n\n for (const file of markdownFiles) {\n const dir = file.path.split('/')[0] || 'root';\n if (!grouped[dir]) grouped[dir] = [];\n grouped[dir].push(file);\n }\n\n for (const [dir, files] of Object.entries(grouped)) {\n lines.push(`### ${dir === 'root' ? 'Main Documentation' : dir}`);\n lines.push('');\n\n for (const file of files) {\n const url = `${config.url}/${file.path.replace(/\\.mdx?$/, '')}`;\n lines.push(`- [${file.title}](${url})`);\n if (file.description) {\n lines.push(` ${file.description}`);\n }\n }\n lines.push('');\n }\n }\n \n lines.push('## Quick Links');\n lines.push('');\n lines.push(`- Full Documentation: ${config.url}/llms-full.txt`);\n lines.push(`- Documentation Manifest: ${config.url}/docs.json`);\n lines.push(`- AI-Optimized Index: ${config.url}/ai-index.json`);\n lines.push(`- Sitemap: ${config.url}/sitemap.xml`);\n lines.push('');\n \n lines.push('## For LLMs');\n lines.push('');\n lines.push('To get the complete documentation in a single file, request:');\n lines.push(`${config.url}/llms-full.txt`);\n lines.push('');\n lines.push('For structured access to individual pages with metadata:');\n lines.push(`${config.url}/docs.json`);\n lines.push('');\n lines.push('For RAG (Retrieval Augmented Generation) systems:');\n lines.push(`${config.url}/ai-index.json`);\n lines.push('');\n \n lines.push('---');\n lines.push('Generated by aeo.js - Answer Engine Optimization for the modern web');\n lines.push('Learn more at https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\nimport { parseFrontmatter, bumpHeadings } from './utils';\n\nfunction collectAndConcatenateMarkdown(dir: string, base: string = dir): string[] {\n const sections: string[] = [];\n \n try {\n const entries = readdirSync(dir).sort();\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n const subSections = collectAndConcatenateMarkdown(fullPath, base);\n if (subSections.length > 0) {\n sections.push(...subSections);\n }\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n const sectionLines: string[] = [\n '---',\n '',\n `# ${frontmatter.title || relativePath}`,\n '',\n `Source: ${relativePath}`,\n '',\n ];\n \n if (frontmatter.description) {\n sectionLines.push(`> ${frontmatter.description}`);\n sectionLines.push('');\n }\n \n const bumpedContent = bumpHeadings(mainContent, 1);\n sectionLines.push(bumpedContent);\n sectionLines.push('');\n \n sections.push(sectionLines.join('\\n'));\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return sections;\n}\n\nexport function generateLlmsFull(config: ResolvedAeoConfig): string {\n return generateLlmsFullTxt(config);\n}\n\nexport function generateLlmsFullTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title} - Complete Documentation`,\n '',\n `This file contains all documentation concatenated into a single file for easy consumption by LLMs.`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## Table of Contents');\n lines.push('');\n lines.push('This document includes all content from this project.');\n lines.push('Each section is separated by a horizontal rule (---) for easy parsing.');\n lines.push('');\n\n let hasContent = false;\n\n // Include discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const sectionLines: string[] = [\n '---',\n '',\n `# ${title}`,\n '',\n `URL: ${url}`,\n '',\n ];\n if (page.description) {\n sectionLines.push(`> ${page.description}`);\n sectionLines.push('');\n }\n if (page.content) {\n sectionLines.push(page.content);\n sectionLines.push('');\n }\n lines.push(sectionLines.join('\\n'));\n hasContent = true;\n }\n }\n\n // Include markdown content files\n const sections = collectAndConcatenateMarkdown(config.contentDir);\n\n if (sections.length > 0) {\n lines.push(...sections);\n hasContent = true;\n }\n\n if (!hasContent) {\n // Always include site overview so LLMs have basic context\n lines.push('---');\n lines.push('');\n lines.push(`# ${config.title}`);\n lines.push('');\n lines.push(`URL: ${config.url}`);\n lines.push('');\n if (config.description) {\n lines.push(config.description);\n lines.push('');\n }\n }\n \n lines.push('---');\n lines.push('');\n lines.push('## About This Document');\n lines.push('');\n lines.push('This concatenated documentation file is generated automatically by aeo.js');\n lines.push('to make it easier for AI systems to understand the complete context of this project.');\n lines.push('');\n lines.push(`For a structured index, see: ${config.url}/llms.txt`);\n lines.push(`For individual files, see: ${config.url}/docs.json`);\n lines.push('');\n lines.push('Generated by aeo.js - https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, statSync, mkdirSync, writeFileSync, copyFileSync } from 'fs';\nimport { join, relative, extname, dirname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nexport interface CopiedFile {\n source: string;\n destination: string;\n}\n\nexport interface GeneratedMarkdownFile {\n pathname: string;\n destination: string;\n}\n\nfunction ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function copyRawMarkdown(config: ResolvedAeoConfig): CopiedFile[] {\n return copyMarkdownFiles(config);\n}\n\nexport function copyMarkdownFiles(config: ResolvedAeoConfig): CopiedFile[] {\n const copiedFiles: CopiedFile[] = [];\n \n function copyRecursive(dir: string, base: string = config.contentDir): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n copyRecursive(fullPath, base);\n } else if (stat.isFile() && extname(entry) === '.md') {\n const relativePath = relative(base, fullPath);\n const destPath = join(config.outDir, relativePath);\n \n ensureDir(dirname(destPath));\n \n try {\n copyFileSync(fullPath, destPath);\n copiedFiles.push({\n source: fullPath,\n destination: destPath,\n });\n } catch (error) {\n console.warn(`Warning: Could not copy ${fullPath}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n }\n \n copyRecursive(config.contentDir);\n return copiedFiles;\n}\n\nexport function generatePageMarkdownFiles(config: ResolvedAeoConfig): GeneratedMarkdownFile[] {\n const generated: GeneratedMarkdownFile[] = [];\n const pages = config.pages || [];\n\n for (const page of pages) {\n // Only generate .md files for pages that have actual content.\n // Pages discovered from filenames (dev mode) only have pathname/title\n // but no body content — those are useless as standalone markdown files.\n if (!page.content) continue;\n\n const pageTitle = page.title || (page.pathname === '/' ? config.title : undefined);\n\n let filename: string;\n if (page.pathname === '/') {\n filename = 'index.md';\n } else {\n const clean = page.pathname.replace(/^\\//, '').replace(/\\/$/, '');\n filename = clean.includes('/') ? `${clean}.md` : `${clean}.md`;\n }\n\n const destPath = join(config.outDir, filename);\n\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (pageTitle) lines.push(`title: \"${pageTitle}\"`);\n if (page.description) lines.push(`description: \"${page.description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (pageTitle) {\n lines.push(`# ${pageTitle}`, '');\n }\n\n if (page.description) {\n lines.push(`${page.description}`, '');\n }\n\n if (page.content) {\n lines.push(page.content);\n }\n\n const content = lines.join('\\n');\n\n ensureDir(dirname(destPath));\n try {\n writeFileSync(destPath, content, 'utf-8');\n generated.push({ pathname: page.pathname, destination: destPath });\n } catch {\n // skip unwritable files\n }\n }\n\n return generated;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, ManifestEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectManifestEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): ManifestEntry[] {\n const entries: ManifestEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectManifestEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n \n entries.push({\n url: `${config.url}/${urlPath}`,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n lastModified: stat.mtime.toISOString(),\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateManifest(config: ResolvedAeoConfig): string {\n const entries: ManifestEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n entries.push({\n url: `${config.url}${page.pathname === '/' ? '' : page.pathname}`,\n title: page.title || page.pathname,\n description: page.description,\n });\n }\n }\n\n // Add markdown content files\n entries.push(...collectManifestEntries(config.contentDir, config));\n \n const manifest = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n documents: entries.sort((a, b) => a.url.localeCompare(b.url)),\n metadata: {\n totalDocuments: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n },\n };\n \n return JSON.stringify(manifest, null, 2);\n}","import { readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nfunction collectUrls(dir: string, config: ResolvedAeoConfig, base: string = dir): string[] {\n const urls: string[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n urls.push(...collectUrls(fullPath, config, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx' || extname(entry) === '.html')) {\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.(md|mdx|html)$/, '');\n urls.push(`${config.url}/${urlPath}`);\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return urls;\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\nexport function generateSitemap(config: ResolvedAeoConfig): string {\n const urls: string[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n urls.push(`${config.url}${page.pathname === '/' ? '' : page.pathname}`);\n }\n }\n\n // Add markdown/html files from content dir\n if (config.contentDir) {\n urls.push(...collectUrls(config.contentDir, config));\n }\n\n const lines: string[] = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ];\n\n // Always include the site root\n urls.push(config.url);\n\n const uniqueUrls = [...new Set(urls)].sort();\n \n for (const url of uniqueUrls) {\n lines.push(' <url>');\n lines.push(` <loc>${escapeXml(url)}</loc>`);\n lines.push(` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>`);\n lines.push(' <changefreq>weekly</changefreq>');\n lines.push(' <priority>0.8</priority>');\n lines.push(' </url>');\n }\n \n lines.push('</urlset>');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport { createHash } from 'crypto';\nimport type { ResolvedAeoConfig, AIIndexEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction extractKeywords(content: string): string[] {\n const words = content\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter(word => word.length > 3);\n \n const wordCount: Record<string, number> = {};\n \n for (const word of words) {\n wordCount[word] = (wordCount[word] || 0) + 1;\n }\n \n return Object.entries(wordCount)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([word]) => word);\n}\n\nfunction chunkContent(content: string, maxLength: number = 2000): string[] {\n const chunks: string[] = [];\n const paragraphs = content.split('\\n\\n');\n \n let currentChunk = '';\n \n for (const paragraph of paragraphs) {\n if (currentChunk.length + paragraph.length > maxLength && currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n currentChunk += paragraph + '\\n\\n';\n }\n \n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nfunction collectAIIndexEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): AIIndexEntry[] {\n const entries: AIIndexEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectAIIndexEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n const url = `${config.url}/${urlPath}`;\n \n const chunks = chunkContent(mainContent);\n const title = frontmatter.title || extractTitle(mainContent);\n const keywords = extractKeywords(mainContent);\n \n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n \n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: frontmatter.description,\n keywords,\n metadata: {\n ...frontmatter,\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: relativePath,\n },\n });\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateAiIndex(config: ResolvedAeoConfig): string {\n return generateAIIndex(config);\n}\n\nexport function generateAIIndex(config: ResolvedAeoConfig): string {\n const entries: AIIndexEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const content = page.content || '';\n\n if (content) {\n const chunks = chunkContent(content);\n const keywords = extractKeywords(content);\n\n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: page.description,\n keywords,\n metadata: {\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: page.pathname,\n },\n });\n });\n } else {\n const id = createHash('sha256')\n .update(url)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title,\n content: page.description || title,\n description: page.description,\n keywords: [],\n });\n }\n }\n }\n\n // Add markdown content files\n entries.push(...collectAIIndexEntries(config.contentDir, config));\n \n const index = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n entries: entries.sort((a, b) => a.id.localeCompare(b.id)),\n metadata: {\n totalEntries: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n embedding: {\n recommended: 'text-embedding-ada-002',\n dimensions: 1536,\n },\n },\n };\n \n return JSON.stringify(index, null, 2);\n}","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface SchemaOutput {\n site: object[];\n pages: Record<string, object[]>;\n}\n\n/**\n * Generate JSON-LD structured data for the entire site.\n * Returns site-level schemas (WebSite, Organization) and per-page schemas.\n */\nexport function generateSchema(config: ResolvedAeoConfig): string {\n const output = generateSchemaObjects(config);\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Generate schema objects without serialization (for injection into HTML).\n */\nexport function generateSchemaObjects(config: ResolvedAeoConfig): SchemaOutput {\n const siteSchemas = generateSiteSchemas(config);\n const pageSchemas: Record<string, object[]> = {};\n\n for (const page of config.pages) {\n const schemas = generatePageSchemas(page, config);\n if (schemas.length > 0) {\n pageSchemas[page.pathname] = schemas;\n }\n }\n\n return { site: siteSchemas, pages: pageSchemas };\n}\n\n/**\n * Generate site-level schemas: WebSite + Organization.\n */\nfunction generateSiteSchemas(config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n\n // WebSite schema\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.title,\n description: config.description || undefined,\n url: config.url,\n });\n\n // Organization schema (if name or sameAs provided)\n const org = config.schema.organization;\n if (org.name || org.sameAs.length > 0) {\n const orgSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: org.name,\n url: org.url,\n };\n if (org.logo) orgSchema.logo = org.logo;\n if (org.sameAs.length > 0) orgSchema.sameAs = org.sameAs;\n schemas.push(orgSchema);\n }\n\n return schemas;\n}\n\n/**\n * Generate per-page schemas based on page content and config defaults.\n */\nexport function generatePageSchemas(page: PageEntry, config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n // Detect FAQ patterns in content\n const faqItems = detectFaqPatterns(page.content || '');\n if (faqItems.length > 0) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map(({ question, answer }) => ({\n '@type': 'Question',\n name: question,\n acceptedAnswer: {\n '@type': 'Answer',\n text: answer,\n },\n })),\n });\n }\n\n // WebPage or Article schema\n const pageType = config.schema.defaultType;\n const pageSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': pageType,\n name: page.title || config.title,\n url: pageUrl,\n };\n if (page.description) pageSchema.description = page.description;\n if (pageType === 'Article') {\n pageSchema.headline = page.title || config.title;\n pageSchema.author = {\n '@type': 'Organization',\n name: config.schema.organization.name,\n };\n }\n schemas.push(pageSchema);\n\n // BreadcrumbList for non-root pages\n if (page.pathname !== '/') {\n const breadcrumbs = generateBreadcrumbs(page.pathname, config);\n if (breadcrumbs.length > 1) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: breadcrumbs.map((crumb, i) => ({\n '@type': 'ListItem',\n position: i + 1,\n name: crumb.name,\n item: crumb.url,\n })),\n });\n }\n }\n\n return schemas;\n}\n\n/**\n * Generate breadcrumb items from a pathname.\n */\nfunction generateBreadcrumbs(pathname: string, config: ResolvedAeoConfig): { name: string; url: string }[] {\n const baseUrl = config.url.replace(/\\/$/, '');\n const parts = pathname.split('/').filter(Boolean);\n const crumbs: { name: string; url: string }[] = [\n { name: 'Home', url: baseUrl + '/' },\n ];\n\n let currentPath = '';\n for (const part of parts) {\n currentPath += '/' + part;\n crumbs.push({\n name: part.charAt(0).toUpperCase() + part.slice(1).replace(/-/g, ' '),\n url: baseUrl + currentPath,\n });\n }\n\n return crumbs;\n}\n\n/**\n * Detect FAQ-like patterns in markdown/text content.\n * Looks for: headings ending with \"?\" followed by paragraph text.\n */\nfunction detectFaqPatterns(content: string): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n // Pattern: ## Question? \\n\\n Answer text\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const headingMatch = line.match(/^#{1,6}\\s+(.+\\?)\\s*$/);\n if (headingMatch) {\n // Collect answer: all non-empty, non-heading lines following\n const answerLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n const nextLine = lines[j].trim();\n if (!nextLine) {\n if (answerLines.length > 0) break; // empty line after content = end\n continue; // skip leading empty lines\n }\n if (/^#{1,6}\\s/.test(nextLine)) break; // next heading = end\n answerLines.push(nextLine);\n }\n if (answerLines.length > 0) {\n items.push({\n question: headingMatch[1],\n answer: answerLines.join(' ').slice(0, 500),\n });\n }\n }\n }\n\n return items;\n}\n\n/**\n * Generate a JSON-LD script tag string for injection into HTML.\n */\nexport function generateJsonLdScript(schemas: object[]): string {\n if (schemas.length === 0) return '';\n if (schemas.length === 1) {\n return `<script type=\"application/ld+json\">${JSON.stringify(schemas[0])}</script>`;\n }\n return schemas\n .map(s => `<script type=\"application/ld+json\">${JSON.stringify(s)}</script>`)\n .join('\\n');\n}\n","import { generateRobotsTxt as genRobots } from './robots';\nimport { generateLlmsTxt as genLlms } from './llms-txt';\nimport { generateLlmsFullTxt as genLlmsFull } from './llms-full';\nimport { copyMarkdownFiles, generatePageMarkdownFiles } from './raw-markdown';\nimport { generateManifest as genManifest } from './manifest';\nimport { generateSitemap as genSitemap } from './sitemap';\nimport { generateAIIndex as genAIIndex } from './ai-index';\nimport { generateSchema as genSchema } from './schema';\nimport { resolveConfig } from './utils';\nimport { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig } from '../types';\n\nexport interface GenerateResult {\n files: string[];\n errors: string[];\n}\n\nexport async function generateAEOFiles(\n configOrRoot?: ResolvedAeoConfig | AeoConfig | string,\n maybeConfig?: Partial<AeoConfig>\n): Promise<GenerateResult> {\n let config: ResolvedAeoConfig;\n\n if (typeof configOrRoot === 'string') {\n config = resolveConfig({ ...maybeConfig, outDir: maybeConfig?.outDir || configOrRoot });\n } else if (\n configOrRoot &&\n typeof configOrRoot === 'object' &&\n 'generators' in configOrRoot &&\n typeof (configOrRoot as ResolvedAeoConfig).generators?.robotsTxt === 'boolean'\n ) {\n config = configOrRoot as ResolvedAeoConfig;\n } else {\n config = resolveConfig(configOrRoot as AeoConfig | undefined);\n }\n\n const outDir = config.outDir;\n const files: string[] = [];\n const errors: string[] = [];\n\n if (!existsSync(outDir)) {\n mkdirSync(outDir, { recursive: true });\n }\n\n if (config.generators.robotsTxt) {\n try {\n const content = genRobots(config);\n writeFileSync(join(outDir, 'robots.txt'), content, 'utf-8');\n files.push('robots.txt');\n } catch (e: any) {\n errors.push(`robots.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsTxt) {\n try {\n const content = genLlms(config);\n writeFileSync(join(outDir, 'llms.txt'), content, 'utf-8');\n files.push('llms.txt');\n } catch (e: any) {\n errors.push(`llms.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsFullTxt) {\n try {\n const content = genLlmsFull(config);\n writeFileSync(join(outDir, 'llms-full.txt'), content, 'utf-8');\n files.push('llms-full.txt');\n } catch (e: any) {\n errors.push(`llms-full.txt: ${e.message}`);\n }\n }\n\n if (config.generators.rawMarkdown) {\n // Generate page .md files first (auto-extracted from build output)\n try {\n const generated = generatePageMarkdownFiles(config);\n for (const f of generated) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`page-markdown: ${e.message}`);\n }\n\n // Then copy handwritten .md from contentDir (these take priority, overwriting generated ones)\n try {\n const copied = copyMarkdownFiles(config);\n for (const f of copied) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`raw-markdown: ${e.message}`);\n }\n }\n\n if (config.generators.manifest) {\n try {\n const content = genManifest(config);\n writeFileSync(join(outDir, 'docs.json'), content, 'utf-8');\n files.push('docs.json');\n } catch (e: any) {\n errors.push(`docs.json: ${e.message}`);\n }\n }\n\n if (config.generators.sitemap) {\n try {\n const content = genSitemap(config);\n writeFileSync(join(outDir, 'sitemap.xml'), content, 'utf-8');\n files.push('sitemap.xml');\n } catch (e: any) {\n errors.push(`sitemap.xml: ${e.message}`);\n }\n }\n\n if (config.generators.aiIndex) {\n try {\n const content = genAIIndex(config);\n writeFileSync(join(outDir, 'ai-index.json'), content, 'utf-8');\n files.push('ai-index.json');\n } catch (e: any) {\n errors.push(`ai-index.json: ${e.message}`);\n }\n }\n\n if (config.generators.schema && config.schema.enabled) {\n try {\n const content = genSchema(config);\n writeFileSync(join(outDir, 'schema.json'), content, 'utf-8');\n files.push('schema.json');\n } catch (e: any) {\n errors.push(`schema.json: ${e.message}`);\n }\n }\n\n return { files, errors };\n}\n","/**\n * Shared HTML-to-markdown extraction utilities.\n * Used by all framework plugins for content extraction from build output.\n */\n\n/**\n * Extract text content from HTML and convert to markdown.\n * Removes scripts, styles, SVGs, and boilerplate (nav, header, footer).\n * Prefers <main> content when available.\n */\nexport function extractTextFromHtml(html: string): string {\n let text = html;\n // Remove scripts, styles, SVGs\n text = text.replace(/<script[\\s\\S]*?<\\/script>/gi, '');\n text = text.replace(/<style[\\s\\S]*?<\\/style>/gi, '');\n text = text.replace(/<svg[\\s\\S]*?<\\/svg>/gi, '');\n // Extract from <main> if available, otherwise strip boilerplate\n const mainMatch = text.match(/<main[^>]*>([\\s\\S]*)<\\/main>/i);\n if (mainMatch) {\n text = mainMatch[1];\n } else {\n text = text.replace(/<nav[\\s\\S]*?<\\/nav>/gi, '');\n text = text.replace(/<header[\\s\\S]*?<\\/header>/gi, '');\n text = text.replace(/<footer[\\s\\S]*?<\\/footer>/gi, '');\n }\n // Handle links wrapping block elements: flatten to inline link\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, (_, url, inner) => {\n if (/<(?:h[1-6]|div|p|section)[^>]*>/i.test(inner)) {\n const cleanInner = inner.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return `\\n[${cleanInner.slice(0, 120).trim()}](${url})\\n`;\n }\n return `[${inner}](${url})`;\n });\n // Convert headings (h1 -> ## since # is the page title)\n text = text.replace(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h2[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h3[^>]*>([\\s\\S]*?)<\\/h3>/gi, '\\n\\n### $1\\n\\n');\n text = text.replace(/<h4[^>]*>([\\s\\S]*?)<\\/h4>/gi, '\\n\\n#### $1\\n\\n');\n text = text.replace(/<h5[^>]*>([\\s\\S]*?)<\\/h5>/gi, '\\n\\n##### $1\\n\\n');\n text = text.replace(/<h6[^>]*>([\\s\\S]*?)<\\/h6>/gi, '\\n\\n###### $1\\n\\n');\n // Convert remaining inline links\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, '[$2]($1)');\n // Convert bold and italic\n text = text.replace(/<(?:strong|b)[^>]*>([\\s\\S]*?)<\\/(?:strong|b)>/gi, '**$1**');\n text = text.replace(/<(?:em|i)[^>]*>([\\s\\S]*?)<\\/(?:em|i)>/gi, '*$1*');\n // Convert list items\n text = text.replace(/<li[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n // Convert blockquotes\n text = text.replace(/<blockquote[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, '\\n\\n> $1\\n\\n');\n // Convert hr and br\n text = text.replace(/<hr[^>]*\\/?>/gi, '\\n\\n---\\n\\n');\n text = text.replace(/<br[^>]*\\/?>/gi, '\\n');\n // Convert paragraphs\n text = text.replace(/<\\/p>/gi, '\\n\\n');\n text = text.replace(/<p[^>]*>/gi, '');\n // Other block elements as newlines\n text = text.replace(/<\\/?(?:div|section|article|header|main|aside|figure|figcaption|table|thead|tbody|tr|td|th|ul|ol|dl|dt|dd)[^>]*>/gi, '\\n');\n // Remove all remaining HTML tags\n text = text.replace(/<[^>]+>/g, '');\n // Decode HTML entities\n text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '\"').replace(/&#39;/g, \"'\").replace(/&nbsp;/g, ' ').replace(/&copy;/g, '(c)');\n // Strip emojis (including flags)\n text = text.replace(/[\\u{1F1E0}-\\u{1FAFF}\\u{2600}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}]/gu, '');\n // Clean up lines\n text = text.split('\\n').map(l => l.replace(/\\s+/g, ' ').trim()).join('\\n');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n // Clean whitespace inside markdown syntax\n text = text.replace(/\\[[\\s\\n]+/g, '[').replace(/[\\s\\n]+\\]/g, ']');\n text = text.replace(/(#{2,6})\\s*\\n+\\s*/g, '$1 ');\n // Remove empty headings\n text = text.replace(/^#{2,6}\\s*$/gm, '');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n return text.trim().slice(0, 8000);\n}\n\n/**\n * Extract title from HTML <title> tag. Splits on | and takes the first part.\n */\nexport function extractTitle(html: string): string | undefined {\n const match = html.match(/<title>([^<]*)<\\/title>/i);\n if (!match) return undefined;\n return match[1]?.split('|')[0]?.trim() || match[1];\n}\n\n/**\n * Extract description from HTML <meta name=\"description\"> tag.\n */\nexport function extractDescription(html: string): string | undefined {\n const match = html.match(/<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i);\n return match?.[1];\n}\n\n/**\n * Extract existing JSON-LD structured data from HTML.\n */\nexport function extractJsonLd(html: string): object[] {\n const schemas: object[] = [];\n const regex = /<script\\s+type=[\"']application\\/ld\\+json[\"'][^>]*>([\\s\\S]*?)<\\/script>/gi;\n let match;\n while ((match = regex.exec(html)) !== null) {\n try {\n const parsed = JSON.parse(match[1]);\n schemas.push(parsed);\n } catch { /* skip invalid JSON-LD */ }\n }\n return schemas;\n}\n\n/**\n * Convert HTML page to a complete markdown document with YAML frontmatter.\n */\nexport function htmlToMarkdown(html: string, pagePath: string, config: { url: string }): string {\n const rawTitle = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n const pageUrl = pagePath === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${pagePath}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (rawTitle) lines.push(`title: \"${rawTitle}\"`);\n if (description) lines.push(`description: \"${description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (rawTitle) lines.push(`# ${rawTitle}`, '');\n if (description) lines.push(`${description}`, '');\n\n if (textContent) lines.push(textContent);\n\n return lines.join('\\n');\n}\n","import { generateAEOFiles } from '../core/generate';\nimport { resolveConfig } from '../core/utils';\nimport type { AeoConfig, PageEntry } from '../types';\nimport { extractTextFromHtml, extractTitle, extractDescription } from '../core/html-extract';\nimport { join } from 'path';\nimport { existsSync, readdirSync, readFileSync, statSync } from 'fs';\n\n/**\n * Scan Angular route components from app/ directory.\n * Looks for standalone components that represent pages (files matching *.component.ts\n * inside folders that follow Angular routing conventions).\n */\nfunction scanAngularRoutes(projectRoot: string): PageEntry[] {\n const pages: PageEntry[] = [];\n const srcDir = join(projectRoot, 'src', 'app');\n if (!existsSync(srcDir)) {\n // Always include root even when no source directory found\n pages.push({ pathname: '/' });\n return pages;\n }\n\n function walk(dir: string, basePath: string = ''): void {\n try {\n const entries = readdirSync(dir);\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.') && !entry.startsWith('_') && entry !== 'node_modules') {\n walk(fullPath, `${basePath}/${entry}`);\n }\n }\n\n // Check for route config files that define paths\n for (const entry of entries) {\n if (entry.match(/\\.routes\\.ts$/)) {\n try {\n const content = readFileSync(join(dir, entry), 'utf-8');\n // Extract path values from route configs: { path: 'about', ... }\n const pathMatches = content.matchAll(/path:\\s*['\"]([^'\"]*)['\"]/g);\n for (const match of pathMatches) {\n const routePath = match[1];\n if (routePath === '**' || routePath.startsWith(':')) continue;\n const pathname = routePath === '' ? '/' : `${basePath}/${routePath}`.replace(/\\/+/g, '/');\n const name = routePath || 'home';\n if (!pages.some(p => p.pathname === pathname)) {\n pages.push({\n pathname,\n title: name === 'home' ? undefined : name.charAt(0).toUpperCase() + name.slice(1).replace(/-/g, ' '),\n });\n }\n }\n } catch { /* skip */ }\n }\n }\n\n // Fallback: infer routes from component directories with component files\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.')) {\n const componentFile = readdirSync(fullPath).find(f => f.match(/\\.component\\.ts$/));\n if (componentFile && entry !== 'app' && entry !== 'shared' && entry !== 'core' && entry !== 'components' && entry !== 'services' && entry !== 'models' && entry !== 'guards' && entry !== 'interceptors' && entry !== 'pipes' && entry !== 'directives') {\n const pathname = `${basePath}/${entry}`.replace(/\\/+/g, '/');\n if (!pages.some(p => p.pathname === pathname)) {\n pages.push({\n pathname,\n title: entry.charAt(0).toUpperCase() + entry.slice(1).replace(/-/g, ' '),\n });\n }\n }\n }\n }\n } catch { /* skip */ }\n }\n\n walk(srcDir);\n\n // Always include root\n if (!pages.some(p => p.pathname === '/')) {\n pages.unshift({ pathname: '/' });\n }\n\n return pages;\n}\n\n/**\n * Detect Angular output directory by reading angular.json.\n * Angular v17+ outputs to dist/<project>/browser/, older versions to dist/<project>/.\n */\nfunction detectAngularOutputDir(projectRoot: string): string {\n const angularJsonPath = join(projectRoot, 'angular.json');\n if (!existsSync(angularJsonPath)) return join(projectRoot, 'dist');\n\n try {\n const angularJson = JSON.parse(readFileSync(angularJsonPath, 'utf-8'));\n const defaultProject = angularJson.defaultProject || Object.keys(angularJson.projects || {})[0];\n if (!defaultProject) return join(projectRoot, 'dist');\n\n const project = angularJson.projects[defaultProject];\n const buildTarget = project?.architect?.build || project?.targets?.build;\n\n // Check outputPath from build options\n if (buildTarget?.options?.outputPath) {\n const outputPath = buildTarget.options.outputPath;\n // Angular v17+ uses object form: { base: \"dist/my-app\" }\n if (typeof outputPath === 'object' && outputPath.base) {\n return join(projectRoot, outputPath.base, 'browser');\n }\n return join(projectRoot, outputPath);\n }\n\n return join(projectRoot, 'dist', defaultProject);\n } catch {\n return join(projectRoot, 'dist');\n }\n}\n\n/**\n * Scan Angular build output for pre-rendered HTML pages.\n */\nfunction scanAngularBuildOutput(outputDir: string): PageEntry[] {\n const pages: PageEntry[] = [];\n if (!existsSync(outputDir)) return pages;\n\n function walk(dir: string, basePath: string = ''): void {\n try {\n const entries = readdirSync(dir);\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'assets' && entry !== 'media') {\n walk(fullPath, `${basePath}/${entry}`);\n } else if (entry.endsWith('.html') && entry !== '404.html' && entry !== '500.html') {\n try {\n const html = readFileSync(fullPath, 'utf-8');\n const title = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n let pathname: string;\n if (entry === 'index.html') {\n pathname = basePath || '/';\n } else {\n pathname = `${basePath}/${entry.replace('.html', '')}`;\n }\n\n pages.push({\n pathname,\n title,\n description,\n content: textContent,\n });\n } catch { /* skip */ }\n }\n }\n } catch { /* skip */ }\n }\n\n walk(outputDir);\n return pages;\n}\n\n/**\n * Generate a widget script tag to inject into Angular's index.html.\n * Returns HTML string to add before </body>.\n */\nexport function getWidgetScript(config: AeoConfig = {}): string {\n const resolvedConfig = resolveConfig(config);\n if (!resolvedConfig.widget.enabled) return '';\n\n const widgetConfig = JSON.stringify({\n title: resolvedConfig.title,\n description: resolvedConfig.description,\n url: resolvedConfig.url,\n widget: resolvedConfig.widget,\n });\n\n return `<script type=\"module\">\nimport('aeo.js/widget').then(({ AeoWidget }) => {\n try {\n new AeoWidget({ config: ${widgetConfig} });\n } catch (e) {\n console.warn('[aeo.js] Widget initialization failed:', e);\n }\n}).catch(() => {});\n</script>`;\n}\n\n/**\n * Post-build function for Angular projects.\n * Scans the Angular build output directory for pre-rendered HTML,\n * generates AEO files alongside the build output, and optionally\n * injects the widget into index.html.\n *\n * Usage in package.json:\n * \"postbuild\": \"node -e \\\"import('aeo.js/angular').then(m => m.postBuild({ title: 'My App', url: 'https://mysite.com' }))\\\"\"\n *\n * Or with Angular SSR prerender:\n * \"postbuild\": \"node -e \\\"import('aeo.js/angular').then(m => m.postBuild({ title: 'My App', url: 'https://mysite.com', injectWidget: true }))\\\"\"\n */\nexport async function postBuild(config: AeoConfig & { injectWidget?: boolean } = {}): Promise<void> {\n const projectRoot = process.cwd();\n const outputDir = config.outDir || detectAngularOutputDir(projectRoot);\n\n console.log(`[aeo.js] Scanning Angular build output: ${outputDir}`);\n\n // Discover pages from build output HTML\n const buildPages = scanAngularBuildOutput(outputDir);\n if (buildPages.length > 0) {\n console.log(`[aeo.js] Discovered ${buildPages.length} pages from Angular build output`);\n }\n\n // Discover routes from source\n const sourcePages = scanAngularRoutes(projectRoot);\n\n // Merge: build output (with content) takes priority over source-scanned routes\n const allPages = [...buildPages, ...sourcePages, ...(config.pages || [])];\n const pageMap = new Map<string, PageEntry>();\n for (const page of allPages) {\n const existing = pageMap.get(page.pathname);\n if (!existing || (page.content && !existing.content)) {\n pageMap.set(page.pathname, page);\n }\n }\n\n // Apply defaults\n for (const page of pageMap.values()) {\n if (page.pathname === '/' && !page.title && config.title) {\n page.title = config.title;\n }\n if (!page.description && config.description) {\n page.description = config.description;\n }\n }\n\n const resolvedConfig = resolveConfig({\n ...config,\n outDir: outputDir,\n pages: Array.from(pageMap.values()),\n });\n\n const result = await generateAEOFiles(resolvedConfig);\n if (result.files.length > 0) {\n console.log(`[aeo.js] Generated ${result.files.length} files`);\n }\n if (result.errors.length > 0) {\n console.error('[aeo.js] Errors:', result.errors);\n }\n\n // Optionally inject widget into index.html\n if (config.injectWidget !== false && resolvedConfig.widget.enabled) {\n const indexPath = join(outputDir, 'index.html');\n if (existsSync(indexPath)) {\n try {\n let html = readFileSync(indexPath, 'utf-8');\n if (!html.includes('aeo.js/widget')) {\n const script = getWidgetScript(config);\n html = html.replace('</body>', `${script}\\n</body>`);\n const { writeFileSync } = await import('fs');\n writeFileSync(indexPath, html, 'utf-8');\n console.log('[aeo.js] Injected widget into index.html');\n }\n } catch (error) {\n console.warn('[aeo.js] Could not inject widget into index.html:', error);\n }\n }\n }\n}\n\n/**\n * Generate AEO files for Angular from source routes only (no build output).\n * Useful for dev/CI environments where build output isn't available.\n */\nexport async function generate(config: AeoConfig = {}): Promise<void> {\n const projectRoot = process.cwd();\n const discoveredPages = scanAngularRoutes(projectRoot);\n\n if (discoveredPages.length > 0) {\n console.log(`[aeo.js] Discovered ${discoveredPages.length} routes from Angular source`);\n }\n\n for (const page of discoveredPages) {\n if (page.pathname === '/' && !page.title && config.title) {\n page.title = config.title;\n }\n if (!page.description && config.description) {\n page.description = config.description;\n }\n }\n\n const resolvedConfig = resolveConfig({\n ...config,\n outDir: config.outDir || 'public',\n pages: [...(config.pages || []), ...discoveredPages],\n });\n\n const result = await generateAEOFiles(resolvedConfig);\n if (result.files.length > 0) {\n console.log(`[aeo.js] Generated ${result.files.length} files`);\n }\n if (result.errors.length > 0) {\n console.error('[aeo.js] Errors:', result.errors);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/robots.ts","../src/core/detect.ts","../src/core/utils.ts","../src/core/llms-txt.ts","../src/core/llms-full.ts","../src/core/raw-markdown.ts","../src/core/manifest.ts","../src/core/sitemap.ts","../src/core/ai-index.ts","../src/core/schema.ts","../src/core/generate-wrapper.ts","../src/core/html-extract.ts","../src/plugins/angular.ts"],"names":["join","existsSync","readFileSync","readdirSync","statSync","extname","relative","mkdirSync","dirname","copyFileSync","writeFileSync","createHash","index","extractTitle"],"mappings":"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","file":"angular.js","sourcesContent":["import type { ResolvedAeoConfig } from '../types';\n\nconst AI_CRAWLERS = [\n 'GPTBot',\n 'OAI-SearchBot',\n 'ChatGPT-User',\n 'ClaudeBot',\n 'Claude-Web',\n 'anthropic-ai',\n 'PerplexityBot',\n 'Google-Extended',\n 'Gemini-Deep-Research',\n 'Bingbot',\n 'FacebookBot',\n 'meta-externalagent',\n 'Amazonbot',\n 'Applebot',\n 'DeepSeekBot',\n 'Bytespider',\n 'cohere-ai',\n 'CCBot',\n 'DiffBot',\n 'YouBot',\n 'FirecrawlAgent',\n 'Crawl4AI',\n 'BraveBot',\n 'SemrushBot',\n 'AhrefsBot',\n 'MJ12bot',\n 'DotBot',\n 'DataForSeoBot',\n 'Screaming Frog SEO Spider',\n 'SEOkicks',\n 'SEMrushBot',\n 'BLEXBot',\n 'Yandex',\n 'Baiduspider',\n 'Sogou',\n 'Exabot',\n 'facebookexternalhit',\n 'LinkedInBot',\n 'WhatsApp',\n 'Slackbot',\n 'TwitterBot',\n 'TelegramBot',\n 'Discordbot',\n 'PinterestBot',\n 'TumblrBot',\n 'ViberBot',\n 'SkypeUriPreview',\n 'redditbot',\n 'Snapchat',\n 'TikTok',\n];\n\nexport function generateRobotsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n '# robots.txt generated by aeo.js',\n '# Allow AI crawlers to index this site',\n '',\n '# Traditional search engines',\n 'User-agent: Googlebot',\n 'Allow: /',\n '',\n 'User-agent: Bingbot',\n 'Allow: /',\n '',\n '# AI crawlers and answer engines',\n ];\n \n for (const crawler of AI_CRAWLERS) {\n lines.push(`User-agent: ${crawler}`);\n lines.push('Allow: /');\n lines.push('');\n }\n \n lines.push('# Default for all other bots');\n lines.push('User-agent: *');\n lines.push('Allow: /');\n lines.push('');\n \n if (config.url) {\n lines.push(`Sitemap: ${config.url}/sitemap.xml`);\n }\n \n lines.push('');\n lines.push('# AEO (Answer Engine Optimization) files');\n lines.push('# These help LLMs understand your content better');\n lines.push(`# ${config.url}/llms.txt`);\n lines.push(`# ${config.url}/llms-full.txt`);\n lines.push(`# ${config.url}/docs.json`);\n lines.push(`# ${config.url}/ai-index.json`);\n \n return lines.join('\\n');\n}","import type { FrameworkType, FrameworkInfo } from '../types';\nimport { readPackageJson } from './utils';\n\nexport function detectFramework(projectRoot: string = process.cwd()): FrameworkInfo {\n const packageJson = readPackageJson(projectRoot);\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n \n if (dependencies['next']) {\n return {\n framework: 'next',\n contentDir: 'app',\n outDir: 'out',\n };\n }\n \n if (dependencies['nuxt'] || dependencies['@nuxt/kit']) {\n return {\n framework: 'nuxt',\n contentDir: 'content',\n outDir: '.output/public',\n };\n }\n \n if (dependencies['astro'] || dependencies['@astrojs/astro']) {\n return {\n framework: 'astro',\n contentDir: 'src/content',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@remix-run/dev']) {\n return {\n framework: 'remix',\n contentDir: 'app',\n outDir: 'build/client',\n };\n }\n \n if (dependencies['@sveltejs/kit']) {\n return {\n framework: 'sveltekit',\n contentDir: 'src',\n outDir: 'build',\n };\n }\n \n if (dependencies['@angular/core']) {\n return {\n framework: 'angular',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n if (dependencies['@docusaurus/core']) {\n return {\n framework: 'docusaurus',\n contentDir: 'docs',\n outDir: 'build',\n };\n }\n \n if (dependencies['vite']) {\n return {\n framework: 'vite',\n contentDir: 'src',\n outDir: 'dist',\n };\n }\n \n return {\n framework: 'unknown',\n contentDir: 'src',\n outDir: 'dist',\n };\n}","import { readFileSync, existsSync, readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { detectFramework } from './detect';\nimport { minimatch } from 'minimatch';\n\nexport function validateConfig(config: AeoConfig): string[] {\n const warnings: string[] = [];\n\n if (config.url && !/^https?:\\/\\//.test(config.url)) {\n warnings.push(`url \"${config.url}\" should start with http:// or https://`);\n }\n\n if (config.url === 'https://example.com') {\n warnings.push('url is set to the default \"https://example.com\" — set your actual site URL');\n }\n\n if (!config.title) {\n warnings.push('title is not set — your generated files will use \"My Site\"');\n }\n\n if (config.robots?.crawlDelay && config.robots.crawlDelay < 0) {\n warnings.push('robots.crawlDelay should be a positive number');\n }\n\n return warnings;\n}\n\nexport function resolveConfig(config: AeoConfig = {}): ResolvedAeoConfig {\n const frameworkInfo = detectFramework();\n\n return {\n title: config.title || 'My Site',\n description: config.description || '',\n url: config.url || 'https://example.com',\n contentDir: config.contentDir || frameworkInfo.contentDir,\n outDir: config.outDir || frameworkInfo.outDir,\n pages: config.pages || [],\n generators: {\n robotsTxt: config.generators?.robotsTxt !== false,\n llmsTxt: config.generators?.llmsTxt !== false,\n llmsFullTxt: config.generators?.llmsFullTxt !== false,\n rawMarkdown: config.generators?.rawMarkdown !== false,\n manifest: config.generators?.manifest !== false,\n sitemap: config.generators?.sitemap !== false,\n aiIndex: config.generators?.aiIndex !== false,\n schema: config.generators?.schema !== false,\n },\n robots: {\n allow: config.robots?.allow || ['/'],\n disallow: config.robots?.disallow || [],\n crawlDelay: config.robots?.crawlDelay || 0,\n sitemap: config.robots?.sitemap || '',\n },\n schema: {\n enabled: config.schema?.enabled !== false,\n organization: {\n name: config.schema?.organization?.name || config.title || 'My Site',\n url: config.schema?.organization?.url || config.url || 'https://example.com',\n logo: config.schema?.organization?.logo || '',\n sameAs: config.schema?.organization?.sameAs || [],\n },\n defaultType: config.schema?.defaultType || 'WebPage',\n },\n og: {\n enabled: config.og?.enabled !== false,\n image: config.og?.image || '',\n twitterHandle: config.og?.twitterHandle || '',\n type: config.og?.type || 'website',\n },\n widget: {\n enabled: config.widget?.enabled !== false,\n position: config.widget?.position || 'bottom-right',\n theme: {\n background: config.widget?.theme?.background || 'rgba(18, 18, 24, 0.9)',\n text: config.widget?.theme?.text || '#C0C0C5',\n accent: config.widget?.theme?.accent || '#E8E8EA',\n badge: config.widget?.theme?.badge || '#4ADE80',\n },\n humanLabel: config.widget?.humanLabel || 'Human',\n aiLabel: config.widget?.aiLabel || 'AI',\n showBadge: config.widget?.showBadge !== false,\n },\n };\n}\n\nexport function parseFrontmatter(content: string): { frontmatter: Record<string, any>; content: string } {\n const frontmatterMatch = content.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n([\\s\\S]*)/);\n \n if (frontmatterMatch) {\n const frontmatterStr = frontmatterMatch[1];\n const contentWithoutFrontmatter = frontmatterMatch[2];\n \n const frontmatter: Record<string, any> = {};\n const lines = frontmatterStr.split('\\n');\n \n for (const line of lines) {\n const [key, ...valueParts] = line.split(':');\n if (key && valueParts.length > 0) {\n const value = valueParts.join(':').trim();\n frontmatter[key.trim()] = value.replace(/^[\"']|[\"']$/g, '');\n }\n }\n \n return { frontmatter, content: contentWithoutFrontmatter };\n }\n \n return { frontmatter: {}, content };\n}\n\nexport function bumpHeadings(content: string, levels: number = 1): string {\n return content.replace(/^(#{1,6})\\s/gm, (match, hashes) => {\n const newLevel = Math.min(hashes.length + levels, 6);\n return '#'.repeat(newLevel) + ' ';\n });\n}\n\nexport function extractTitle(content: string): string {\n const h1Match = content.match(/^#\\s+(.+)$/m);\n if (h1Match) return h1Match[1];\n \n const h2Match = content.match(/^##\\s+(.+)$/m);\n if (h2Match) return h2Match[1];\n \n const firstLine = content.split('\\n')[0];\n return firstLine.slice(0, 100);\n}\n\nexport function readPackageJson(projectRoot: string = process.cwd()): Record<string, any> {\n const packageJsonPath = join(projectRoot, 'package.json');\n \n if (!existsSync(packageJsonPath)) {\n return {};\n }\n \n try {\n const content = readFileSync(packageJsonPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return {};\n }\n}\n\nexport function getAllMarkdownFiles(\n projectRoot: string,\n include: string[] = ['**/*.md'],\n exclude: string[] = ['**/node_modules/**']\n): string[] {\n const files: string[] = [];\n \n function scanDirectory(dir: string): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const relativePath = relative(projectRoot, fullPath);\n \n // Check if path should be excluded\n const shouldExclude = exclude.some(pattern => \n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldExclude) {\n continue;\n }\n \n const stat = statSync(fullPath);\n \n if (stat.isDirectory()) {\n // Skip hidden directories\n if (!entry.startsWith('.')) {\n scanDirectory(fullPath);\n }\n } else if (stat.isFile()) {\n // Check if file matches include patterns\n const shouldInclude = include.some(pattern =>\n minimatch(relativePath, pattern) || minimatch(fullPath, pattern)\n );\n \n if (shouldInclude) {\n files.push(fullPath);\n }\n }\n }\n } catch (error) {\n // Silently skip directories we can't read\n }\n }\n \n scanDirectory(projectRoot);\n return files;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, MarkdownFile } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectMarkdownFiles(dir: string, base: string = dir): MarkdownFile[] {\n const files: MarkdownFile[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n files.push(...collectMarkdownFiles(fullPath, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n files.push({\n path: relativePath,\n content: mainContent,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n frontmatter,\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return files;\n}\n\nexport function generateLlmsTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title}`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## About');\n lines.push('');\n lines.push('This file provides a structured overview of the documentation and content available on this site,');\n lines.push('optimized for consumption by Large Language Models (LLMs) and AI assistants.');\n lines.push('');\n \n // List discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n lines.push('## Pages');\n lines.push('');\n\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n lines.push(`- [${title}](${url})`);\n if (page.description) {\n lines.push(` ${page.description}`);\n }\n }\n lines.push('');\n }\n\n // List markdown content files\n const markdownFiles = collectMarkdownFiles(config.contentDir);\n\n if (markdownFiles.length > 0) {\n lines.push('## Documentation');\n lines.push('');\n\n const grouped: Record<string, MarkdownFile[]> = {};\n\n for (const file of markdownFiles) {\n const dir = file.path.split('/')[0] || 'root';\n if (!grouped[dir]) grouped[dir] = [];\n grouped[dir].push(file);\n }\n\n for (const [dir, files] of Object.entries(grouped)) {\n lines.push(`### ${dir === 'root' ? 'Main Documentation' : dir}`);\n lines.push('');\n\n for (const file of files) {\n const url = `${config.url}/${file.path.replace(/\\.mdx?$/, '')}`;\n lines.push(`- [${file.title}](${url})`);\n if (file.description) {\n lines.push(` ${file.description}`);\n }\n }\n lines.push('');\n }\n }\n \n lines.push('## Quick Links');\n lines.push('');\n lines.push(`- Full Documentation: ${config.url}/llms-full.txt`);\n lines.push(`- Documentation Manifest: ${config.url}/docs.json`);\n lines.push(`- AI-Optimized Index: ${config.url}/ai-index.json`);\n lines.push(`- Sitemap: ${config.url}/sitemap.xml`);\n lines.push('');\n \n lines.push('## For LLMs');\n lines.push('');\n lines.push('To get the complete documentation in a single file, request:');\n lines.push(`${config.url}/llms-full.txt`);\n lines.push('');\n lines.push('For structured access to individual pages with metadata:');\n lines.push(`${config.url}/docs.json`);\n lines.push('');\n lines.push('For RAG (Retrieval Augmented Generation) systems:');\n lines.push(`${config.url}/ai-index.json`);\n lines.push('');\n \n lines.push('---');\n lines.push('Generated by aeo.js - Answer Engine Optimization for the modern web');\n lines.push('Learn more at https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\nimport { parseFrontmatter, bumpHeadings } from './utils';\n\nfunction collectAndConcatenateMarkdown(dir: string, base: string = dir): string[] {\n const sections: string[] = [];\n \n try {\n const entries = readdirSync(dir).sort();\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n const subSections = collectAndConcatenateMarkdown(fullPath, base);\n if (subSections.length > 0) {\n sections.push(...subSections);\n }\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n \n const sectionLines: string[] = [\n '---',\n '',\n `# ${frontmatter.title || relativePath}`,\n '',\n `Source: ${relativePath}`,\n '',\n ];\n \n if (frontmatter.description) {\n sectionLines.push(`> ${frontmatter.description}`);\n sectionLines.push('');\n }\n \n const bumpedContent = bumpHeadings(mainContent, 1);\n sectionLines.push(bumpedContent);\n sectionLines.push('');\n \n sections.push(sectionLines.join('\\n'));\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return sections;\n}\n\nexport function generateLlmsFull(config: ResolvedAeoConfig): string {\n return generateLlmsFullTxt(config);\n}\n\nexport function generateLlmsFullTxt(config: ResolvedAeoConfig): string {\n const lines: string[] = [\n `# ${config.title} - Complete Documentation`,\n '',\n `This file contains all documentation concatenated into a single file for easy consumption by LLMs.`,\n '',\n ];\n \n if (config.description) {\n lines.push(`> ${config.description}`);\n lines.push('');\n }\n \n lines.push('## Table of Contents');\n lines.push('');\n lines.push('This document includes all content from this project.');\n lines.push('Each section is separated by a horizontal rule (---) for easy parsing.');\n lines.push('');\n\n let hasContent = false;\n\n // Include discovered pages (from framework plugin)\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const sectionLines: string[] = [\n '---',\n '',\n `# ${title}`,\n '',\n `URL: ${url}`,\n '',\n ];\n if (page.description) {\n sectionLines.push(`> ${page.description}`);\n sectionLines.push('');\n }\n if (page.content) {\n sectionLines.push(page.content);\n sectionLines.push('');\n }\n lines.push(sectionLines.join('\\n'));\n hasContent = true;\n }\n }\n\n // Include markdown content files\n const sections = collectAndConcatenateMarkdown(config.contentDir);\n\n if (sections.length > 0) {\n lines.push(...sections);\n hasContent = true;\n }\n\n if (!hasContent) {\n // Always include site overview so LLMs have basic context\n lines.push('---');\n lines.push('');\n lines.push(`# ${config.title}`);\n lines.push('');\n lines.push(`URL: ${config.url}`);\n lines.push('');\n if (config.description) {\n lines.push(config.description);\n lines.push('');\n }\n }\n \n lines.push('---');\n lines.push('');\n lines.push('## About This Document');\n lines.push('');\n lines.push('This concatenated documentation file is generated automatically by aeo.js');\n lines.push('to make it easier for AI systems to understand the complete context of this project.');\n lines.push('');\n lines.push(`For a structured index, see: ${config.url}/llms.txt`);\n lines.push(`For individual files, see: ${config.url}/docs.json`);\n lines.push('');\n lines.push('Generated by aeo.js - https://aeojs.org');\n \n return lines.join('\\n');\n}","import { readdirSync, statSync, mkdirSync, writeFileSync, copyFileSync } from 'fs';\nimport { join, relative, extname, dirname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nexport interface CopiedFile {\n source: string;\n destination: string;\n}\n\nexport interface GeneratedMarkdownFile {\n pathname: string;\n destination: string;\n}\n\nfunction ensureDir(path: string): void {\n mkdirSync(path, { recursive: true });\n}\n\nexport function copyRawMarkdown(config: ResolvedAeoConfig): CopiedFile[] {\n return copyMarkdownFiles(config);\n}\n\nexport function copyMarkdownFiles(config: ResolvedAeoConfig): CopiedFile[] {\n const copiedFiles: CopiedFile[] = [];\n \n function copyRecursive(dir: string, base: string = config.contentDir): void {\n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n copyRecursive(fullPath, base);\n } else if (stat.isFile() && extname(entry) === '.md') {\n const relativePath = relative(base, fullPath);\n const destPath = join(config.outDir, relativePath);\n \n ensureDir(dirname(destPath));\n \n try {\n copyFileSync(fullPath, destPath);\n copiedFiles.push({\n source: fullPath,\n destination: destPath,\n });\n } catch (error) {\n console.warn(`Warning: Could not copy ${fullPath}:`, error);\n }\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n }\n \n copyRecursive(config.contentDir);\n return copiedFiles;\n}\n\nexport function generatePageMarkdownFiles(config: ResolvedAeoConfig): GeneratedMarkdownFile[] {\n const generated: GeneratedMarkdownFile[] = [];\n const pages = config.pages || [];\n\n for (const page of pages) {\n // Only generate .md files for pages that have actual content.\n // Pages discovered from filenames (dev mode) only have pathname/title\n // but no body content — those are useless as standalone markdown files.\n if (!page.content) continue;\n\n const pageTitle = page.title || (page.pathname === '/' ? config.title : undefined);\n\n let filename: string;\n if (page.pathname === '/') {\n filename = 'index.md';\n } else {\n const clean = page.pathname.replace(/^\\//, '').replace(/\\/$/, '');\n filename = clean.includes('/') ? `${clean}.md` : `${clean}.md`;\n }\n\n const destPath = join(config.outDir, filename);\n\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (pageTitle) lines.push(`title: \"${pageTitle}\"`);\n if (page.description) lines.push(`description: \"${page.description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (pageTitle) {\n lines.push(`# ${pageTitle}`, '');\n }\n\n if (page.description) {\n lines.push(`${page.description}`, '');\n }\n\n if (page.content) {\n lines.push(page.content);\n }\n\n const content = lines.join('\\n');\n\n ensureDir(dirname(destPath));\n try {\n writeFileSync(destPath, content, 'utf-8');\n generated.push({ pathname: page.pathname, destination: destPath });\n } catch {\n // skip unwritable files\n }\n }\n\n return generated;\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig, ManifestEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction collectManifestEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): ManifestEntry[] {\n const entries: ManifestEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectManifestEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n \n entries.push({\n url: `${config.url}/${urlPath}`,\n title: frontmatter.title || extractTitle(mainContent),\n description: frontmatter.description,\n lastModified: stat.mtime.toISOString(),\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateManifest(config: ResolvedAeoConfig): string {\n const entries: ManifestEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n entries.push({\n url: `${config.url}${page.pathname === '/' ? '' : page.pathname}`,\n title: page.title || page.pathname,\n description: page.description,\n });\n }\n }\n\n // Add markdown content files\n entries.push(...collectManifestEntries(config.contentDir, config));\n \n const manifest = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n documents: entries.sort((a, b) => a.url.localeCompare(b.url)),\n metadata: {\n totalDocuments: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n },\n };\n \n return JSON.stringify(manifest, null, 2);\n}","import { readdirSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport type { ResolvedAeoConfig } from '../types';\n\nfunction collectUrls(dir: string, config: ResolvedAeoConfig, base: string = dir): string[] {\n const urls: string[] = [];\n \n try {\n const entries = readdirSync(dir);\n \n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules') {\n urls.push(...collectUrls(fullPath, config, base));\n } else if (stat.isFile() && (extname(entry) === '.md' || extname(entry) === '.mdx' || extname(entry) === '.html')) {\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.(md|mdx|html)$/, '');\n urls.push(`${config.url}/${urlPath}`);\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return urls;\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n}\n\nexport function generateSitemap(config: ResolvedAeoConfig): string {\n const urls: string[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n urls.push(`${config.url}${page.pathname === '/' ? '' : page.pathname}`);\n }\n }\n\n // Add markdown/html files from content dir\n if (config.contentDir) {\n urls.push(...collectUrls(config.contentDir, config));\n }\n\n const lines: string[] = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ];\n\n // Always include the site root\n urls.push(config.url);\n\n const uniqueUrls = [...new Set(urls)].sort();\n \n for (const url of uniqueUrls) {\n lines.push(' <url>');\n lines.push(` <loc>${escapeXml(url)}</loc>`);\n lines.push(` <lastmod>${new Date().toISOString().split('T')[0]}</lastmod>`);\n lines.push(' <changefreq>weekly</changefreq>');\n lines.push(' <priority>0.8</priority>');\n lines.push(' </url>');\n }\n \n lines.push('</urlset>');\n \n return lines.join('\\n');\n}","import { readdirSync, readFileSync, statSync } from 'fs';\nimport { join, relative, extname } from 'path';\nimport { createHash } from 'crypto';\nimport type { ResolvedAeoConfig, AIIndexEntry } from '../types';\nimport { parseFrontmatter, extractTitle } from './utils';\n\nfunction extractKeywords(content: string): string[] {\n const words = content\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, ' ')\n .split(/\\s+/)\n .filter(word => word.length > 3);\n \n const wordCount: Record<string, number> = {};\n \n for (const word of words) {\n wordCount[word] = (wordCount[word] || 0) + 1;\n }\n \n return Object.entries(wordCount)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([word]) => word);\n}\n\nfunction chunkContent(content: string, maxLength: number = 2000): string[] {\n const chunks: string[] = [];\n const paragraphs = content.split('\\n\\n');\n \n let currentChunk = '';\n \n for (const paragraph of paragraphs) {\n if (currentChunk.length + paragraph.length > maxLength && currentChunk.length > 0) {\n chunks.push(currentChunk.trim());\n currentChunk = '';\n }\n currentChunk += paragraph + '\\n\\n';\n }\n \n if (currentChunk.trim()) {\n chunks.push(currentChunk.trim());\n }\n \n return chunks;\n}\n\nfunction collectAIIndexEntries(dir: string, config: ResolvedAeoConfig, base: string = dir): AIIndexEntry[] {\n const entries: AIIndexEntry[] = [];\n \n try {\n const files = readdirSync(dir);\n \n for (const file of files) {\n const fullPath = join(dir, file);\n const stat = statSync(fullPath);\n \n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n entries.push(...collectAIIndexEntries(fullPath, config, base));\n } else if (stat.isFile() && (extname(file) === '.md' || extname(file) === '.mdx')) {\n const content = readFileSync(fullPath, 'utf-8');\n const { frontmatter, content: mainContent } = parseFrontmatter(content);\n const relativePath = relative(base, fullPath);\n const urlPath = relativePath.replace(/\\.mdx?$/, '');\n const url = `${config.url}/${urlPath}`;\n \n const chunks = chunkContent(mainContent);\n const title = frontmatter.title || extractTitle(mainContent);\n const keywords = extractKeywords(mainContent);\n \n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n \n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: frontmatter.description,\n keywords,\n metadata: {\n ...frontmatter,\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: relativePath,\n },\n });\n });\n }\n }\n } catch (error) {\n console.warn(`Warning: Could not read directory ${dir}:`, error);\n }\n \n return entries;\n}\n\nexport function generateAiIndex(config: ResolvedAeoConfig): string {\n return generateAIIndex(config);\n}\n\nexport function generateAIIndex(config: ResolvedAeoConfig): string {\n const entries: AIIndexEntry[] = [];\n\n // Add discovered pages from framework plugin\n if (config.pages && config.pages.length > 0) {\n for (const page of config.pages) {\n const url = `${config.url}${page.pathname === '/' ? '' : page.pathname}`;\n const title = page.title || page.pathname;\n const content = page.content || '';\n\n if (content) {\n const chunks = chunkContent(content);\n const keywords = extractKeywords(content);\n\n chunks.forEach((chunk, index) => {\n const id = createHash('sha256')\n .update(`${url}-${index}`)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title: chunks.length > 1 ? `${title} (Part ${index + 1})` : title,\n content: chunk,\n description: page.description,\n keywords,\n metadata: {\n chunkIndex: index,\n totalChunks: chunks.length,\n sourcePath: page.pathname,\n },\n });\n });\n } else {\n const id = createHash('sha256')\n .update(url)\n .digest('hex')\n .slice(0, 16);\n\n entries.push({\n id,\n url,\n title,\n content: page.description || title,\n description: page.description,\n keywords: [],\n });\n }\n }\n }\n\n // Add markdown content files\n entries.push(...collectAIIndexEntries(config.contentDir, config));\n \n const index = {\n version: '1.0',\n generated: new Date().toISOString(),\n site: {\n title: config.title,\n description: config.description,\n url: config.url,\n },\n entries: entries.sort((a, b) => a.id.localeCompare(b.id)),\n metadata: {\n totalEntries: entries.length,\n generator: 'aeo.js',\n generatorUrl: 'https://aeojs.org',\n embedding: {\n recommended: 'text-embedding-ada-002',\n dimensions: 1536,\n },\n },\n };\n \n return JSON.stringify(index, null, 2);\n}","import type { ResolvedAeoConfig, PageEntry } from '../types';\n\nexport interface SchemaOutput {\n site: object[];\n pages: Record<string, object[]>;\n}\n\n/**\n * Generate JSON-LD structured data for the entire site.\n * Returns site-level schemas (WebSite, Organization) and per-page schemas.\n */\nexport function generateSchema(config: ResolvedAeoConfig): string {\n const output = generateSchemaObjects(config);\n return JSON.stringify(output, null, 2);\n}\n\n/**\n * Generate schema objects without serialization (for injection into HTML).\n */\nexport function generateSchemaObjects(config: ResolvedAeoConfig): SchemaOutput {\n const siteSchemas = generateSiteSchemas(config);\n const pageSchemas: Record<string, object[]> = {};\n\n for (const page of config.pages) {\n const schemas = generatePageSchemas(page, config);\n if (schemas.length > 0) {\n pageSchemas[page.pathname] = schemas;\n }\n }\n\n return { site: siteSchemas, pages: pageSchemas };\n}\n\n/**\n * Generate site-level schemas: WebSite + Organization.\n */\nexport function generateSiteSchemas(config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n\n // WebSite schema\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'WebSite',\n name: config.title,\n description: config.description || undefined,\n url: config.url,\n });\n\n // Organization schema (if name or sameAs provided)\n const org = config.schema.organization;\n if (org.name || org.sameAs.length > 0) {\n const orgSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': 'Organization',\n name: org.name,\n url: org.url,\n };\n if (org.logo) orgSchema.logo = org.logo;\n if (org.sameAs.length > 0) orgSchema.sameAs = org.sameAs;\n schemas.push(orgSchema);\n }\n\n return schemas;\n}\n\n/**\n * Generate per-page schemas based on page content and config defaults.\n */\nexport function generatePageSchemas(page: PageEntry, config: ResolvedAeoConfig): object[] {\n const schemas: object[] = [];\n const pageUrl = page.pathname === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${page.pathname}`;\n\n // Detect FAQ patterns in content\n const faqItems = detectFaqPatterns(page.content || '');\n if (faqItems.length > 0) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqItems.map(({ question, answer }) => ({\n '@type': 'Question',\n name: question,\n acceptedAnswer: {\n '@type': 'Answer',\n text: answer,\n },\n })),\n });\n }\n\n // WebPage or Article schema\n const pageType = config.schema.defaultType;\n const pageSchema: Record<string, any> = {\n '@context': 'https://schema.org',\n '@type': pageType,\n name: page.title || config.title,\n url: pageUrl,\n };\n if (page.description) pageSchema.description = page.description;\n if (pageType === 'Article') {\n pageSchema.headline = page.title || config.title;\n pageSchema.author = {\n '@type': 'Organization',\n name: config.schema.organization.name,\n };\n }\n schemas.push(pageSchema);\n\n // BreadcrumbList for non-root pages\n if (page.pathname !== '/') {\n const breadcrumbs = generateBreadcrumbs(page.pathname, config);\n if (breadcrumbs.length > 1) {\n schemas.push({\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: breadcrumbs.map((crumb, i) => ({\n '@type': 'ListItem',\n position: i + 1,\n name: crumb.name,\n item: crumb.url,\n })),\n });\n }\n }\n\n return schemas;\n}\n\n/**\n * Generate breadcrumb items from a pathname.\n */\nfunction generateBreadcrumbs(pathname: string, config: ResolvedAeoConfig): { name: string; url: string }[] {\n const baseUrl = config.url.replace(/\\/$/, '');\n const parts = pathname.split('/').filter(Boolean);\n const crumbs: { name: string; url: string }[] = [\n { name: 'Home', url: baseUrl + '/' },\n ];\n\n let currentPath = '';\n for (const part of parts) {\n currentPath += '/' + part;\n crumbs.push({\n name: part.charAt(0).toUpperCase() + part.slice(1).replace(/-/g, ' '),\n url: baseUrl + currentPath,\n });\n }\n\n return crumbs;\n}\n\n/**\n * Detect FAQ-like patterns in markdown/text content.\n * Looks for: headings ending with \"?\" followed by paragraph text.\n */\nfunction detectFaqPatterns(content: string): { question: string; answer: string }[] {\n const items: { question: string; answer: string }[] = [];\n\n // Pattern: ## Question? \\n\\n Answer text\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const headingMatch = line.match(/^#{1,6}\\s+(.+\\?)\\s*$/);\n if (headingMatch) {\n // Collect answer: all non-empty, non-heading lines following\n const answerLines: string[] = [];\n for (let j = i + 1; j < lines.length; j++) {\n const nextLine = lines[j].trim();\n if (!nextLine) {\n if (answerLines.length > 0) break; // empty line after content = end\n continue; // skip leading empty lines\n }\n if (/^#{1,6}\\s/.test(nextLine)) break; // next heading = end\n answerLines.push(nextLine);\n }\n if (answerLines.length > 0) {\n items.push({\n question: headingMatch[1],\n answer: answerLines.join(' ').slice(0, 500),\n });\n }\n }\n }\n\n return items;\n}\n\n/**\n * Generate a JSON-LD script tag string for injection into HTML.\n */\nexport function generateJsonLdScript(schemas: object[]): string {\n if (schemas.length === 0) return '';\n if (schemas.length === 1) {\n return `<script type=\"application/ld+json\">${JSON.stringify(schemas[0])}</script>`;\n }\n return schemas\n .map(s => `<script type=\"application/ld+json\">${JSON.stringify(s)}</script>`)\n .join('\\n');\n}\n","import { generateRobotsTxt as genRobots } from './robots';\nimport { generateLlmsTxt as genLlms } from './llms-txt';\nimport { generateLlmsFullTxt as genLlmsFull } from './llms-full';\nimport { copyMarkdownFiles, generatePageMarkdownFiles } from './raw-markdown';\nimport { generateManifest as genManifest } from './manifest';\nimport { generateSitemap as genSitemap } from './sitemap';\nimport { generateAIIndex as genAIIndex } from './ai-index';\nimport { generateSchema as genSchema } from './schema';\nimport { resolveConfig } from './utils';\nimport { writeFileSync, mkdirSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport type { AeoConfig, ResolvedAeoConfig } from '../types';\n\nexport interface GenerateResult {\n files: string[];\n errors: string[];\n}\n\nexport async function generateAEOFiles(\n configOrRoot?: ResolvedAeoConfig | AeoConfig | string,\n maybeConfig?: Partial<AeoConfig>\n): Promise<GenerateResult> {\n let config: ResolvedAeoConfig;\n\n if (typeof configOrRoot === 'string') {\n config = resolveConfig({ ...maybeConfig, outDir: maybeConfig?.outDir || configOrRoot });\n } else if (\n configOrRoot &&\n typeof configOrRoot === 'object' &&\n 'generators' in configOrRoot &&\n typeof (configOrRoot as ResolvedAeoConfig).generators?.robotsTxt === 'boolean'\n ) {\n config = configOrRoot as ResolvedAeoConfig;\n } else {\n config = resolveConfig(configOrRoot as AeoConfig | undefined);\n }\n\n const outDir = config.outDir;\n const files: string[] = [];\n const errors: string[] = [];\n\n if (!existsSync(outDir)) {\n mkdirSync(outDir, { recursive: true });\n }\n\n if (config.generators.robotsTxt) {\n try {\n const content = genRobots(config);\n writeFileSync(join(outDir, 'robots.txt'), content, 'utf-8');\n files.push('robots.txt');\n } catch (e: any) {\n errors.push(`robots.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsTxt) {\n try {\n const content = genLlms(config);\n writeFileSync(join(outDir, 'llms.txt'), content, 'utf-8');\n files.push('llms.txt');\n } catch (e: any) {\n errors.push(`llms.txt: ${e.message}`);\n }\n }\n\n if (config.generators.llmsFullTxt) {\n try {\n const content = genLlmsFull(config);\n writeFileSync(join(outDir, 'llms-full.txt'), content, 'utf-8');\n files.push('llms-full.txt');\n } catch (e: any) {\n errors.push(`llms-full.txt: ${e.message}`);\n }\n }\n\n if (config.generators.rawMarkdown) {\n // Generate page .md files first (auto-extracted from build output)\n try {\n const generated = generatePageMarkdownFiles(config);\n for (const f of generated) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`page-markdown: ${e.message}`);\n }\n\n // Then copy handwritten .md from contentDir (these take priority, overwriting generated ones)\n try {\n const copied = copyMarkdownFiles(config);\n for (const f of copied) {\n files.push(f.destination);\n }\n } catch (e: any) {\n errors.push(`raw-markdown: ${e.message}`);\n }\n }\n\n if (config.generators.manifest) {\n try {\n const content = genManifest(config);\n writeFileSync(join(outDir, 'docs.json'), content, 'utf-8');\n files.push('docs.json');\n } catch (e: any) {\n errors.push(`docs.json: ${e.message}`);\n }\n }\n\n if (config.generators.sitemap) {\n try {\n const content = genSitemap(config);\n writeFileSync(join(outDir, 'sitemap.xml'), content, 'utf-8');\n files.push('sitemap.xml');\n } catch (e: any) {\n errors.push(`sitemap.xml: ${e.message}`);\n }\n }\n\n if (config.generators.aiIndex) {\n try {\n const content = genAIIndex(config);\n writeFileSync(join(outDir, 'ai-index.json'), content, 'utf-8');\n files.push('ai-index.json');\n } catch (e: any) {\n errors.push(`ai-index.json: ${e.message}`);\n }\n }\n\n if (config.generators.schema && config.schema.enabled) {\n try {\n const content = genSchema(config);\n writeFileSync(join(outDir, 'schema.json'), content, 'utf-8');\n files.push('schema.json');\n } catch (e: any) {\n errors.push(`schema.json: ${e.message}`);\n }\n }\n\n return { files, errors };\n}\n","/**\n * Shared HTML-to-markdown extraction utilities.\n * Used by all framework plugins for content extraction from build output.\n */\n\n/**\n * Extract text content from HTML and convert to markdown.\n * Removes scripts, styles, SVGs, and boilerplate (nav, header, footer).\n * Prefers <main> content when available.\n */\nexport function extractTextFromHtml(html: string): string {\n let text = html;\n // Remove scripts, styles, SVGs\n text = text.replace(/<script[\\s\\S]*?<\\/script>/gi, '');\n text = text.replace(/<style[\\s\\S]*?<\\/style>/gi, '');\n text = text.replace(/<svg[\\s\\S]*?<\\/svg>/gi, '');\n // Extract from <main> if available, otherwise strip boilerplate\n const mainMatch = text.match(/<main[^>]*>([\\s\\S]*)<\\/main>/i);\n if (mainMatch) {\n text = mainMatch[1];\n } else {\n text = text.replace(/<nav[\\s\\S]*?<\\/nav>/gi, '');\n text = text.replace(/<header[\\s\\S]*?<\\/header>/gi, '');\n text = text.replace(/<footer[\\s\\S]*?<\\/footer>/gi, '');\n }\n // Handle links wrapping block elements: flatten to inline link\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, (_, url, inner) => {\n if (/<(?:h[1-6]|div|p|section)[^>]*>/i.test(inner)) {\n const cleanInner = inner.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n return `\\n[${cleanInner.slice(0, 120).trim()}](${url})\\n`;\n }\n return `[${inner}](${url})`;\n });\n // Convert headings (h1 -> ## since # is the page title)\n text = text.replace(/<h1[^>]*>([\\s\\S]*?)<\\/h1>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h2[^>]*>([\\s\\S]*?)<\\/h2>/gi, '\\n\\n## $1\\n\\n');\n text = text.replace(/<h3[^>]*>([\\s\\S]*?)<\\/h3>/gi, '\\n\\n### $1\\n\\n');\n text = text.replace(/<h4[^>]*>([\\s\\S]*?)<\\/h4>/gi, '\\n\\n#### $1\\n\\n');\n text = text.replace(/<h5[^>]*>([\\s\\S]*?)<\\/h5>/gi, '\\n\\n##### $1\\n\\n');\n text = text.replace(/<h6[^>]*>([\\s\\S]*?)<\\/h6>/gi, '\\n\\n###### $1\\n\\n');\n // Convert remaining inline links\n text = text.replace(/<a[^>]+href=[\"']([^\"']*)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, '[$2]($1)');\n // Convert bold and italic\n text = text.replace(/<(?:strong|b)[^>]*>([\\s\\S]*?)<\\/(?:strong|b)>/gi, '**$1**');\n text = text.replace(/<(?:em|i)[^>]*>([\\s\\S]*?)<\\/(?:em|i)>/gi, '*$1*');\n // Convert list items\n text = text.replace(/<li[^>]*>([\\s\\S]*?)<\\/li>/gi, '\\n- $1');\n // Convert blockquotes\n text = text.replace(/<blockquote[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, '\\n\\n> $1\\n\\n');\n // Convert hr and br\n text = text.replace(/<hr[^>]*\\/?>/gi, '\\n\\n---\\n\\n');\n text = text.replace(/<br[^>]*\\/?>/gi, '\\n');\n // Convert paragraphs\n text = text.replace(/<\\/p>/gi, '\\n\\n');\n text = text.replace(/<p[^>]*>/gi, '');\n // Other block elements as newlines\n text = text.replace(/<\\/?(?:div|section|article|header|main|aside|figure|figcaption|table|thead|tbody|tr|td|th|ul|ol|dl|dt|dd)[^>]*>/gi, '\\n');\n // Remove all remaining HTML tags\n text = text.replace(/<[^>]+>/g, '');\n // Decode HTML entities\n text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '\"').replace(/&#39;/g, \"'\").replace(/&nbsp;/g, ' ').replace(/&copy;/g, '(c)');\n // Strip emojis (including flags)\n text = text.replace(/[\\u{1F1E0}-\\u{1FAFF}\\u{2600}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}]/gu, '');\n // Clean up lines\n text = text.split('\\n').map(l => l.replace(/\\s+/g, ' ').trim()).join('\\n');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n // Clean whitespace inside markdown syntax\n text = text.replace(/\\[[\\s\\n]+/g, '[').replace(/[\\s\\n]+\\]/g, ']');\n text = text.replace(/(#{2,6})\\s*\\n+\\s*/g, '$1 ');\n // Remove empty headings\n text = text.replace(/^#{2,6}\\s*$/gm, '');\n text = text.replace(/\\n{3,}/g, '\\n\\n');\n return text.trim().slice(0, 8000);\n}\n\n/**\n * Extract title from HTML <title> tag. Splits on | and takes the first part.\n */\nexport function extractTitle(html: string): string | undefined {\n const match = html.match(/<title>([^<]*)<\\/title>/i);\n if (!match) return undefined;\n return match[1]?.split('|')[0]?.trim() || match[1];\n}\n\n/**\n * Extract description from HTML <meta name=\"description\"> tag.\n */\nexport function extractDescription(html: string): string | undefined {\n const match = html.match(/<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i);\n return match?.[1];\n}\n\n/**\n * Extract existing JSON-LD structured data from HTML.\n */\nexport function extractJsonLd(html: string): object[] {\n const schemas: object[] = [];\n const regex = /<script\\s+type=[\"']application\\/ld\\+json[\"'][^>]*>([\\s\\S]*?)<\\/script>/gi;\n let match;\n while ((match = regex.exec(html)) !== null) {\n try {\n const parsed = JSON.parse(match[1]);\n schemas.push(parsed);\n } catch { /* skip invalid JSON-LD */ }\n }\n return schemas;\n}\n\n/**\n * Convert HTML page to a complete markdown document with YAML frontmatter.\n */\nexport function htmlToMarkdown(html: string, pagePath: string, config: { url: string }): string {\n const rawTitle = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n const pageUrl = pagePath === '/'\n ? config.url\n : `${config.url.replace(/\\/$/, '')}${pagePath}`;\n\n const lines: string[] = [];\n\n // YAML frontmatter\n lines.push('---');\n if (rawTitle) lines.push(`title: \"${rawTitle}\"`);\n if (description) lines.push(`description: \"${description}\"`);\n lines.push(`url: ${pageUrl}`);\n lines.push(`source: ${pageUrl}`);\n lines.push(`generated_by: aeo.js`);\n lines.push('---', '');\n\n if (rawTitle) lines.push(`# ${rawTitle}`, '');\n if (description) lines.push(`${description}`, '');\n\n if (textContent) lines.push(textContent);\n\n return lines.join('\\n');\n}\n","import { generateAEOFiles } from '../core/generate';\nimport { resolveConfig } from '../core/utils';\nimport type { AeoConfig, PageEntry } from '../types';\nimport { extractTextFromHtml, extractTitle, extractDescription } from '../core/html-extract';\nimport { join } from 'path';\nimport { existsSync, readdirSync, readFileSync, statSync } from 'fs';\n\n/**\n * Scan Angular route components from app/ directory.\n * Looks for standalone components that represent pages (files matching *.component.ts\n * inside folders that follow Angular routing conventions).\n */\nfunction scanAngularRoutes(projectRoot: string): PageEntry[] {\n const pages: PageEntry[] = [];\n const srcDir = join(projectRoot, 'src', 'app');\n if (!existsSync(srcDir)) {\n // Always include root even when no source directory found\n pages.push({ pathname: '/' });\n return pages;\n }\n\n function walk(dir: string, basePath: string = ''): void {\n try {\n const entries = readdirSync(dir);\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.') && !entry.startsWith('_') && entry !== 'node_modules') {\n walk(fullPath, `${basePath}/${entry}`);\n }\n }\n\n // Check for route config files that define paths\n for (const entry of entries) {\n if (entry.match(/\\.routes\\.ts$/)) {\n try {\n const content = readFileSync(join(dir, entry), 'utf-8');\n // Extract path values from route configs: { path: 'about', ... }\n const pathMatches = content.matchAll(/path:\\s*['\"]([^'\"]*)['\"]/g);\n for (const match of pathMatches) {\n const routePath = match[1];\n if (routePath === '**' || routePath.startsWith(':')) continue;\n const pathname = routePath === '' ? '/' : `${basePath}/${routePath}`.replace(/\\/+/g, '/');\n const name = routePath || 'home';\n if (!pages.some(p => p.pathname === pathname)) {\n pages.push({\n pathname,\n title: name === 'home' ? undefined : name.charAt(0).toUpperCase() + name.slice(1).replace(/-/g, ' '),\n });\n }\n }\n } catch { /* skip */ }\n }\n }\n\n // Fallback: infer routes from component directories with component files\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.')) {\n const componentFile = readdirSync(fullPath).find(f => f.match(/\\.component\\.ts$/));\n if (componentFile && entry !== 'app' && entry !== 'shared' && entry !== 'core' && entry !== 'components' && entry !== 'services' && entry !== 'models' && entry !== 'guards' && entry !== 'interceptors' && entry !== 'pipes' && entry !== 'directives') {\n const pathname = `${basePath}/${entry}`.replace(/\\/+/g, '/');\n if (!pages.some(p => p.pathname === pathname)) {\n pages.push({\n pathname,\n title: entry.charAt(0).toUpperCase() + entry.slice(1).replace(/-/g, ' '),\n });\n }\n }\n }\n }\n } catch { /* skip */ }\n }\n\n walk(srcDir);\n\n // Always include root\n if (!pages.some(p => p.pathname === '/')) {\n pages.unshift({ pathname: '/' });\n }\n\n return pages;\n}\n\n/**\n * Detect Angular output directory by reading angular.json.\n * Angular v17+ outputs to dist/<project>/browser/, older versions to dist/<project>/.\n */\nfunction detectAngularOutputDir(projectRoot: string): string {\n const angularJsonPath = join(projectRoot, 'angular.json');\n if (!existsSync(angularJsonPath)) return join(projectRoot, 'dist');\n\n try {\n const angularJson = JSON.parse(readFileSync(angularJsonPath, 'utf-8'));\n const defaultProject = angularJson.defaultProject || Object.keys(angularJson.projects || {})[0];\n if (!defaultProject) return join(projectRoot, 'dist');\n\n const project = angularJson.projects[defaultProject];\n const buildTarget = project?.architect?.build || project?.targets?.build;\n\n // Check outputPath from build options\n if (buildTarget?.options?.outputPath) {\n const outputPath = buildTarget.options.outputPath;\n // Angular v17+ uses object form: { base: \"dist/my-app\" }\n if (typeof outputPath === 'object' && outputPath.base) {\n return join(projectRoot, outputPath.base, 'browser');\n }\n return join(projectRoot, outputPath);\n }\n\n return join(projectRoot, 'dist', defaultProject);\n } catch {\n return join(projectRoot, 'dist');\n }\n}\n\n/**\n * Scan Angular build output for pre-rendered HTML pages.\n */\nfunction scanAngularBuildOutput(outputDir: string): PageEntry[] {\n const pages: PageEntry[] = [];\n if (!existsSync(outputDir)) return pages;\n\n function walk(dir: string, basePath: string = ''): void {\n try {\n const entries = readdirSync(dir);\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'assets' && entry !== 'media') {\n walk(fullPath, `${basePath}/${entry}`);\n } else if (entry.endsWith('.html') && entry !== '404.html' && entry !== '500.html') {\n try {\n const html = readFileSync(fullPath, 'utf-8');\n const title = extractTitle(html);\n const description = extractDescription(html);\n const textContent = extractTextFromHtml(html);\n\n let pathname: string;\n if (entry === 'index.html') {\n pathname = basePath || '/';\n } else {\n pathname = `${basePath}/${entry.replace('.html', '')}`;\n }\n\n pages.push({\n pathname,\n title,\n description,\n content: textContent,\n });\n } catch { /* skip */ }\n }\n }\n } catch { /* skip */ }\n }\n\n walk(outputDir);\n return pages;\n}\n\n/**\n * Generate a widget script tag to inject into Angular's index.html.\n * Returns HTML string to add before </body>.\n */\nexport function getWidgetScript(config: AeoConfig = {}): string {\n const resolvedConfig = resolveConfig(config);\n if (!resolvedConfig.widget.enabled) return '';\n\n const widgetConfig = JSON.stringify({\n title: resolvedConfig.title,\n description: resolvedConfig.description,\n url: resolvedConfig.url,\n widget: resolvedConfig.widget,\n });\n\n return `<script type=\"module\">\nimport('aeo.js/widget').then(({ AeoWidget }) => {\n try {\n new AeoWidget({ config: ${widgetConfig} });\n } catch (e) {\n console.warn('[aeo.js] Widget initialization failed:', e);\n }\n}).catch(() => {});\n</script>`;\n}\n\n/**\n * Post-build function for Angular projects.\n * Scans the Angular build output directory for pre-rendered HTML,\n * generates AEO files alongside the build output, and optionally\n * injects the widget into index.html.\n *\n * Usage in package.json:\n * \"postbuild\": \"node -e \\\"import('aeo.js/angular').then(m => m.postBuild({ title: 'My App', url: 'https://mysite.com' }))\\\"\"\n *\n * Or with Angular SSR prerender:\n * \"postbuild\": \"node -e \\\"import('aeo.js/angular').then(m => m.postBuild({ title: 'My App', url: 'https://mysite.com', injectWidget: true }))\\\"\"\n */\nexport async function postBuild(config: AeoConfig & { injectWidget?: boolean } = {}): Promise<void> {\n const projectRoot = process.cwd();\n const outputDir = config.outDir || detectAngularOutputDir(projectRoot);\n\n console.log(`[aeo.js] Scanning Angular build output: ${outputDir}`);\n\n // Discover pages from build output HTML\n const buildPages = scanAngularBuildOutput(outputDir);\n if (buildPages.length > 0) {\n console.log(`[aeo.js] Discovered ${buildPages.length} pages from Angular build output`);\n }\n\n // Discover routes from source\n const sourcePages = scanAngularRoutes(projectRoot);\n\n // Merge: build output (with content) takes priority over source-scanned routes\n const allPages = [...buildPages, ...sourcePages, ...(config.pages || [])];\n const pageMap = new Map<string, PageEntry>();\n for (const page of allPages) {\n const existing = pageMap.get(page.pathname);\n if (!existing || (page.content && !existing.content)) {\n pageMap.set(page.pathname, page);\n }\n }\n\n // Apply defaults\n for (const page of pageMap.values()) {\n if (page.pathname === '/' && !page.title && config.title) {\n page.title = config.title;\n }\n if (!page.description && config.description) {\n page.description = config.description;\n }\n }\n\n const resolvedConfig = resolveConfig({\n ...config,\n outDir: outputDir,\n pages: Array.from(pageMap.values()),\n });\n\n const result = await generateAEOFiles(resolvedConfig);\n if (result.files.length > 0) {\n console.log(`[aeo.js] Generated ${result.files.length} files`);\n }\n if (result.errors.length > 0) {\n console.error('[aeo.js] Errors:', result.errors);\n }\n\n // Optionally inject widget into index.html\n if (config.injectWidget !== false && resolvedConfig.widget.enabled) {\n const indexPath = join(outputDir, 'index.html');\n if (existsSync(indexPath)) {\n try {\n let html = readFileSync(indexPath, 'utf-8');\n if (!html.includes('aeo.js/widget')) {\n const script = getWidgetScript(config);\n html = html.replace('</body>', `${script}\\n</body>`);\n const { writeFileSync } = await import('fs');\n writeFileSync(indexPath, html, 'utf-8');\n console.log('[aeo.js] Injected widget into index.html');\n }\n } catch (error) {\n console.warn('[aeo.js] Could not inject widget into index.html:', error);\n }\n }\n }\n}\n\n/**\n * Generate AEO files for Angular from source routes only (no build output).\n * Useful for dev/CI environments where build output isn't available.\n */\nexport async function generate(config: AeoConfig = {}): Promise<void> {\n const projectRoot = process.cwd();\n const discoveredPages = scanAngularRoutes(projectRoot);\n\n if (discoveredPages.length > 0) {\n console.log(`[aeo.js] Discovered ${discoveredPages.length} routes from Angular source`);\n }\n\n for (const page of discoveredPages) {\n if (page.pathname === '/' && !page.title && config.title) {\n page.title = config.title;\n }\n if (!page.description && config.description) {\n page.description = config.description;\n }\n }\n\n const resolvedConfig = resolveConfig({\n ...config,\n outDir: config.outDir || 'public',\n pages: [...(config.pages || []), ...discoveredPages],\n });\n\n const result = await generateAEOFiles(resolvedConfig);\n if (result.files.length > 0) {\n console.log(`[aeo.js] Generated ${result.files.length} files`);\n }\n if (result.errors.length > 0) {\n console.error('[aeo.js] Errors:', result.errors);\n }\n}\n"]}