@thallylabs/migrate 0.2.2 → 0.2.4
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.
- package/README.md +7 -6
- package/dist/index.d.ts +8 -0
- package/dist/index.js +138 -72
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/repository.ts","../src/docusaurus.ts","../src/path.ts","../src/frontmatter.ts","../src/mdx.ts","../src/navigation.ts","../src/render.ts","../src/url.ts"],"sourcesContent":["/**\n * Repository adapter for the shared migration engine. Traversal is bounded,\n * symbolic links are ignored, and Git is always invoked with an argument array\n * so source-controlled branch names can never become shell commands.\n */\n\nimport { spawn } from 'node:child_process'\nimport {\n existsSync,\n lstatSync,\n readFileSync,\n readdirSync,\n} from 'node:fs'\nimport { basename, dirname, extname, relative, resolve as resolvePath } from 'node:path'\n\nimport {\n projectDocusaurusNavigation,\n readDocusaurusSidebars,\n rewriteDocusaurusLinks,\n resolveDocusaurusPageIdentity,\n type DocusaurusPageDescriptor,\n type DocusaurusSidebars,\n} from './docusaurus.js'\nimport { parseMarkdownPage } from './mdx.js'\nimport {\n addMintlifyDirectoryRedirects,\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport {\n normalizeAssetPath,\n pageIdFromReference,\n resolveWithin,\n trimEdgeSlashes,\n trimTrailingSlashes,\n} from './path.js'\nimport type {\n MigrationAsset,\n MigrationBundle,\n MigrationDocsConfig,\n MigrationPage,\n MigrationPlatform,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_SOURCE_FILES = 5_000\nconst MAX_PAGE_BYTES = 2_000_000\nconst MAX_ASSET_BYTES = 25_000_000\nconst MAX_TOTAL_ASSET_BYTES = 500_000_000\nconst IGNORED_DIRECTORIES = new Set([\n '.git', '.github', '.next', '.turbo', '.vercel', '.vscode',\n 'node_modules', 'dist', 'build', 'coverage',\n])\nconst ASSET_DIRECTORIES = new Set(['assets', 'images', 'img', 'media', 'public', 'static'])\nconst ASSET_EXTENSIONS = new Set([\n '.avif', '.bmp', '.gif', '.ico', '.jpeg', '.jpg', '.mp3', '.mp4',\n '.pdf', '.png', '.svg', '.webm', '.webp',\n])\nconst REPOSITORY_ONLY_DOCUMENTS = new Set([\n 'agents.md', 'claude.md', 'code_of_conduct.md', 'contributing.md',\n 'license.md', 'readme.md', 'security.md',\n])\nconst SNIPPET_DIRECTORIES = new Set(['snippets', '_snippets', 'partials', '_partials'])\nconst OPENAPI_FILENAMES = new Set([\n 'openapi.json', 'openapi.yaml', 'openapi.yml',\n 'swagger.json', 'swagger.yaml', 'swagger.yml',\n])\n\nexport interface GitHubRepositorySource {\n owner: string\n repo: string\n branch: string\n docsDir: string\n cloneUrl: string\n}\n\nexport interface RepositoryMigrationOptions {\n repositoryDir: string\n sourceUrl: string\n docsDir?: string\n platform?: MigrationPlatform\n /** @internal Prefix used by additional Docusaurus docs-plugin instances. */\n docusaurusRoutePrefix?: string\n /** @internal Prevent recursive discovery while importing one plugin root. */\n docusaurusSkipPlugins?: boolean\n /** @internal Additional docs plugins default to autogenerated navigation. */\n docusaurusSkipSidebar?: boolean\n /** @internal Static assets are shared across docs-plugin instances. */\n docusaurusSkipAssets?: boolean\n}\n\ninterface DocusaurusPluginRoot {\n docsDir: string\n routePrefix: string\n}\n\nconst DOCUSAURUS_CONFIG_FILENAMES = [\n 'docusaurus.config.js',\n 'docusaurus.config.ts',\n 'docusaurus.config.mjs',\n]\n\nfunction hasDocusaurusConfig(directory: string): boolean {\n return DOCUSAURUS_CONFIG_FILENAMES.some((filename) => {\n const path = resolveWithin(directory, filename)\n return existsSync(path) && lstatSync(path).isFile()\n })\n}\n\nfunction hasMintlifyConfig(directory: string): boolean {\n return ['docs.json', 'mint.json'].some((filename) => {\n const path = resolveWithin(directory, filename)\n if (!existsSync(path) || !lstatSync(path).isFile()) return false\n if (filename === 'mint.json') return true\n try {\n const config = JSON.parse(readFileSync(path, 'utf8')) as Record<string, unknown>\n return String(config.$schema ?? '').includes('mintlify') || 'navigation' in config\n } catch {\n return false\n }\n })\n}\n\nfunction findMintlifyProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = trimTrailingSlashes(docsDir)\n while (true) {\n const path = resolveWithin(repositoryDir, candidate || '.')\n if (hasMintlifyConfig(path)) return path\n if (!candidate) break\n const parent = dirname(candidate)\n candidate = parent === '.' ? '' : parent\n }\n }\n const queue: Array<{ directory: string; depth: number }> = [{ directory: repositoryDir, depth: 0 }]\n let visited = 0\n while (queue.length > 0 && visited < 500) {\n const current = queue.shift()!\n visited++\n if (hasMintlifyConfig(current.directory)) return current.directory\n if (current.depth >= 4) continue\n for (const entry of readdirSync(current.directory, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || IGNORED_DIRECTORIES.has(entry.name)) continue\n queue.push({ directory: resolveWithin(current.directory, entry.name), depth: current.depth + 1 })\n }\n }\n return null\n}\n\nfunction findDocusaurusProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = trimTrailingSlashes(docsDir)\n while (true) {\n const path = resolveWithin(repositoryDir, candidate || '.')\n if (hasDocusaurusConfig(path)) return path\n if (!candidate) break\n const parent = dirname(candidate)\n candidate = parent === '.' ? '' : parent\n }\n }\n\n const queue: Array<{ directory: string; depth: number }> = [{ directory: repositoryDir, depth: 0 }]\n let visited = 0\n while (queue.length > 0 && visited < 500) {\n const current = queue.shift()!\n visited++\n if (hasDocusaurusConfig(current.directory)) return current.directory\n if (current.depth >= 4) continue\n for (const entry of readdirSync(current.directory, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || IGNORED_DIRECTORIES.has(entry.name)) continue\n queue.push({\n directory: resolveWithin(current.directory, entry.name),\n depth: current.depth + 1,\n })\n }\n }\n return null\n}\n\nfunction readDocusaurusConfigSource(projectRoot: string): string {\n const path = DOCUSAURUS_CONFIG_FILENAMES\n .map((filename) => resolveWithin(projectRoot, filename))\n .find((candidate) => existsSync(candidate) && lstatSync(candidate).isFile())\n if (!path || lstatSync(path).size > 1_000_000) return ''\n return readFileSync(path, 'utf8')\n}\n\nfunction primaryDocusaurusDocsDirectory(projectRoot: string): string {\n const source = readDocusaurusConfigSource(projectRoot)\n const configured = source.match(/\\bdocs\\s*:\\s*\\{[\\s\\S]{0,4000}?\\bpath\\s*:\\s*(['\"])([^'\"]+)\\1/)?.[2]\n return trimTrailingSlashes(configured?.replace(/^\\.\\//, '') ?? '') || 'docs'\n}\n\nfunction additionalDocusaurusPluginRoots(\n repositoryDir: string,\n projectRoot: string,\n): Array<DocusaurusPluginRoot> {\n const source = readDocusaurusConfigSource(projectRoot)\n const projectRelative = relative(repositoryDir, projectRoot).replace(/\\\\/g, '/')\n const plugins: Array<DocusaurusPluginRoot> = []\n const matcher = /['\"]@docusaurus\\/plugin-content-docs['\"][\\s\\S]{0,3000}?\\bpath\\s*:\\s*(['\"])([^'\"]+)\\1[\\s\\S]{0,1000}?\\brouteBasePath\\s*:\\s*(['\"])([^'\"]+)\\3/g\n for (const match of source.matchAll(matcher)) {\n const localPath = trimTrailingSlashes(match[2].replace(/^\\.\\//, ''))\n const routePrefix = trimEdgeSlashes(match[4])\n if (!localPath || !routePrefix) continue\n const docsDir = [projectRelative, localPath].filter(Boolean).join('/')\n const absolute = resolveWithin(repositoryDir, docsDir)\n if (!existsSync(absolute) || !lstatSync(absolute).isDirectory()) continue\n plugins.push({ docsDir, routePrefix })\n }\n return plugins\n}\n\n/** Parse and validate a public GitHub repository URL. */\nexport function parseGitHubRepositoryUrl(rawUrl: string): GitHubRepositorySource {\n let url: URL\n try {\n url = new URL(rawUrl)\n } catch {\n throw new Error(`Invalid GitHub URL: ${rawUrl}`)\n }\n if (url.protocol !== 'https:' || url.hostname.toLowerCase() !== 'github.com') {\n throw new Error('Repository migrations require an https://github.com URL.')\n }\n if (url.username || url.password || url.port) {\n throw new Error('GitHub repository URLs cannot include credentials or custom ports.')\n }\n const segments = url.pathname.split('/').filter(Boolean).map(decodeURIComponent)\n const [owner, rawRepo] = segments\n const repo = rawRepo?.replace(/\\.git$/i, '')\n const safeName = /^[A-Za-z0-9_.-]+$/\n if (!owner || !repo || !safeName.test(owner) || !safeName.test(repo)) {\n throw new Error('GitHub URL must include a valid owner and repository name.')\n }\n let branch = 'HEAD'\n let docsDir = ''\n if (segments[2] === 'tree' && segments[3]) {\n branch = segments[3]\n docsDir = segments.slice(4).join('/')\n }\n return {\n owner,\n repo,\n branch,\n docsDir,\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n }\n}\n\n/** Clone a repository without a shell; callers own and remove `targetDir`. */\nexport async function cloneGitHubRepository(\n source: GitHubRepositorySource,\n targetDir: string,\n): Promise<void> {\n const args = ['clone', '--depth', '1', '--single-branch']\n if (source.branch !== 'HEAD') args.push('--branch', source.branch)\n args.push('--', source.cloneUrl, targetDir)\n await new Promise<void>((resolve, reject) => {\n const child = spawn('git', args, { stdio: ['ignore', 'ignore', 'pipe'] })\n let stderr = ''\n child.stderr.setEncoding('utf8')\n child.stderr.on('data', (chunk: string) => {\n if (stderr.length < 16_000) stderr += chunk\n })\n child.on('error', reject)\n child.on('close', (code) => {\n if (code === 0) resolve()\n else reject(new Error(`Failed to clone ${source.owner}/${source.repo}: ${stderr.trim() || `git exited ${code}`}`))\n })\n })\n}\n\n/** Detect a supported repository docs platform from unambiguous config files. */\nexport function detectRepositoryPlatform(repositoryDir: string, docsDir?: string): MigrationPlatform {\n if (findMintlifyProjectRoot(repositoryDir, docsDir)) return 'mintlify'\n const selectedRoot = docsDir === undefined ? repositoryDir : resolveWithin(repositoryDir, docsDir || '.')\n const docsJson = resolveWithin(selectedRoot, 'docs.json')\n if (existsSync(docsJson)) {\n try {\n const config = JSON.parse(readFileSync(docsJson, 'utf8')) as Record<string, unknown>\n if (Array.isArray(config.tabs)) return 'thally'\n } catch {\n // A malformed source config is reported later; platform detection falls through.\n }\n }\n if (['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'docusaurus'\n if (findDocusaurusProjectRoot(repositoryDir)) return 'docusaurus'\n if (existsSync(resolveWithin(repositoryDir, 'SUMMARY.md'))) return 'gitbook'\n if (existsSync(resolveWithin(repositoryDir, '.vitepress'))) return 'vitepress'\n if (['astro.config.mjs', 'astro.config.ts']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'starlight'\n if (['pages/_meta.json', '_meta.json']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'nextra'\n return 'unknown'\n}\n\nfunction containsMarkdown(directory: string, depth = 0): boolean {\n if (depth > 4) return false\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (IGNORED_DIRECTORIES.has(entry.name) || entry.isSymbolicLink()) continue\n const path = resolveWithin(directory, entry.name)\n if (entry.isFile() && ['.md', '.mdx'].includes(extname(entry.name).toLowerCase())) return true\n if (entry.isDirectory() && containsMarkdown(path, depth + 1)) return true\n }\n return false\n}\n\n/** Pick the first conventional content root containing Markdown. */\nexport function detectRepositoryDocsDir(repositoryDir: string): string {\n for (const candidate of ['docs', 'documentation', 'content', 'pages', 'src/content', 'src/pages', 'guide', 'guides', '']) {\n const path = resolveWithin(repositoryDir, candidate)\n if (existsSync(path) && lstatSync(path).isDirectory() && containsMarkdown(path)) return candidate\n }\n return ''\n}\n\ninterface ScannedFile {\n absolutePath: string\n relativePath: string\n}\n\nfunction scanFiles(root: string): Array<ScannedFile> {\n const files: Array<ScannedFile> = []\n function visit(directory: string): void {\n if (files.length >= MAX_SOURCE_FILES) return\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (files.length >= MAX_SOURCE_FILES) return\n if (IGNORED_DIRECTORIES.has(entry.name) || entry.isSymbolicLink()) continue\n const path = resolveWithin(directory, entry.name)\n if (entry.isDirectory()) visit(path)\n else if (entry.isFile()) files.push({ absolutePath: path, relativePath: relative(root, path).replace(/\\\\/g, '/') })\n }\n }\n visit(root)\n return files\n}\n\nfunction normalizedReferenceKey(value: string): string {\n return value.split(/[?#]/, 1)[0]\n .replace(/^\\/+/, '')\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:mdx?|rst|txt)$/i, '')\n .replace(/\\/(?:index|readme)$/i, '')\n .replace(/^(?:index|readme)$/i, '') || 'introduction'\n}\n\nfunction exactReferenceKey(value: string): string {\n return value.split(/[?#]/, 1)[0]\n .replace(/^\\/+/, '')\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:mdx?|rst|txt)$/i, '')\n}\n\nfunction findOpenApi(files: Array<ScannedFile>): ScannedFile | null {\n return files.find((file) => OPENAPI_FILENAMES.has(basename(file.relativePath).toLowerCase())) ?? null\n}\n\nfunction findConfiguredMintlifyOpenApi(\n config: Record<string, unknown> | null,\n files: Array<ScannedFile>,\n): ScannedFile | null {\n const api = config?.api && typeof config.api === 'object' && !Array.isArray(config.api)\n ? config.api as Record<string, unknown>\n : null\n const configured = typeof api?.openapi === 'string'\n ? [api.openapi]\n : Array.isArray(api?.openapi) ? api.openapi.filter((value): value is string => typeof value === 'string') : []\n for (const reference of configured) {\n if (/^(?:https?:)?\\/\\//i.test(reference)) continue\n const key = reference.split(/[?#]/, 1)[0].replace(/^\\/+/, '').replace(/\\\\/g, '/')\n const match = files.find((file) => file.relativePath === key)\n if (match) return match\n }\n return null\n}\n\nfunction withoutFrontmatter(value: string): string {\n return value.replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, '').trim()\n}\n\nfunction staticSnippetProperties(attributes: string): Map<string, string> {\n const properties = new Map<string, string>()\n const matcher = /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|\\{\\s*\"([^\"]*)\"\\s*\\}|\\{\\s*'([^']*)'\\s*\\})/g\n for (const match of attributes.matchAll(matcher)) {\n properties.set(match[1], match[2] ?? match[3] ?? match[4] ?? match[5] ?? '')\n }\n return properties\n}\n\nfunction interpolateSnippet(snippet: string, attributes: string): string {\n const properties = staticSnippetProperties(attributes)\n if (properties.size === 0) return snippet\n let fence = ''\n return snippet.split('\\n').map((line) => {\n const marker = line.match(/^\\s*(`{3,}|~{3,})/)?.[1]\n if (marker) {\n if (!fence) fence = marker[0]\n else if (marker[0] === fence) fence = ''\n return line\n }\n if (fence) return line\n return line.replace(/\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (original, name: string) => {\n return properties.get(name) ?? original\n })\n }).join('\\n')\n}\n\nfunction resolveSnippetPath(\n sourcePath: string,\n currentFile: string,\n repositoryRoot: string,\n siteRoot: string,\n): string {\n const repositoryRelative = sourcePath.startsWith('@site/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.slice('@site/'.length))).replace(/\\\\/g, '/')\n : sourcePath.startsWith('/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.replace(/^\\/+/, ''))).replace(/\\\\/g, '/')\n : relative(repositoryRoot, resolvePath(dirname(currentFile), sourcePath)).replace(/\\\\/g, '/')\n const candidate = resolveWithin(repositoryRoot, repositoryRelative)\n resolveWithin(repositoryRoot, relative(repositoryRoot, candidate))\n return candidate\n}\n\nfunction globalSnippetAliases(\n files: Array<ScannedFile>,\n repositoryRoot: string,\n siteRoot: string,\n): Map<string, string> {\n const aliases = new Map<string, string>()\n const matcher = /^import\\s+(?:\\{\\s*default\\s+as\\s+)?([A-Z][A-Za-z0-9_]*)\\s*\\}?\\s+from\\s+['\"]([^'\"]+\\.mdx?)['\"]\\s*;?(?:\\s*\\/\\/.*)?$/gm\n for (const file of files) {\n const segments = file.relativePath.split('/')\n if (!segments.some((segment) => SNIPPET_DIRECTORIES.has(segment.toLowerCase()))) continue\n const basenameWithoutExtension = basename(file.relativePath).replace(/\\.mdx?$/i, '')\n const conventionalAlias = basenameWithoutExtension\n .split(/[^A-Za-z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n if (conventionalAlias) aliases.set(conventionalAlias, file.absolutePath)\n }\n for (const file of files) {\n if (!['.md', '.mdx'].includes(extname(file.relativePath).toLowerCase())) continue\n const raw = readFileSync(file.absolutePath, 'utf8')\n for (const match of raw.matchAll(matcher)) {\n try {\n const candidate = resolveSnippetPath(match[2], file.absolutePath, repositoryRoot, siteRoot)\n if (existsSync(candidate) && lstatSync(candidate).isFile()) {\n aliases.set(match[1], candidate)\n }\n } catch {\n // The page-local inliner emits the actionable warning when it reaches\n // an unsafe or missing import. Global discovery is best-effort only.\n }\n }\n }\n return aliases\n}\n\nfunction repositoryAssetHref(\n value: string,\n currentFile: string,\n siteRoot: string,\n): string | null {\n const isBracketed = value.startsWith('<') && value.endsWith('>')\n const raw = isBracketed ? value.slice(1, -1) : value\n if (!raw || raw.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(raw)) return null\n const suffixIndex = raw.search(/[?#]/)\n const pathname = suffixIndex >= 0 ? raw.slice(0, suffixIndex) : raw\n const suffix = suffixIndex >= 0 ? raw.slice(suffixIndex) : ''\n let decodedPath: string\n try {\n decodedPath = decodeURIComponent(pathname)\n } catch {\n return null\n }\n if (!ASSET_EXTENSIONS.has(extname(decodedPath).toLowerCase())) return null\n try {\n const candidate = decodedPath.startsWith('/')\n ? resolveWithin(siteRoot, decodedPath.replace(/^\\/+/, ''))\n : resolveWithin(dirname(currentFile), decodedPath)\n // Mintlify's deploy root is the directory containing docs.json. Do not\n // copy or expose a relative reference that escapes that project boundary.\n const siteRelative = relative(siteRoot, candidate).replace(/\\\\/g, '/')\n resolveWithin(siteRoot, siteRelative)\n if (!existsSync(candidate) || !lstatSync(candidate).isFile()) return null\n const normalized = normalizeAssetPath(siteRelative)\n if (!normalized) return null\n const rewritten = `/${normalized}${suffix}`\n // Markdown destinations containing parentheses must stay angle-bracketed;\n // removing the wrapper makes CommonMark terminate the URL too early.\n return isBracketed ? `<${rewritten}>` : rewritten\n } catch {\n return null\n }\n}\n\nfunction rewriteRepositoryAssetLinks(body: string, currentFile: string, siteRoot: string): string {\n return body\n .replace(/(!?\\[[^\\]]*\\]\\()(<[^>]+>|[^)\\s]+)([^)]*\\))/g, (\n original,\n opening: string,\n destination: string,\n closing: string,\n ) => {\n const rewritten = repositoryAssetHref(destination, currentFile, siteRoot)\n return rewritten ? `${opening}${rewritten}${closing}` : original\n })\n .replace(/\\b(src|img|image|href)=(['\"])([^'\"]+)\\2/g, (\n original,\n property: string,\n quote: string,\n destination: string,\n ) => {\n const rewritten = repositoryAssetHref(destination, currentFile, siteRoot)\n return rewritten ? `${property}=${quote}${rewritten}${quote}` : original\n })\n}\n\nfunction inlineMdxSnippets(\n raw: string,\n currentFile: string,\n repositoryRoot: string,\n warnings: Array<MigrationWarning>,\n depth = 0,\n siteRoot = repositoryRoot,\n globalAliases: Map<string, string> = new Map(),\n): string {\n if (depth >= 8) return raw\n const snippets = new Map<string, string>()\n const withoutImports = raw.replace(\n /^import\\s+(?:\\{\\s*default\\s+as\\s+)?([A-Z][A-Za-z0-9_]*)\\s*\\}?\\s+from\\s+['\"]([^'\"]+\\.mdx?)['\"]\\s*;?(?:\\s*\\/\\/.*)?$/gm,\n (_statement, componentName: string, sourcePath: string) => {\n try {\n const candidate = resolveSnippetPath(sourcePath, currentFile, repositoryRoot, siteRoot)\n if (!existsSync(candidate) || !lstatSync(candidate).isFile()) throw new Error('file not found')\n const nested = inlineMdxSnippets(\n withoutFrontmatter(readFileSync(candidate, 'utf8')),\n candidate,\n repositoryRoot,\n warnings,\n depth + 1,\n siteRoot,\n globalAliases,\n )\n snippets.set(componentName, nested)\n return ''\n } catch {\n warnings.push({\n code: 'missing-page',\n message: `Imported snippet ${sourcePath} could not be resolved and was left as a comment.`,\n source: relative(repositoryRoot, currentFile).replace(/\\\\/g, '/'),\n })\n snippets.set(componentName, `{/* Missing imported snippet: ${sourcePath} */}`)\n return ''\n }\n },\n )\n // Mintlify resolves snippet imports across its MDX compilation graph. Some\n // real sites consequently reuse an alias on a page that does not repeat the\n // import declaration. Recover those aliases deterministically from imports\n // elsewhere in the same docs project.\n for (const [componentName, candidate] of globalAliases) {\n if (snippets.has(componentName) || !new RegExp(`<${componentName}(?:\\\\s|/?>)`).test(withoutImports)) continue\n const nested = inlineMdxSnippets(\n withoutFrontmatter(readFileSync(candidate, 'utf8')),\n candidate,\n repositoryRoot,\n warnings,\n depth + 1,\n siteRoot,\n globalAliases,\n )\n snippets.set(componentName, nested)\n }\n let result = withoutImports\n for (const [componentName, snippet] of snippets) {\n result = result\n .replace(new RegExp(`<${componentName}((?:\\\\s[^>]*)?)\\\\s*/>`, 'g'), (_tag, attributes: string) => {\n return interpolateSnippet(snippet, attributes)\n })\n .replace(new RegExp(`<${componentName}((?:\\\\s[^>]*)?)>(?:[\\\\s\\\\S]*?)<\\\\/${componentName}>`, 'g'), (_tag, attributes: string) => {\n return interpolateSnippet(snippet, attributes)\n })\n }\n return result\n}\n\nfunction injectOpenApi(config: MigrationDocsConfig, filename: string): MigrationDocsConfig {\n const tabs = config.tabs.map((tab) => ({ ...tab }))\n const apiTab = tabs.find((tab) => tab.tab.toLowerCase().includes('api'))\n if (apiTab) apiTab.api = { source: `/${filename}`, navigation: false }\n else tabs.push({ tab: 'API Reference', api: { source: `/${filename}` } })\n return { ...config, tabs }\n}\n\n/** Import an already-available repository directory into a canonical bundle. */\nexport function migrateRepository(options: RepositoryMigrationOptions): MigrationBundle {\n const repositoryDir = options.repositoryDir\n const platform = options.platform ?? detectRepositoryPlatform(repositoryDir, options.docsDir)\n const mintlifyProjectRoot = platform === 'mintlify'\n ? findMintlifyProjectRoot(repositoryDir, options.docsDir)\n : null\n const docusaurusProjectRoot = platform === 'docusaurus'\n ? findDocusaurusProjectRoot(repositoryDir, options.docsDir)\n : null\n const configuredDocsDir = (() => {\n if (options.docsDir !== undefined) {\n const selected = resolveWithin(repositoryDir, options.docsDir || '.')\n if (platform === 'docusaurus' && hasDocusaurusConfig(selected)) {\n const projectRelative = relative(repositoryDir, selected).replace(/\\\\/g, '/')\n return [projectRelative, primaryDocusaurusDocsDirectory(selected)].filter(Boolean).join('/')\n }\n return options.docsDir\n }\n if (docusaurusProjectRoot) {\n const projectRelative = relative(repositoryDir, docusaurusProjectRoot).replace(/\\\\/g, '/')\n return [projectRelative, primaryDocusaurusDocsDirectory(docusaurusProjectRoot)].filter(Boolean).join('/')\n }\n if (platform === 'mintlify' && mintlifyProjectRoot) {\n return relative(repositoryDir, mintlifyProjectRoot).replace(/\\\\/g, '/')\n }\n return platform === 'mintlify' ? '' : detectRepositoryDocsDir(repositoryDir)\n })()\n const warnings: Array<MigrationWarning> = []\n let docsConfig: MigrationDocsConfig = { tabs: [] }\n const referenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const exactReferenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const referenceOrder = new Map<string, number>()\n let docusaurusSidebars: DocusaurusSidebars | null = null\n let mintlifyConfig: Record<string, unknown> | null = null\n\n if (platform === 'mintlify') {\n try {\n const config = readMintlifyConfig(mintlifyProjectRoot ?? repositoryDir)\n if (config) {\n mintlifyConfig = config\n const projected = projectMintlifyNavigation(config)\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const [index, reference] of projected.pageReferences.entries()) {\n const key = normalizedReferenceKey(reference.ref)\n referenceMap.set(key, reference)\n exactReferenceMap.set(exactReferenceKey(reference.ref), reference)\n referenceOrder.set(key, index)\n }\n }\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Mintlify config could not be read: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (platform === 'docusaurus') {\n try {\n docusaurusSidebars = options.docusaurusSkipSidebar || !docusaurusProjectRoot\n ? null\n : readDocusaurusSidebars(docusaurusProjectRoot)\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Docusaurus sidebar could not be read safely: ${error instanceof Error ? error.message : String(error)} Generated navigation will be used.`,\n })\n }\n }\n\n const contentRoot = resolveWithin(repositoryDir, configuredDocsDir)\n if (!existsSync(contentRoot) || !lstatSync(contentRoot).isDirectory()) {\n throw new Error(`Documentation directory does not exist: ${configuredDocsDir || '.'}`)\n }\n const files = scanFiles(contentRoot)\n const pages: Array<MigrationPage> = []\n const assets: Array<MigrationAsset> = []\n const docusaurusDescriptors: Array<DocusaurusPageDescriptor> = []\n const seenPageIds = new Set<string>()\n let skipped = 0\n let discovered = files.length\n\n const localeConfig = docsConfig.i18n\n const pageFiles = [...files].sort((left, right) => {\n const leftOrder = referenceOrder.get(normalizedReferenceKey(left.relativePath)) ?? Number.MAX_SAFE_INTEGER\n const rightOrder = referenceOrder.get(normalizedReferenceKey(right.relativePath)) ?? Number.MAX_SAFE_INTEGER\n return leftOrder - rightOrder || left.relativePath.localeCompare(right.relativePath)\n })\n const snippetAliases = platform === 'mintlify' && mintlifyProjectRoot\n ? globalSnippetAliases(files, repositoryDir, mintlifyProjectRoot)\n : new Map<string, string>()\n for (const file of pageFiles) {\n if (!isDocumentationExtension(file.relativePath)) continue\n const sourceSegments = file.relativePath.split('/')\n if (sourceSegments.some((segment) => SNIPPET_DIRECTORIES.has(segment.toLowerCase()))\n || (platform === 'docusaurus' && basename(file.relativePath).startsWith('_'))) {\n skipped++\n continue\n }\n const rootFilename = !file.relativePath.includes('/') ? basename(file.relativePath).toLowerCase() : ''\n if (REPOSITORY_ONLY_DOCUMENTS.has(rootFilename) && !exactReferenceMap.has(exactReferenceKey(file.relativePath))) {\n skipped++\n continue\n }\n if (!['.md', '.mdx'].includes(extname(file.relativePath).toLowerCase())) {\n skipped++\n warnings.push({ code: 'skipped-file', message: 'Only Markdown and MDX are imported without an explicit converter.', source: file.relativePath })\n continue\n }\n const size = lstatSync(file.absolutePath).size\n if (size > MAX_PAGE_BYTES) {\n skipped++\n warnings.push({ code: 'skipped-file', message: 'Page exceeded the 2 MB repository import limit.', source: file.relativePath })\n continue\n }\n const key = normalizedReferenceKey(file.relativePath)\n const referenced = exactReferenceMap.get(exactReferenceKey(file.relativePath)) ?? referenceMap.get(key)\n let locale = referenced?.locale\n let navigationId = referenced?.navigationId ?? pageIdFromReference(file.relativePath, platform === 'mintlify')\n if (!referenced && localeConfig) {\n const prefix = file.relativePath.split('/', 1)[0]\n if (localeConfig.locales.some((entry) => entry.code === prefix)) {\n locale = prefix\n navigationId = pageIdFromReference(file.relativePath.slice(prefix.length + 1), platform === 'mintlify')\n }\n }\n if (!navigationId) {\n skipped++\n warnings.push({ code: 'invalid-page', message: 'Page path could not be normalized safely.', source: file.relativePath })\n continue\n }\n const isDefaultLocale = !locale || locale === localeConfig?.defaultLocale\n const id = isDefaultLocale ? navigationId : `${locale}/${navigationId}`\n const raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n mintlifyProjectRoot ?? docusaurusProjectRoot ?? repositoryDir,\n snippetAliases,\n )\n let docusaurusDescriptor: Omit<DocusaurusPageDescriptor, 'title'> | undefined\n const page = parseMarkdownPage({\n id,\n navigationId,\n ...(locale ? { locale } : {}),\n raw,\n source: `${options.sourceUrl}#${relative(repositoryDir, file.absolutePath).replace(/\\\\/g, '/')}`,\n ...(platform === 'docusaurus' ? {\n resolveIdentity: (frontmatter, fallback) => {\n const resolved = resolveDocusaurusPageIdentity(file.relativePath, frontmatter, fallback)\n const routePrefix = options.docusaurusRoutePrefix === undefined\n ? undefined\n : trimEdgeSlashes(options.docusaurusRoutePrefix)\n if (!routePrefix) {\n docusaurusDescriptor = resolved.descriptor\n return resolved.identity\n }\n const prefixedNavigationId = resolved.identity.navigationId === 'introduction'\n ? routePrefix\n : `${routePrefix}/${resolved.identity.navigationId}`\n const prefixedStorageId = resolved.identity.id === 'introduction'\n ? routePrefix\n : `${routePrefix}/${resolved.identity.id}`\n docusaurusDescriptor = {\n ...resolved.descriptor,\n navigationId: prefixedNavigationId,\n }\n return {\n ...resolved.identity,\n id: prefixedStorageId,\n navigationId: prefixedNavigationId,\n }\n },\n } : {}),\n })\n if (!page) {\n skipped++\n continue\n }\n if (platform === 'mintlify' && mintlifyProjectRoot) {\n page.body = rewriteRepositoryAssetLinks(page.body, file.absolutePath, mintlifyProjectRoot)\n }\n if (seenPageIds.has(page.id)) {\n skipped++\n warnings.push({ code: 'collision', message: `Multiple source files map to ${page.id}; the first file was kept.`, source: file.relativePath })\n continue\n }\n seenPageIds.add(page.id)\n pages.push(page)\n if (docusaurusDescriptor) {\n docusaurusDescriptors.push({ ...docusaurusDescriptor, title: page.title })\n }\n }\n\n const discoveredReferenceKeys = new Set(files.map((file) => normalizedReferenceKey(file.relativePath)))\n for (const [key] of referenceMap) {\n if (!discoveredReferenceKeys.has(key)) {\n warnings.push({ code: 'missing-page', message: 'A navigation entry did not resolve to a source page.', source: key })\n }\n }\n\n const docusaurusAssetRoot = docusaurusProjectRoot ?? repositoryDir\n const repositoryAssets = platform === 'docusaurus' && configuredDocsDir && !options.docusaurusSkipAssets\n ? ['static', 'public'].flatMap((directory) => {\n const root = resolveWithin(docusaurusAssetRoot, directory)\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return []\n return scanFiles(root).map((file) => ({\n ...file,\n relativePath: `${directory}/${file.relativePath}`,\n }))\n })\n : []\n let totalAssetBytes = 0\n for (const file of [...files, ...repositoryAssets]) {\n const firstSegment = file.relativePath.split('/', 1)[0].toLowerCase()\n if (!ASSET_EXTENSIONS.has(extname(file.relativePath).toLowerCase())) continue\n if (platform !== 'mintlify' && !ASSET_DIRECTORIES.has(firstSegment)) continue\n const size = lstatSync(file.absolutePath).size\n if (size > MAX_ASSET_BYTES || totalAssetBytes + size > MAX_TOTAL_ASSET_BYTES) {\n warnings.push({ code: 'limit-reached', message: 'An asset was skipped because the migration asset budget was exhausted.', source: file.relativePath })\n continue\n }\n const isDocusaurusStatic = platform === 'docusaurus' && firstSegment === 'static'\n const assetPath = normalizeAssetPath(firstSegment === 'public'\n ? file.relativePath.slice('public/'.length)\n : isDocusaurusStatic\n ? file.relativePath.slice('static/'.length)\n : file.relativePath)\n if (!assetPath) continue\n assets.push({ path: assetPath, content: readFileSync(file.absolutePath) })\n totalAssetBytes += size\n }\n\n if (files.length >= MAX_SOURCE_FILES) {\n warnings.push({ code: 'limit-reached', message: `Repository discovery stopped at ${MAX_SOURCE_FILES} files.` })\n }\n if (platform === 'docusaurus') {\n const projected = projectDocusaurusNavigation({\n sidebars: docusaurusSidebars,\n descriptors: docusaurusDescriptors,\n contentRoot,\n sourceUrl: options.sourceUrl,\n routePrefix: options.docusaurusRoutePrefix,\n })\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const page of projected.generatedPages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const descriptorByNavigationId = new Map(\n docusaurusDescriptors.map((descriptor) => [descriptor.navigationId, descriptor]),\n )\n for (const page of pages) {\n const descriptor = descriptorByNavigationId.get(page.navigationId)\n if (descriptor) page.body = rewriteDocusaurusLinks(page.body, descriptor, docusaurusDescriptors)\n }\n }\n if (docsConfig.tabs.length === 0) docsConfig = buildNavigationFromPages(pages)\n const openApi = findConfiguredMintlifyOpenApi(mintlifyConfig, files) ?? findOpenApi(files)\n if (openApi) {\n const filename = basename(openApi.relativePath)\n if (!assets.some((asset) => asset.path === filename)) {\n assets.push({ path: filename, content: readFileSync(openApi.absolutePath) })\n }\n docsConfig = injectOpenApi(docsConfig, filename)\n }\n if (platform === 'mintlify') docsConfig = addMintlifyDirectoryRedirects(docsConfig, pages)\n\n if (platform === 'docusaurus' && docusaurusProjectRoot && !options.docusaurusSkipPlugins) {\n for (const plugin of additionalDocusaurusPluginRoots(repositoryDir, docusaurusProjectRoot)) {\n if (plugin.docsDir === configuredDocsDir) continue\n const pluginBundle = migrateRepository({\n ...options,\n docsDir: plugin.docsDir,\n platform: 'docusaurus',\n docusaurusRoutePrefix: plugin.routePrefix,\n docusaurusSkipPlugins: true,\n docusaurusSkipSidebar: true,\n docusaurusSkipAssets: true,\n })\n for (const page of pluginBundle.pages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const assetPaths = new Set(assets.map((asset) => asset.path))\n for (const asset of pluginBundle.assets) {\n if (assetPaths.has(asset.path)) continue\n assetPaths.add(asset.path)\n assets.push(asset)\n }\n const pluginLabel = plugin.routePrefix\n .split(/[-_/]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n docsConfig.tabs.push(...pluginBundle.docsConfig.tabs.map((tab, index) => ({\n ...tab,\n tab: index === 0 ? pluginLabel : `${pluginLabel}: ${tab.tab}`,\n })))\n warnings.push(...pluginBundle.warnings)\n discovered += pluginBundle.stats.discovered\n skipped += pluginBundle.stats.skipped\n }\n }\n\n if (pages.length === 0) throw new Error('No importable Markdown or MDX pages were found in the repository.')\n return {\n sourceUrl: options.sourceUrl,\n sourceKind: 'repository',\n platform,\n pages,\n assets,\n docsConfig,\n ...(mintlifyConfig ? {\n site: {\n ...(typeof mintlifyConfig.name === 'string' ? { name: mintlifyConfig.name } : {}),\n ...(typeof mintlifyConfig.description === 'string' ? { description: mintlifyConfig.description } : {}),\n },\n } : {}),\n warnings,\n stats: { discovered, imported: pages.length, skipped },\n }\n}\n","/**\n * Static Docusaurus repository projection. Sidebar modules are attacker-owned\n * source files, so this adapter reads only JSON5-compatible object literals and\n * never imports, evaluates, or executes JavaScript/TypeScript configuration.\n */\n\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { extname, posix } from 'node:path'\n\nimport JSON5 from 'json5'\nimport { parse as parseYaml } from 'yaml'\n\nimport type { MarkdownPageIdentity } from './mdx.js'\nimport { pageIdFromReference, resolveWithin, slugifySegment } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_CONFIG_BYTES = 1_000_000\nconst CATEGORY_FILENAMES = ['_category_.json', '_category_.yml', '_category_.yaml']\nconst SIDEBAR_FILENAMES = [\n 'sidebars.json',\n 'sidebars.js',\n 'sidebars.cjs',\n 'sidebars.mjs',\n 'sidebars.ts',\n]\n\nexport interface DocusaurusPageDescriptor {\n sourcePath: string\n docId: string\n navigationId: string\n sidebarPosition?: number\n title: string\n}\n\nexport interface DocusaurusSidebars {\n config: Record<string, unknown>\n sourcePath: string\n}\n\nexport interface DocusaurusNavigationResult {\n docsConfig: MigrationDocsConfig\n generatedPages: Array<MigrationPage>\n referencedNavigationIds: Set<string>\n warnings: Array<MigrationWarning>\n}\n\ninterface ProjectionContext {\n contentRoot: string\n descriptors: Array<DocusaurusPageDescriptor>\n descriptorByDocId: Map<string, DocusaurusPageDescriptor>\n generatedPages: Array<MigrationPage>\n generatedIds: Set<string>\n referencedNavigationIds: Set<string>\n sourceUrl: string\n routePrefix: string\n sidebarSource: string\n warnings: Array<MigrationWarning>\n}\n\ninterface CategoryMetadata {\n label?: string\n position?: number\n link?: unknown\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction stripNumberPrefix(value: string): string {\n return value.replace(/^\\d+[-_]+/, '')\n}\n\nfunction normalizeDocId(value: string): string {\n return value\n .split(/[?#]/, 1)[0]\n .replace(/\\\\/g, '/')\n .replace(/^\\/+/, '')\n .replace(/\\.(?:mdx?)$/i, '')\n .split('/')\n .filter(Boolean)\n .map(stripNumberPrefix)\n .join('/')\n}\n\nfunction docusaurusSlugifySegment(value: string): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed escapes remain literal input and are normalized safely below.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\nfunction docusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value)\n .split('/')\n .map(docusaurusSlugifySegment)\n .filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction defaultDocusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value).split('/').filter(Boolean)\n if (/^(?:index|readme)$/i.test(segments.at(-1) ?? '')) segments.pop()\n const normalized = segments.map(docusaurusSlugifySegment).filter(Boolean)\n return normalized.join('/') || 'introduction'\n}\n\nfunction storageIdForRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction titleCase(value: string): string {\n return stripNumberPrefix(value)\n .replace(/sidebar$/i, '')\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction routeFromSlug(slug: string, fallback: string, sourceDirectory?: string): string | null {\n if (slug === '/') return 'introduction'\n if (slug.startsWith('/')) return docusaurusRouteId(slug)\n const fallbackDirectory = sourceDirectory ?? (fallback === 'introduction' ? '' : posix.dirname(fallback))\n const resolved = posix.normalize(posix.join(fallbackDirectory, slug))\n if (resolved === '..' || resolved.startsWith('../')) return null\n return docusaurusRouteId(resolved)\n}\n\n/** Resolve Docusaurus `id`, `slug`, and numeric-prefix semantics once. */\nexport function resolveDocusaurusPageIdentity(\n sourcePath: string,\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n): { identity: MarkdownPageIdentity; descriptor: Omit<DocusaurusPageDescriptor, 'title'> } {\n const sourceDocId = normalizeDocId(sourcePath)\n const sourceDirectory = posix.dirname(sourceDocId)\n const configuredId = typeof frontmatter.id === 'string' && frontmatter.id.trim()\n ? stripNumberPrefix(frontmatter.id.trim())\n : null\n const docId = configuredId\n ? normalizeDocId(sourceDirectory === '.' ? configuredId : posix.join(sourceDirectory, configuredId))\n : sourceDocId\n // Docusaurus collapses a source `index` document by default, but an explicit\n // `slug: index` remains a literal route. Keep those two cases distinct.\n const defaultNavigationId = defaultDocusaurusRouteId(docId) ?? fallback.navigationId\n const configuredSlug = typeof frontmatter.slug === 'string' ? frontmatter.slug.trim() : ''\n const navigationId = configuredSlug\n ? routeFromSlug(\n configuredSlug,\n defaultNavigationId,\n sourceDirectory === '.' ? '' : sourceDirectory,\n ) ?? defaultNavigationId\n : defaultNavigationId\n const position = typeof frontmatter.sidebar_position === 'number'\n && Number.isFinite(frontmatter.sidebar_position)\n ? frontmatter.sidebar_position\n : undefined\n return {\n identity: { id: storageIdForRoute(navigationId), navigationId },\n descriptor: {\n sourcePath: sourcePath.replace(/\\\\/g, '/'),\n docId,\n navigationId,\n ...(position === undefined ? {} : { sidebarPosition: position }),\n },\n }\n}\n\nfunction sourceReferenceKey(value: string): string {\n return value.replace(/\\\\/g, '/').replace(/^\\/+/, '').replace(/\\.(?:mdx?)$/i, '').replace(/\\/$/, '')\n}\n\n/**\n * Rewrite Docusaurus file/doc-id links after every final slug is known. This is\n * deliberately line based so examples inside fenced code remain byte-for-byte\n * source content.\n */\nexport function rewriteDocusaurusLinks(\n body: string,\n current: DocusaurusPageDescriptor,\n descriptors: Array<DocusaurusPageDescriptor>,\n): string {\n const routes = new Map<string, string>()\n for (const descriptor of descriptors) {\n const sourceKey = sourceReferenceKey(descriptor.sourcePath)\n routes.set(sourceKey, descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.docId), descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.navigationId), descriptor.navigationId)\n const sourceRoute = pageIdFromReference(sourceKey)\n if (sourceRoute) routes.set(sourceRoute, descriptor.navigationId)\n }\n const currentDirectory = posix.dirname(sourceReferenceKey(current.sourcePath))\n\n function rewriteTarget(target: string): string {\n if (!target || target.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(target)) return target\n const suffixIndex = target.search(/[?#]/)\n const path = suffixIndex >= 0 ? target.slice(0, suffixIndex) : target\n const suffix = suffixIndex >= 0 ? target.slice(suffixIndex) : ''\n const candidates = path.startsWith('/')\n ? [sourceReferenceKey(path), sourceReferenceKey(path).replace(/^docs\\//, '')]\n : [\n sourceReferenceKey(posix.normalize(posix.join(currentDirectory, path))),\n sourceReferenceKey(path),\n ]\n const route = candidates.map((candidate) => routes.get(candidate)).find(Boolean)\n if (!route) return target\n return `${route === 'introduction' ? '/' : `/${route}`}${suffix}`\n }\n\n let codeFence: string | null = null\n return body.split('\\n').map((line) => {\n const fence = line.match(/^\\s*(`{3,}|~{3,})/)\n if (fence) {\n if (!codeFence) codeFence = fence[1][0]\n else if (fence[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n return line\n .replace(/(\\]\\()([^\\s)]+)(?=[\\s)]|$)/g, (_match, prefix: string, target: string) => `${prefix}${rewriteTarget(target)}`)\n .replace(/(\\bhref=\")([^\"]+)(\")/g, (_match, prefix: string, target: string, suffix: string) => `${prefix}${rewriteTarget(target)}${suffix}`)\n }).join('\\n')\n}\n\nfunction readBoundedText(path: string): string {\n if (lstatSync(path).size > MAX_CONFIG_BYTES) {\n throw new Error('Docusaurus sidebar config exceeded the 1 MB static-parser limit.')\n }\n return readFileSync(path, 'utf8')\n}\n\nfunction matchingObjectLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote: string | null = null\n let isEscaped = false\n let lineComment = false\n let blockComment = false\n let objectStart = -1\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n if (lineComment) {\n if (char === '\\n') lineComment = false\n continue\n }\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (char === '\\\\') isEscaped = true\n else if (char === quote) quote = null\n continue\n }\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n if (char === '{') {\n if (objectStart < 0) objectStart = index\n depth++\n } else if (char === '}' && objectStart >= 0) {\n depth--\n if (depth === 0) return source.slice(objectStart, index + 1)\n } else if (objectStart < 0 && !/\\s/.test(char)) {\n return null\n }\n }\n return null\n}\n\nfunction parseStaticSidebarModule(source: string): Record<string, unknown> {\n const bindings = new Map<string, Record<string, unknown>>()\n const normalizedSource = replaceExternalFbContent(source)\n const parseFailures: Array<string> = []\n const assignmentPatterns = [\n /\\bmodule\\.exports\\s*=\\s*/g,\n /\\bexport\\s+default\\s*/g,\n /\\b(?:const|let|var)\\s+[A-Za-z_$][\\w$]*(?:\\s*:\\s*[^=;]+)?\\s*=\\s*/g,\n ]\n const candidates = assignmentPatterns.flatMap((pattern) => [...normalizedSource.matchAll(pattern)])\n .sort((left, right) => (left.index ?? 0) - (right.index ?? 0))\n\n for (const candidate of candidates) {\n const literal = matchingObjectLiteral(normalizedSource, (candidate.index ?? 0) + candidate[0].length)\n if (!literal) continue\n try {\n const substituted = [...bindings].reduce(\n (value, [name, binding]) => value.replace(\n new RegExp(`(:\\\\s*)${name}\\\\b`, 'g'),\n (_match, prefix: string) => `${prefix}${JSON.stringify(binding)}`,\n ),\n literal,\n )\n const parsed = JSON5.parse(substituted) as unknown\n const object = objectValue(parsed)\n if (!object) continue\n const bindingName = candidate[0].match(/\\b(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)/)?.[1]\n if (bindingName) {\n bindings.set(bindingName, object)\n continue\n }\n return object\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const line = Number(message.match(/at (\\d+):/)?.[1] ?? 0)\n const context = line > 0 ? literal.split('\\n').slice(Math.max(0, line - 2), line + 1).join(' ') : ''\n parseFailures.push(`${message}${context ? ` near ${context}` : ''}`)\n // Try the next assignment. Expressions and function calls are rejected.\n }\n }\n const exportedBinding = normalizedSource.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\b/)?.[1]\n ?? normalizedSource.match(/\\bmodule\\.exports\\s*=\\s*([A-Za-z_$][\\w$]*)\\b/)?.[1]\n if (exportedBinding && bindings.has(exportedBinding)) return bindings.get(exportedBinding)!\n throw new Error(`Sidebar config is executable or outside the supported data-only syntax.${parseFailures[0] ? ` ${parseFailures[0]}` : ''}`)\n}\n\nfunction replaceExternalFbContent(source: string): string {\n const marker = '...fbContent('\n let result = source\n let searchFrom = 0\n while (true) {\n const start = result.indexOf(marker, searchFrom)\n if (start < 0) return result.replace(/,\\s*,/g, ',')\n const objectStart = result.indexOf('{', start + marker.length)\n if (objectStart < 0) return result\n const objectLiteral = matchingObjectLiteral(result, objectStart)\n if (!objectLiteral) {\n searchFrom = start + marker.length\n continue\n }\n const objectEnd = objectStart + objectLiteral.length\n const close = result.indexOf(')', objectEnd)\n if (close < 0) return result\n const externalMatch = /\\bexternal\\s*:\\s*/g.exec(objectLiteral)\n let replacement = ''\n if (externalMatch) {\n const arrayStart = objectLiteral.indexOf('[', externalMatch.index + externalMatch[0].length)\n if (arrayStart >= 0) {\n const array = matchingArrayLiteral(objectLiteral, arrayStart)\n if (array) replacement = array.slice(1, -1)\n }\n }\n let replaceEnd = close + 1\n if (!replacement) {\n const trailingComma = result.slice(replaceEnd).match(/^\\s*,/)\n if (trailingComma) replaceEnd += trailingComma[0].length\n }\n result = `${result.slice(0, start)}${replacement}${result.slice(replaceEnd)}`\n searchFrom = start + replacement.length\n }\n}\n\nfunction matchingArrayLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote = ''\n let isEscaped = false\n for (let index = start; index < source.length; index++) {\n const character = source[index]\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === quote) quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '[') depth++\n if (character === ']' && --depth === 0) return source.slice(start, index + 1)\n }\n return null\n}\n\nfunction configuredSidebarPath(repositoryRoot: string): string | null {\n for (const filename of ['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']) {\n const path = resolveWithin(repositoryRoot, filename)\n if (!existsSync(path)) continue\n const source = readBoundedText(path)\n const match = source.match(/\\bsidebarPath\\s*:\\s*(?:require\\.resolve\\(\\s*)?(['\"])([^'\"]+)\\1/)\n if (!match) continue\n const candidate = match[2].replace(/^\\.\\//, '')\n const resolved = resolveWithin(repositoryRoot, candidate)\n if (existsSync(resolved) && lstatSync(resolved).isFile()) return candidate\n }\n return null\n}\n\n/** Read the configured/default sidebar without running the source module. */\nexport function readDocusaurusSidebars(repositoryRoot: string): DocusaurusSidebars | null {\n const configured = configuredSidebarPath(repositoryRoot)\n const sourcePath = [configured, ...SIDEBAR_FILENAMES]\n .filter((value): value is string => Boolean(value))\n .find((candidate) => existsSync(resolveWithin(repositoryRoot, candidate)))\n if (!sourcePath) return null\n const absolutePath = resolveWithin(repositoryRoot, sourcePath)\n const source = readBoundedText(absolutePath)\n const parsed = extname(sourcePath).toLowerCase() === '.json'\n ? objectValue(JSON5.parse(source))\n : parseStaticSidebarModule(source)\n if (!parsed) throw new Error('Docusaurus sidebar config must export an object.')\n return { config: parsed, sourcePath }\n}\n\nfunction readCategoryMetadata(contentRoot: string, directory: string): CategoryMetadata {\n for (const filename of CATEGORY_FILENAMES) {\n const path = resolveWithin(contentRoot, posix.join(directory, filename))\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n try {\n const raw = readBoundedText(path)\n const parsed = filename.endsWith('.json') ? JSON5.parse(raw) : parseYaml(raw)\n const object = objectValue(parsed)\n if (!object) return {}\n return {\n ...(typeof object.label === 'string' ? { label: object.label } : {}),\n ...(typeof object.position === 'number' ? { position: object.position } : {}),\n ...('link' in object ? { link: object.link } : {}),\n }\n } catch {\n return {}\n }\n }\n return {}\n}\n\nfunction descriptorSort(left: DocusaurusPageDescriptor, right: DocusaurusPageDescriptor): number {\n const leftPosition = left.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n const rightPosition = right.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n if (leftPosition !== rightPosition) return leftPosition - rightPosition\n return left.sourcePath.localeCompare(right.sourcePath, undefined, { numeric: true })\n}\n\nfunction registerDoc(docId: string, context: ProjectionContext): string | null {\n const key = normalizeDocId(docId)\n const descriptor = context.descriptorByDocId.get(key)\n ?? context.descriptors.find((page) => page.navigationId === docusaurusRouteId(key))\n if (!descriptor) {\n context.warnings.push({\n code: 'missing-page',\n message: 'A Docusaurus sidebar document did not resolve to an imported page.',\n source: docId,\n })\n return null\n }\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n}\n\nfunction generatedIndexPage(\n label: string,\n linkValue: unknown,\n context: ProjectionContext,\n): string | null {\n const link = objectValue(linkValue)\n if (!link) return null\n if (link.type === 'doc' && typeof link.id === 'string') return registerDoc(link.id, context)\n if (link.type !== 'generated-index') return null\n const fallback = `category/${slugifySegment(label)}`\n const unprefixedNavigationId = typeof link.slug === 'string'\n ? routeFromSlug(link.slug, fallback) ?? fallback\n : fallback\n const navigationId = context.routePrefix\n && unprefixedNavigationId !== context.routePrefix\n && !unprefixedNavigationId.startsWith(`${context.routePrefix}/`)\n ? posix.join(context.routePrefix, unprefixedNavigationId)\n : unprefixedNavigationId\n if (!context.generatedIds.has(navigationId)\n && !context.descriptors.some((page) => page.navigationId === navigationId)) {\n const description = typeof link.description === 'string'\n ? link.description\n : `Browse the ${label} documentation.`\n context.generatedPages.push({\n id: storageIdForRoute(navigationId),\n navigationId,\n title: typeof link.title === 'string' ? link.title : label,\n description,\n keywords: Array.isArray(link.keywords)\n ? link.keywords.filter((value): value is string => typeof value === 'string')\n : [],\n body: description,\n source: `${context.sourceUrl}#${context.sidebarSource}`,\n })\n context.generatedIds.add(navigationId)\n }\n context.referencedNavigationIds.add(navigationId)\n return navigationId\n}\n\nfunction autogeneratedItems(dirName: string, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n const normalizedDir = dirName === '.' ? '' : normalizeDocId(dirName)\n const inDirectory = context.descriptors.filter((descriptor) => {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n return !normalizedDir || source === normalizedDir || source.startsWith(`${normalizedDir}/`)\n })\n const directPages: Array<DocusaurusPageDescriptor> = []\n const childDirectories = new Set<string>()\n for (const descriptor of inDirectory) {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n const relativePath = normalizedDir ? posix.relative(normalizedDir, source) : source\n const segments = relativePath.split('/').filter(Boolean)\n if (segments.length <= 1) directPages.push(descriptor)\n else childDirectories.add(segments[0])\n }\n\n const items: Array<string | MigrationNavigationGroup> = directPages\n .sort(descriptorSort)\n .map((descriptor) => {\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n })\n const groups = [...childDirectories].map((segment) => {\n const directory = normalizedDir ? posix.join(normalizedDir, segment) : segment\n const metadata = readCategoryMetadata(context.contentRoot, directory)\n const pages = autogeneratedItems(directory, context)\n const landing = generatedIndexPage(metadata.label ?? titleCase(segment), metadata.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return {\n position: metadata.position ?? Number.MAX_SAFE_INTEGER,\n segment,\n group: {\n group: metadata.label ?? titleCase(segment),\n pages,\n } satisfies MigrationNavigationGroup,\n }\n }).sort((left, right) => left.position - right.position\n || left.segment.localeCompare(right.segment, undefined, { numeric: true }))\n items.push(...groups.map((entry) => entry.group))\n return items\n}\n\nfunction convertItems(value: unknown, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n if (typeof value === 'string') {\n const page = registerDoc(value, context)\n return page ? [page] : []\n }\n if (Array.isArray(value)) return value.flatMap((entry) => convertItems(entry, context))\n const object = objectValue(value)\n if (!object) return []\n\n if (object.type === 'doc' || object.type === 'ref') {\n const page = typeof object.id === 'string' ? registerDoc(object.id, context) : null\n return page ? [page] : []\n }\n if (object.type === 'autogenerated') {\n return autogeneratedItems(typeof object.dirName === 'string' ? object.dirName : '.', context)\n }\n if (object.type === 'category') {\n const label = typeof object.label === 'string' ? object.label : 'Documentation'\n const pages = convertItems(object.items, context)\n const landing = generatedIndexPage(label, object.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return pages.length > 0 ? [{ group: label, pages }] : []\n }\n if (object.type === 'link' || object.type === 'html') return []\n\n // Docusaurus category shorthand and sidebar slices are ordinary objects.\n return Object.entries(object).flatMap(([label, items]) => {\n const pages = convertItems(items, context)\n return pages.length > 0 ? [{ group: label, pages }] : []\n })\n}\n\n/** Project explicit and autogenerated Docusaurus sidebars into Thally tabs. */\nexport function projectDocusaurusNavigation(input: {\n sidebars: DocusaurusSidebars | null\n descriptors: Array<DocusaurusPageDescriptor>\n contentRoot: string\n sourceUrl: string\n routePrefix?: string\n}): DocusaurusNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const descriptorByDocId = new Map(input.descriptors.map((page) => [page.docId, page]))\n const context: ProjectionContext = {\n contentRoot: input.contentRoot,\n descriptors: input.descriptors,\n descriptorByDocId,\n generatedPages: [],\n generatedIds: new Set(),\n referencedNavigationIds: new Set(),\n sourceUrl: input.sourceUrl,\n routePrefix: input.routePrefix ?? '',\n sidebarSource: input.sidebars?.sourcePath ?? 'autogenerated sidebar',\n warnings,\n }\n const sidebarEntries = input.sidebars ? Object.entries(input.sidebars.config) : [['docs', [\n { type: 'autogenerated', dirName: '.' },\n ]]]\n const tabs = sidebarEntries.flatMap(([sidebarId, value]) => {\n const converted = convertItems(value, context)\n const loosePages = converted.filter((entry): entry is string => typeof entry === 'string')\n const groups = converted.filter((entry): entry is MigrationNavigationGroup => typeof entry !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n return [{\n tab: sidebarEntries.length === 1 ? 'Documentation' : titleCase(sidebarId),\n groups,\n }]\n })\n\n const unreferenced = input.descriptors\n .filter((page) => !context.referencedNavigationIds.has(page.navigationId))\n .sort(descriptorSort)\n .map((page) => page.navigationId)\n if (unreferenced.length > 0) {\n if (tabs.length === 0) tabs.push({ tab: 'Documentation', groups: [] })\n tabs[0].groups?.push({ group: 'Additional', pages: unreferenced })\n }\n return {\n docsConfig: { tabs },\n generatedPages: context.generatedPages,\n referencedNavigationIds: context.referencedNavigationIds,\n warnings,\n }\n}\n","/** Safe path normalization used before reading or writing migrated content. */\n\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nconst SAFE_SEGMENT = /[^a-z0-9._-]+/gi\n\n/**\n * Remove trailing forward slashes in linear time. Keeping leading slashes is\n * important because callers may still need to reject absolute paths.\n */\nexport function trimTrailingSlashes(value: string): string {\n let end = value.length\n while (end > 0 && value.charCodeAt(end - 1) === 47) end--\n return value.slice(0, end)\n}\n\n/** Remove forward slashes from both ends without a backtracking expression. */\nexport function trimEdgeSlashes(value: string): string {\n let start = 0\n let end = value.length\n while (start < end && value.charCodeAt(start) === 47) start++\n while (end > start && value.charCodeAt(end - 1) === 47) end--\n return value.slice(start, end)\n}\n\n/** Turn a source path segment into a stable URL/file-system slug. */\nexport function slugifySegment(value: string, preserveCase = false): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed percent escapes are legal in source filenames. Treat them as\n // literal slug input instead of letting one file abort the whole import.\n }\n const normalized = preserveCase ? decoded : decoded.toLowerCase()\n return normalized\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(SAFE_SEGMENT, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Normalize a page reference to a Thally content id. Invalid or traversal\n * references return `null` instead of being allowed near the file system.\n */\nexport function pageIdFromReference(value: string, preserveCase = false): string | null {\n const withoutQuery = value.split(/[?#]/, 1)[0].replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!withoutQuery || withoutQuery.includes('\\0')) return null\n const rawSegments = withoutQuery.split('/').filter(Boolean)\n if (rawSegments.some((segment) => segment === '..' || segment === '.')) return null\n const last = rawSegments.at(-1)?.replace(/\\.(?:mdx?|rst|txt)$/i, '') ?? ''\n const baseSegments = /^(?:index|readme)$/i.test(last) ? rawSegments.slice(0, -1) : rawSegments\n if (!/^(?:index|readme)$/i.test(last)) {\n baseSegments[baseSegments.length - 1] = last\n }\n const segments = baseSegments.map((segment) => slugifySegment(segment, preserveCase)).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\n/** Resolve an untrusted relative path and prove it remains below `root`. */\nexport function resolveWithin(root: string, candidate: string): string {\n if (isAbsolute(candidate) || candidate.includes('\\0')) {\n throw new Error(`Unsafe migration path: ${candidate}`)\n }\n const target = resolve(root, candidate)\n const fromRoot = relative(resolve(root), target)\n if (fromRoot === '..' || fromRoot.startsWith(`..${sep}`) || isAbsolute(fromRoot)) {\n throw new Error(`Migration path escapes its root: ${candidate}`)\n }\n return target\n}\n\n/** Return a slash-separated, traversal-free asset path. */\nexport function normalizeAssetPath(value: string): string | null {\n const normalized = value.replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!normalized || normalized.includes('\\0')) return null\n const segments = normalized.split('/').filter(Boolean)\n if (segments.some((segment) => segment === '.' || segment === '..')) return null\n return segments.join('/')\n}\n","/**\n * The one frontmatter parser for authored content in this package.\n *\n * `gray-matter` dispatches on the language token of the opening delimiter, so\n * `---js` frontmatter reaches an engine whose parser is literally `eval`:\n * arbitrary code execution inside whatever process reads the file. Migration\n * input is scraped from third-party sites and repositories, so every parse\n * must route through this helper rather than calling `matter()` directly.\n *\n * `{ language: 'yaml' }` does NOT close the hole: the language declared by the\n * content wins over the option. Only replacing the JavaScript engines does.\n *\n * Internal module — deliberately not part of the package's public API. The\n * app-side original is `src/lib/frontmatter.ts`; the packages keep their own\n * copies because they cannot import from the app.\n */\n\nimport matter from 'gray-matter'\n\nconst FRONTMATTER_OPTIONS = {\n engines: {\n javascript: () => ({}),\n js: () => ({}),\n },\n} as const\n\n/** Parse frontmatter without any path that can execute the content. */\nexport function parseFrontmatter(raw: string): matter.GrayMatterFile<string> {\n return matter(raw, FRONTMATTER_OPTIONS)\n}\n","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport { parseFrontmatter } from './frontmatter.js'\nimport type { MigrationPage } from './types.js'\n\nexport interface MarkdownPageIdentity {\n id: string\n navigationId: string\n locale?: string\n}\n\nfunction titleFromId(id: string): string {\n const value = id.split('/').at(-1) ?? id\n if (value === 'introduction') return 'Introduction'\n return value\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction firstParagraph(content: string): string {\n for (const block of content.split(/\\n\\s*\\n/)) {\n const value = block.replace(/\\s+/g, ' ').trim()\n if (!value || /^(?:#|```|:::|<|import\\s|export\\s)/.test(value)) continue\n return value.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1').slice(0, 240)\n }\n return ''\n}\n\nfunction docusaurusAdmonitionTag(kind: string): 'Error' | 'Info' | 'Note' | 'Warning' {\n if (kind === 'danger') return 'Error'\n if (kind === 'info') return 'Info'\n if (kind === 'caution' || kind === 'warning') return 'Warning'\n return 'Note'\n}\n\n/**\n * Convert Docusaurus' colon-fence admonitions without interpreting code-fence\n * contents. Longer delimiters support nested admonitions in the same way as\n * the source renderer.\n */\nfunction normalizeDocusaurusAdmonitions(body: string): string {\n const lines = body.split('\\n')\n const openAdmonitions: Array<{ delimiter: string; tag: string }> = []\n let codeFence: string | null = null\n\n return lines.map((line) => {\n const codeMatch = line.match(/^\\s*(`{3,}|~{3,})/)\n if (codeMatch) {\n if (!codeFence) codeFence = codeMatch[1][0]\n else if (codeMatch[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n\n const opening = line.match(/^\\s*(:{3,})(note|tip|info|warning|caution|danger)(?:\\[([^\\]]+)\\]|\\s+(.+))?\\s*$/i)\n if (opening) {\n const tag = docusaurusAdmonitionTag(opening[2].toLowerCase())\n openAdmonitions.push({ delimiter: opening[1], tag })\n const title = (opening[3] ?? opening[4])?.trim()\n return title ? `<${tag}>\\n**${title}**` : `<${tag}>`\n }\n\n const closing = line.match(/^\\s*(:{3,})\\s*$/)\n const current = openAdmonitions.at(-1)\n if (closing && current?.delimiter === closing[1]) {\n openAdmonitions.pop()\n return `</${current.tag}>`\n }\n return line\n }).join('\\n')\n}\n\n/** Normalize only syntax Thally cannot render; supported source JSX stays intact. */\nexport function normalizeMdx(body: string): string {\n return normalizeDocusaurusAdmonitions(body)\n // Docusaurus injects these theme components globally. Thally also exposes\n // its equivalents globally, so source-only imports must not survive.\n .replace(/^import\\s+(?:Tabs|TabItem|Link|DocCardList|TOCInline)\\s+from\\s+['\"]@(?:theme|docusaurus)\\/[^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/<TabItem\\b([^>]*)>/g, (_match, attributes: string) => {\n const title = attributes.match(/\\blabel=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? attributes.match(/\\bvalue=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? 'Tab'\n return `<Tab title=\"${title.replace(/\"/g, '"')}\">`\n })\n .replace(/<\\/TabItem>/g, '</Tab>')\n .replace(/<Link\\b([^>]*)\\bto=(?:\"([^\"]*)\"|'([^']*)')([^>]*)>/g, (_match, before: string, doubleQuoted: string, singleQuoted: string, after: string) => (\n `<a${before}href=\"${doubleQuoted ?? singleQuoted}\"${after}>`\n ))\n .replace(/<\\/Link>/g, '</a>')\n .replace(/<(?:DocCardList|TOCInline)\\b[^>]*\\/>/g, '')\n .replace(/<!--([\\s\\S]*?)-->/g, (_match, content: string) => `{/*${content}*/}`)\n .replace(/<Danger(\\s[^>]*)?>/g, '<Error$1>')\n .replace(/<\\/Danger>/g, '</Error>')\n .replace(/<Warn(\\s[^>]*)?>/g, '<Warning$1>')\n .replace(/<\\/Warn>/g, '</Warning>')\n .replace(/<Check(\\s[^>]*)?>/g, '<Note$1>')\n .replace(/<\\/Check>/g, '</Note>')\n .replace(/<Tree\\.Folder/g, '<Folder')\n .replace(/<\\/Tree\\.Folder>/g, '</Folder>')\n .replace(/<Tree\\.File/g, '<File')\n .replace(/<\\/Tree\\.File>/g, '</File>')\n}\n\n/** Parse source Markdown or MDX into the canonical page representation. */\nexport function parseMarkdownPage(input: {\n id: string\n navigationId?: string\n locale?: string\n raw: string\n source: string\n /** Resolve platform-specific routes from the already-parsed frontmatter. */\n resolveIdentity?: (\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n ) => MarkdownPageIdentity\n}): MigrationPage | null {\n const parsed = parseFrontmatter(input.raw)\n const fallbackIdentity: MarkdownPageIdentity = {\n id: input.id,\n navigationId: input.navigationId ?? input.id,\n ...(input.locale ? { locale: input.locale } : {}),\n }\n const identity = input.resolveIdentity?.(parsed.data, fallbackIdentity) ?? fallbackIdentity\n const body = normalizeMdx(parsed.content).trim()\n const keywords = Array.isArray(parsed.data.keywords)\n ? parsed.data.keywords.filter((value): value is string => typeof value === 'string')\n : []\n const title = typeof parsed.data.title === 'string' && parsed.data.title.trim()\n ? parsed.data.title.trim()\n : titleFromId(identity.navigationId)\n const navTitle = typeof parsed.data.sidebarTitle === 'string' && parsed.data.sidebarTitle.trim()\n ? parsed.data.sidebarTitle.trim()\n : typeof parsed.data.navTitle === 'string' && parsed.data.navTitle.trim()\n ? parsed.data.navTitle.trim()\n : undefined\n const badge = typeof parsed.data.tag === 'string' && parsed.data.tag.trim()\n ? parsed.data.tag.trim()\n : typeof parsed.data.badge === 'string' && parsed.data.badge.trim()\n ? parsed.data.badge.trim()\n : undefined\n const sourceMode = typeof parsed.data.mode === 'string' ? parsed.data.mode : undefined\n // Mintlify's frame mode and Thally's wide mode both retain the sidebar while\n // removing the on-page table of contents. Other shared modes map directly.\n const mode = sourceMode === 'frame'\n ? 'wide'\n : ['default', 'wide', 'custom', 'center', 'home'].includes(sourceMode ?? '')\n ? sourceMode as MigrationPage['mode']\n : undefined\n const description = typeof parsed.data.description === 'string' && parsed.data.description.trim()\n ? parsed.data.description.trim()\n : firstParagraph(body)\n return {\n id: identity.id,\n navigationId: identity.navigationId,\n locale: identity.locale,\n title,\n navTitle,\n description,\n badge,\n keywords,\n mode,\n hidden: parsed.data.hidden === true ? true : undefined,\n noindex: parsed.data.noindex === true || parsed.data.noindex === 'true' ? true : undefined,\n openapi: typeof parsed.data.openapi === 'string' ? parsed.data.openapi.trim() : undefined,\n body,\n source: input.source,\n }\n}\n","/**\n * Navigation projection for imported sites. Mintlify's schema is intentionally\n * more expressive than Thally's tab/group model, so complex containers are\n * flattened predictably while preserving page order and nested groups.\n */\n\nimport { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs'\nimport { dirname, extname, relative } from 'node:path'\n\nimport { pageIdFromReference, resolveWithin, trimEdgeSlashes } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationNavigationTab,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\ninterface MintlifyPageReference {\n ref: string\n navigationId: string\n locale?: string\n}\n\nconst MAX_MINTLIFY_CONFIG_BYTES = 2_000_000\n\nexport interface MintlifyNavigationResult {\n docsConfig: MigrationDocsConfig\n pageReferences: Array<MintlifyPageReference>\n warnings: Array<MigrationWarning>\n}\n\nexport interface MintlifyProjectionOptions {\n /** Public URL migrations may expose page hrefs including the docs mount path. */\n pathPrefix?: string\n}\n\n/** Preserve Mintlify's implicit `/section` route for section landing pages. */\nexport function addMintlifyDirectoryRedirects(\n config: MigrationDocsConfig,\n pages: Array<MigrationPage>,\n): MigrationDocsConfig {\n const pageIds = new Set(pages.filter((page) => !page.locale).map((page) => page.navigationId))\n const redirects = [...(config.redirects ?? [])]\n const redirectSources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n for (const page of pages) {\n if (page.locale || !/(?:^|\\/)(?:overview|introduction)$/.test(page.navigationId)) continue\n const parent = page.navigationId.replace(/\\/(?:overview|introduction)$/, '')\n if (!parent || pageIds.has(parent)) continue\n const source = `/${parent}`\n if (redirectSources.has(source)) continue\n redirects.push({ source, destination: `/${page.navigationId}`, permanent: false })\n redirectSources.add(source)\n }\n return redirects.length > 0 ? { ...config, redirects } : config\n}\n\nconst LANGUAGE_LABELS: Record<string, string> = {\n ar: 'Arabic',\n de: 'German',\n en: 'English',\n es: 'Spanish',\n fr: 'French',\n hi: 'Hindi',\n it: 'Italian',\n ja: 'Japanese',\n ko: 'Korean',\n nl: 'Dutch',\n pl: 'Polish',\n pt: 'Portuguese',\n ru: 'Russian',\n tr: 'Turkish',\n uk: 'Ukrainian',\n zh: 'Chinese',\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction projectedHref(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined\n const href = value.trim()\n if (!href || /[\\u0000-\\u001f\\u007f]/.test(href)) return undefined\n if (/^(?:javascript|data|vbscript|file):/i.test(href)) return undefined\n const scheme = href.match(/^([a-z][a-z0-9+.-]*):/i)?.[1].toLowerCase()\n if (scheme && !['http', 'https', 'mailto', 'tel'].includes(scheme)) return undefined\n return href\n}\n\nfunction labelFor(value: Record<string, unknown>, fallback: string): string {\n for (const key of ['tab', 'group', 'anchor', 'product', 'dropdown', 'version', 'menu', 'label', 'name', 'title']) {\n if (typeof value[key] === 'string' && value[key]) return String(value[key])\n }\n return fallback\n}\n\nfunction localReference(value: string): string {\n return value.split('#', 1)[0]\n}\n\nfunction jsonPointer(root: unknown, pointer: string): unknown {\n if (!pointer || pointer === '#') return root\n const tokens = pointer.replace(/^#\\/?/, '').split('/').filter(Boolean)\n return tokens.reduce<unknown>((current, token) => {\n if (Array.isArray(current)) {\n const index = Number(token)\n return Number.isSafeInteger(index) && index >= 0 ? current[index] : undefined\n }\n const object = objectValue(current)\n if (!object) return undefined\n return object[token.replace(/~1/g, '/').replace(/~0/g, '~')]\n }, root)\n}\n\nfunction readMintlifyJson(path: string, repositoryRoot: string): unknown {\n if (!existsSync(path) || !lstatSync(path).isFile()) {\n throw new Error(`Mintlify config reference is not a regular file: ${relative(repositoryRoot, path)}`)\n }\n const realPath = realpathSync(path)\n const realRoot = realpathSync(repositoryRoot)\n resolveWithin(realRoot, relative(realRoot, realPath))\n if (lstatSync(realPath).size > MAX_MINTLIFY_CONFIG_BYTES) {\n throw new Error(`Mintlify config reference exceeded ${MAX_MINTLIFY_CONFIG_BYTES / 1_000_000} MB: ${relative(repositoryRoot, path)}`)\n }\n return JSON.parse(readFileSync(realPath, 'utf8')) as unknown\n}\n\nfunction resolveJsonReferences(\n value: unknown,\n currentFile: string,\n repositoryRoot: string,\n stack: Set<string>,\n): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => resolveJsonReferences(entry, currentFile, repositoryRoot, stack))\n }\n const object = objectValue(value)\n if (!object) return value\n if (typeof object.$ref === 'string') {\n const [filePart, pointer = ''] = object.$ref.split('#', 2)\n const referencedFile = filePart\n ? resolveWithin(dirname(currentFile), filePart)\n : currentFile\n const relativePath = relative(repositoryRoot, referencedFile)\n resolveWithin(repositoryRoot, relativePath)\n const stackKey = `${referencedFile}#${pointer}`\n if (stack.has(stackKey)) throw new Error(`Circular Mintlify $ref: ${object.$ref}`)\n stack.add(stackKey)\n const referencedRoot = readMintlifyJson(referencedFile, repositoryRoot)\n const referenced = jsonPointer(referencedRoot, pointer ? `#${pointer}` : '')\n const resolved = resolveJsonReferences(referenced, referencedFile, repositoryRoot, stack)\n stack.delete(stackKey)\n const siblings = Object.fromEntries(\n Object.entries(object)\n .filter(([key]) => key !== '$ref')\n .map(([key, entry]) => [\n key,\n resolveJsonReferences(entry, currentFile, repositoryRoot, stack),\n ]),\n )\n // Mintlify merges sibling keys over object-valued references. Retaining\n // this behavior matters for split navigation files that override one\n // label, link, or visibility flag at the reference site.\n return objectValue(resolved) ? { ...resolved as Record<string, unknown>, ...siblings } : resolved\n }\n return Object.fromEntries(\n Object.entries(object).map(([key, entry]) => [\n key,\n resolveJsonReferences(entry, currentFile, repositoryRoot, stack),\n ]),\n )\n}\n\n/** Read `docs.json`/`mint.json`, including bounded local JSON references. */\nexport function readMintlifyConfig(repositoryRoot: string): Record<string, unknown> | null {\n const configPath = ['docs.json', 'mint.json']\n .map((filename) => resolveWithin(repositoryRoot, filename))\n .find(existsSync)\n if (!configPath) return null\n const raw = readMintlifyJson(configPath, repositoryRoot)\n return resolveJsonReferences(raw, configPath, repositoryRoot, new Set()) as Record<string, unknown>\n}\n\nfunction normalizePageRef(value: string, pathPrefix = ''): string | null {\n if (/^(?:https?:)?\\/\\//i.test(value) || value.startsWith('#')) return null\n let ref = localReference(value).split('?', 1)[0].replace(/^\\/+/, '')\n const prefix = trimEdgeSlashes(pathPrefix)\n if (prefix && (ref === prefix || ref.startsWith(`${prefix}/`))) {\n ref = ref === prefix ? 'introduction' : ref.slice(prefix.length + 1)\n }\n ref = ref.replace(/\\.(?:mdx?|rst|txt)$/i, '')\n // Mintlify routes are case-sensitive and commonly use camelCase filenames\n // (for example `additionalFiles`). Lowercasing here breaks both authored\n // navigation and links even though the source site resolves them correctly.\n return pageIdFromReference(ref, true)\n}\n\ninterface ProjectionContext {\n locale?: string\n pathPrefix?: string\n references: Array<MintlifyPageReference>\n seenReferences: Set<string>\n warnings: Array<MigrationWarning>\n warningKeys: Set<string>\n}\n\nfunction warnOnce(context: ProjectionContext, key: string, message: string): void {\n if (context.warningKeys.has(key)) return\n context.warningKeys.add(key)\n context.warnings.push({ code: 'unsupported-config', message })\n}\n\nfunction iconName(value: unknown): string | undefined {\n if (typeof value === 'string' && value) return value\n const icon = objectValue(value)\n return typeof icon?.name === 'string' && icon.name ? icon.name : undefined\n}\n\nfunction registerReference(value: string, context: ProjectionContext): string | null {\n const localePrefix = context.locale ? `${context.locale}/` : ''\n const localizedValue = localePrefix && value.replace(/^\\/+/, '').startsWith(localePrefix)\n ? value.replace(/^\\/+/, '').slice(localePrefix.length)\n : value\n const navigationId = normalizePageRef(localizedValue, context.pathPrefix)\n if (!navigationId) return null\n const key = `${context.locale ?? ''}:${value}`\n if (!context.seenReferences.has(key)) {\n context.seenReferences.add(key)\n context.references.push({ ref: value, navigationId, locale: context.locale })\n }\n return navigationId\n}\n\nfunction convertPage(\n value: unknown,\n context: ProjectionContext,\n): string | MigrationNavigationGroup | null {\n if (typeof value === 'string') return registerReference(value, context)\n const object = objectValue(value)\n if (!object) return null\n if (typeof object.page === 'string') return registerReference(object.page, context)\n const href = projectedHref(object.href)\n if (href && !object.pages && !object.groups) {\n const page = registerReference(href, context)\n if (page) return page\n warnOnce(\n context,\n 'external-page-link',\n 'External links nested inside a Mintlify sidebar cannot be represented as Thally pages and were omitted.',\n )\n return null\n }\n const pages = Array.isArray(object.pages) ? object.pages : []\n if ('group' in object || pages.length > 0) {\n const children: Array<string | MigrationNavigationGroup> = []\n if (typeof object.root === 'string') {\n const root = registerReference(object.root, context)\n if (root) children.push(root)\n }\n for (const page of pages) {\n const converted = convertPage(page, context)\n if (converted) children.push(converted)\n }\n if (children.length === 0) return null\n return {\n group: labelFor(object, 'Documentation'),\n ...(iconName(object.icon) ? { icon: iconName(object.icon) } : {}),\n ...(object.hidden === true ? { hidden: true } : {}),\n pages: children,\n }\n }\n return null\n}\n\nfunction convertGroups(\n values: Array<unknown>,\n context: ProjectionContext,\n fallbackGroup: string,\n): Array<MigrationNavigationGroup> {\n const groups: Array<MigrationNavigationGroup> = []\n const loosePages: Array<string | MigrationNavigationGroup> = []\n for (const value of values) {\n const converted = convertPage(value, context)\n if (!converted) continue\n if (typeof converted === 'string') loosePages.push(converted)\n else groups.push(converted)\n }\n if (loosePages.length > 0) groups.unshift({ group: fallbackGroup, pages: loosePages })\n return groups\n}\n\nfunction convertContainerToTabs(\n containerValue: unknown,\n context: ProjectionContext,\n fallbackTab: string,\n): Array<MigrationNavigationTab> {\n const container = objectValue(containerValue)\n if (!container) return []\n for (const key of ['tabs', 'anchors', 'products', 'dropdowns', 'versions', 'menus']) {\n if (!Array.isArray(container[key])) continue\n const tabs = (container[key] as Array<unknown>).flatMap((value, index) => {\n const object = objectValue(value)\n if (!object) return []\n const tab = labelFor(object, `${fallbackTab} ${index + 1}`)\n const href = projectedHref(object.href)\n if (href && !object.pages && !object.groups) {\n return [{ tab, href, ...(object.hidden === true ? { hidden: true } : {}) }]\n }\n const nested = convertContainerToTabs(object, context, tab)\n if (nested.length > 0) {\n if (nested.length === 1) {\n return [{\n ...nested[0],\n tab,\n ...(href ? { href } : {}),\n ...(object.hidden === true ? { hidden: true } : {}),\n }]\n }\n return nested.map((item) => ({ ...item, tab: `${tab}: ${item.tab}` }))\n }\n return []\n })\n if (tabs.length > 0) return tabs\n }\n const rawPages = [\n ...(Array.isArray(container.groups) ? container.groups : []),\n ...(Array.isArray(container.pages) ? container.pages : []),\n ]\n if (typeof container.root === 'string') rawPages.unshift(container.root)\n const groups = convertGroups(rawPages, context, 'Overview')\n return groups.length > 0\n ? [{\n tab: fallbackTab,\n groups,\n ...(projectedHref(container.href) ? { href: projectedHref(container.href) } : {}),\n ...(container.hidden === true ? { hidden: true } : {}),\n }]\n : []\n}\n\nfunction projectedTheme(value: unknown): MigrationDocsConfig['theme'] {\n if (value === 'maple') return 'maple'\n if (['aspen', 'luma', 'sequoia'].includes(String(value))) return 'sharp'\n if (['almond', 'palm'].includes(String(value))) return 'minimal'\n return typeof value === 'string' ? 'default' : undefined\n}\n\nfunction projectedNavbar(value: unknown): MigrationDocsConfig['navbar'] {\n const navbar = objectValue(value)\n if (!navbar) return undefined\n const links = Array.isArray(navbar.links)\n ? navbar.links.flatMap((entry) => {\n const link = objectValue(entry)\n const href = projectedHref(link?.href)\n if (!link || !href) return []\n const label = typeof link.label === 'string' ? link.label : typeof link.name === 'string' ? link.name : ''\n if (!label) return []\n return [{ label, href, ...(link.type === 'github' ? { type: 'github' as const } : {}) }]\n })\n : []\n const primaryValue = objectValue(navbar.primary)\n const primaryHref = projectedHref(primaryValue?.href)\n const primary = primaryValue && primaryHref\n ? {\n label: typeof primaryValue.label === 'string'\n ? primaryValue.label\n : primaryValue.type === 'github' ? 'GitHub' : 'Get started',\n href: primaryHref,\n }\n : undefined\n return links.length > 0 || primary ? { ...(links.length > 0 ? { links } : {}), ...(primary ? { primary } : {}) } : undefined\n}\n\nfunction projectedGlobalNavigationLinks(\n value: unknown,\n): NonNullable<NonNullable<MigrationDocsConfig['navbar']>['links']> {\n const global = objectValue(value)\n if (!global) return []\n const links: Array<{ label: string; href: string }> = []\n const visit = (entry: unknown): void => {\n if (Array.isArray(entry)) {\n entry.forEach(visit)\n return\n }\n const item = objectValue(entry)\n if (!item) return\n const href = projectedHref(item.href)\n if (href) {\n const label = labelFor(item, '')\n if (label) links.push({ label, href })\n }\n for (const key of ['tabs', 'anchors', 'dropdowns', 'products', 'versions', 'languages', 'menus']) {\n if (Array.isArray(item[key])) visit(item[key])\n }\n }\n visit(global)\n return links\n}\n\nfunction projectedFooter(value: unknown): MigrationDocsConfig['footer'] {\n const footer = objectValue(value)\n if (!footer) return undefined\n const socials = objectValue(footer.socials)\n const socialLinks = socials\n ? Object.fromEntries(Object.entries(socials).flatMap(([key, value]) => {\n const href = projectedHref(value)\n return href ? [[key, href]] : []\n }))\n : undefined\n const links = Array.isArray(footer.links)\n ? footer.links.flatMap((entry) => {\n const column = objectValue(entry)\n if (!column || !Array.isArray(column.items)) return []\n const heading = typeof column.heading === 'string'\n ? column.heading\n : typeof column.header === 'string' ? column.header : ''\n const items = column.items.flatMap((item) => {\n const link = objectValue(item)\n const href = projectedHref(link?.href)\n return link && typeof link.label === 'string' && href\n ? [{ label: link.label, href }]\n : []\n })\n return heading && items.length > 0 ? [{ heading, items }] : []\n })\n : []\n return (socialLinks && Object.keys(socialLinks).length > 0) || links.length > 0\n ? { ...(socialLinks && Object.keys(socialLinks).length > 0 ? { socials: socialLinks } : {}), ...(links.length > 0 ? { links } : {}) }\n : undefined\n}\n\nfunction projectedFont(value: unknown): { family: string; weight?: Array<string> } | undefined {\n if (typeof value === 'string' && value) return { family: value }\n const font = objectValue(value)\n if (!font) return undefined\n const family = typeof font.family === 'string'\n ? font.family\n : typeof font.name === 'string' ? font.name : undefined\n if (!family) return undefined\n const weight = Array.isArray(font.weight)\n ? font.weight.map(String)\n : Array.isArray(font.weights) ? font.weights.map(String) : undefined\n return { family, ...(weight && weight.length > 0 ? { weight } : {}) }\n}\n\nfunction projectedCompatibleConfig(config: Record<string, unknown>): Omit<MigrationDocsConfig, 'tabs' | 'i18n' | 'redirects'> {\n const banner = objectValue(config.banner)\n const bannerContent = banner && (typeof banner.content === 'string' || objectValue(banner.content))\n ? banner.content as string | Record<string, string>\n : undefined\n const bannerType = banner && ['info', 'warning', 'critical'].includes(String(banner.type ?? banner.variant))\n ? String(banner.type ?? banner.variant) as 'info' | 'warning' | 'critical'\n : undefined\n const bannerColor = objectValue(banner?.color)\n const bodyFont = projectedFont(objectValue(config.fonts)?.body ?? config.fonts)\n const headingFont = projectedFont(objectValue(config.fonts)?.heading)\n const feedback = objectValue(config.feedback)\n const seo = objectValue(config.seo)\n const navbar = projectedNavbar(config.navbar)\n const globalLinks = projectedGlobalNavigationLinks(objectValue(config.navigation)?.global)\n const navbarLinks = [...new Map(\n [...(navbar?.links ?? []), ...globalLinks].map((link) => [`${link.label}:${link.href}`, link]),\n ).values()]\n const projectedNavigation = navbarLinks.length > 0 || navbar?.primary\n ? { ...(navbarLinks.length > 0 ? { links: navbarLinks } : {}), ...(navbar?.primary ? { primary: navbar.primary } : {}) }\n : undefined\n return {\n ...(projectedTheme(config.theme) ? { theme: projectedTheme(config.theme) } : {}),\n ...(bannerContent ? {\n banner: {\n content: bannerContent,\n ...(banner?.dismissible === false ? { dismissible: false } : {}),\n ...(typeof banner?.id === 'string' ? { id: banner.id } : {}),\n ...(typeof banner?.revision === 'string' ? { revision: banner.revision } : {}),\n ...(bannerType ? { type: bannerType } : {}),\n ...(bannerColor ? { color: {\n ...(typeof bannerColor.light === 'string' ? { light: bannerColor.light } : {}),\n ...(typeof bannerColor.dark === 'string' ? { dark: bannerColor.dark } : {}),\n } } : {}),\n },\n } : {}),\n ...(projectedNavigation ? { navbar: projectedNavigation } : {}),\n ...(projectedFooter(config.footer) ? { footer: projectedFooter(config.footer) } : {}),\n ...(bodyFont || headingFont ? { fonts: { ...(bodyFont ? { body: bodyFont } : {}), ...(headingFont ? { heading: headingFont } : {}) } } : {}),\n ...(seo?.indexing === 'all' ? { seo: { indexing: 'all' } } : {}),\n ...(typeof feedback?.thumbsRating === 'boolean' ? { feedback: { thumbsRating: feedback.thumbsRating } } : {}),\n }\n}\n\n/** Convert current and legacy Mintlify navigation into Thally's schema. */\nexport function projectMintlifyNavigation(\n config: Record<string, unknown>,\n options: MintlifyProjectionOptions = {},\n): MintlifyNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const references: Array<MintlifyPageReference> = []\n const seenReferences = new Set<string>()\n const warningKeys = new Set<string>()\n const navigation = objectValue(config.navigation) ?? config\n const languages = Array.isArray(navigation.languages)\n ? navigation.languages.map(objectValue).filter((value): value is Record<string, unknown> => Boolean(value))\n : []\n let tabs: Array<MigrationNavigationTab> = []\n let i18n: MigrationDocsConfig['i18n']\n\n if (languages.length > 0) {\n const defaultLanguage = languages.find((entry) => entry.default === true) ?? languages[0]\n const defaultLocale = String(defaultLanguage.language ?? 'en')\n const locales = languages.map((entry) => {\n const code = String(entry.language ?? entry.locale ?? 'en')\n let label: string | undefined = LANGUAGE_LABELS[code]\n try {\n label ??= new Intl.DisplayNames(['en'], { type: 'language' }).of(code) ?? undefined\n } catch {\n // Unknown extension tags remain readable as their normalized code.\n }\n return { code, label: label ?? code.toUpperCase() }\n })\n i18n = { defaultLocale, locales }\n for (const language of languages) {\n const locale = String(language.language ?? language.locale ?? defaultLocale)\n const context: ProjectionContext = {\n locale,\n pathPrefix: options.pathPrefix,\n references,\n seenReferences,\n warnings,\n warningKeys,\n }\n const languageTabs = convertContainerToTabs(language, context, 'Documentation')\n if (language === defaultLanguage) tabs = languageTabs\n }\n } else {\n const context = { references, seenReferences, warnings, warningKeys, pathPrefix: options.pathPrefix }\n tabs = convertContainerToTabs(navigation, context, 'Documentation')\n if (tabs.length === 0 && Array.isArray(config.navigation)) {\n const groups = convertGroups(config.navigation, context, 'Overview')\n if (groups.length > 0) tabs = [{ tab: 'Documentation', groups }]\n }\n }\n\n if (tabs.length === 0) {\n warnings.push({\n code: 'unsupported-config',\n message: 'Mintlify navigation could not be projected; generated navigation will be used.',\n })\n }\n const redirects = Array.isArray(config.redirects)\n ? config.redirects.flatMap((value) => {\n const redirect = objectValue(value)\n if (!redirect || typeof redirect.source !== 'string' || typeof redirect.destination !== 'string') return []\n const source = redirect.source.trim()\n const destination = redirect.destination.trim()\n if (!source.startsWith('/') || !destination.startsWith('/')\n || source.startsWith('//') || destination.startsWith('//')) return []\n return [{\n source,\n destination,\n ...(typeof redirect.permanent === 'boolean' ? { permanent: redirect.permanent } : {}),\n }]\n })\n : []\n return {\n docsConfig: {\n tabs,\n ...projectedCompatibleConfig(config),\n ...(i18n ? { i18n } : {}),\n ...(redirects.length > 0 ? { redirects } : {}),\n },\n pageReferences: references,\n warnings,\n }\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_]/)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\ninterface GeneratedNavigationOptions {\n /** Dedicated docs platforms expose their primary sections as top-level tabs. */\n topLevelTabs?: boolean\n /** Ordered tabs recovered from the source site's rendered navigation. */\n topLevelNavigation?: ReadonlyArray<{\n section: string\n label: string\n pageId: string\n }>\n}\n\nconst TOP_LEVEL_LABELS: Record<string, string> = {\n 'api-reference': 'API Reference',\n cli: 'CLI',\n faqs: 'FAQs',\n introduction: 'Overview',\n 'mcp-server': 'MCP Server',\n sdk: 'SDK',\n}\n\nfunction topLevelLabel(segment: string): string {\n return TOP_LEVEL_LABELS[segment] ?? titleCase(segment)\n}\n\nfunction groupsWithinSection(\n section: string,\n pageIds: Array<string>,\n sectionLabel = topLevelLabel(section),\n): Array<MigrationNavigationGroup> {\n const groups = new Map<string, Array<string>>()\n for (const id of pageIds) {\n const relative = id === 'introduction'\n ? ''\n : id.startsWith(`${section}/`)\n ? id.slice(section.length + 1)\n : id\n const nestedSegment = relative.includes('/') ? relative.split('/', 1)[0] : 'overview'\n const group = groups.get(nestedSegment) ?? []\n group.push(id)\n groups.set(nestedSegment, group)\n }\n return [...groups].map(([segment, pages]) => ({\n group: segment === 'overview' ? sectionLabel : titleCase(segment),\n pages,\n }))\n}\n\nfunction preferredLandingPage(\n section: string,\n pageIds: Array<string>,\n): string | undefined {\n const candidates = [\n section === 'introduction' ? 'introduction' : undefined,\n `${section}/overview`,\n `${section}/introduction`,\n section,\n ]\n return candidates.find((candidate): candidate is string => Boolean(candidate && pageIds.includes(candidate)))\n}\n\n/** Build deterministic fallback navigation from imported default-locale pages. */\nexport function buildNavigationFromPages(\n pages: Array<MigrationPage>,\n options: GeneratedNavigationOptions = {},\n): MigrationDocsConfig {\n const ids = pages.filter((page) => !page.locale || page.locale === 'en').map((page) => page.navigationId)\n const ordered = [...new Set(ids)]\n if (options.topLevelTabs) {\n const sourceNavigation = (options.topLevelNavigation ?? []).flatMap((entry) => {\n const sectionPages = ordered.filter((id) => id === entry.section || id.startsWith(`${entry.section}/`))\n const pageId = ordered.includes(entry.pageId)\n ? entry.pageId\n : preferredLandingPage(entry.section, sectionPages) ?? sectionPages[0]\n return pageId ? [{ ...entry, pageId }] : []\n })\n if (sourceNavigation.length > 1) {\n const claimedIds = new Set<string>()\n const tabs = sourceNavigation.map((entry) => {\n const pageIds = ordered.filter((id) => {\n const matches = id === entry.pageId\n || id === entry.section\n || id.startsWith(`${entry.section}/`)\n if (matches) claimedIds.add(id)\n return matches\n })\n return { entry, pageIds }\n })\n // Mintlify's first tab is the documentation home and owns pages that do\n // not belong to another product tab (for example /create and /deploy).\n tabs[0].pageIds.push(...ordered.filter((id) => !claimedIds.has(id)))\n return {\n tabs: tabs.map(({ entry, pageIds }) => ({\n tab: entry.label,\n href: entry.pageId === 'introduction' ? '/' : `/${entry.pageId}`,\n groups: groupsWithinSection(entry.section, [...new Set(pageIds)], entry.label),\n })),\n }\n }\n const sectionNames = [...new Set(ordered\n .filter((id) => id.includes('/'))\n .map((id) => id.split('/', 1)[0]))]\n if (sectionNames.length > 1) {\n const defaultSection = sectionNames.includes('introduction')\n ? 'introduction'\n : sectionNames[0]\n const sections = new Map<string, Array<string>>()\n for (const id of ordered) {\n const section = id.includes('/') ? id.split('/', 1)[0] : defaultSection\n const bucket = sections.get(section) ?? []\n bucket.push(id)\n sections.set(section, bucket)\n }\n return {\n tabs: [...sections].map(([section, pageIds]) => {\n const label = topLevelLabel(section)\n const landingPage = preferredLandingPage(section, pageIds)\n return {\n tab: label,\n ...(landingPage\n ? { href: landingPage === 'introduction' ? '/' : `/${landingPage}` }\n : {}),\n groups: groupsWithinSection(section, pageIds),\n }\n }),\n }\n }\n }\n const buckets = new Map<string, Array<string>>()\n for (const id of ordered) {\n const segment = id.includes('/') ? id.split('/', 1)[0] : 'overview'\n const bucket = buckets.get(segment) ?? []\n bucket.push(id)\n buckets.set(segment, bucket)\n }\n const groups = [...buckets].map(([segment, pageIds]) => ({\n group: segment === 'overview' ? 'Overview' : titleCase(segment),\n pages: pageIds,\n }))\n return { tabs: [{ tab: 'Documentation', groups }] }\n}\n\n/** Exposed for repository discovery and focused unit tests. */\nexport function isDocumentationExtension(filename: string): boolean {\n return ['.md', '.mdx', '.rst', '.txt'].includes(extname(filename).toLowerCase())\n}\n","/** Render canonical migration bundles into a portable Thally repository tree. */\n\nimport type {\n MigrationBundle,\n MigrationDocsConfig,\n MigrationNavigationGroup,\n RenderedMigrationFile,\n} from './types.js'\n\nfunction yamlString(value: string): string {\n return JSON.stringify(value.replace(/\\s+/g, ' ').trim())\n}\n\nfunction renderPage(bundle: MigrationBundle, page: MigrationBundle['pages'][number]): string {\n return [\n '---',\n `title: ${yamlString(page.title)}`,\n page.navTitle ? `navTitle: ${yamlString(page.navTitle)}` : null,\n `description: ${yamlString(page.description)}`,\n page.badge ? `badge: ${yamlString(page.badge)}` : null,\n page.keywords.length > 0 ? `keywords: [${page.keywords.map(yamlString).join(', ')}]` : null,\n page.mode ? `mode: ${yamlString(page.mode)}` : null,\n page.hidden ? 'hidden: true' : null,\n page.noindex ? 'noindex: true' : null,\n page.openapi ? `openapi: ${yamlString(page.openapi)}` : null,\n bundle.sourceKind === 'url' ? `source: ${yamlString(page.source)}` : null,\n '---',\n '',\n page.body,\n '',\n ].filter((line) => line !== null).join('\\n')\n}\n\n/** Merge imported tabs into an existing site without duplicating changelog tabs. */\nexport function mergeMigrationConfig(\n existing: MigrationDocsConfig,\n incoming: MigrationDocsConfig,\n): MigrationDocsConfig {\n const tabs = existing.tabs.filter((tab) => tab.tab.toLowerCase() !== 'changelog')\n const names = new Set(tabs.map((tab) => tab.tab.toLowerCase()))\n const seenPages = new Set<string>()\n function recordPages(groups: MigrationDocsConfig['tabs'][number]['groups']): void {\n for (const group of groups ?? []) {\n for (const page of group.pages) {\n if (typeof page === 'string') seenPages.add(page)\n else recordPages([page])\n }\n }\n }\n for (const tab of tabs) recordPages(tab.groups)\n function uniqueGroups(\n groups: Array<MigrationNavigationGroup> | undefined,\n ): Array<MigrationNavigationGroup> {\n return (groups ?? []).flatMap<MigrationNavigationGroup>((group) => {\n const pages = group.pages.flatMap<string | MigrationNavigationGroup>((page) => {\n if (typeof page === 'string') {\n if (seenPages.has(page)) return []\n seenPages.add(page)\n return [page]\n }\n const [nested]: Array<MigrationNavigationGroup> = uniqueGroups([page])\n return nested ? [nested] : []\n })\n return pages.length > 0 ? [{ ...group, pages }] : []\n })\n }\n for (const tab of incoming.tabs) {\n if (tab.tab.toLowerCase() === 'changelog') continue\n const uniqueTab = { ...tab, ...(tab.groups ? { groups: uniqueGroups(tab.groups) } : {}) }\n if (tab.groups && uniqueTab.groups?.length === 0 && !tab.href && !tab.api) continue\n if (!names.has(tab.tab.toLowerCase())) {\n tabs.push(uniqueTab)\n names.add(tab.tab.toLowerCase())\n continue\n }\n const target = tabs.find((item) => item.tab.toLowerCase() === tab.tab.toLowerCase())\n if (!target || !uniqueTab.groups) continue\n target.groups = [...(target.groups ?? []), ...uniqueTab.groups]\n }\n const changelog = existing.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n ?? incoming.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog) tabs.push(changelog)\n const i18n = existing.i18n || incoming.i18n\n ? {\n defaultLocale: existing.i18n?.defaultLocale ?? incoming.i18n?.defaultLocale ?? 'en',\n locales: [...new Map(\n [...(existing.i18n?.locales ?? []), ...(incoming.i18n?.locales ?? [])]\n .map((locale) => [locale.code, locale]),\n ).values()],\n }\n : undefined\n return {\n ...incoming,\n ...existing,\n tabs,\n ...(i18n ? { i18n } : {}),\n }\n}\n\n/** Materialize every canonical page, asset, and config as repository file changes. */\nexport function renderMigrationFiles(\n bundle: MigrationBundle,\n options: { existingConfig?: MigrationDocsConfig } = {},\n): Array<RenderedMigrationFile> {\n const config = options.existingConfig\n ? mergeMigrationConfig(options.existingConfig, bundle.docsConfig)\n : bundle.docsConfig\n return [\n ...bundle.pages.map((page) => ({\n path: `src/content/${page.id}.mdx`,\n content: renderPage(bundle, page),\n })),\n ...bundle.assets.map((asset) => ({ path: `public/${asset.path}`, content: asset.content })),\n { path: 'docs.json', content: `${JSON.stringify(config, null, 2)}\\n` },\n ]\n}\n","/**\n * Public URL adapter for the shared migration engine. Discovery prefers\n * machine-readable Markdown and sitemaps, remains scoped to the submitted docs\n * path, then falls back to bounded navigation crawling and HTML extraction.\n */\n\nimport { load } from 'cheerio'\nimport TurndownService from 'turndown'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport { parseMarkdownPage } from './mdx.js'\nimport { addMintlifyDirectoryRedirects, buildNavigationFromPages, projectMintlifyNavigation } from './navigation.js'\nimport { pageIdFromReference } from './path.js'\nimport type {\n MigrationBundle,\n MigrationFetcher,\n MigrationFetchResponse,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationPlatform,\n MigrationWarning,\n} from './types.js'\n\nconst DEFAULT_MAX_PAGES = 1_000\nconst DEFAULT_MAX_TOTAL_BYTES = 100_000_000\nconst MAX_DISCOVERED_URLS = 5_000\nconst MAX_LOCAL_RESPONSE_BYTES = 2_000_000\nconst MAX_SITEMAP_DOCUMENTS = 25\nconst PORTABLE_MDX_COMPONENTS = new Set([\n 'Accordion', 'AccordionGroup', 'Badge', 'Callout', 'Card', 'CardGroup',\n 'Check', 'CodeGroup', 'Color', 'Column', 'Columns', 'ContentPanel', 'Danger', 'Error', 'Expandable',\n 'Agent', 'AgentPrompt', 'BannerPreview', 'Embed', 'File', 'Folder', 'Frame', 'GitHub', 'Github', 'Hero', 'Human',\n 'Icon', 'Info', 'InlinePanel', 'InlineRequestExample', 'InlineResponseExample',\n 'Latex', 'LegacyView', 'Mermaid', 'Note', 'Panel', 'ParamField', 'Prompt',\n 'PromptAssistant', 'PromptUser',\n 'RequestExample', 'ResponseExample', 'ResponseField', 'Step', 'Steps',\n 'Tab', 'Tabs', 'Terminal', 'TerminalInput', 'TerminalOutput', 'Tile', 'TileGroup',\n 'Tip', 'Tooltip', 'Tree', 'Update', 'View', 'Visibility', 'Warning',\n])\nconst LOCALE_CODES = new Set([\n 'ar', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hi', 'hu', 'id',\n 'it', 'ja', 'ko', 'ms', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv',\n 'th', 'tr', 'uk', 'vi', 'zh', 'pt-br', 'zh-hans', 'zh-hant',\n])\nconst PORTABLE_URL_PROPS = 'href|src|img|primaryHref|secondaryHref'\n\ninterface EmbeddedOpenApiFragment {\n method: string\n path: string\n document: Record<string, unknown>\n}\n\nexport interface UrlMigrationOptions {\n sourceUrl: string\n /** Explicit caller selection; omitted callers retain source auto-detection. */\n platform?: MigrationPlatform\n fetcher?: MigrationFetcher\n maxPages?: number\n concurrency?: number\n maxTotalBytes?: number\n}\n\n/** Validate the transport-level shape of a docs URL; hosted callers add SSRF checks. */\nexport function validateMigrationUrl(value: string): URL {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new Error('Enter a complete documentation URL, including https://.')\n }\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new Error('Documentation imports support only HTTP and HTTPS URLs.')\n }\n if (url.username || url.password) throw new Error('Documentation URLs cannot contain credentials.')\n url.hash = ''\n return url\n}\n\nasync function readResponseBody(response: Response): Promise<string> {\n const contentLength = Number(response.headers.get('content-length') ?? 0)\n if (contentLength > MAX_LOCAL_RESPONSE_BYTES) throw new Error('A documentation response exceeded the 2 MB import limit.')\n if (!response.body) return ''\n const reader = response.body.getReader()\n const chunks: Array<Uint8Array> = []\n let size = 0\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n size += value.byteLength\n if (size > MAX_LOCAL_RESPONSE_BYTES) {\n await reader.cancel()\n throw new Error('A documentation response exceeded the 2 MB import limit.')\n }\n chunks.push(value)\n }\n const body = new Uint8Array(size)\n let offset = 0\n for (const chunk of chunks) {\n body.set(chunk, offset)\n offset += chunk.byteLength\n }\n return new TextDecoder().decode(body)\n}\n\n/** Fetch implementation for local CLI usage. Cloud injects its pinned network boundary. */\nexport const defaultMigrationFetcher: MigrationFetcher = async (url, request) => {\n const response = await fetch(url, {\n headers: {\n Accept: request.accept,\n 'User-Agent': 'Thally-Migrate/1.0 (+https://thally.io)',\n },\n redirect: 'follow',\n signal: AbortSignal.timeout(15_000),\n })\n if (!response.ok) throw new Error(`Documentation server returned ${response.status}.`)\n return {\n finalUrl: new URL(response.url),\n body: await readResponseBody(response),\n contentType: response.headers.get('content-type') ?? '',\n headers: Object.fromEntries(response.headers.entries()),\n }\n}\n\nfunction docsScopePath(source: URL): string {\n const path = source.pathname.replace(/\\/+$/, '') || '/'\n if (path === '/') return '/'\n const segments = path.split('/').filter(Boolean)\n return `/${segments.length > 1 ? segments[0] : segments.join('/')}`\n}\n\nfunction machineIndexScopePath(\n source: URL,\n documents: Array<MigrationFetchResponse | null>,\n): string | null {\n const candidates = new Set<string>()\n for (const document of documents) {\n if (!document) continue\n const references = [...headerLinks(document)]\n if (/html/i.test(document.contentType)) {\n const $ = load(document.body)\n references.push(...$('link[href], a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter((href) => /\\/(?:llms(?:-full)?\\.txt|sitemap\\.xml)(?:[?#]|$)/i.test(href)))\n }\n for (const reference of references) {\n try {\n const indexUrl = new URL(reference, document.finalUrl)\n if (indexUrl.origin !== source.origin) continue\n const scope = indexUrl.pathname.replace(/\\/(?:llms(?:-full)?\\.txt|sitemap\\.xml)$/i, '') || '/'\n if (isInScope(source, source, scope)) candidates.add(scope)\n } catch {\n // Malformed discovery hints are ignored just like malformed page links.\n }\n }\n }\n return [...candidates].sort((left, right) => right.length - left.length)[0] ?? null\n}\n\nfunction isInScope(url: URL, source: URL, scopePath: string): boolean {\n if (url.origin !== source.origin || !['http:', 'https:'].includes(url.protocol)) return false\n const path = url.pathname.replace(/\\/+$/, '') || '/'\n if (scopePath === '/') return true\n return path === scopePath || path === `${scopePath}.md` || path.startsWith(`${scopePath}/`)\n}\n\nfunction normalizeCandidate(value: string, base: URL, source: URL, scopePath: string): URL | null {\n try {\n const url = new URL(value, base)\n url.hash = ''\n if (!isInScope(url, source, scopePath)) return null\n if (url.pathname.startsWith('/cdn-cgi/')) return null\n if (/\\/(?:llms(?:-full)?|robots)\\.txt$/i.test(url.pathname)\n || /\\/sitemap\\.xml$/i.test(url.pathname)) return null\n if (/\\.(?:avif|bmp|gif|ico|jpe?g|mp[34]|pdf|png|svg|ya?ml|webm|webp|zip)$/i.test(url.pathname)\n || /\\/(?:openapi|swagger|asyncapi)[^/]*\\.json$/i.test(url.pathname)) return null\n return url\n } catch {\n return null\n }\n}\n\nfunction candidateIdentity(url: URL): string {\n const pathname = url.pathname.replace(/\\.mdx?$/i, '').replace(/\\/+$/, '') || '/'\n return `${url.origin}${pathname}${url.search}`\n}\n\nfunction pageIdForUrl(url: URL, scopePath: string): string | null {\n let path = url.pathname.replace(/\\/+$/, '')\n if (scopePath !== '/') {\n if (path === `${scopePath}.md`) path = ''\n else if (path === scopePath) path = ''\n else if (path.startsWith(`${scopePath}/`)) path = path.slice(scopePath.length + 1)\n }\n return pageIdFromReference(path.replace(/^\\/+/, '') || 'introduction', true)\n}\n\nfunction canonicalLocalizedPageId(id: string): string {\n const [segment, ...rest] = id.split('/')\n if (LOCALE_CODES.has(segment)) return rest.length > 0 ? id : `${segment}/introduction`\n for (const locale of LOCALE_CODES) {\n if (segment !== `${locale}-api-reference`) continue\n return [locale, 'api-reference', ...rest].join('/')\n }\n return id\n}\n\nfunction detectUrlPlatform(document: MigrationFetchResponse): MigrationPlatform {\n const headers = Object.entries(document.headers ?? {})\n .map(([key, value]) => `${key}:${value ?? ''}`)\n .join(' ')\n const value = `${document.body.slice(0, 200_000)} ${headers}`.toLowerCase()\n if (value.includes('__mintlify') || value.includes('/mintlify-assets/')\n || value.includes('x-mintlify-') || value.includes('/_mintlify/')) return 'mintlify'\n if (value.includes('docusaurus') || value.includes('__docusaurus')) return 'docusaurus'\n if (value.includes('gitbook') || value.includes('gitbook.io')) return 'gitbook'\n if (value.includes('nextra')) return 'nextra'\n if (value.includes('vitepress')) return 'vitepress'\n if (value.includes('starlight')) return 'starlight'\n return 'generic'\n}\n\nfunction jsonObjectAfterKey(value: string, key: string): Record<string, unknown> | null {\n let cursor = 0\n const marker = `\"${key}\":`\n while (cursor < value.length) {\n const markerIndex = value.indexOf(marker, cursor)\n if (markerIndex < 0) return null\n let start = markerIndex + marker.length\n while (/\\s/.test(value[start] ?? '')) start += 1\n if (value[start] !== '{') {\n cursor = start + 1\n continue\n }\n let depth = 0\n let isQuoted = false\n let isEscaped = false\n for (let index = start; index < value.length; index += 1) {\n const character = value[index]\n if (isQuoted) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === '\"') isQuoted = false\n continue\n }\n if (character === '\"') {\n isQuoted = true\n continue\n }\n if (character === '{') depth += 1\n if (character === '}') {\n depth -= 1\n if (depth !== 0) continue\n try {\n const parsed = JSON.parse(value.slice(start, index + 1)) as unknown\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : null\n } catch {\n break\n }\n }\n }\n cursor = start + 1\n }\n return null\n}\n\n/**\n * Current Mintlify themes embed the resolved docs config and scoped navigation\n * in React Flight. Reading that data is substantially more faithful than\n * inferring information architecture from whichever responsive nav is visible.\n */\nfunction embeddedMintlifyConfig(body: string): Record<string, unknown> | null {\n const $ = load(body)\n const flightPayloads: Array<string> = []\n $('script').each((_index, element) => {\n const script = $(element).text()\n for (const match of script.matchAll(/self\\.__next_f\\.push\\(\\[1,(\"(?:\\\\.|[^\"\\\\])*\")\\]\\)/g)) {\n try {\n const payload = JSON.parse(match[1])\n if (typeof payload === 'string') flightPayloads.push(payload)\n } catch {\n // Older or customized shells fall back to bounded DOM inference.\n }\n }\n })\n if (flightPayloads.length === 0) return null\n const payload = flightPayloads.join('\\n')\n const docsConfig = jsonObjectAfterKey(payload, 'docsConfig')\n const scopedNavigation = jsonObjectAfterKey(payload, 'scopedNav')\n if (!docsConfig && !scopedNavigation) return null\n return {\n ...(docsConfig ?? {}),\n ...(scopedNavigation ? { navigation: scopedNavigation } : {}),\n }\n}\n\nfunction plainDescription(value: string): string {\n return value\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .replace(/[`*_>#-]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n .slice(0, 240)\n}\n\nfunction withoutFencedCode(body: string): string {\n let fenceCharacter = ''\n let fenceLength = 0\n return body.split('\\n').map((line) => {\n const match = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (match && !fenceCharacter) {\n fenceCharacter = match[1][0]\n fenceLength = match[1].length\n return ''\n }\n if (match && match[1][0] === fenceCharacter && match[1].length >= fenceLength\n && match[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n return ''\n }\n return fenceCharacter ? '' : line\n }).join('\\n')\n}\n\nfunction eventHandlerPropEnd(value: string, start: number): number | null {\n const opening = value[start]\n if (opening === '\"' || opening === \"'\") {\n for (let index = start + 1; index < value.length; index += 1) {\n if (value[index] === opening && value[index - 1] !== '\\\\') return index + 1\n }\n return null\n }\n if (opening !== '{') {\n const match = value.slice(start).match(/^[^\\s>]+/)\n return match ? start + match[0].length : null\n }\n let depth = 0\n let quote = ''\n for (let index = start; index < value.length; index += 1) {\n const character = value[index]\n if (quote) {\n if (character === quote && value[index - 1] !== '\\\\') quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '{') depth += 1\n if (character === '}') {\n depth -= 1\n if (depth === 0) return index + 1\n }\n }\n return null\n}\n\nfunction stripEventHandlerProps(line: string): string {\n const matcher = /\\s+on[A-Z][A-Za-z0-9]*\\s*=\\s*/g\n let cursor = 0\n let result = ''\n for (const match of line.matchAll(matcher)) {\n const start = match.index\n const valueStart = start + match[0].length\n const end = eventHandlerPropEnd(line, valueStart)\n if (end === null) continue\n result += line.slice(cursor, start)\n cursor = end\n }\n return cursor === 0 ? line : `${result}${line.slice(cursor)}`\n}\n\nfunction hasUnsafeUrlScheme(value: string): boolean {\n const normalized = value\n .trim()\n .replace(/[\\u0000-\\u0020]/g, '')\n .replace(/&(?:#x0*3a|#0*58|colon);/gi, ':')\n return /^(?:javascript|data|vbscript):/i.test(normalized)\n}\n\nfunction hasUnsafePortableUrlProp(value: string): boolean {\n const quotedProps = new RegExp(`\\\\b(?:${PORTABLE_URL_PROPS})\\\\s*=\\\\s*(['\"])([^'\"\\\\r\\\\n]*)\\\\1`, 'gi')\n for (const match of value.matchAll(quotedProps)) {\n if (hasUnsafeUrlScheme(match[2])) return true\n }\n const expressionProps = new RegExp(`\\\\b(?:${PORTABLE_URL_PROPS})\\\\s*=\\\\s*\\\\{\\\\s*(\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\")\\\\s*\\\\}`, 'gi')\n for (const match of value.matchAll(expressionProps)) {\n try {\n if (hasUnsafeUrlScheme(JSON.parse(match[1]))) return true\n } catch {\n return true\n }\n }\n return false\n}\n\nfunction portableHtmlToMarkdown(value: string): string {\n return value\n .replace(/<span\\b[^>]*>|<\\/span>/gi, '')\n .replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (_original, attributes: string, label: string) => {\n const href = attributes.match(/\\bhref\\s*=\\s*(['\"])(.*?)\\1/i)?.[2]\n const plainLabel = label.replace(/<[^>]+>/g, '').trim()\n if (!href || hasUnsafeUrlScheme(href)) return plainLabel\n return `[${plainLabel.replace(/]/g, '\\\\]')}](${href})`\n })\n .replace(/<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi, (_original, level: string, content: string) => {\n return `\\n${'#'.repeat(Number(level))} ${content.trim()}\\n`\n })\n .replace(/<p\\b[^>]*>([\\s\\S]*?)<\\/p>/gi, (_original, content: string) => `\\n${content.trim()}\\n`)\n .replace(/<br\\s*\\/?\\s*>/gi, '\\n')\n .replace(/<\\/?(?:article|div|main|section)\\b[^>]*>/gi, '')\n}\n\nfunction transformMarkdownProse(body: string, transform: (value: string) => string): string {\n const output: Array<string> = []\n let prose: Array<string> = []\n let fenceCharacter = ''\n let fenceLength = 0\n const flushProse = () => {\n if (prose.length === 0) return\n output.push(transform(prose.join('\\n')))\n prose = []\n }\n for (const line of body.split('\\n')) {\n const fence = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (fence && !fenceCharacter) {\n flushProse()\n fenceCharacter = fence[1][0]\n fenceLength = fence[1].length\n output.push(line)\n continue\n }\n if (fenceCharacter) {\n output.push(line)\n if (fence && fence[1][0] === fenceCharacter && fence[1].length >= fenceLength\n && fence[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n }\n continue\n }\n prose.push(line)\n }\n flushProse()\n return output.join('\\n')\n}\n\nfunction sanitizeRemoteMarkdown(body: string): string | null {\n let fenceCharacter = ''\n let fenceLength = 0\n const portableBody = transformMarkdownProse(body, portableHtmlToMarkdown)\n const sanitized = portableBody.split('\\n').map((line) => {\n const fence = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (fence && !fenceCharacter) {\n fenceCharacter = fence[1][0]\n fenceLength = fence[1].length\n return line\n }\n if (fence && fence[1][0] === fenceCharacter && fence[1].length >= fenceLength\n && fence[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n return line\n }\n if (fenceCharacter) return line\n return portableHtmlToMarkdown(stripEventHandlerProps(line\n .replace(/!\\[([^\\]]*)\\]\\(\\s*([^)]+)\\)/g, (original, alternative: string, destination: string) => {\n return hasUnsafeUrlScheme(destination.replace(/^<|>$/g, '')) ? alternative : original\n })\n .replace(/<img\\s+([^>]*?)\\/?\\s*>/gi, (original, attributes: string) => {\n const source = attributes.match(/\\bsrc\\s*=\\s*(['\"])(.*?)\\1/i)?.[2]\n const alternative = attributes.match(/\\balt\\s*=\\s*(['\"])(.*?)\\1/i)?.[2] ?? ''\n if (!source || hasUnsafeUrlScheme(source)) return ''\n return `![${alternative.replace(/]/g, '\\\\]')}](${source})`\n })))\n }).join('\\n')\n const executable = withoutFencedCode(sanitized)\n .replace(/\\{\\/\\*[\\s\\S]*?\\*\\/\\}/g, '')\n .replace(/<(?:https?:\\/\\/|mailto:)[^>]+>/gi, '')\n .replace(/(`+)[\\s\\S]*?\\1/g, '')\n if (/^\\s*(?:import|export)\\s/m.test(executable)) return null\n // A public Markdown endpoint is still attacker-controlled MDX. Preserve\n // known documentation primitives and JSON-literal props, but never compile\n // executable expressions, raw HTML, event handlers, or local components.\n let hasUnsafeExpression = false\n const withoutStaticProps = executable.replace(/=\\{([^{}\\n]*)\\}/g, (original, value: string) => {\n try {\n JSON.parse(value)\n return '=\"\"'\n } catch {\n hasUnsafeExpression = true\n return original\n }\n }).replace(/\\\\[{}]/g, '')\n if (hasUnsafeExpression || /[{}]/.test(withoutStaticProps)\n || /\\bon[A-Z][A-Za-z]*\\s*=/g.test(withoutStaticProps)\n || hasUnsafePortableUrlProp(executable)) return null\n for (const match of withoutStaticProps.matchAll(/<\\/?([A-Za-z][A-Za-z0-9.]*)(?:\\s|>|\\/)/g)) {\n const component = match[1].split('.', 1)[0]\n if (!PORTABLE_MDX_COMPONENTS.has(component)) return null\n }\n return sanitized\n}\n\nfunction migratedHref(\n href: string,\n currentUrl: URL,\n source: URL,\n scopePath: string,\n importedIds: Set<string>,\n sourceHomePageId?: string,\n): string {\n if (/^(?:javascript|data|vbscript):/i.test(href)) return '#'\n if (href.startsWith('#') || /^(?:mailto|tel):/i.test(href)) return href\n try {\n const target = new URL(href, currentUrl)\n if (target.origin !== source.origin) return href\n if (scopePath === '/' && candidateIdentity(target) === candidateIdentity(source)) {\n return `/${target.search}${target.hash}`\n }\n let path = target.pathname\n if (scopePath !== '/' && (path === scopePath || path.startsWith(`${scopePath}/`))) {\n path = path.slice(scopePath.length)\n }\n const id = pageIdFromReference(path.replace(/^\\/+/, '') || 'introduction')\n const localizedId = id ? canonicalLocalizedPageId(id) : id\n const destinationId = localizedId === sourceHomePageId ? 'introduction' : localizedId\n let importedDestinationId = destinationId && importedIds.has(destinationId)\n ? destinationId\n : undefined\n if (destinationId && !importedDestinationId) {\n importedDestinationId = [`${destinationId}/overview`, `${destinationId}/introduction`]\n .find((candidate) => importedIds.has(candidate))\n ?? [...importedIds].find((candidate) => candidate.startsWith(`${destinationId}/`))\n }\n if (importedDestinationId) {\n const destination = importedDestinationId === 'introduction' ? '/' : `/${importedDestinationId}`\n return `${destination}${target.search}${target.hash}`\n }\n // Same-origin marketing and intentionally missing example links remain\n // valid external URLs instead of becoming broken links in the new site.\n return target.toString()\n } catch {\n return href\n }\n}\n\nfunction rewriteInternalLinks(\n body: string,\n currentUrl: URL,\n source: URL,\n scopePath: string,\n importedIds: Set<string>,\n sourceHomePageId?: string,\n): string {\n const markdown = body.replace(/(?<!!)\\[([^\\]]+)\\]\\(([^)\\s]+)(\\s+['\"][^'\"]*['\"])?\\)/g, (\n original,\n label: string,\n href: string,\n title = '',\n ) => {\n const destination = migratedHref(href, currentUrl, source, scopePath, importedIds, sourceHomePageId)\n return destination === href ? original : `[${label}](${destination}${title})`\n })\n return markdown.replace(/\\bhref=(['\"])([^'\"]+)\\1/g, (_original, quote: string, href: string) => {\n const destination = migratedHref(href, currentUrl, source, scopePath, importedIds, sourceHomePageId)\n return `href=${quote}${destination}${quote}`\n })\n}\n\nfunction remoteMarkdownMetadata(body: string): {\n content: string\n title?: string\n description?: string\n sidebarTitle?: string\n tag?: string\n mode?: string\n hidden?: boolean\n noindex?: boolean\n} {\n if (!/^---\\r?\\n/.test(body)) return { content: body }\n const end = body.slice(4, 65_540).search(/\\r?\\n---(?:\\r?\\n|$)/)\n if (end < 0) return { content: body }\n const frontmatter = body.slice(4, end + 4)\n const contentStart = end + 4 + body.slice(end + 4).match(/^\\r?\\n---(?:\\r?\\n|$)/)![0].length\n function scalar(key: string): string | undefined {\n const value = frontmatter.match(new RegExp(`^${key}:\\\\s*(.+)$`, 'm'))?.[1].trim()\n if (!value) return undefined\n if (/^['\"].*['\"]$/.test(value)) {\n try {\n const parsed = JSON.parse(value.replace(/^'/, '\"').replace(/'$/, '\"'))\n return typeof parsed === 'string' ? parsed : undefined\n } catch {\n return value.slice(1, -1)\n }\n }\n return value.slice(0, 500)\n }\n return {\n content: body.slice(contentStart),\n title: scalar('title'),\n description: scalar('description'),\n sidebarTitle: scalar('sidebarTitle'),\n tag: scalar('tag'),\n mode: scalar('mode'),\n hidden: scalar('hidden') === 'true' ? true : undefined,\n noindex: scalar('noindex') === 'true' ? true : undefined,\n }\n}\n\nfunction stripMintlifyDocumentationIndex(body: string): string {\n const lines = body.split(/\\r?\\n/)\n if (!/^>\\s*##\\s+Documentation Index\\s*$/i.test(lines[0] ?? '')\n || !/^>.*\\/llms(?:-full)?\\.txt/i.test(lines[1] ?? '')\n || !/^>.*discover all available pages/i.test(lines[2] ?? '')) return body\n let index = 3\n while (index < lines.length && /^>/.test(lines[index])) index += 1\n while (index < lines.length && lines[index].trim() === '') index += 1\n return lines.slice(index).join('\\n')\n}\n\nfunction extractEmbeddedOpenApi(content: string): {\n content: string\n openapi?: string\n fragment?: EmbeddedOpenApiFragment\n} {\n const fencePattern = /^\\s{0,3}(`{3,}|~{3,})(?:yaml|yml|json)\\s+(\\S+\\.(?:yaml|yml|json))\\s+(delete|get|head|options|patch|post|put|trace)\\s+(\\/\\S+)\\s*\\r?\\n([\\s\\S]*?)^\\s{0,3}\\1\\s*$/im\n const match = fencePattern.exec(content)\n if (!match) return { content }\n try {\n const parsed = parseYaml(match[5], { maxAliasCount: 50 })\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return { content }\n const document = parsed as Record<string, unknown>\n if (typeof document.openapi !== 'string' && typeof document.swagger !== 'string') return { content }\n const method = match[3].toUpperCase()\n const path = match[4]\n const paths = document.paths\n if (!paths || typeof paths !== 'object' || Array.isArray(paths)) return { content }\n const pathItem = (paths as Record<string, unknown>)[path]\n if (!pathItem || typeof pathItem !== 'object' || Array.isArray(pathItem)\n || !(match[3].toLowerCase() in pathItem)) return { content }\n const before = content.slice(0, match.index).replace(/(?:^|\\n)##\\s+OpenAPI\\s*\\n\\s*$/i, '\\n')\n const after = content.slice(match.index + match[0].length)\n return {\n content: `${before}${after}`.trim(),\n openapi: `${method} ${path}`,\n fragment: {\n method,\n path,\n document,\n },\n }\n } catch {\n return { content }\n }\n}\n\nfunction markdownPage(document: MigrationFetchResponse, id: string): {\n page: MigrationPage | null\n openApiFragment?: EmbeddedOpenApiFragment\n} {\n const parsed = remoteMarkdownMetadata(document.body)\n let content = stripMintlifyDocumentationIndex(parsed.content).trimStart()\n const titleMatch = content.match(/^#\\s+(.+)\\r?\\n/)\n const title = parsed.title ?? titleMatch?.[1] ?? id.split('/').at(-1) ?? 'Introduction'\n if (titleMatch) content = content.slice(titleMatch[0].length).trimStart()\n let description = parsed.description\n if (!description) {\n const quoteMatch = content.match(/^(>[^\\r\\n]*(?:\\r?\\n>[^\\r\\n]*)*)\\r?\\n/)\n if (quoteMatch) {\n description = plainDescription(quoteMatch[1].replace(/^>\\s?/gm, ''))\n content = content.slice(quoteMatch[0].length).trimStart()\n }\n }\n // Re-emit only scalar metadata we parsed ourselves. `gray-matter` remains in\n // the shared page parser for trusted repository sources, but never receives\n // attacker-controlled YAML aliases from a public URL.\n const embeddedOpenApi = extractEmbeddedOpenApi(content)\n const raw = [\n '---',\n `title: ${JSON.stringify(title)}`,\n ...(description ? [`description: ${JSON.stringify(description)}`] : []),\n ...(parsed.sidebarTitle ? [`sidebarTitle: ${JSON.stringify(parsed.sidebarTitle)}`] : []),\n ...(parsed.tag ? [`tag: ${JSON.stringify(parsed.tag)}`] : []),\n ...(parsed.mode ? [`mode: ${JSON.stringify(parsed.mode)}`] : []),\n ...(parsed.hidden ? ['hidden: true'] : []),\n ...(parsed.noindex ? ['noindex: true'] : []),\n ...(embeddedOpenApi.openapi ? [`openapi: ${JSON.stringify(embeddedOpenApi.openapi)}`] : []),\n '---',\n '',\n embeddedOpenApi.content,\n ].join('\\n')\n return {\n page: parseMarkdownPage({ id, raw, source: document.finalUrl.toString() }),\n openApiFragment: embeddedOpenApi.fragment,\n }\n}\n\nfunction mergeRecord(target: Record<string, unknown>, source: unknown): void {\n if (!source || typeof source !== 'object' || Array.isArray(source)) return\n for (const [key, value] of Object.entries(source)) {\n if (['__proto__', 'constructor', 'prototype'].includes(key)) continue\n if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = value\n continue\n }\n const current = target[key]\n if (current && value && typeof current === 'object' && typeof value === 'object'\n && !Array.isArray(current) && !Array.isArray(value)) {\n mergeRecord(current as Record<string, unknown>, value)\n }\n }\n}\n\nfunction mergeEmbeddedOpenApi(fragments: Array<EmbeddedOpenApiFragment>): Uint8Array | null {\n const first = fragments[0]\n if (!first) return null\n const combined: Record<string, unknown> = {\n ...first.document,\n paths: {},\n components: {},\n }\n const combinedPaths = combined.paths as Record<string, unknown>\n const combinedComponents = combined.components as Record<string, unknown>\n const tags = new Map<string, unknown>()\n for (const fragment of fragments) {\n const sourcePaths = fragment.document.paths as Record<string, unknown>\n const sourcePathItem = sourcePaths?.[fragment.path]\n if (!sourcePathItem || typeof sourcePathItem !== 'object' || Array.isArray(sourcePathItem)) continue\n const sourceOperation = (sourcePathItem as Record<string, unknown>)[fragment.method.toLowerCase()]\n if (!sourceOperation || typeof sourceOperation !== 'object' || Array.isArray(sourceOperation)) continue\n const operation = { ...(sourceOperation as Record<string, unknown>) }\n if (!operation.servers && Array.isArray(fragment.document.servers)) operation.servers = fragment.document.servers\n if (!operation.security && Array.isArray(fragment.document.security)) operation.security = fragment.document.security\n const existingPath = combinedPaths[fragment.path]\n const pathItem = existingPath && typeof existingPath === 'object' && !Array.isArray(existingPath)\n ? existingPath as Record<string, unknown>\n : {}\n for (const sharedKey of ['parameters', 'servers', 'summary', 'description']) {\n const sharedValue = (sourcePathItem as Record<string, unknown>)[sharedKey]\n if (sharedValue !== undefined && pathItem[sharedKey] === undefined) pathItem[sharedKey] = sharedValue\n }\n pathItem[fragment.method.toLowerCase()] = operation\n combinedPaths[fragment.path] = pathItem\n mergeRecord(combinedComponents, fragment.document.components)\n for (const tag of Array.isArray(fragment.document.tags) ? fragment.document.tags : []) {\n if (!tag || typeof tag !== 'object' || Array.isArray(tag)) continue\n const name = (tag as Record<string, unknown>).name\n if (typeof name === 'string' && !tags.has(name)) tags.set(name, tag)\n }\n }\n if (Object.keys(combinedPaths).length === 0) return null\n if (Object.keys(combinedComponents).length === 0) delete combined.components\n if (tags.size > 0) combined.tags = [...tags.values()]\n return new TextEncoder().encode(stringifyYaml(combined))\n}\n\nfunction htmlPage(\n document: MigrationFetchResponse,\n id: string,\n): { page: MigrationPage | null; links: Array<string> } {\n const $ = load(document.body)\n const links = $('nav a[href], main a[href], article a[href], [role=\"main\"] a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter(Boolean)\n const title = $('main h1, article h1, h1').first().text().trim()\n || $('meta[property=\"og:title\"]').attr('content')?.trim()\n || $('title').text().split('|')[0].trim()\n const description = $('meta[name=\"description\"]').attr('content')?.trim()\n || $('meta[property=\"og:description\"]').attr('content')?.trim()\n const content = $('main article, article, main, [role=\"main\"]').first()\n const root = content.length ? content : $('body')\n root.find('script,style,noscript,nav,header,footer,aside,form,button,svg,iframe,object,embed,link,meta').remove()\n root.find('.theme-doc-version-badge,.theme-doc-breadcrumbs,.theme-doc-toc-mobile,.table-of-contents,.hash-link').remove()\n root.find('a[href]').each((_index, element) => {\n const href = $(element).attr('href')\n if (!href) return\n try {\n const resolved = new URL(href, document.finalUrl)\n if (['http:', 'https:', 'mailto:', 'tel:'].includes(resolved.protocol)) {\n $(element).attr('href', resolved.toString())\n } else {\n $(element).removeAttr('href')\n }\n } catch {\n $(element).removeAttr('href')\n }\n })\n root.find('img[src]').each((_index, element) => {\n const src = $(element).attr('src')\n if (!src) return\n try {\n const resolved = new URL(src, document.finalUrl)\n if (['http:', 'https:'].includes(resolved.protocol)) {\n $(element).attr('src', resolved.toString())\n } else {\n $(element).removeAttr('src')\n }\n } catch {\n $(element).removeAttr('src')\n }\n })\n const turndown = new TurndownService({ codeBlockStyle: 'fenced', emDelimiter: '_', headingStyle: 'atx' })\n turndown.remove(['script', 'style', 'noscript'])\n turndown.addRule('docusaurus-admonition', {\n filter: (node) => node.nodeName === 'DIV'\n && (node as HTMLElement).classList.contains('theme-admonition'),\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const className = element.className\n const tag = /admonition-(?:danger)/.test(className)\n ? 'Error'\n : /admonition-(?:caution|warning)/.test(className)\n ? 'Warning'\n : /admonition-info/.test(className)\n ? 'Info'\n : 'Note'\n const fragment = load(element.outerHTML)\n const clone = fragment('.theme-admonition').first()\n const title = clone.find('[class*=\"admonitionHeading\"],.admonition-heading').first()\n const titleText = title.text().trim()\n title.remove()\n const markdown = turndown.turndown(clone.html() ?? '').trim()\n return `\\n\\n<${tag}>\\n${titleText ? `**${titleText}**\\n\\n` : ''}${markdown}\\n</${tag}>\\n\\n`\n },\n })\n turndown.addRule('docusaurus-tabs', {\n filter: (node) => node.nodeName === 'DIV'\n && (node as HTMLElement).classList.contains('tabs-container'),\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const fragment = load(element.outerHTML)\n const container = fragment('.tabs-container').first()\n const labels = container.children('ul.tabs').children('li').toArray()\n .map((item) => fragment(item).text().trim() || 'Tab')\n const panels = container.children('div[role=\"tabpanel\"]').toArray()\n if (panels.length === 0) return _content\n const tabs = panels.map((panel, index) => {\n const title = (labels[index] ?? `Tab ${index + 1}`).replace(/\"/g, '"')\n return `<Tab title=\"${title}\">\\n${turndown.turndown(fragment(panel).html() ?? '').trim()}\\n</Tab>`\n })\n return `\\n\\n<Tabs>\\n${tabs.join('\\n\\n')}\\n</Tabs>\\n\\n`\n },\n })\n turndown.addRule('gfm-table', {\n filter: 'table',\n replacement: (_content, node) => {\n const fragment = load((node as HTMLElement).outerHTML)\n const rows = fragment('tr').toArray().map((row) => (\n fragment(row).children('th,td').toArray().map((cell) => fragment(cell).text()\n .replace(/\\s+/g, ' ')\n .replace(/\\|/g, '\\\\|')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\\{/g, '{')\n .replace(/\\}/g, '}')\n .trim())\n )).filter((row) => row.length > 0)\n if (rows.length === 0) return ''\n const width = Math.max(...rows.map((row) => row.length))\n const normalized = rows.map((row) => [...row, ...Array<string>(width - row.length).fill('')])\n return `\\n\\n| ${normalized[0].join(' | ')} |\\n| ${Array<string>(width).fill('---').join(' | ')} |\\n${normalized.slice(1).map((row) => `| ${row.join(' | ')} |`).join('\\n')}\\n\\n`\n },\n })\n turndown.addRule('migration-safe-fenced-code', {\n filter: (node) => node.nodeName === 'PRE',\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const fragment = load(element.outerHTML)\n const tokenLines = fragment('.token-line').toArray()\n const code = (tokenLines.length > 0\n ? tokenLines.map((line) => fragment(line).text()).join('\\n')\n : fragment('pre').text()).replace(/\\n$/, '')\n const language = fragment('code').attr('class')?.match(/(?:language-|lang-)([A-Za-z0-9_+-]+)/)?.[1] ?? ''\n const longestFence = Math.max(0, ...[...code.matchAll(/`+/g)].map((match) => match[0].length))\n const fence = '`'.repeat(Math.max(3, longestFence + 1))\n return `\\n\\n${fence}${language}\\n${code}\\n${fence}\\n\\n`\n },\n })\n const escape = turndown.escape.bind(turndown)\n turndown.escape = (text: string) => escape(text).replace(/[<{]/g, (match) => `\\\\${match}`)\n const body = turndown.turndown(root.html() ?? '').trim()\n // Docusaurus can intentionally publish title-only reference/partial pages.\n // Keep those real article routes while still rejecting empty search/app\n // shells that happen to expose a document title.\n if (!title || (body.length < 40 && $('article').length === 0)) return { page: null, links }\n return {\n page: {\n id,\n navigationId: id,\n title,\n description: description || plainDescription(body) || `Documentation imported from ${document.finalUrl.hostname}.`,\n keywords: [],\n body,\n source: document.finalUrl.toString(),\n },\n links,\n }\n}\n\nfunction htmlNavigationLinks(document: MigrationFetchResponse): Array<string> {\n const $ = load(document.body)\n return $('.nav-tabs a[href], nav a[href], aside a[href], [role=\"navigation\"] a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter(Boolean)\n}\n\ninterface SourceNavigationTab {\n section: string\n label: string\n pageId: string\n}\n\ninterface DocusaurusSidebarItem {\n label: string\n href?: string\n items?: Array<DocusaurusSidebarItem>\n isCategory?: boolean\n}\n\ninterface DocusaurusSidebarSnapshot {\n items: Array<DocusaurusSidebarItem>\n}\n\ninterface DocusaurusDiscovery {\n scopePath: string\n excludedVersionPrefixes: Array<string>\n sidebar: DocusaurusSidebarSnapshot | null\n}\n\nfunction normalizedLinkLabel(value: string): string {\n return value.replace(/\\s+/g, ' ').trim()\n}\n\nfunction readDocusaurusSidebar(document: MigrationFetchResponse): DocusaurusSidebarSnapshot | null {\n if (!/html/i.test(document.contentType)) return null\n const $ = load(document.body)\n const sidebar = $('ul.theme-doc-sidebar-menu').first()\n if (sidebar.length === 0) return null\n\n type CheerioSelector = Exclude<Parameters<ReturnType<typeof load>>[0], undefined>\n function readList(list: CheerioSelector): Array<DocusaurusSidebarItem> {\n return $(list).children('li').toArray().flatMap((item) => {\n const directLink = $(item).children('a.menu__link').first()\n const collapsibleLink = $(item)\n .children('.menu__list-item-collapsible')\n .children('a.menu__link')\n .first()\n const link = directLink.length > 0 ? directLink : collapsibleLink\n const label = normalizedLinkLabel(link.text())\n const href = link.attr('href')\n const nested = $(item).children('ul.menu__list').first()\n const children = nested.length > 0 ? readList(nested.get(0)!) : []\n const isCategory = $(item).hasClass('theme-doc-sidebar-item-category')\n || link.hasClass('menu__link--sublist')\n if (!label && children.length === 0) return []\n return [{\n label: label || 'Documentation',\n ...(href ? { href: new URL(href, document.finalUrl).toString() } : {}),\n ...(children.length > 0 ? { items: children } : {}),\n ...(isCategory ? { isCategory: true } : {}),\n }]\n })\n }\n\n return { items: readList(sidebar.get(0)!) }\n}\n\nfunction docusaurusSidebarHrefs(snapshot: DocusaurusSidebarSnapshot | null): Array<string> {\n const hrefs: Array<string> = []\n const visit = (items: Array<DocusaurusSidebarItem>) => {\n for (const item of items) {\n if (item.href) hrefs.push(item.href)\n if (item.items) visit(item.items)\n }\n }\n if (snapshot) visit(snapshot.items)\n return hrefs\n}\n\nfunction deriveDocusaurusScope(\n source: URL,\n document: MigrationFetchResponse,\n submittedScopePath: string,\n): DocusaurusDiscovery {\n const $ = load(document.body)\n const sidebar = readDocusaurusSidebar(document)\n const internalPaths = docusaurusSidebarHrefs(sidebar).flatMap((href) => {\n try {\n const url = new URL(href)\n return url.origin === source.origin ? [url.pathname.replace(/\\/+$/, '') || '/'] : []\n } catch {\n return []\n }\n })\n const counts = new Map<string, number>()\n for (const path of internalPaths) {\n const segments = path.split('/').filter(Boolean)\n for (let length = 1; length < segments.length; length++) {\n const prefix = `/${segments.slice(0, length).join('/')}`\n counts.set(prefix, (counts.get(prefix) ?? 0) + 1)\n }\n }\n const threshold = Math.max(2, Math.ceil(internalPaths.length * 0.6))\n const scopePath = [...counts]\n .filter(([, count]) => count >= threshold)\n .sort((left, right) => right[0].split('/').length - left[0].split('/').length\n || right[1] - left[1])[0]?.[0]\n ?? submittedScopePath\n\n const excludedVersionPrefixes = $('.dropdown__menu a[href]').toArray().flatMap((element) => {\n const href = $(element).attr('href')\n if (!href) return []\n try {\n const target = new URL(href, document.finalUrl)\n if (target.origin !== source.origin || !isInScope(target, source, scopePath)) return []\n const relativePath = target.pathname.slice(scopePath.length).replace(/^\\/+/, '')\n const version = relativePath.split('/', 1)[0]\n if (!/^(?:legacy|next|v\\d[\\w.-]*)$/i.test(version)) return []\n return [`${scopePath}/${version}`]\n } catch {\n return []\n }\n })\n\n return {\n scopePath,\n excludedVersionPrefixes: [...new Set(excludedVersionPrefixes)],\n sidebar,\n }\n}\n\nfunction docusaurusRouteIdForUrl(url: URL, scopePath: string): string | null {\n let path = url.pathname.replace(/\\/+$/, '')\n if (scopePath === '/') path = path.replace(/^\\/+/, '')\n else if (path === scopePath) path = ''\n else if (path.startsWith(`${scopePath}/`)) path = path.slice(scopePath.length + 1)\n else return null\n const segments = path.split('/').filter(Boolean).map((segment) => {\n let decoded = segment\n try {\n decoded = decodeURIComponent(segment)\n } catch {\n // Preserve malformed source segments as literal route input.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n }).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction storageIdForDocusaurusRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction docusaurusNavigationFromSnapshots(\n snapshots: Array<DocusaurusSidebarSnapshot>,\n pages: Array<MigrationPage>,\n scopePath: string,\n): ReturnType<typeof buildNavigationFromPages> {\n const imported = new Set(pages.map((page) => page.navigationId))\n const claimed = new Set<string>()\n const uniqueSnapshots = [...new Map(snapshots.map((snapshot) => [\n JSON.stringify(snapshot.items),\n snapshot,\n ])).values()]\n const mergedSnapshots: Array<DocusaurusSidebarSnapshot> = []\n function mergeItems(\n target: Array<DocusaurusSidebarItem>,\n incoming: Array<DocusaurusSidebarItem>,\n ): void {\n for (const item of incoming) {\n const existing = target.find((candidate) => candidate.label === item.label\n && (candidate.items || item.items))\n ?? target.find((candidate) => candidate.label === item.label && candidate.href === item.href)\n if (!existing) {\n target.push(structuredClone(item))\n continue\n }\n if (!existing.href && item.href) existing.href = item.href\n if (item.items) {\n existing.items ??= []\n mergeItems(existing.items, item.items)\n }\n }\n }\n for (const snapshot of uniqueSnapshots) {\n const incomingLabels = new Set(snapshot.items.map((item) => item.label))\n const cluster = mergedSnapshots.find((candidate) => {\n const candidateLabels = new Set(candidate.items.map((item) => item.label))\n const overlap = [...incomingLabels].filter((label) => candidateLabels.has(label)).length\n return overlap >= Math.max(2, Math.ceil(Math.min(incomingLabels.size, candidateLabels.size) * 0.5))\n })\n if (cluster) mergeItems(cluster.items, snapshot.items)\n else mergedSnapshots.push(structuredClone(snapshot))\n }\n const pageIdsFor = (snapshot: DocusaurusSidebarSnapshot): Array<string> => docusaurusSidebarHrefs(snapshot)\n .flatMap((href) => {\n const id = docusaurusRouteIdForUrl(new URL(href), scopePath)\n return id && imported.has(id) ? [id] : []\n })\n mergedSnapshots.sort((left, right) => pageIdsFor(right).length - pageIdsFor(left).length)\n\n const tabs = mergedSnapshots.flatMap((snapshot, snapshotIndex) => {\n function convert(items: Array<DocusaurusSidebarItem>): Array<string | MigrationNavigationGroup> {\n const converted: Array<string | MigrationNavigationGroup> = []\n for (const item of items) {\n const routeId = item.href\n ? docusaurusRouteIdForUrl(new URL(item.href), scopePath)\n : null\n const page = routeId && imported.has(routeId) && !claimed.has(routeId) ? routeId : null\n if (page) claimed.add(page)\n const children = item.items ? convert(item.items) : []\n if (children.length > 0 || item.isCategory) {\n converted.push({ group: item.label, pages: page ? [page, ...children] : children })\n continue\n }\n if (page) converted.push(page)\n }\n return converted\n }\n const converted = convert(snapshot.items)\n const loosePages = converted.filter((item): item is string => typeof item === 'string')\n const groups = converted.filter((item): item is Exclude<typeof item, string> => typeof item !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n const snapshotPageIds = pageIdsFor(snapshot)\n const firstSegments = new Set(snapshotPageIds.map((id) => id.split('/', 1)[0]))\n const tab = snapshotIndex > 0 && firstSegments.size === 1\n ? normalizedLinkLabel([...firstSegments][0].replace(/[-_]/g, ' ')).replace(/\\b\\w/g, (letter) => letter.toUpperCase())\n : 'Documentation'\n return [{ tab, groups }]\n })\n\n const additional = pages\n .map((page) => page.navigationId)\n .filter((id) => !claimed.has(id))\n if (additional.length > 0) {\n if (tabs.length === 0) return buildNavigationFromPages(pages)\n tabs[0].groups?.push({ group: 'Additional', pages: additional })\n }\n return { tabs }\n}\n\nfunction htmlTopLevelNavigation(\n document: MigrationFetchResponse,\n source: URL,\n scopePath: string,\n): Array<SourceNavigationTab> {\n const $ = load(document.body)\n interface NavigationCandidate {\n entries: Array<SourceNavigationTab>\n anchorCount: number\n }\n const collectCandidates = (selector: string): Array<NavigationCandidate> => {\n const candidates: Array<NavigationCandidate> = []\n $(selector).each((_containerIndex, container) => {\n const entries: Array<SourceNavigationTab> = []\n const seenSections = new Set<string>()\n let anchorCount = 0\n $(container).find('a[href]').each((_index, element) => {\n const label = $(element).text().replace(/\\s+/g, ' ').trim()\n const href = $(element).attr('href')\n if (!label || !href) return\n try {\n const target = new URL(href, document.finalUrl)\n if (!isInScope(target, source, scopePath)) return\n anchorCount += 1\n const targetId = canonicalLocalizedPageId(pageIdForUrl(target, scopePath) ?? '')\n const pageId = targetId\n const section = targetId.split('/', 1)[0] || 'introduction'\n if (!pageId || seenSections.has(section)) return\n seenSections.add(section)\n entries.push({ section, label, pageId })\n } catch {\n // Ignore malformed navigation targets; discovery applies the same rule.\n }\n })\n if (entries.length > 1) {\n candidates.push({ entries, anchorCount })\n }\n })\n return candidates\n }\n // Mintlify marks its product-tab strip consistently. Prefer that explicit\n // platform signal; generic nav elements usually describe only the sidebar.\n const tabCandidates = collectCandidates('.nav-tabs')\n const candidates = tabCandidates.length > 0\n ? tabCandidates\n : collectCandidates('nav, [role=\"navigation\"]')\n const entries = candidates.sort((left, right) => {\n const densityDifference = (right.entries.length / right.anchorCount)\n - (left.entries.length / left.anchorCount)\n return densityDifference || right.entries.length - left.entries.length\n })[0]?.entries ?? []\n // A product switcher with dozens of entries is invariably a sidebar or\n // responsive page strip, not authored top-level navigation. Refuse to turn\n // that ambiguity into an unusable header.\n const normalizedLabels = entries.map((entry) => entry.label.trim().toLowerCase())\n if (entries.length > 12 || new Set(normalizedLabels).size !== normalizedLabels.length) return []\n return entries\n}\n\nfunction remapNavigationHome(\n config: MigrationBundle['docsConfig'],\n sourceHomePageId: string | undefined,\n): MigrationBundle['docsConfig'] {\n if (!sourceHomePageId || sourceHomePageId === 'introduction') return config\n const remapGroups = (groups: Array<MigrationNavigationGroup>): Array<MigrationNavigationGroup> => groups.map((group) => ({\n ...group,\n pages: group.pages.map((page) => typeof page === 'string'\n ? page === sourceHomePageId ? 'introduction' : page\n : remapGroups([page])[0]),\n }))\n return {\n ...config,\n tabs: config.tabs.map((tab) => ({\n ...tab,\n ...(tab.href === `/${sourceHomePageId}` ? { href: '/' } : {}),\n ...(tab.groups ? { groups: remapGroups(tab.groups) } : {}),\n })),\n }\n}\n\nfunction markdownLinks(body: string): Array<string> {\n return [...body.matchAll(/\\[[^\\]]+\\]\\(([^)\\s]+)(?:\\s+['\"][^'\"]*['\"])?\\)/g)]\n .map((match) => match[1])\n}\n\nfunction sitemapLinks(body: string): Array<string> {\n const $ = load(body, { xmlMode: true })\n return $('url > loc, sitemap > loc').map((_index, element) => $(element).text().trim()).get().filter(Boolean)\n}\n\nfunction robotsSitemaps(body: string): Array<string> {\n return body.split('\\n')\n .map((line) => line.match(/^\\s*Sitemap:\\s*(\\S+)/i)?.[1])\n .filter((value): value is string => Boolean(value))\n}\n\nfunction headerLinks(document: MigrationFetchResponse): Array<string> {\n const links: Array<string> = []\n const llms = document.headers?.['x-llms-txt']\n if (llms) links.push(llms)\n const linkHeader = document.headers?.link ?? ''\n for (const match of linkHeader.matchAll(/<([^>]+)>\\s*;[^,]*(?:rel=[\"']?(?:alternate|llms-txt)[\"']?|type=[\"']text\\/(?:markdown|plain)[\"'])/gi)) {\n links.push(match[1])\n }\n return links\n}\n\nasync function safeFetch(\n fetcher: MigrationFetcher,\n url: URL,\n accept: string,\n): Promise<MigrationFetchResponse | null> {\n try {\n return await fetcher(url, { accept })\n } catch {\n return null\n }\n}\n\n/** Crawl one public docs origin into a canonical, caller-independent bundle. */\nexport async function migrateUrl(options: UrlMigrationOptions): Promise<MigrationBundle> {\n const source = validateMigrationUrl(options.sourceUrl)\n const fetcher = options.fetcher ?? defaultMigrationFetcher\n const maxPages = Math.max(1, Math.min(options.maxPages ?? DEFAULT_MAX_PAGES, 1_000))\n const concurrency = Math.max(1, Math.min(options.concurrency ?? 5, 10))\n const maxTotalBytes = Math.max(1_000_000, Math.min(options.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES, 500_000_000))\n const submittedScopePath = docsScopePath(source)\n const initial = await fetcher(source, { accept: 'text/markdown,text/html,application/xhtml+xml;q=0.9' })\n if (!isInScope(initial.finalUrl, source, submittedScopePath)) {\n throw new Error('The documentation URL redirected outside the submitted docs origin or path.')\n }\n const htmlProbe = /html/i.test(initial.contentType)\n ? initial\n : await safeFetch(fetcher, source, 'text/html,application/xhtml+xml')\n // Content negotiation must not let an HTML-only redirect escape the path\n // boundary already validated for the submitted documentation response.\n const scopedHtmlProbe = htmlProbe && isInScope(htmlProbe.finalUrl, source, submittedScopePath)\n ? htmlProbe\n : null\n const platform = options.platform ?? detectUrlPlatform(scopedHtmlProbe ?? initial)\n let docusaurusHtmlProbe = platform === 'docusaurus' ? scopedHtmlProbe : null\n if (docusaurusHtmlProbe && !readDocusaurusSidebar(docusaurusHtmlProbe)) {\n const $ = load(docusaurusHtmlProbe.body)\n const docsHref = $('nav a[href]').toArray().map((element) => ({\n href: $(element).attr('href'),\n label: normalizedLinkLabel($(element).text()),\n })).find((link) => /^docs(?:umentation)?$/i.test(link.label))?.href\n if (docsHref) {\n try {\n const docsUrl = new URL(docsHref, docusaurusHtmlProbe.finalUrl)\n if (docsUrl.origin === source.origin && isInScope(docsUrl, source, submittedScopePath)) {\n const probe = await safeFetch(fetcher, docsUrl, 'text/html,application/xhtml+xml')\n if (probe && probe.finalUrl.origin === source.origin && /html/i.test(probe.contentType)) {\n docusaurusHtmlProbe = probe\n }\n }\n } catch {\n // A malformed navbar link falls back to the submitted path boundary.\n }\n }\n }\n const docusaurusDiscovery = platform === 'docusaurus' && docusaurusHtmlProbe\n ? deriveDocusaurusScope(source, docusaurusHtmlProbe, submittedScopePath)\n : null\n // A Mintlify site may own an entire docs origin or a path below a marketing\n // site. Its llms/sitemap location is the authoritative crawl boundary.\n const scopePath = platform === 'mintlify'\n ? machineIndexScopePath(source, [initial, scopedHtmlProbe]) ?? submittedScopePath\n : docusaurusDiscovery?.scopePath ?? submittedScopePath\n const sourceMintlifyConfig = platform === 'mintlify' && scopedHtmlProbe && /html/i.test(scopedHtmlProbe.contentType)\n ? embeddedMintlifyConfig(scopedHtmlProbe.body)\n : null\n const sourceMintlifyProjection = sourceMintlifyConfig\n ? projectMintlifyNavigation(sourceMintlifyConfig, { pathPrefix: scopePath })\n : null\n const hasStructuredMintlifyNavigation = Boolean(\n sourceMintlifyProjection?.docsConfig.tabs.length\n && sourceMintlifyProjection.pageReferences.length,\n )\n const sourceTopLevelNavigation = platform === 'mintlify' && !hasStructuredMintlifyNavigation\n && scopedHtmlProbe && /html/i.test(scopedHtmlProbe.contentType)\n ? htmlTopLevelNavigation(scopedHtmlProbe, source, scopePath)\n : undefined\n // The submitted URL can be any page. Mintlify's first authored product tab,\n // rather than the submitted page, defines which source page becomes `/`.\n // Older single-section themes do not expose a tab strip, so they retain the\n // legacy dedicated-origin fallback when no authored home can be recovered.\n const sourceHomePageId = sourceMintlifyProjection?.pageReferences[0]?.navigationId\n ?? sourceTopLevelNavigation?.[0]?.pageId\n ?? (platform === 'mintlify' && scopePath === '/'\n ? canonicalLocalizedPageId(pageIdForUrl(source, scopePath) ?? '') || undefined\n : undefined)\n const cache = new Map([[source.toString(), initial]])\n if (docusaurusHtmlProbe) cache.set(docusaurusHtmlProbe.finalUrl.toString(), docusaurusHtmlProbe)\n const queue: Array<URL> = [source]\n const queued = new Set([candidateIdentity(source)])\n const warnings: Array<MigrationWarning> = []\n const fetchedSitemaps = new Set<string>()\n const docusaurusSidebars: Array<DocusaurusSidebarSnapshot> = docusaurusDiscovery?.sidebar\n ? [docusaurusDiscovery.sidebar]\n : []\n const docusaurusRedirects: Array<{ source: string; destination: string }> = []\n\n function enqueue(value: string, base: URL): void {\n if (queued.size >= MAX_DISCOVERED_URLS) return\n const url = normalizeCandidate(value, base, source, scopePath)\n if (!url || queued.has(candidateIdentity(url))) return\n if (platform === 'docusaurus' && url.pathname.replace(/\\/+$/, '') === `${scopePath}/search`) return\n if (docusaurusDiscovery?.excludedVersionPrefixes.some((prefix) => {\n const path = url.pathname.replace(/\\/+$/, '')\n return path === prefix || path.startsWith(`${prefix}/`)\n })) return\n queued.add(candidateIdentity(url))\n queue.push(url)\n }\n\n for (const reference of sourceMintlifyProjection?.pageReferences ?? []) {\n let href = reference.ref\n if (scopePath !== '/' && href.startsWith('/')\n && href !== scopePath && !href.startsWith(`${scopePath}/`)) {\n href = `${scopePath}${href}`\n }\n enqueue(href, source)\n }\n\n // Mintlify renders the authored navigation into the HTML shell. Seed the\n // queue from that order before machine indexes add completeness fallbacks.\n const navigationProbe = docusaurusHtmlProbe ?? scopedHtmlProbe\n if (navigationProbe && /html/i.test(navigationProbe.contentType)) {\n for (const link of htmlNavigationLinks(navigationProbe)) enqueue(link, navigationProbe.finalUrl)\n }\n\n async function discoverDocumentLinks(document: MigrationFetchResponse, depth = 0): Promise<void> {\n const links = sitemapLinks(document.body)\n for (const link of links) {\n let url: URL\n try {\n url = new URL(link, document.finalUrl)\n } catch {\n continue\n }\n if (depth < 2 && /\\.xml(?:$|\\?)/i.test(url.pathname)) {\n if (url.origin !== source.origin || fetchedSitemaps.size >= MAX_SITEMAP_DOCUMENTS\n || fetchedSitemaps.has(url.toString())) continue\n fetchedSitemaps.add(url.toString())\n const nested = await safeFetch(fetcher, url, 'application/xml,text/xml')\n if (nested && nested.finalUrl.origin === source.origin) await discoverDocumentLinks(nested, depth + 1)\n } else {\n enqueue(link, document.finalUrl)\n }\n }\n }\n\n for (const link of headerLinks(initial)) {\n let url: URL\n try {\n url = new URL(link, initial.finalUrl)\n } catch {\n continue\n }\n if (url.origin !== source.origin) continue\n const document = await safeFetch(fetcher, url, 'text/plain,text/markdown')\n if (!document || document.finalUrl.origin !== source.origin) continue\n for (const candidate of markdownLinks(document.body)) enqueue(candidate, document.finalUrl)\n }\n\n const pathRoot = scopePath === '/' ? source.origin : `${source.origin}${scopePath}`\n const discoveryUrls = [\n new URL('/llms.txt', source.origin),\n new URL(`${pathRoot.replace(source.origin, '')}/llms.txt`, source.origin),\n new URL('/robots.txt', source.origin),\n new URL('/sitemap.xml', source.origin),\n new URL(`${pathRoot.replace(source.origin, '')}/sitemap.xml`, source.origin),\n ]\n const uniqueDiscovery = [...new Map(discoveryUrls.map((url) => [url.toString(), url])).values()]\n for (const url of uniqueDiscovery) {\n const document = await safeFetch(fetcher, url, 'text/plain,application/xml,text/xml;q=0.9')\n if (!document || document.finalUrl.origin !== source.origin) continue\n const isRobots = url.pathname.endsWith('robots.txt')\n const isSitemap = url.pathname.endsWith('sitemap.xml') || document.contentType.includes('xml')\n if (isRobots) {\n for (const link of robotsSitemaps(document.body)) {\n let sitemapUrl: URL\n try {\n sitemapUrl = new URL(link, document.finalUrl)\n } catch {\n continue\n }\n if (sitemapUrl.origin !== source.origin || fetchedSitemaps.size >= MAX_SITEMAP_DOCUMENTS\n || fetchedSitemaps.has(sitemapUrl.toString())) continue\n fetchedSitemaps.add(sitemapUrl.toString())\n const sitemap = await safeFetch(fetcher, sitemapUrl, 'application/xml,text/xml')\n if (sitemap && sitemap.finalUrl.origin === source.origin) await discoverDocumentLinks(sitemap)\n }\n } else if (isSitemap) {\n await discoverDocumentLinks(document)\n } else {\n for (const link of markdownLinks(document.body)) enqueue(link, document.finalUrl)\n }\n }\n\n const pages: Array<MigrationPage> = []\n const openApiFragments: Array<EmbeddedOpenApiFragment> = []\n const seenIds = new Set<string>()\n const seenSources = new Set<string>()\n const visited = new Set<string>()\n let importedBytes = 0\n let isByteBudgetExhausted = false\n while (queue.length > 0 && pages.length < maxPages && !isByteBudgetExhausted) {\n const batch: Array<URL> = []\n while (queue.length > 0 && batch.length < Math.min(concurrency, maxPages - pages.length)) {\n const candidate = queue.shift()\n if (!candidate || visited.has(candidate.toString())) continue\n visited.add(candidate.toString())\n batch.push(candidate)\n }\n if (batch.length === 0) continue\n const results = await Promise.all(batch.map(async (candidate) => {\n let document = cache.get(candidate.toString())\n ?? await safeFetch(fetcher, candidate, 'text/markdown,text/html,application/xhtml+xml;q=0.9')\n if (!document) {\n return { candidate, page: null, links: [] as Array<string>, failure: true }\n }\n if (!isInScope(document.finalUrl, source, scopePath)) {\n return { candidate, page: null, links: [] as Array<string>, failure: false }\n }\n const isMarkdown = /(?:markdown|text\\/plain)/i.test(document.contentType)\n || /\\.mdx?$/i.test(document.finalUrl.pathname)\n if (!isMarkdown && !/\\.mdx?$/i.test(candidate.pathname)) {\n const markdownUrl = new URL(candidate)\n markdownUrl.pathname = `${markdownUrl.pathname.replace(/\\/$/, '')}.md`\n const markdownDocument = await safeFetch(fetcher, markdownUrl, 'text/markdown,text/plain')\n if (markdownDocument && isInScope(markdownDocument.finalUrl, source, scopePath)\n && /(?:markdown|text\\/plain)/i.test(markdownDocument.contentType)) {\n document = markdownDocument\n }\n }\n const isResolvedMarkdown = /(?:markdown|text\\/plain)/i.test(document.contentType)\n || /\\.mdx?$/i.test(document.finalUrl.pathname)\n const sanitizedMarkdown = isResolvedMarkdown ? sanitizeRemoteMarkdown(document.body) : null\n if (isResolvedMarkdown && sanitizedMarkdown === null) {\n const htmlUrl = new URL(candidate)\n htmlUrl.pathname = htmlUrl.pathname.replace(/\\.mdx?$/i, '') || '/'\n const htmlDocument = await safeFetch(fetcher, htmlUrl, 'text/html,application/xhtml+xml')\n if (htmlDocument && isInScope(htmlDocument.finalUrl, source, scopePath)\n && /html/i.test(htmlDocument.contentType)) {\n document = htmlDocument\n } else {\n // Never recover by compiling the rejected MDX. A source that does\n // not expose a safe rendered representation is skipped instead.\n return { candidate, page: null, links: [] as Array<string>, failure: false }\n }\n } else if (sanitizedMarkdown !== null) {\n document = { ...document, body: sanitizedMarkdown }\n }\n const responseBytes = Buffer.byteLength(document.body, 'utf8')\n if (importedBytes + responseBytes > maxTotalBytes) {\n isByteBudgetExhausted = true\n return { candidate, page: null, links: [] as Array<string>, failure: false, budgetExceeded: true }\n }\n importedBytes += responseBytes\n const discoveredNavigationId = platform === 'docusaurus'\n ? docusaurusRouteIdForUrl(document.finalUrl, scopePath)\n ?? docusaurusRouteIdForUrl(candidate, scopePath)\n : pageIdForUrl(document.finalUrl, scopePath)\n ?? pageIdForUrl(candidate, scopePath)\n const navigationId = discoveredNavigationId\n && canonicalLocalizedPageId(discoveredNavigationId) === sourceHomePageId\n ? 'introduction'\n : discoveredNavigationId\n if (!navigationId) return { candidate, page: null, links: [] as Array<string>, failure: false }\n const id = platform === 'docusaurus'\n ? storageIdForDocusaurusRoute(navigationId)\n : navigationId\n if (/(?:markdown|text\\/plain)/i.test(document.contentType) || /\\.mdx?$/i.test(document.finalUrl.pathname)) {\n const markdown = markdownPage(document, id)\n if (markdown.page) markdown.page.navigationId = navigationId\n return {\n candidate,\n page: markdown.page,\n openApiFragment: markdown.openApiFragment,\n links: markdownLinks(document.body),\n base: document.finalUrl,\n failure: false,\n }\n }\n const extracted = htmlPage(document, id)\n if (extracted.page) extracted.page.navigationId = navigationId\n const sidebar = platform === 'docusaurus' ? readDocusaurusSidebar(document) : null\n return { candidate, page: extracted.page, links: extracted.links, base: document.finalUrl, sidebar, failure: false }\n }))\n for (const result of results) {\n if (result.failure) {\n warnings.push({ code: 'fetch-failed', message: 'A discovered documentation page could not be fetched.', source: result.candidate.toString() })\n continue\n }\n if (result.budgetExceeded) continue\n if (result.page && platform !== 'docusaurus') {\n result.page.id = canonicalLocalizedPageId(result.page.id)\n result.page.navigationId = canonicalLocalizedPageId(result.page.navigationId)\n }\n const sourceIdentity = result.page\n ? candidateIdentity(new URL(result.page.source))\n : null\n if (result.page && sourceIdentity && !seenSources.has(sourceIdentity)\n && !seenIds.has(result.page.id) && pages.length < maxPages) {\n pages.push(result.page)\n if ('openApiFragment' in result && result.openApiFragment) {\n openApiFragments.push(result.openApiFragment)\n }\n seenIds.add(result.page.id)\n seenSources.add(sourceIdentity)\n }\n if (platform === 'docusaurus' && result.page) {\n const candidateRoute = docusaurusRouteIdForUrl(result.candidate, scopePath)\n if (candidateRoute && candidateRoute !== result.page.navigationId) {\n docusaurusRedirects.push({\n source: candidateRoute === 'introduction' ? '/' : `/${candidateRoute}`,\n destination: result.page.navigationId === 'introduction' ? '/' : `/${result.page.navigationId}`,\n })\n }\n }\n if ('sidebar' in result && result.sidebar) docusaurusSidebars.push(result.sidebar)\n for (const link of result.links) enqueue(link, result.base ?? result.candidate)\n }\n }\n\n if (pages.length === 0) throw new Error('No readable documentation pages were found at that URL.')\n for (const page of pages) {\n const [locale, ...navigationSegments] = page.id.split('/')\n if (LOCALE_CODES.has(locale)) {\n if (navigationSegments.length === 0) page.id = `${locale}/introduction`\n page.locale = locale\n page.navigationId = navigationSegments.join('/') || 'introduction'\n }\n }\n const importedIds = new Set(pages.map((page) => page.navigationId))\n for (const page of pages) {\n page.body = rewriteInternalLinks(\n page.body,\n new URL(page.source),\n source,\n scopePath,\n importedIds,\n sourceHomePageId,\n )\n }\n if (isByteBudgetExhausted) {\n warnings.push({ code: 'limit-reached', message: `Import stopped after reaching the ${Math.round(maxTotalBytes / 1_000_000)} MB content budget.` })\n } else if (queue.length > 0 || queued.size >= MAX_DISCOVERED_URLS) {\n warnings.push({ code: 'limit-reached', message: `Import stopped after ${pages.length} pages; narrow the URL or raise the caller limit to import more.` })\n }\n const topLevelNavigation = sourceTopLevelNavigation?.map((entry) => ({\n ...entry,\n pageId: entry.pageId === sourceHomePageId ? 'introduction' : entry.pageId,\n }))\n let docsConfig = platform === 'docusaurus'\n ? docusaurusNavigationFromSnapshots(docusaurusSidebars, pages, scopePath)\n : hasStructuredMintlifyNavigation && sourceMintlifyProjection\n ? remapNavigationHome(sourceMintlifyProjection.docsConfig, sourceHomePageId)\n : buildNavigationFromPages(pages, {\n topLevelTabs: platform === 'mintlify',\n topLevelNavigation,\n })\n if (sourceMintlifyProjection) warnings.push(...sourceMintlifyProjection.warnings)\n if (docusaurusRedirects.length > 0) {\n docsConfig.redirects = [...new Map(docusaurusRedirects.map((redirect) => [\n `${redirect.source}:${redirect.destination}`,\n redirect,\n ])).values()]\n }\n const openApiAsset = mergeEmbeddedOpenApi(openApiFragments)\n if (openApiAsset) {\n const operationPageIds = new Set(pages.filter((page) => page.openapi).map((page) => page.navigationId))\n const apiTab = docsConfig.tabs.find((tab) => tab.groups?.some((group) => {\n const containsOperation = (pages: typeof group.pages): boolean => pages.some((page) => {\n return typeof page === 'string' ? operationPageIds.has(page) : containsOperation(page.pages)\n })\n return containsOperation(group.pages)\n })) ?? docsConfig.tabs[0]\n if (apiTab) {\n // Migrated operation pages preserve the source URLs and sidebar order.\n // The spec is still configured for operation rendering, but its derived\n // `/api/*` navigation would duplicate every imported endpoint.\n apiTab.api = { source: '/openapi.yaml', navigation: false }\n }\n }\n const locales = [...new Set(pages.map((page) => page.locale).filter((value): value is string => Boolean(value)))]\n if (locales.length > 0) {\n docsConfig.i18n = {\n defaultLocale: 'en',\n locales: [\n { code: 'en', label: 'English' },\n ...locales.filter((locale) => locale !== 'en').map((locale) => ({ code: locale, label: locale.toUpperCase() })),\n ],\n }\n }\n if (platform === 'mintlify') docsConfig = addMintlifyDirectoryRedirects(docsConfig, pages)\n return {\n sourceUrl: source.toString(),\n sourceKind: 'url',\n platform,\n pages,\n assets: openApiAsset ? [{ path: 'openapi.yaml', content: openApiAsset }] : [],\n docsConfig,\n ...(sourceMintlifyConfig ? {\n site: {\n ...(typeof sourceMintlifyConfig.name === 'string' ? { name: sourceMintlifyConfig.name } : {}),\n ...(typeof sourceMintlifyConfig.description === 'string' ? { description: sourceMintlifyConfig.description } : {}),\n },\n } : {}),\n warnings,\n stats: {\n discovered: visited.size,\n imported: pages.length,\n skipped: Math.max(0, visited.size - pages.length),\n },\n }\n}\n"],"mappings":"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","names":["existsSync","lstatSync","readFileSync","dirname","extname","relative","existsSync","lstatSync","readFileSync","extname","relative","objectValue","existsSync","lstatSync","relative","readFileSync","value","titleCase","extname","existsSync","lstatSync","readFileSync","dirname","relative","resolve","extname","parseYaml","value","payload","parseYaml","title","converted","candidates","entries","pages"]}
|
|
1
|
+
{"version":3,"sources":["../src/repository.ts","../src/docusaurus.ts","../src/path.ts","../src/frontmatter.ts","../src/mdx.ts","../src/navigation.ts","../src/render.ts","../src/url.ts"],"sourcesContent":["/**\n * Repository adapter for the shared migration engine. Traversal is bounded,\n * symbolic links are ignored, and Git is always invoked with an argument array\n * so source-controlled branch names can never become shell commands.\n */\n\nimport { spawn } from 'node:child_process'\nimport {\n existsSync,\n lstatSync,\n readFileSync,\n readdirSync,\n} from 'node:fs'\nimport { basename, dirname, extname, relative, resolve as resolvePath } from 'node:path'\n\nimport {\n projectDocusaurusNavigation,\n readDocusaurusSidebars,\n rewriteDocusaurusLinks,\n resolveDocusaurusPageIdentity,\n type DocusaurusPageDescriptor,\n type DocusaurusSidebars,\n} from './docusaurus.js'\nimport { parseMarkdownPage } from './mdx.js'\nimport {\n addMintlifyDirectoryRedirects,\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport {\n normalizeAssetPath,\n pageIdFromReference,\n resolveWithin,\n trimEdgeSlashes,\n trimTrailingSlashes,\n} from './path.js'\nimport type {\n MigrationAsset,\n MigrationBundle,\n MigrationDocsConfig,\n MigrationPage,\n MigrationPlatform,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_SOURCE_FILES = 5_000\nconst MAX_PAGE_BYTES = 2_000_000\nconst MAX_ASSET_BYTES = 25_000_000\nconst MAX_TOTAL_ASSET_BYTES = 500_000_000\nconst IGNORED_DIRECTORIES = new Set([\n '.git', '.github', '.next', '.turbo', '.vercel', '.vscode',\n 'node_modules', 'dist', 'build', 'coverage',\n])\nconst ASSET_DIRECTORIES = new Set(['assets', 'images', 'img', 'media', 'public', 'static'])\nconst ASSET_EXTENSIONS = new Set([\n '.avif', '.bmp', '.gif', '.ico', '.jpeg', '.jpg', '.mp3', '.mp4',\n '.pdf', '.png', '.svg', '.webm', '.webp',\n])\nconst REPOSITORY_ONLY_DOCUMENTS = new Set([\n 'agents.md', 'claude.md', 'code_of_conduct.md', 'contributing.md',\n 'license.md', 'readme.md', 'security.md',\n])\nconst SNIPPET_DIRECTORIES = new Set(['snippets', '_snippets', 'partials', '_partials'])\nconst OPENAPI_FILENAMES = new Set([\n 'openapi.json', 'openapi.yaml', 'openapi.yml',\n 'swagger.json', 'swagger.yaml', 'swagger.yml',\n])\n\nexport interface GitHubRepositorySource {\n owner: string\n repo: string\n branch: string\n docsDir: string\n cloneUrl: string\n}\n\nexport interface RepositoryMigrationOptions {\n repositoryDir: string\n sourceUrl: string\n docsDir?: string\n platform?: MigrationPlatform\n /** @internal Prefix used by additional Docusaurus docs-plugin instances. */\n docusaurusRoutePrefix?: string\n /** @internal Prevent recursive discovery while importing one plugin root. */\n docusaurusSkipPlugins?: boolean\n /** @internal Additional docs plugins default to autogenerated navigation. */\n docusaurusSkipSidebar?: boolean\n /** @internal Static assets are shared across docs-plugin instances. */\n docusaurusSkipAssets?: boolean\n}\n\ninterface DocusaurusPluginRoot {\n docsDir: string\n routePrefix: string\n}\n\nconst DOCUSAURUS_CONFIG_FILENAMES = [\n 'docusaurus.config.js',\n 'docusaurus.config.ts',\n 'docusaurus.config.mjs',\n]\n\nfunction hasDocusaurusConfig(directory: string): boolean {\n return DOCUSAURUS_CONFIG_FILENAMES.some((filename) => {\n const path = resolveWithin(directory, filename)\n return existsSync(path) && lstatSync(path).isFile()\n })\n}\n\nfunction hasMintlifyConfig(directory: string): boolean {\n return ['docs.json', 'mint.json'].some((filename) => {\n const path = resolveWithin(directory, filename)\n if (!existsSync(path) || !lstatSync(path).isFile()) return false\n if (filename === 'mint.json') return true\n try {\n const config = JSON.parse(readFileSync(path, 'utf8')) as Record<string, unknown>\n return String(config.$schema ?? '').includes('mintlify') || 'navigation' in config\n } catch {\n return false\n }\n })\n}\n\nfunction findMintlifyProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = trimTrailingSlashes(docsDir)\n while (true) {\n const path = resolveWithin(repositoryDir, candidate || '.')\n if (hasMintlifyConfig(path)) return path\n if (!candidate) break\n const parent = dirname(candidate)\n candidate = parent === '.' ? '' : parent\n }\n }\n const queue: Array<{ directory: string; depth: number }> = [{ directory: repositoryDir, depth: 0 }]\n let visited = 0\n while (queue.length > 0 && visited < 500) {\n const current = queue.shift()!\n visited++\n if (hasMintlifyConfig(current.directory)) return current.directory\n if (current.depth >= 4) continue\n for (const entry of readdirSync(current.directory, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || IGNORED_DIRECTORIES.has(entry.name)) continue\n queue.push({ directory: resolveWithin(current.directory, entry.name), depth: current.depth + 1 })\n }\n }\n return null\n}\n\nfunction findDocusaurusProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = trimTrailingSlashes(docsDir)\n while (true) {\n const path = resolveWithin(repositoryDir, candidate || '.')\n if (hasDocusaurusConfig(path)) return path\n if (!candidate) break\n const parent = dirname(candidate)\n candidate = parent === '.' ? '' : parent\n }\n }\n\n const queue: Array<{ directory: string; depth: number }> = [{ directory: repositoryDir, depth: 0 }]\n let visited = 0\n while (queue.length > 0 && visited < 500) {\n const current = queue.shift()!\n visited++\n if (hasDocusaurusConfig(current.directory)) return current.directory\n if (current.depth >= 4) continue\n for (const entry of readdirSync(current.directory, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || IGNORED_DIRECTORIES.has(entry.name)) continue\n queue.push({\n directory: resolveWithin(current.directory, entry.name),\n depth: current.depth + 1,\n })\n }\n }\n return null\n}\n\nfunction readDocusaurusConfigSource(projectRoot: string): string {\n const path = DOCUSAURUS_CONFIG_FILENAMES\n .map((filename) => resolveWithin(projectRoot, filename))\n .find((candidate) => existsSync(candidate) && lstatSync(candidate).isFile())\n if (!path || lstatSync(path).size > 1_000_000) return ''\n return readFileSync(path, 'utf8')\n}\n\nfunction primaryDocusaurusDocsDirectory(projectRoot: string): string {\n const source = readDocusaurusConfigSource(projectRoot)\n const configured = source.match(/\\bdocs\\s*:\\s*\\{[\\s\\S]{0,4000}?\\bpath\\s*:\\s*(['\"])([^'\"]+)\\1/)?.[2]\n return trimTrailingSlashes(configured?.replace(/^\\.\\//, '') ?? '') || 'docs'\n}\n\nfunction additionalDocusaurusPluginRoots(\n repositoryDir: string,\n projectRoot: string,\n): Array<DocusaurusPluginRoot> {\n const source = readDocusaurusConfigSource(projectRoot)\n const projectRelative = relative(repositoryDir, projectRoot).replace(/\\\\/g, '/')\n const plugins: Array<DocusaurusPluginRoot> = []\n const matcher = /['\"]@docusaurus\\/plugin-content-docs['\"][\\s\\S]{0,3000}?\\bpath\\s*:\\s*(['\"])([^'\"]+)\\1[\\s\\S]{0,1000}?\\brouteBasePath\\s*:\\s*(['\"])([^'\"]+)\\3/g\n for (const match of source.matchAll(matcher)) {\n const localPath = trimTrailingSlashes(match[2].replace(/^\\.\\//, ''))\n const routePrefix = trimEdgeSlashes(match[4])\n if (!localPath || !routePrefix) continue\n const docsDir = [projectRelative, localPath].filter(Boolean).join('/')\n const absolute = resolveWithin(repositoryDir, docsDir)\n if (!existsSync(absolute) || !lstatSync(absolute).isDirectory()) continue\n plugins.push({ docsDir, routePrefix })\n }\n return plugins\n}\n\n/** Parse and validate a public GitHub repository URL. */\nexport function parseGitHubRepositoryUrl(rawUrl: string): GitHubRepositorySource {\n let url: URL\n try {\n url = new URL(rawUrl)\n } catch {\n throw new Error(`Invalid GitHub URL: ${rawUrl}`)\n }\n if (url.protocol !== 'https:' || url.hostname.toLowerCase() !== 'github.com') {\n throw new Error('Repository migrations require an https://github.com URL.')\n }\n if (url.username || url.password || url.port) {\n throw new Error('GitHub repository URLs cannot include credentials or custom ports.')\n }\n const segments = url.pathname.split('/').filter(Boolean).map(decodeURIComponent)\n const [owner, rawRepo] = segments\n const repo = rawRepo?.replace(/\\.git$/i, '')\n const safeName = /^[A-Za-z0-9_.-]+$/\n if (!owner || !repo || !safeName.test(owner) || !safeName.test(repo)) {\n throw new Error('GitHub URL must include a valid owner and repository name.')\n }\n let branch = 'HEAD'\n let docsDir = ''\n if (segments[2] === 'tree' && segments[3]) {\n branch = segments[3]\n docsDir = segments.slice(4).join('/')\n }\n return {\n owner,\n repo,\n branch,\n docsDir,\n cloneUrl: `https://github.com/${owner}/${repo}.git`,\n }\n}\n\n/** Clone a repository without a shell; callers own and remove `targetDir`. */\nexport async function cloneGitHubRepository(\n source: GitHubRepositorySource,\n targetDir: string,\n): Promise<void> {\n const args = ['clone', '--depth', '1', '--single-branch']\n if (source.branch !== 'HEAD') args.push('--branch', source.branch)\n args.push('--', source.cloneUrl, targetDir)\n await new Promise<void>((resolve, reject) => {\n const child = spawn('git', args, { stdio: ['ignore', 'ignore', 'pipe'] })\n let stderr = ''\n child.stderr.setEncoding('utf8')\n child.stderr.on('data', (chunk: string) => {\n if (stderr.length < 16_000) stderr += chunk\n })\n child.on('error', reject)\n child.on('close', (code) => {\n if (code === 0) resolve()\n else reject(new Error(`Failed to clone ${source.owner}/${source.repo}: ${stderr.trim() || `git exited ${code}`}`))\n })\n })\n}\n\n/** Detect a supported repository docs platform from unambiguous config files. */\nexport function detectRepositoryPlatform(repositoryDir: string, docsDir?: string): MigrationPlatform {\n if (findMintlifyProjectRoot(repositoryDir, docsDir)) return 'mintlify'\n const selectedRoot = docsDir === undefined ? repositoryDir : resolveWithin(repositoryDir, docsDir || '.')\n const docsJson = resolveWithin(selectedRoot, 'docs.json')\n if (existsSync(docsJson)) {\n try {\n const config = JSON.parse(readFileSync(docsJson, 'utf8')) as Record<string, unknown>\n if (Array.isArray(config.tabs)) return 'thally'\n } catch {\n // A malformed source config is reported later; platform detection falls through.\n }\n }\n if (['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'docusaurus'\n if (findDocusaurusProjectRoot(repositoryDir)) return 'docusaurus'\n if (existsSync(resolveWithin(repositoryDir, 'SUMMARY.md'))) return 'gitbook'\n if (existsSync(resolveWithin(repositoryDir, '.vitepress'))) return 'vitepress'\n if (['astro.config.mjs', 'astro.config.ts']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'starlight'\n if (['pages/_meta.json', '_meta.json']\n .some((name) => existsSync(resolveWithin(repositoryDir, name)))) return 'nextra'\n return 'unknown'\n}\n\nfunction containsMarkdown(directory: string, depth = 0): boolean {\n if (depth > 4) return false\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (IGNORED_DIRECTORIES.has(entry.name) || entry.isSymbolicLink()) continue\n const path = resolveWithin(directory, entry.name)\n if (entry.isFile() && ['.md', '.mdx'].includes(extname(entry.name).toLowerCase())) return true\n if (entry.isDirectory() && containsMarkdown(path, depth + 1)) return true\n }\n return false\n}\n\n/** Pick the first conventional content root containing Markdown. */\nexport function detectRepositoryDocsDir(repositoryDir: string): string {\n for (const candidate of ['docs', 'documentation', 'content', 'pages', 'src/content', 'src/pages', 'guide', 'guides', '']) {\n const path = resolveWithin(repositoryDir, candidate)\n if (existsSync(path) && lstatSync(path).isDirectory() && containsMarkdown(path)) return candidate\n }\n return ''\n}\n\ninterface ScannedFile {\n absolutePath: string\n relativePath: string\n}\n\nfunction scanFiles(root: string): Array<ScannedFile> {\n const files: Array<ScannedFile> = []\n function visit(directory: string): void {\n if (files.length >= MAX_SOURCE_FILES) return\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (files.length >= MAX_SOURCE_FILES) return\n if (IGNORED_DIRECTORIES.has(entry.name) || entry.isSymbolicLink()) continue\n const path = resolveWithin(directory, entry.name)\n if (entry.isDirectory()) visit(path)\n else if (entry.isFile()) files.push({ absolutePath: path, relativePath: relative(root, path).replace(/\\\\/g, '/') })\n }\n }\n visit(root)\n return files\n}\n\nfunction normalizedReferenceKey(value: string): string {\n return value.split(/[?#]/, 1)[0]\n .replace(/^\\/+/, '')\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:mdx?|rst|txt)$/i, '')\n .replace(/\\/(?:index|readme)$/i, '')\n .replace(/^(?:index|readme)$/i, '') || 'introduction'\n}\n\nfunction exactReferenceKey(value: string): string {\n return value.split(/[?#]/, 1)[0]\n .replace(/^\\/+/, '')\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:mdx?|rst|txt)$/i, '')\n}\n\nfunction findOpenApi(files: Array<ScannedFile>): ScannedFile | null {\n return files.find((file) => OPENAPI_FILENAMES.has(basename(file.relativePath).toLowerCase())) ?? null\n}\n\nfunction findConfiguredMintlifyOpenApi(\n config: Record<string, unknown> | null,\n files: Array<ScannedFile>,\n): ScannedFile | null {\n const api = config?.api && typeof config.api === 'object' && !Array.isArray(config.api)\n ? config.api as Record<string, unknown>\n : null\n const configured = typeof api?.openapi === 'string'\n ? [api.openapi]\n : Array.isArray(api?.openapi) ? api.openapi.filter((value): value is string => typeof value === 'string') : []\n for (const reference of configured) {\n if (/^(?:https?:)?\\/\\//i.test(reference)) continue\n const key = reference.split(/[?#]/, 1)[0].replace(/^\\/+/, '').replace(/\\\\/g, '/')\n const match = files.find((file) => file.relativePath === key)\n if (match) return match\n }\n return null\n}\n\nfunction withoutFrontmatter(value: string): string {\n return value.replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, '').trim()\n}\n\nfunction staticSnippetProperties(attributes: string): Map<string, string> {\n const properties = new Map<string, string>()\n const matcher = /\\b([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|\\{\\s*\"([^\"]*)\"\\s*\\}|\\{\\s*'([^']*)'\\s*\\})/g\n for (const match of attributes.matchAll(matcher)) {\n properties.set(match[1], match[2] ?? match[3] ?? match[4] ?? match[5] ?? '')\n }\n return properties\n}\n\nfunction interpolateSnippet(snippet: string, attributes: string): string {\n const properties = staticSnippetProperties(attributes)\n if (properties.size === 0) return snippet\n let fence = ''\n return snippet.split('\\n').map((line) => {\n const marker = line.match(/^\\s*(`{3,}|~{3,})/)?.[1]\n if (marker) {\n if (!fence) fence = marker[0]\n else if (marker[0] === fence) fence = ''\n return line\n }\n if (fence) return line\n return line.replace(/\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (original, name: string) => {\n return properties.get(name) ?? original\n })\n }).join('\\n')\n}\n\nfunction resolveSnippetPath(\n sourcePath: string,\n currentFile: string,\n repositoryRoot: string,\n siteRoot: string,\n): string {\n const repositoryRelative = sourcePath.startsWith('@site/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.slice('@site/'.length))).replace(/\\\\/g, '/')\n : sourcePath.startsWith('/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.replace(/^\\/+/, ''))).replace(/\\\\/g, '/')\n : relative(repositoryRoot, resolvePath(dirname(currentFile), sourcePath)).replace(/\\\\/g, '/')\n const candidate = resolveWithin(repositoryRoot, repositoryRelative)\n resolveWithin(repositoryRoot, relative(repositoryRoot, candidate))\n return candidate\n}\n\nfunction globalSnippetAliases(\n files: Array<ScannedFile>,\n repositoryRoot: string,\n siteRoot: string,\n): Map<string, string> {\n const aliases = new Map<string, string>()\n const matcher = /^import\\s+(?:\\{\\s*default\\s+as\\s+)?([A-Z][A-Za-z0-9_]*)\\s*\\}?\\s+from\\s+['\"]([^'\"]+\\.mdx?)['\"]\\s*;?(?:\\s*\\/\\/.*)?$/gm\n for (const file of files) {\n const segments = file.relativePath.split('/')\n if (!segments.some((segment) => SNIPPET_DIRECTORIES.has(segment.toLowerCase()))) continue\n const basenameWithoutExtension = basename(file.relativePath).replace(/\\.mdx?$/i, '')\n const conventionalAlias = basenameWithoutExtension\n .split(/[^A-Za-z0-9]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n if (conventionalAlias) aliases.set(conventionalAlias, file.absolutePath)\n }\n for (const file of files) {\n if (!['.md', '.mdx'].includes(extname(file.relativePath).toLowerCase())) continue\n const raw = readFileSync(file.absolutePath, 'utf8')\n for (const match of raw.matchAll(matcher)) {\n try {\n const candidate = resolveSnippetPath(match[2], file.absolutePath, repositoryRoot, siteRoot)\n if (existsSync(candidate) && lstatSync(candidate).isFile()) {\n aliases.set(match[1], candidate)\n }\n } catch {\n // The page-local inliner emits the actionable warning when it reaches\n // an unsafe or missing import. Global discovery is best-effort only.\n }\n }\n }\n return aliases\n}\n\nfunction repositoryAssetHref(\n value: string,\n currentFile: string,\n siteRoot: string,\n): string | null {\n const isBracketed = value.startsWith('<') && value.endsWith('>')\n const raw = isBracketed ? value.slice(1, -1) : value\n if (!raw || raw.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(raw)) return null\n const suffixIndex = raw.search(/[?#]/)\n const pathname = suffixIndex >= 0 ? raw.slice(0, suffixIndex) : raw\n const suffix = suffixIndex >= 0 ? raw.slice(suffixIndex) : ''\n let decodedPath: string\n try {\n decodedPath = decodeURIComponent(pathname)\n } catch {\n return null\n }\n if (!ASSET_EXTENSIONS.has(extname(decodedPath).toLowerCase())) return null\n try {\n const candidate = decodedPath.startsWith('/')\n ? resolveWithin(siteRoot, decodedPath.replace(/^\\/+/, ''))\n : resolveWithin(dirname(currentFile), decodedPath)\n // Mintlify's deploy root is the directory containing docs.json. Do not\n // copy or expose a relative reference that escapes that project boundary.\n const siteRelative = relative(siteRoot, candidate).replace(/\\\\/g, '/')\n resolveWithin(siteRoot, siteRelative)\n if (!existsSync(candidate) || !lstatSync(candidate).isFile()) return null\n const normalized = normalizeAssetPath(siteRelative)\n if (!normalized) return null\n const rewritten = `/${normalized}${suffix}`\n // Markdown destinations containing parentheses must stay angle-bracketed;\n // removing the wrapper makes CommonMark terminate the URL too early.\n return isBracketed ? `<${rewritten}>` : rewritten\n } catch {\n return null\n }\n}\n\nfunction rewriteRepositoryAssetLinks(body: string, currentFile: string, siteRoot: string): string {\n return body\n .replace(/(!?\\[[^\\]]*\\]\\()(<[^>]+>|[^)\\s]+)([^)]*\\))/g, (\n original,\n opening: string,\n destination: string,\n closing: string,\n ) => {\n const rewritten = repositoryAssetHref(destination, currentFile, siteRoot)\n return rewritten ? `${opening}${rewritten}${closing}` : original\n })\n .replace(/\\b(src|img|image|href)=(['\"])([^'\"]+)\\2/g, (\n original,\n property: string,\n quote: string,\n destination: string,\n ) => {\n const rewritten = repositoryAssetHref(destination, currentFile, siteRoot)\n return rewritten ? `${property}=${quote}${rewritten}${quote}` : original\n })\n}\n\nfunction inlineMdxSnippets(\n raw: string,\n currentFile: string,\n repositoryRoot: string,\n warnings: Array<MigrationWarning>,\n depth = 0,\n siteRoot = repositoryRoot,\n globalAliases: Map<string, string> = new Map(),\n): string {\n if (depth >= 8) return raw\n const snippets = new Map<string, string>()\n const withoutImports = raw.replace(\n /^import\\s+(?:\\{\\s*default\\s+as\\s+)?([A-Z][A-Za-z0-9_]*)\\s*\\}?\\s+from\\s+['\"]([^'\"]+\\.mdx?)['\"]\\s*;?(?:\\s*\\/\\/.*)?$/gm,\n (_statement, componentName: string, sourcePath: string) => {\n try {\n const candidate = resolveSnippetPath(sourcePath, currentFile, repositoryRoot, siteRoot)\n if (!existsSync(candidate) || !lstatSync(candidate).isFile()) throw new Error('file not found')\n const nested = inlineMdxSnippets(\n withoutFrontmatter(readFileSync(candidate, 'utf8')),\n candidate,\n repositoryRoot,\n warnings,\n depth + 1,\n siteRoot,\n globalAliases,\n )\n snippets.set(componentName, nested)\n return ''\n } catch {\n warnings.push({\n code: 'missing-page',\n message: `Imported snippet ${sourcePath} could not be resolved and was left as a comment.`,\n source: relative(repositoryRoot, currentFile).replace(/\\\\/g, '/'),\n })\n snippets.set(componentName, `{/* Missing imported snippet: ${sourcePath} */}`)\n return ''\n }\n },\n )\n // Mintlify resolves snippet imports across its MDX compilation graph. Some\n // real sites consequently reuse an alias on a page that does not repeat the\n // import declaration. Recover those aliases deterministically from imports\n // elsewhere in the same docs project.\n for (const [componentName, candidate] of globalAliases) {\n if (snippets.has(componentName) || !new RegExp(`<${componentName}(?:\\\\s|/?>)`).test(withoutImports)) continue\n const nested = inlineMdxSnippets(\n withoutFrontmatter(readFileSync(candidate, 'utf8')),\n candidate,\n repositoryRoot,\n warnings,\n depth + 1,\n siteRoot,\n globalAliases,\n )\n snippets.set(componentName, nested)\n }\n let result = withoutImports\n for (const [componentName, snippet] of snippets) {\n result = result\n .replace(new RegExp(`<${componentName}((?:\\\\s[^>]*)?)\\\\s*/>`, 'g'), (_tag, attributes: string) => {\n return interpolateSnippet(snippet, attributes)\n })\n .replace(new RegExp(`<${componentName}((?:\\\\s[^>]*)?)>(?:[\\\\s\\\\S]*?)<\\\\/${componentName}>`, 'g'), (_tag, attributes: string) => {\n return interpolateSnippet(snippet, attributes)\n })\n }\n return result\n}\n\nfunction injectOpenApi(config: MigrationDocsConfig, filename: string): MigrationDocsConfig {\n const tabs = config.tabs.map((tab) => ({ ...tab }))\n const apiTab = tabs.find((tab) => tab.tab.toLowerCase().includes('api'))\n if (apiTab) apiTab.api = { source: `/${filename}`, navigation: false }\n else tabs.push({ tab: 'API Reference', api: { source: `/${filename}` } })\n return { ...config, tabs }\n}\n\n/** Import an already-available repository directory into a canonical bundle. */\nexport function migrateRepository(options: RepositoryMigrationOptions): MigrationBundle {\n const repositoryDir = options.repositoryDir\n const platform = options.platform ?? detectRepositoryPlatform(repositoryDir, options.docsDir)\n const mintlifyProjectRoot = platform === 'mintlify'\n ? findMintlifyProjectRoot(repositoryDir, options.docsDir)\n : null\n const docusaurusProjectRoot = platform === 'docusaurus'\n ? findDocusaurusProjectRoot(repositoryDir, options.docsDir)\n : null\n const configuredDocsDir = (() => {\n if (options.docsDir !== undefined) {\n const selected = resolveWithin(repositoryDir, options.docsDir || '.')\n if (platform === 'docusaurus' && hasDocusaurusConfig(selected)) {\n const projectRelative = relative(repositoryDir, selected).replace(/\\\\/g, '/')\n return [projectRelative, primaryDocusaurusDocsDirectory(selected)].filter(Boolean).join('/')\n }\n return options.docsDir\n }\n if (docusaurusProjectRoot) {\n const projectRelative = relative(repositoryDir, docusaurusProjectRoot).replace(/\\\\/g, '/')\n return [projectRelative, primaryDocusaurusDocsDirectory(docusaurusProjectRoot)].filter(Boolean).join('/')\n }\n if (platform === 'mintlify' && mintlifyProjectRoot) {\n return relative(repositoryDir, mintlifyProjectRoot).replace(/\\\\/g, '/')\n }\n return platform === 'mintlify' ? '' : detectRepositoryDocsDir(repositoryDir)\n })()\n const warnings: Array<MigrationWarning> = []\n let docsConfig: MigrationDocsConfig = { tabs: [] }\n const referenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const exactReferenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const referenceOrder = new Map<string, number>()\n let docusaurusSidebars: DocusaurusSidebars | null = null\n let mintlifyConfig: Record<string, unknown> | null = null\n\n if (platform === 'mintlify') {\n try {\n const config = readMintlifyConfig(mintlifyProjectRoot ?? repositoryDir)\n if (config) {\n mintlifyConfig = config\n const projected = projectMintlifyNavigation(config)\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const [index, reference] of projected.pageReferences.entries()) {\n const key = normalizedReferenceKey(reference.ref)\n referenceMap.set(key, reference)\n exactReferenceMap.set(exactReferenceKey(reference.ref), reference)\n referenceOrder.set(key, index)\n }\n }\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Mintlify config could not be read: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (platform === 'docusaurus') {\n try {\n docusaurusSidebars = options.docusaurusSkipSidebar || !docusaurusProjectRoot\n ? null\n : readDocusaurusSidebars(docusaurusProjectRoot)\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Docusaurus sidebar could not be read safely: ${error instanceof Error ? error.message : String(error)} Generated navigation will be used.`,\n })\n }\n }\n\n const contentRoot = resolveWithin(repositoryDir, configuredDocsDir)\n if (!existsSync(contentRoot) || !lstatSync(contentRoot).isDirectory()) {\n throw new Error(`Documentation directory does not exist: ${configuredDocsDir || '.'}`)\n }\n const files = scanFiles(contentRoot)\n const pages: Array<MigrationPage> = []\n const assets: Array<MigrationAsset> = []\n const docusaurusDescriptors: Array<DocusaurusPageDescriptor> = []\n const seenPageIds = new Set<string>()\n let skipped = 0\n let discovered = files.length\n\n const localeConfig = docsConfig.i18n\n const pageFiles = [...files].sort((left, right) => {\n const leftOrder = referenceOrder.get(normalizedReferenceKey(left.relativePath)) ?? Number.MAX_SAFE_INTEGER\n const rightOrder = referenceOrder.get(normalizedReferenceKey(right.relativePath)) ?? Number.MAX_SAFE_INTEGER\n return leftOrder - rightOrder || left.relativePath.localeCompare(right.relativePath)\n })\n const snippetAliases = platform === 'mintlify' && mintlifyProjectRoot\n ? globalSnippetAliases(files, repositoryDir, mintlifyProjectRoot)\n : new Map<string, string>()\n for (const file of pageFiles) {\n if (!isDocumentationExtension(file.relativePath)) continue\n const sourceSegments = file.relativePath.split('/')\n if (sourceSegments.some((segment) => SNIPPET_DIRECTORIES.has(segment.toLowerCase()))\n || (platform === 'docusaurus' && basename(file.relativePath).startsWith('_'))) {\n skipped++\n continue\n }\n const rootFilename = !file.relativePath.includes('/') ? basename(file.relativePath).toLowerCase() : ''\n if (REPOSITORY_ONLY_DOCUMENTS.has(rootFilename) && !exactReferenceMap.has(exactReferenceKey(file.relativePath))) {\n skipped++\n continue\n }\n if (!['.md', '.mdx'].includes(extname(file.relativePath).toLowerCase())) {\n skipped++\n warnings.push({ code: 'skipped-file', message: 'Only Markdown and MDX are imported without an explicit converter.', source: file.relativePath })\n continue\n }\n const size = lstatSync(file.absolutePath).size\n if (size > MAX_PAGE_BYTES) {\n skipped++\n warnings.push({ code: 'skipped-file', message: 'Page exceeded the 2 MB repository import limit.', source: file.relativePath })\n continue\n }\n const key = normalizedReferenceKey(file.relativePath)\n const referenced = exactReferenceMap.get(exactReferenceKey(file.relativePath)) ?? referenceMap.get(key)\n let locale = referenced?.locale\n let navigationId = referenced?.navigationId ?? pageIdFromReference(file.relativePath, platform === 'mintlify')\n if (!referenced && localeConfig) {\n const prefix = file.relativePath.split('/', 1)[0]\n if (localeConfig.locales.some((entry) => entry.code === prefix)) {\n locale = prefix\n navigationId = pageIdFromReference(file.relativePath.slice(prefix.length + 1), platform === 'mintlify')\n }\n }\n if (!navigationId) {\n skipped++\n warnings.push({ code: 'invalid-page', message: 'Page path could not be normalized safely.', source: file.relativePath })\n continue\n }\n const isDefaultLocale = !locale || locale === localeConfig?.defaultLocale\n const id = isDefaultLocale ? navigationId : `${locale}/${navigationId}`\n const raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n mintlifyProjectRoot ?? docusaurusProjectRoot ?? repositoryDir,\n snippetAliases,\n )\n let docusaurusDescriptor: Omit<DocusaurusPageDescriptor, 'title'> | undefined\n const page = parseMarkdownPage({\n id,\n navigationId,\n ...(locale ? { locale } : {}),\n raw,\n source: `${options.sourceUrl}#${relative(repositoryDir, file.absolutePath).replace(/\\\\/g, '/')}`,\n ...(platform === 'docusaurus' ? {\n resolveIdentity: (frontmatter, fallback) => {\n const resolved = resolveDocusaurusPageIdentity(file.relativePath, frontmatter, fallback)\n const routePrefix = options.docusaurusRoutePrefix === undefined\n ? undefined\n : trimEdgeSlashes(options.docusaurusRoutePrefix)\n if (!routePrefix) {\n docusaurusDescriptor = resolved.descriptor\n return resolved.identity\n }\n const prefixedNavigationId = resolved.identity.navigationId === 'introduction'\n ? routePrefix\n : `${routePrefix}/${resolved.identity.navigationId}`\n const prefixedStorageId = resolved.identity.id === 'introduction'\n ? routePrefix\n : `${routePrefix}/${resolved.identity.id}`\n docusaurusDescriptor = {\n ...resolved.descriptor,\n navigationId: prefixedNavigationId,\n }\n return {\n ...resolved.identity,\n id: prefixedStorageId,\n navigationId: prefixedNavigationId,\n }\n },\n } : {}),\n })\n if (!page) {\n skipped++\n continue\n }\n if (platform === 'mintlify' && mintlifyProjectRoot) {\n page.body = rewriteRepositoryAssetLinks(page.body, file.absolutePath, mintlifyProjectRoot)\n }\n if (seenPageIds.has(page.id)) {\n skipped++\n warnings.push({ code: 'collision', message: `Multiple source files map to ${page.id}; the first file was kept.`, source: file.relativePath })\n continue\n }\n seenPageIds.add(page.id)\n pages.push(page)\n if (docusaurusDescriptor) {\n docusaurusDescriptors.push({ ...docusaurusDescriptor, title: page.title })\n }\n }\n\n const discoveredReferenceKeys = new Set(files.map((file) => normalizedReferenceKey(file.relativePath)))\n for (const [key] of referenceMap) {\n if (!discoveredReferenceKeys.has(key)) {\n warnings.push({ code: 'missing-page', message: 'A navigation entry did not resolve to a source page.', source: key })\n }\n }\n\n const docusaurusAssetRoot = docusaurusProjectRoot ?? repositoryDir\n const repositoryAssets = platform === 'docusaurus' && configuredDocsDir && !options.docusaurusSkipAssets\n ? ['static', 'public'].flatMap((directory) => {\n const root = resolveWithin(docusaurusAssetRoot, directory)\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return []\n return scanFiles(root).map((file) => ({\n ...file,\n relativePath: `${directory}/${file.relativePath}`,\n }))\n })\n : []\n let totalAssetBytes = 0\n for (const file of [...files, ...repositoryAssets]) {\n const firstSegment = file.relativePath.split('/', 1)[0].toLowerCase()\n if (!ASSET_EXTENSIONS.has(extname(file.relativePath).toLowerCase())) continue\n if (platform !== 'mintlify' && !ASSET_DIRECTORIES.has(firstSegment)) continue\n const size = lstatSync(file.absolutePath).size\n if (size > MAX_ASSET_BYTES || totalAssetBytes + size > MAX_TOTAL_ASSET_BYTES) {\n warnings.push({ code: 'limit-reached', message: 'An asset was skipped because the migration asset budget was exhausted.', source: file.relativePath })\n continue\n }\n const isDocusaurusStatic = platform === 'docusaurus' && firstSegment === 'static'\n const assetPath = normalizeAssetPath(firstSegment === 'public'\n ? file.relativePath.slice('public/'.length)\n : isDocusaurusStatic\n ? file.relativePath.slice('static/'.length)\n : file.relativePath)\n if (!assetPath) continue\n assets.push({ path: assetPath, content: readFileSync(file.absolutePath) })\n totalAssetBytes += size\n }\n\n if (files.length >= MAX_SOURCE_FILES) {\n warnings.push({ code: 'limit-reached', message: `Repository discovery stopped at ${MAX_SOURCE_FILES} files.` })\n }\n if (platform === 'docusaurus') {\n const projected = projectDocusaurusNavigation({\n sidebars: docusaurusSidebars,\n descriptors: docusaurusDescriptors,\n contentRoot,\n sourceUrl: options.sourceUrl,\n routePrefix: options.docusaurusRoutePrefix,\n })\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const page of projected.generatedPages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const descriptorByNavigationId = new Map(\n docusaurusDescriptors.map((descriptor) => [descriptor.navigationId, descriptor]),\n )\n for (const page of pages) {\n const descriptor = descriptorByNavigationId.get(page.navigationId)\n if (descriptor) page.body = rewriteDocusaurusLinks(page.body, descriptor, docusaurusDescriptors)\n }\n }\n if (docsConfig.tabs.length === 0) docsConfig = buildNavigationFromPages(pages)\n const openApi = findConfiguredMintlifyOpenApi(mintlifyConfig, files) ?? findOpenApi(files)\n if (openApi) {\n const filename = basename(openApi.relativePath)\n if (!assets.some((asset) => asset.path === filename)) {\n assets.push({ path: filename, content: readFileSync(openApi.absolutePath) })\n }\n docsConfig = injectOpenApi(docsConfig, filename)\n }\n if (platform === 'mintlify') docsConfig = addMintlifyDirectoryRedirects(docsConfig, pages)\n\n if (platform === 'docusaurus' && docusaurusProjectRoot && !options.docusaurusSkipPlugins) {\n for (const plugin of additionalDocusaurusPluginRoots(repositoryDir, docusaurusProjectRoot)) {\n if (plugin.docsDir === configuredDocsDir) continue\n const pluginBundle = migrateRepository({\n ...options,\n docsDir: plugin.docsDir,\n platform: 'docusaurus',\n docusaurusRoutePrefix: plugin.routePrefix,\n docusaurusSkipPlugins: true,\n docusaurusSkipSidebar: true,\n docusaurusSkipAssets: true,\n })\n for (const page of pluginBundle.pages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const assetPaths = new Set(assets.map((asset) => asset.path))\n for (const asset of pluginBundle.assets) {\n if (assetPaths.has(asset.path)) continue\n assetPaths.add(asset.path)\n assets.push(asset)\n }\n const pluginLabel = plugin.routePrefix\n .split(/[-_/]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n docsConfig.tabs.push(...pluginBundle.docsConfig.tabs.map((tab, index) => ({\n ...tab,\n tab: index === 0 ? pluginLabel : `${pluginLabel}: ${tab.tab}`,\n })))\n warnings.push(...pluginBundle.warnings)\n discovered += pluginBundle.stats.discovered\n skipped += pluginBundle.stats.skipped\n }\n }\n\n if (pages.length === 0) throw new Error('No importable Markdown or MDX pages were found in the repository.')\n return {\n sourceUrl: options.sourceUrl,\n sourceKind: 'repository',\n platform,\n pages,\n assets,\n docsConfig,\n ...(mintlifyConfig ? {\n site: {\n ...(typeof mintlifyConfig.name === 'string' ? { name: mintlifyConfig.name } : {}),\n ...(typeof mintlifyConfig.description === 'string' ? { description: mintlifyConfig.description } : {}),\n },\n } : {}),\n warnings,\n stats: { discovered, imported: pages.length, skipped },\n }\n}\n","/**\n * Static Docusaurus repository projection. Sidebar modules are attacker-owned\n * source files, so this adapter reads only JSON5-compatible object literals and\n * never imports, evaluates, or executes JavaScript/TypeScript configuration.\n */\n\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { extname, posix } from 'node:path'\n\nimport JSON5 from 'json5'\nimport { parse as parseYaml } from 'yaml'\n\nimport type { MarkdownPageIdentity } from './mdx.js'\nimport { pageIdFromReference, resolveWithin, slugifySegment } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_CONFIG_BYTES = 1_000_000\nconst CATEGORY_FILENAMES = ['_category_.json', '_category_.yml', '_category_.yaml']\nconst SIDEBAR_FILENAMES = [\n 'sidebars.json',\n 'sidebars.js',\n 'sidebars.cjs',\n 'sidebars.mjs',\n 'sidebars.ts',\n]\n\nexport interface DocusaurusPageDescriptor {\n sourcePath: string\n docId: string\n navigationId: string\n sidebarPosition?: number\n title: string\n}\n\nexport interface DocusaurusSidebars {\n config: Record<string, unknown>\n sourcePath: string\n}\n\nexport interface DocusaurusNavigationResult {\n docsConfig: MigrationDocsConfig\n generatedPages: Array<MigrationPage>\n referencedNavigationIds: Set<string>\n warnings: Array<MigrationWarning>\n}\n\ninterface ProjectionContext {\n contentRoot: string\n descriptors: Array<DocusaurusPageDescriptor>\n descriptorByDocId: Map<string, DocusaurusPageDescriptor>\n generatedPages: Array<MigrationPage>\n generatedIds: Set<string>\n referencedNavigationIds: Set<string>\n sourceUrl: string\n routePrefix: string\n sidebarSource: string\n warnings: Array<MigrationWarning>\n}\n\ninterface CategoryMetadata {\n label?: string\n position?: number\n link?: unknown\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction stripNumberPrefix(value: string): string {\n return value.replace(/^\\d+[-_]+/, '')\n}\n\nfunction normalizeDocId(value: string): string {\n return value\n .split(/[?#]/, 1)[0]\n .replace(/\\\\/g, '/')\n .replace(/^\\/+/, '')\n .replace(/\\.(?:mdx?)$/i, '')\n .split('/')\n .filter(Boolean)\n .map(stripNumberPrefix)\n .join('/')\n}\n\nfunction docusaurusSlugifySegment(value: string): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed escapes remain literal input and are normalized safely below.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\nfunction docusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value)\n .split('/')\n .map(docusaurusSlugifySegment)\n .filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction defaultDocusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value).split('/').filter(Boolean)\n if (/^(?:index|readme)$/i.test(segments.at(-1) ?? '')) segments.pop()\n const normalized = segments.map(docusaurusSlugifySegment).filter(Boolean)\n return normalized.join('/') || 'introduction'\n}\n\nfunction storageIdForRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction titleCase(value: string): string {\n return stripNumberPrefix(value)\n .replace(/sidebar$/i, '')\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction routeFromSlug(slug: string, fallback: string, sourceDirectory?: string): string | null {\n if (slug === '/') return 'introduction'\n if (slug.startsWith('/')) return docusaurusRouteId(slug)\n const fallbackDirectory = sourceDirectory ?? (fallback === 'introduction' ? '' : posix.dirname(fallback))\n const resolved = posix.normalize(posix.join(fallbackDirectory, slug))\n if (resolved === '..' || resolved.startsWith('../')) return null\n return docusaurusRouteId(resolved)\n}\n\n/** Resolve Docusaurus `id`, `slug`, and numeric-prefix semantics once. */\nexport function resolveDocusaurusPageIdentity(\n sourcePath: string,\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n): { identity: MarkdownPageIdentity; descriptor: Omit<DocusaurusPageDescriptor, 'title'> } {\n const sourceDocId = normalizeDocId(sourcePath)\n const sourceDirectory = posix.dirname(sourceDocId)\n const configuredId = typeof frontmatter.id === 'string' && frontmatter.id.trim()\n ? stripNumberPrefix(frontmatter.id.trim())\n : null\n const docId = configuredId\n ? normalizeDocId(sourceDirectory === '.' ? configuredId : posix.join(sourceDirectory, configuredId))\n : sourceDocId\n // Docusaurus collapses a source `index` document by default, but an explicit\n // `slug: index` remains a literal route. Keep those two cases distinct.\n const defaultNavigationId = defaultDocusaurusRouteId(docId) ?? fallback.navigationId\n const configuredSlug = typeof frontmatter.slug === 'string' ? frontmatter.slug.trim() : ''\n const navigationId = configuredSlug\n ? routeFromSlug(\n configuredSlug,\n defaultNavigationId,\n sourceDirectory === '.' ? '' : sourceDirectory,\n ) ?? defaultNavigationId\n : defaultNavigationId\n const position = typeof frontmatter.sidebar_position === 'number'\n && Number.isFinite(frontmatter.sidebar_position)\n ? frontmatter.sidebar_position\n : undefined\n return {\n identity: { id: storageIdForRoute(navigationId), navigationId },\n descriptor: {\n sourcePath: sourcePath.replace(/\\\\/g, '/'),\n docId,\n navigationId,\n ...(position === undefined ? {} : { sidebarPosition: position }),\n },\n }\n}\n\nfunction sourceReferenceKey(value: string): string {\n return value.replace(/\\\\/g, '/').replace(/^\\/+/, '').replace(/\\.(?:mdx?)$/i, '').replace(/\\/$/, '')\n}\n\n/**\n * Rewrite Docusaurus file/doc-id links after every final slug is known. This is\n * deliberately line based so examples inside fenced code remain byte-for-byte\n * source content.\n */\nexport function rewriteDocusaurusLinks(\n body: string,\n current: DocusaurusPageDescriptor,\n descriptors: Array<DocusaurusPageDescriptor>,\n): string {\n const routes = new Map<string, string>()\n for (const descriptor of descriptors) {\n const sourceKey = sourceReferenceKey(descriptor.sourcePath)\n routes.set(sourceKey, descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.docId), descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.navigationId), descriptor.navigationId)\n const sourceRoute = pageIdFromReference(sourceKey)\n if (sourceRoute) routes.set(sourceRoute, descriptor.navigationId)\n }\n const currentDirectory = posix.dirname(sourceReferenceKey(current.sourcePath))\n\n function rewriteTarget(target: string): string {\n if (!target || target.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(target)) return target\n const suffixIndex = target.search(/[?#]/)\n const path = suffixIndex >= 0 ? target.slice(0, suffixIndex) : target\n const suffix = suffixIndex >= 0 ? target.slice(suffixIndex) : ''\n const candidates = path.startsWith('/')\n ? [sourceReferenceKey(path), sourceReferenceKey(path).replace(/^docs\\//, '')]\n : [\n sourceReferenceKey(posix.normalize(posix.join(currentDirectory, path))),\n sourceReferenceKey(path),\n ]\n const route = candidates.map((candidate) => routes.get(candidate)).find(Boolean)\n if (!route) return target\n return `${route === 'introduction' ? '/' : `/${route}`}${suffix}`\n }\n\n let codeFence: string | null = null\n return body.split('\\n').map((line) => {\n const fence = line.match(/^\\s*(`{3,}|~{3,})/)\n if (fence) {\n if (!codeFence) codeFence = fence[1][0]\n else if (fence[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n return line\n .replace(/(\\]\\()([^\\s)]+)(?=[\\s)]|$)/g, (_match, prefix: string, target: string) => `${prefix}${rewriteTarget(target)}`)\n .replace(/(\\bhref=\")([^\"]+)(\")/g, (_match, prefix: string, target: string, suffix: string) => `${prefix}${rewriteTarget(target)}${suffix}`)\n }).join('\\n')\n}\n\nfunction readBoundedText(path: string): string {\n if (lstatSync(path).size > MAX_CONFIG_BYTES) {\n throw new Error('Docusaurus sidebar config exceeded the 1 MB static-parser limit.')\n }\n return readFileSync(path, 'utf8')\n}\n\nfunction matchingObjectLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote: string | null = null\n let isEscaped = false\n let lineComment = false\n let blockComment = false\n let objectStart = -1\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n if (lineComment) {\n if (char === '\\n') lineComment = false\n continue\n }\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (char === '\\\\') isEscaped = true\n else if (char === quote) quote = null\n continue\n }\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n if (char === '{') {\n if (objectStart < 0) objectStart = index\n depth++\n } else if (char === '}' && objectStart >= 0) {\n depth--\n if (depth === 0) return source.slice(objectStart, index + 1)\n } else if (objectStart < 0 && !/\\s/.test(char)) {\n return null\n }\n }\n return null\n}\n\nfunction parseStaticSidebarModule(source: string): Record<string, unknown> {\n const bindings = new Map<string, Record<string, unknown>>()\n const normalizedSource = replaceExternalFbContent(source)\n const parseFailures: Array<string> = []\n const assignmentPatterns = [\n /\\bmodule\\.exports\\s*=\\s*/g,\n /\\bexport\\s+default\\s*/g,\n /\\b(?:const|let|var)\\s+[A-Za-z_$][\\w$]*(?:\\s*:\\s*[^=;]+)?\\s*=\\s*/g,\n ]\n const candidates = assignmentPatterns.flatMap((pattern) => [...normalizedSource.matchAll(pattern)])\n .sort((left, right) => (left.index ?? 0) - (right.index ?? 0))\n\n for (const candidate of candidates) {\n const literal = matchingObjectLiteral(normalizedSource, (candidate.index ?? 0) + candidate[0].length)\n if (!literal) continue\n try {\n const substituted = [...bindings].reduce(\n (value, [name, binding]) => value.replace(\n new RegExp(`(:\\\\s*)${name}\\\\b`, 'g'),\n (_match, prefix: string) => `${prefix}${JSON.stringify(binding)}`,\n ),\n literal,\n )\n const parsed = JSON5.parse(substituted) as unknown\n const object = objectValue(parsed)\n if (!object) continue\n const bindingName = candidate[0].match(/\\b(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)/)?.[1]\n if (bindingName) {\n bindings.set(bindingName, object)\n continue\n }\n return object\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const line = Number(message.match(/at (\\d+):/)?.[1] ?? 0)\n const context = line > 0 ? literal.split('\\n').slice(Math.max(0, line - 2), line + 1).join(' ') : ''\n parseFailures.push(`${message}${context ? ` near ${context}` : ''}`)\n // Try the next assignment. Expressions and function calls are rejected.\n }\n }\n const exportedBinding = normalizedSource.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\b/)?.[1]\n ?? normalizedSource.match(/\\bmodule\\.exports\\s*=\\s*([A-Za-z_$][\\w$]*)\\b/)?.[1]\n if (exportedBinding && bindings.has(exportedBinding)) return bindings.get(exportedBinding)!\n throw new Error(`Sidebar config is executable or outside the supported data-only syntax.${parseFailures[0] ? ` ${parseFailures[0]}` : ''}`)\n}\n\nfunction replaceExternalFbContent(source: string): string {\n const marker = '...fbContent('\n let result = source\n let searchFrom = 0\n while (true) {\n const start = result.indexOf(marker, searchFrom)\n if (start < 0) return result.replace(/,\\s*,/g, ',')\n const objectStart = result.indexOf('{', start + marker.length)\n if (objectStart < 0) return result\n const objectLiteral = matchingObjectLiteral(result, objectStart)\n if (!objectLiteral) {\n searchFrom = start + marker.length\n continue\n }\n const objectEnd = objectStart + objectLiteral.length\n const close = result.indexOf(')', objectEnd)\n if (close < 0) return result\n const externalMatch = /\\bexternal\\s*:\\s*/g.exec(objectLiteral)\n let replacement = ''\n if (externalMatch) {\n const arrayStart = objectLiteral.indexOf('[', externalMatch.index + externalMatch[0].length)\n if (arrayStart >= 0) {\n const array = matchingArrayLiteral(objectLiteral, arrayStart)\n if (array) replacement = array.slice(1, -1)\n }\n }\n let replaceEnd = close + 1\n if (!replacement) {\n const trailingComma = result.slice(replaceEnd).match(/^\\s*,/)\n if (trailingComma) replaceEnd += trailingComma[0].length\n }\n result = `${result.slice(0, start)}${replacement}${result.slice(replaceEnd)}`\n searchFrom = start + replacement.length\n }\n}\n\nfunction matchingArrayLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote = ''\n let isEscaped = false\n for (let index = start; index < source.length; index++) {\n const character = source[index]\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === quote) quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '[') depth++\n if (character === ']' && --depth === 0) return source.slice(start, index + 1)\n }\n return null\n}\n\nfunction configuredSidebarPath(repositoryRoot: string): string | null {\n for (const filename of ['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']) {\n const path = resolveWithin(repositoryRoot, filename)\n if (!existsSync(path)) continue\n const source = readBoundedText(path)\n const match = source.match(/\\bsidebarPath\\s*:\\s*(?:require\\.resolve\\(\\s*)?(['\"])([^'\"]+)\\1/)\n if (!match) continue\n const candidate = match[2].replace(/^\\.\\//, '')\n const resolved = resolveWithin(repositoryRoot, candidate)\n if (existsSync(resolved) && lstatSync(resolved).isFile()) return candidate\n }\n return null\n}\n\n/** Read the configured/default sidebar without running the source module. */\nexport function readDocusaurusSidebars(repositoryRoot: string): DocusaurusSidebars | null {\n const configured = configuredSidebarPath(repositoryRoot)\n const sourcePath = [configured, ...SIDEBAR_FILENAMES]\n .filter((value): value is string => Boolean(value))\n .find((candidate) => existsSync(resolveWithin(repositoryRoot, candidate)))\n if (!sourcePath) return null\n const absolutePath = resolveWithin(repositoryRoot, sourcePath)\n const source = readBoundedText(absolutePath)\n const parsed = extname(sourcePath).toLowerCase() === '.json'\n ? objectValue(JSON5.parse(source))\n : parseStaticSidebarModule(source)\n if (!parsed) throw new Error('Docusaurus sidebar config must export an object.')\n return { config: parsed, sourcePath }\n}\n\nfunction readCategoryMetadata(contentRoot: string, directory: string): CategoryMetadata {\n for (const filename of CATEGORY_FILENAMES) {\n const path = resolveWithin(contentRoot, posix.join(directory, filename))\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n try {\n const raw = readBoundedText(path)\n const parsed = filename.endsWith('.json') ? JSON5.parse(raw) : parseYaml(raw)\n const object = objectValue(parsed)\n if (!object) return {}\n return {\n ...(typeof object.label === 'string' ? { label: object.label } : {}),\n ...(typeof object.position === 'number' ? { position: object.position } : {}),\n ...('link' in object ? { link: object.link } : {}),\n }\n } catch {\n return {}\n }\n }\n return {}\n}\n\nfunction descriptorSort(left: DocusaurusPageDescriptor, right: DocusaurusPageDescriptor): number {\n const leftPosition = left.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n const rightPosition = right.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n if (leftPosition !== rightPosition) return leftPosition - rightPosition\n return left.sourcePath.localeCompare(right.sourcePath, undefined, { numeric: true })\n}\n\nfunction registerDoc(docId: string, context: ProjectionContext): string | null {\n const key = normalizeDocId(docId)\n const descriptor = context.descriptorByDocId.get(key)\n ?? context.descriptors.find((page) => page.navigationId === docusaurusRouteId(key))\n if (!descriptor) {\n context.warnings.push({\n code: 'missing-page',\n message: 'A Docusaurus sidebar document did not resolve to an imported page.',\n source: docId,\n })\n return null\n }\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n}\n\nfunction generatedIndexPage(\n label: string,\n linkValue: unknown,\n context: ProjectionContext,\n): string | null {\n const link = objectValue(linkValue)\n if (!link) return null\n if (link.type === 'doc' && typeof link.id === 'string') return registerDoc(link.id, context)\n if (link.type !== 'generated-index') return null\n const fallback = `category/${slugifySegment(label)}`\n const unprefixedNavigationId = typeof link.slug === 'string'\n ? routeFromSlug(link.slug, fallback) ?? fallback\n : fallback\n const navigationId = context.routePrefix\n && unprefixedNavigationId !== context.routePrefix\n && !unprefixedNavigationId.startsWith(`${context.routePrefix}/`)\n ? posix.join(context.routePrefix, unprefixedNavigationId)\n : unprefixedNavigationId\n if (!context.generatedIds.has(navigationId)\n && !context.descriptors.some((page) => page.navigationId === navigationId)) {\n const description = typeof link.description === 'string'\n ? link.description\n : `Browse the ${label} documentation.`\n context.generatedPages.push({\n id: storageIdForRoute(navigationId),\n navigationId,\n title: typeof link.title === 'string' ? link.title : label,\n description,\n keywords: Array.isArray(link.keywords)\n ? link.keywords.filter((value): value is string => typeof value === 'string')\n : [],\n body: description,\n source: `${context.sourceUrl}#${context.sidebarSource}`,\n })\n context.generatedIds.add(navigationId)\n }\n context.referencedNavigationIds.add(navigationId)\n return navigationId\n}\n\nfunction autogeneratedItems(dirName: string, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n const normalizedDir = dirName === '.' ? '' : normalizeDocId(dirName)\n const inDirectory = context.descriptors.filter((descriptor) => {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n return !normalizedDir || source === normalizedDir || source.startsWith(`${normalizedDir}/`)\n })\n const directPages: Array<DocusaurusPageDescriptor> = []\n const childDirectories = new Set<string>()\n for (const descriptor of inDirectory) {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n const relativePath = normalizedDir ? posix.relative(normalizedDir, source) : source\n const segments = relativePath.split('/').filter(Boolean)\n if (segments.length <= 1) directPages.push(descriptor)\n else childDirectories.add(segments[0])\n }\n\n const items: Array<string | MigrationNavigationGroup> = directPages\n .sort(descriptorSort)\n .map((descriptor) => {\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n })\n const groups = [...childDirectories].map((segment) => {\n const directory = normalizedDir ? posix.join(normalizedDir, segment) : segment\n const metadata = readCategoryMetadata(context.contentRoot, directory)\n const pages = autogeneratedItems(directory, context)\n const landing = generatedIndexPage(metadata.label ?? titleCase(segment), metadata.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return {\n position: metadata.position ?? Number.MAX_SAFE_INTEGER,\n segment,\n group: {\n group: metadata.label ?? titleCase(segment),\n pages,\n } satisfies MigrationNavigationGroup,\n }\n }).sort((left, right) => left.position - right.position\n || left.segment.localeCompare(right.segment, undefined, { numeric: true }))\n items.push(...groups.map((entry) => entry.group))\n return items\n}\n\nfunction convertItems(value: unknown, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n if (typeof value === 'string') {\n const page = registerDoc(value, context)\n return page ? [page] : []\n }\n if (Array.isArray(value)) return value.flatMap((entry) => convertItems(entry, context))\n const object = objectValue(value)\n if (!object) return []\n\n if (object.type === 'doc' || object.type === 'ref') {\n const page = typeof object.id === 'string' ? registerDoc(object.id, context) : null\n return page ? [page] : []\n }\n if (object.type === 'autogenerated') {\n return autogeneratedItems(typeof object.dirName === 'string' ? object.dirName : '.', context)\n }\n if (object.type === 'category') {\n const label = typeof object.label === 'string' ? object.label : 'Documentation'\n const pages = convertItems(object.items, context)\n const landing = generatedIndexPage(label, object.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return pages.length > 0 ? [{ group: label, pages }] : []\n }\n if (object.type === 'link' || object.type === 'html') return []\n\n // Docusaurus category shorthand and sidebar slices are ordinary objects.\n return Object.entries(object).flatMap(([label, items]) => {\n const pages = convertItems(items, context)\n return pages.length > 0 ? [{ group: label, pages }] : []\n })\n}\n\n/** Project explicit and autogenerated Docusaurus sidebars into Thally tabs. */\nexport function projectDocusaurusNavigation(input: {\n sidebars: DocusaurusSidebars | null\n descriptors: Array<DocusaurusPageDescriptor>\n contentRoot: string\n sourceUrl: string\n routePrefix?: string\n}): DocusaurusNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const descriptorByDocId = new Map(input.descriptors.map((page) => [page.docId, page]))\n const context: ProjectionContext = {\n contentRoot: input.contentRoot,\n descriptors: input.descriptors,\n descriptorByDocId,\n generatedPages: [],\n generatedIds: new Set(),\n referencedNavigationIds: new Set(),\n sourceUrl: input.sourceUrl,\n routePrefix: input.routePrefix ?? '',\n sidebarSource: input.sidebars?.sourcePath ?? 'autogenerated sidebar',\n warnings,\n }\n const sidebarEntries = input.sidebars ? Object.entries(input.sidebars.config) : [['docs', [\n { type: 'autogenerated', dirName: '.' },\n ]]]\n const tabs = sidebarEntries.flatMap(([sidebarId, value]) => {\n const converted = convertItems(value, context)\n const loosePages = converted.filter((entry): entry is string => typeof entry === 'string')\n const groups = converted.filter((entry): entry is MigrationNavigationGroup => typeof entry !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n return [{\n tab: sidebarEntries.length === 1 ? 'Documentation' : titleCase(sidebarId),\n groups,\n }]\n })\n\n const unreferenced = input.descriptors\n .filter((page) => !context.referencedNavigationIds.has(page.navigationId))\n .sort(descriptorSort)\n .map((page) => page.navigationId)\n if (unreferenced.length > 0) {\n if (tabs.length === 0) tabs.push({ tab: 'Documentation', groups: [] })\n tabs[0].groups?.push({ group: 'Additional', pages: unreferenced })\n }\n return {\n docsConfig: { tabs },\n generatedPages: context.generatedPages,\n referencedNavigationIds: context.referencedNavigationIds,\n warnings,\n }\n}\n","/** Safe path normalization used before reading or writing migrated content. */\n\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nconst SAFE_SEGMENT = /[^a-z0-9._-]+/gi\n\n/**\n * Remove trailing forward slashes in linear time. Keeping leading slashes is\n * important because callers may still need to reject absolute paths.\n */\nexport function trimTrailingSlashes(value: string): string {\n let end = value.length\n while (end > 0 && value.charCodeAt(end - 1) === 47) end--\n return value.slice(0, end)\n}\n\n/** Remove forward slashes from both ends without a backtracking expression. */\nexport function trimEdgeSlashes(value: string): string {\n let start = 0\n let end = value.length\n while (start < end && value.charCodeAt(start) === 47) start++\n while (end > start && value.charCodeAt(end - 1) === 47) end--\n return value.slice(start, end)\n}\n\n/** Turn a source path segment into a stable URL/file-system slug. */\nexport function slugifySegment(value: string, preserveCase = false): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed percent escapes are legal in source filenames. Treat them as\n // literal slug input instead of letting one file abort the whole import.\n }\n const normalized = preserveCase ? decoded : decoded.toLowerCase()\n return normalized\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(SAFE_SEGMENT, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Normalize a page reference to a Thally content id. Invalid or traversal\n * references return `null` instead of being allowed near the file system.\n */\nexport function pageIdFromReference(value: string, preserveCase = false): string | null {\n const withoutQuery = value.split(/[?#]/, 1)[0].replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!withoutQuery || withoutQuery.includes('\\0')) return null\n const rawSegments = withoutQuery.split('/').filter(Boolean)\n if (rawSegments.some((segment) => segment === '..' || segment === '.')) return null\n const last = rawSegments.at(-1)?.replace(/\\.(?:mdx?|rst|txt)$/i, '') ?? ''\n const baseSegments = /^(?:index|readme)$/i.test(last) ? rawSegments.slice(0, -1) : rawSegments\n if (!/^(?:index|readme)$/i.test(last)) {\n baseSegments[baseSegments.length - 1] = last\n }\n const segments = baseSegments.map((segment) => slugifySegment(segment, preserveCase)).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\n/** Resolve an untrusted relative path and prove it remains below `root`. */\nexport function resolveWithin(root: string, candidate: string): string {\n if (isAbsolute(candidate) || candidate.includes('\\0')) {\n throw new Error(`Unsafe migration path: ${candidate}`)\n }\n const target = resolve(root, candidate)\n const fromRoot = relative(resolve(root), target)\n if (fromRoot === '..' || fromRoot.startsWith(`..${sep}`) || isAbsolute(fromRoot)) {\n throw new Error(`Migration path escapes its root: ${candidate}`)\n }\n return target\n}\n\n/** Return a slash-separated, traversal-free asset path. */\nexport function normalizeAssetPath(value: string): string | null {\n const normalized = value.replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!normalized || normalized.includes('\\0')) return null\n const segments = normalized.split('/').filter(Boolean)\n if (segments.some((segment) => segment === '.' || segment === '..')) return null\n return segments.join('/')\n}\n","/**\n * The one frontmatter parser for authored content in this package.\n *\n * Only YAML is supported. Parsing delimiters locally keeps legacy JavaScript\n * engines out of migration processes and treats language-tagged blocks as\n * opaque metadata rather than executable third-party input.\n *\n * Internal module — deliberately not part of the package's public API. The\n * app-side original is `src/lib/frontmatter.ts`; the packages keep their own\n * copies because they cannot import from the app.\n */\n\nimport { parse as parseYaml } from 'yaml'\n\ninterface ParsedFrontmatter {\n content: string\n data: Record<string, unknown>\n}\n\n/** Parse frontmatter without any path that can execute the content. */\nexport function parseFrontmatter(raw: string): ParsedFrontmatter {\n const source = raw.charCodeAt(0) === 0xfeff ? raw.slice(1) : raw\n const opening = /^---([^\\r\\n]*)\\r?\\n/.exec(source)\n if (!opening || opening[1].startsWith('-')) return { content: source, data: {} }\n\n const language = opening[1].trim().toLowerCase()\n const remainder = source.slice(opening[0].length)\n const closing = /^---[ \\t]*\\r?$/m.exec(remainder)\n const matter = closing ? remainder.slice(0, closing.index) : remainder\n let content = closing ? remainder.slice(closing.index + closing[0].length) : ''\n if (content.startsWith('\\r\\n')) content = content.slice(2)\n else if (content.startsWith('\\n')) content = content.slice(1)\n\n if (matter.trim() === '' || !['', 'yaml', 'yml'].includes(language)) {\n return { content, data: {} }\n }\n const parsed = parseYaml(matter)\n return {\n content,\n data: parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {},\n }\n}\n","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport { parseFrontmatter } from './frontmatter.js'\nimport type { MigrationPage } from './types.js'\n\nexport interface MarkdownPageIdentity {\n id: string\n navigationId: string\n locale?: string\n}\n\nfunction titleFromId(id: string): string {\n const value = id.split('/').at(-1) ?? id\n if (value === 'introduction') return 'Introduction'\n return value\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction firstParagraph(content: string): string {\n for (const block of content.split(/\\n\\s*\\n/)) {\n const value = block.replace(/\\s+/g, ' ').trim()\n if (!value || /^(?:#|```|:::|<|import\\s|export\\s)/.test(value)) continue\n return value.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1').slice(0, 240)\n }\n return ''\n}\n\nfunction docusaurusAdmonitionTag(kind: string): 'Error' | 'Info' | 'Note' | 'Warning' {\n if (kind === 'danger') return 'Error'\n if (kind === 'info') return 'Info'\n if (kind === 'caution' || kind === 'warning') return 'Warning'\n return 'Note'\n}\n\n/**\n * Convert Docusaurus' colon-fence admonitions without interpreting code-fence\n * contents. Longer delimiters support nested admonitions in the same way as\n * the source renderer.\n */\nfunction normalizeDocusaurusAdmonitions(body: string): string {\n const lines = body.split('\\n')\n const openAdmonitions: Array<{ delimiter: string; tag: string }> = []\n let codeFence: string | null = null\n\n return lines.map((line) => {\n const codeMatch = line.match(/^\\s*(`{3,}|~{3,})/)\n if (codeMatch) {\n if (!codeFence) codeFence = codeMatch[1][0]\n else if (codeMatch[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n\n const opening = line.match(/^\\s*(:{3,})(note|tip|info|warning|caution|danger)(?:\\[([^\\]]+)\\]|\\s+(.+))?\\s*$/i)\n if (opening) {\n const tag = docusaurusAdmonitionTag(opening[2].toLowerCase())\n openAdmonitions.push({ delimiter: opening[1], tag })\n const title = (opening[3] ?? opening[4])?.trim()\n return title ? `<${tag}>\\n**${title}**` : `<${tag}>`\n }\n\n const closing = line.match(/^\\s*(:{3,})\\s*$/)\n const current = openAdmonitions.at(-1)\n if (closing && current?.delimiter === closing[1]) {\n openAdmonitions.pop()\n return `</${current.tag}>`\n }\n return line\n }).join('\\n')\n}\n\n/** Normalize only syntax Thally cannot render; supported source JSX stays intact. */\nexport function normalizeMdx(body: string): string {\n return normalizeDocusaurusAdmonitions(body)\n // Docusaurus injects these theme components globally. Thally also exposes\n // its equivalents globally, so source-only imports must not survive.\n .replace(/^import\\s+(?:Tabs|TabItem|Link|DocCardList|TOCInline)\\s+from\\s+['\"]@(?:theme|docusaurus)\\/[^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/<TabItem\\b([^>]*)>/g, (_match, attributes: string) => {\n const title = attributes.match(/\\blabel=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? attributes.match(/\\bvalue=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? 'Tab'\n return `<Tab title=\"${title.replace(/\"/g, '"')}\">`\n })\n .replace(/<\\/TabItem>/g, '</Tab>')\n .replace(/<Link\\b([^>]*)\\bto=(?:\"([^\"]*)\"|'([^']*)')([^>]*)>/g, (_match, before: string, doubleQuoted: string, singleQuoted: string, after: string) => (\n `<a${before}href=\"${doubleQuoted ?? singleQuoted}\"${after}>`\n ))\n .replace(/<\\/Link>/g, '</a>')\n .replace(/<(?:DocCardList|TOCInline)\\b[^>]*\\/>/g, '')\n .replace(/<!--([\\s\\S]*?)-->/g, (_match, content: string) => `{/*${content}*/}`)\n .replace(/<Danger(\\s[^>]*)?>/g, '<Error$1>')\n .replace(/<\\/Danger>/g, '</Error>')\n .replace(/<Warn(\\s[^>]*)?>/g, '<Warning$1>')\n .replace(/<\\/Warn>/g, '</Warning>')\n .replace(/<Check(\\s[^>]*)?>/g, '<Note$1>')\n .replace(/<\\/Check>/g, '</Note>')\n .replace(/<Tree\\.Folder/g, '<Folder')\n .replace(/<\\/Tree\\.Folder>/g, '</Folder>')\n .replace(/<Tree\\.File/g, '<File')\n .replace(/<\\/Tree\\.File>/g, '</File>')\n}\n\n/** Parse source Markdown or MDX into the canonical page representation. */\nexport function parseMarkdownPage(input: {\n id: string\n navigationId?: string\n locale?: string\n raw: string\n source: string\n /** Resolve platform-specific routes from the already-parsed frontmatter. */\n resolveIdentity?: (\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n ) => MarkdownPageIdentity\n}): MigrationPage | null {\n const parsed = parseFrontmatter(input.raw)\n const fallbackIdentity: MarkdownPageIdentity = {\n id: input.id,\n navigationId: input.navigationId ?? input.id,\n ...(input.locale ? { locale: input.locale } : {}),\n }\n const identity = input.resolveIdentity?.(parsed.data, fallbackIdentity) ?? fallbackIdentity\n const body = normalizeMdx(parsed.content).trim()\n const keywords = Array.isArray(parsed.data.keywords)\n ? parsed.data.keywords.filter((value): value is string => typeof value === 'string')\n : []\n const title = typeof parsed.data.title === 'string' && parsed.data.title.trim()\n ? parsed.data.title.trim()\n : titleFromId(identity.navigationId)\n const navTitle = typeof parsed.data.sidebarTitle === 'string' && parsed.data.sidebarTitle.trim()\n ? parsed.data.sidebarTitle.trim()\n : typeof parsed.data.navTitle === 'string' && parsed.data.navTitle.trim()\n ? parsed.data.navTitle.trim()\n : undefined\n const badge = typeof parsed.data.tag === 'string' && parsed.data.tag.trim()\n ? parsed.data.tag.trim()\n : typeof parsed.data.badge === 'string' && parsed.data.badge.trim()\n ? parsed.data.badge.trim()\n : undefined\n const sourceMode = typeof parsed.data.mode === 'string' ? parsed.data.mode : undefined\n // Mintlify's frame mode and Thally's wide mode both retain the sidebar while\n // removing the on-page table of contents. Other shared modes map directly.\n const mode = sourceMode === 'frame'\n ? 'wide'\n : ['default', 'wide', 'custom', 'center', 'home'].includes(sourceMode ?? '')\n ? sourceMode as MigrationPage['mode']\n : undefined\n const description = typeof parsed.data.description === 'string' && parsed.data.description.trim()\n ? parsed.data.description.trim()\n : firstParagraph(body)\n return {\n id: identity.id,\n navigationId: identity.navigationId,\n locale: identity.locale,\n title,\n navTitle,\n description,\n badge,\n keywords,\n mode,\n hidden: parsed.data.hidden === true ? true : undefined,\n noindex: parsed.data.noindex === true || parsed.data.noindex === 'true' ? true : undefined,\n openapi: typeof parsed.data.openapi === 'string' ? parsed.data.openapi.trim() : undefined,\n body,\n source: input.source,\n }\n}\n","/**\n * Navigation projection for imported sites. Mintlify's schema is intentionally\n * more expressive than Thally's tab/group model, so complex containers are\n * flattened predictably while preserving page order and nested groups.\n */\n\nimport { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs'\nimport { dirname, extname, relative } from 'node:path'\n\nimport { pageIdFromReference, resolveWithin, trimEdgeSlashes } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationNavigationTab,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\ninterface MintlifyPageReference {\n ref: string\n navigationId: string\n locale?: string\n}\n\nconst MAX_MINTLIFY_CONFIG_BYTES = 2_000_000\n\nexport interface MintlifyNavigationResult {\n docsConfig: MigrationDocsConfig\n pageReferences: Array<MintlifyPageReference>\n warnings: Array<MigrationWarning>\n}\n\nexport interface MintlifyProjectionOptions {\n /** Public URL migrations may expose page hrefs including the docs mount path. */\n pathPrefix?: string\n}\n\n/** Preserve Mintlify's implicit `/section` route for section landing pages. */\nexport function addMintlifyDirectoryRedirects(\n config: MigrationDocsConfig,\n pages: Array<MigrationPage>,\n): MigrationDocsConfig {\n const pageIds = new Set(pages.filter((page) => !page.locale).map((page) => page.navigationId))\n const redirects = [...(config.redirects ?? [])]\n const redirectSources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n for (const page of pages) {\n if (page.locale || !/(?:^|\\/)(?:overview|introduction)$/.test(page.navigationId)) continue\n const parent = page.navigationId.replace(/\\/(?:overview|introduction)$/, '')\n if (!parent || pageIds.has(parent)) continue\n const source = `/${parent}`\n if (redirectSources.has(source)) continue\n redirects.push({ source, destination: `/${page.navigationId}`, permanent: false })\n redirectSources.add(source)\n }\n return redirects.length > 0 ? { ...config, redirects } : config\n}\n\nconst LANGUAGE_LABELS: Record<string, string> = {\n ar: 'Arabic',\n de: 'German',\n en: 'English',\n es: 'Spanish',\n fr: 'French',\n hi: 'Hindi',\n it: 'Italian',\n ja: 'Japanese',\n ko: 'Korean',\n nl: 'Dutch',\n pl: 'Polish',\n pt: 'Portuguese',\n ru: 'Russian',\n tr: 'Turkish',\n uk: 'Ukrainian',\n zh: 'Chinese',\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction projectedHref(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined\n const href = value.trim()\n if (!href || /[\\u0000-\\u001f\\u007f]/.test(href)) return undefined\n if (/^(?:javascript|data|vbscript|file):/i.test(href)) return undefined\n const scheme = href.match(/^([a-z][a-z0-9+.-]*):/i)?.[1].toLowerCase()\n if (scheme && !['http', 'https', 'mailto', 'tel'].includes(scheme)) return undefined\n return href\n}\n\nfunction labelFor(value: Record<string, unknown>, fallback: string): string {\n for (const key of ['tab', 'group', 'anchor', 'product', 'dropdown', 'version', 'menu', 'label', 'name', 'title']) {\n if (typeof value[key] === 'string' && value[key]) return String(value[key])\n }\n return fallback\n}\n\nfunction localReference(value: string): string {\n return value.split('#', 1)[0]\n}\n\nfunction jsonPointer(root: unknown, pointer: string): unknown {\n if (!pointer || pointer === '#') return root\n const tokens = pointer.replace(/^#\\/?/, '').split('/').filter(Boolean)\n return tokens.reduce<unknown>((current, token) => {\n if (Array.isArray(current)) {\n const index = Number(token)\n return Number.isSafeInteger(index) && index >= 0 ? current[index] : undefined\n }\n const object = objectValue(current)\n if (!object) return undefined\n return object[token.replace(/~1/g, '/').replace(/~0/g, '~')]\n }, root)\n}\n\nfunction readMintlifyJson(path: string, repositoryRoot: string): unknown {\n if (!existsSync(path) || !lstatSync(path).isFile()) {\n throw new Error(`Mintlify config reference is not a regular file: ${relative(repositoryRoot, path)}`)\n }\n const realPath = realpathSync(path)\n const realRoot = realpathSync(repositoryRoot)\n resolveWithin(realRoot, relative(realRoot, realPath))\n if (lstatSync(realPath).size > MAX_MINTLIFY_CONFIG_BYTES) {\n throw new Error(`Mintlify config reference exceeded ${MAX_MINTLIFY_CONFIG_BYTES / 1_000_000} MB: ${relative(repositoryRoot, path)}`)\n }\n return JSON.parse(readFileSync(realPath, 'utf8')) as unknown\n}\n\nfunction resolveJsonReferences(\n value: unknown,\n currentFile: string,\n repositoryRoot: string,\n stack: Set<string>,\n): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => resolveJsonReferences(entry, currentFile, repositoryRoot, stack))\n }\n const object = objectValue(value)\n if (!object) return value\n if (typeof object.$ref === 'string') {\n const [filePart, pointer = ''] = object.$ref.split('#', 2)\n const referencedFile = filePart\n ? resolveWithin(dirname(currentFile), filePart)\n : currentFile\n const relativePath = relative(repositoryRoot, referencedFile)\n resolveWithin(repositoryRoot, relativePath)\n const stackKey = `${referencedFile}#${pointer}`\n if (stack.has(stackKey)) throw new Error(`Circular Mintlify $ref: ${object.$ref}`)\n stack.add(stackKey)\n const referencedRoot = readMintlifyJson(referencedFile, repositoryRoot)\n const referenced = jsonPointer(referencedRoot, pointer ? `#${pointer}` : '')\n const resolved = resolveJsonReferences(referenced, referencedFile, repositoryRoot, stack)\n stack.delete(stackKey)\n const siblings = Object.fromEntries(\n Object.entries(object)\n .filter(([key]) => key !== '$ref')\n .map(([key, entry]) => [\n key,\n resolveJsonReferences(entry, currentFile, repositoryRoot, stack),\n ]),\n )\n // Mintlify merges sibling keys over object-valued references. Retaining\n // this behavior matters for split navigation files that override one\n // label, link, or visibility flag at the reference site.\n return objectValue(resolved) ? { ...resolved as Record<string, unknown>, ...siblings } : resolved\n }\n return Object.fromEntries(\n Object.entries(object).map(([key, entry]) => [\n key,\n resolveJsonReferences(entry, currentFile, repositoryRoot, stack),\n ]),\n )\n}\n\n/** Read `docs.json`/`mint.json`, including bounded local JSON references. */\nexport function readMintlifyConfig(repositoryRoot: string): Record<string, unknown> | null {\n const configPath = ['docs.json', 'mint.json']\n .map((filename) => resolveWithin(repositoryRoot, filename))\n .find(existsSync)\n if (!configPath) return null\n const raw = readMintlifyJson(configPath, repositoryRoot)\n return resolveJsonReferences(raw, configPath, repositoryRoot, new Set()) as Record<string, unknown>\n}\n\nfunction normalizePageRef(value: string, pathPrefix = ''): string | null {\n if (/^(?:https?:)?\\/\\//i.test(value) || value.startsWith('#')) return null\n let ref = localReference(value).split('?', 1)[0].replace(/^\\/+/, '')\n const prefix = trimEdgeSlashes(pathPrefix)\n if (prefix && (ref === prefix || ref.startsWith(`${prefix}/`))) {\n ref = ref === prefix ? 'introduction' : ref.slice(prefix.length + 1)\n }\n ref = ref.replace(/\\.(?:mdx?|rst|txt)$/i, '')\n // Mintlify routes are case-sensitive and commonly use camelCase filenames\n // (for example `additionalFiles`). Lowercasing here breaks both authored\n // navigation and links even though the source site resolves them correctly.\n return pageIdFromReference(ref, true)\n}\n\ninterface ProjectionContext {\n locale?: string\n pathPrefix?: string\n references: Array<MintlifyPageReference>\n seenReferences: Set<string>\n warnings: Array<MigrationWarning>\n warningKeys: Set<string>\n}\n\nfunction warnOnce(context: ProjectionContext, key: string, message: string): void {\n if (context.warningKeys.has(key)) return\n context.warningKeys.add(key)\n context.warnings.push({ code: 'unsupported-config', message })\n}\n\nfunction iconName(value: unknown): string | undefined {\n if (typeof value === 'string' && value) return value\n const icon = objectValue(value)\n return typeof icon?.name === 'string' && icon.name ? icon.name : undefined\n}\n\nfunction containerPresentation(value: Record<string, unknown>): {\n description?: string\n icon?: string\n} {\n return {\n ...(typeof value.description === 'string' && value.description.trim()\n ? { description: value.description.trim() }\n : {}),\n ...(iconName(value.icon) ? { icon: iconName(value.icon) } : {}),\n }\n}\n\nfunction registerReference(value: string, context: ProjectionContext): string | null {\n const localePrefix = context.locale ? `${context.locale}/` : ''\n const localizedValue = localePrefix && value.replace(/^\\/+/, '').startsWith(localePrefix)\n ? value.replace(/^\\/+/, '').slice(localePrefix.length)\n : value\n const navigationId = normalizePageRef(localizedValue, context.pathPrefix)\n if (!navigationId) return null\n const key = `${context.locale ?? ''}:${value}`\n if (!context.seenReferences.has(key)) {\n context.seenReferences.add(key)\n context.references.push({ ref: value, navigationId, locale: context.locale })\n }\n return navigationId\n}\n\nfunction convertPage(\n value: unknown,\n context: ProjectionContext,\n): string | MigrationNavigationGroup | null {\n if (typeof value === 'string') return registerReference(value, context)\n const object = objectValue(value)\n if (!object) return null\n if (typeof object.page === 'string') return registerReference(object.page, context)\n const href = projectedHref(object.href)\n if (href && !object.pages && !object.groups) {\n const page = registerReference(href, context)\n if (page) return page\n warnOnce(\n context,\n 'external-page-link',\n 'External links nested inside a Mintlify sidebar cannot be represented as Thally pages and were omitted.',\n )\n return null\n }\n const pages = Array.isArray(object.pages) ? object.pages : []\n if ('group' in object || pages.length > 0) {\n const children: Array<string | MigrationNavigationGroup> = []\n if (typeof object.root === 'string') {\n const root = registerReference(object.root, context)\n if (root) children.push(root)\n }\n for (const page of pages) {\n const converted = convertPage(page, context)\n if (converted) children.push(converted)\n }\n if (children.length === 0) return null\n return {\n group: labelFor(object, 'Documentation'),\n ...(iconName(object.icon) ? { icon: iconName(object.icon) } : {}),\n ...(object.hidden === true ? { hidden: true } : {}),\n pages: children,\n }\n }\n return null\n}\n\nfunction convertNavigationValues(\n values: Array<unknown>,\n context: ProjectionContext,\n): Array<string | MigrationNavigationGroup> {\n return values.flatMap<string | MigrationNavigationGroup>((value) => {\n const page = convertPage(value, context)\n return page ? [page] : []\n })\n}\n\ninterface NavigationProjectionTrace {\n rootContainerKind?: 'tabs' | 'anchors' | 'products' | 'dropdowns' | 'versions' | 'menus'\n}\n\nfunction convertContainerToTabs(\n containerValue: unknown,\n context: ProjectionContext,\n fallbackTab: string,\n trace?: NavigationProjectionTrace,\n depth = 0,\n): Array<MigrationNavigationTab> {\n const container = objectValue(containerValue)\n if (!container) return []\n const containerKeys = ['tabs', 'anchors', 'products', 'dropdowns', 'versions', 'menus'] as const\n for (const key of containerKeys) {\n if (!Array.isArray(container[key])) continue\n const entries = [...container[key] as Array<unknown>]\n if (key === 'versions') {\n entries.sort((left, right) => Number(objectValue(right)?.default === true) - Number(objectValue(left)?.default === true))\n }\n const tabs = entries.flatMap((value, index) => {\n const object = objectValue(value)\n if (!object) return []\n const tab = labelFor(object, `${fallbackTab} ${index + 1}`)\n const href = projectedHref(object.href)\n const hasNestedContainers = containerKeys.some((containerKey) => Array.isArray(object[containerKey]))\n if (href && !object.pages && !object.groups && !hasNestedContainers) {\n return [{\n tab,\n href,\n ...containerPresentation(object),\n ...(object.hidden === true ? { hidden: true } : {}),\n }]\n }\n const nested = convertContainerToTabs(object, context, tab, trace, depth + 1)\n if (nested.length > 0) {\n if (nested.length === 1) {\n return [{\n ...nested[0],\n tab,\n ...containerPresentation(object),\n ...(href ? { href } : {}),\n ...(object.hidden === true ? { hidden: true } : {}),\n }]\n }\n const presentation = containerPresentation(object)\n return nested.map((item, childIndex) => ({\n ...presentation,\n ...item,\n tab: `${tab}: ${item.tab}`,\n ...(childIndex === 0 && href && !item.href ? { href } : {}),\n ...(object.hidden === true ? { hidden: true } : {}),\n }))\n }\n return []\n })\n if (tabs.length > 0) {\n if (depth === 0 && trace) trace.rootContainerKind = key\n return tabs\n }\n }\n const rawGroups = Array.isArray(container.groups) ? container.groups : []\n const rawPages = Array.isArray(container.pages) ? container.pages : []\n const hasRootNodes = typeof container.root === 'string' || rawPages.length > 0\n const values = [\n ...(typeof container.root === 'string' ? [container.root] : []),\n ...rawGroups,\n ...rawPages,\n ]\n const children = convertNavigationValues(values, context)\n return children.length > 0\n ? [{\n tab: fallbackTab,\n ...(hasRootNodes\n ? { pages: children }\n : { groups: children as Array<MigrationNavigationGroup> }),\n ...containerPresentation(container),\n ...(projectedHref(container.href) ? { href: projectedHref(container.href) } : {}),\n ...(container.hidden === true ? { hidden: true } : {}),\n }]\n : []\n}\n\nfunction projectedTheme(value: unknown): MigrationDocsConfig['theme'] {\n if (value === 'maple') return 'maple'\n if (['aspen', 'luma', 'sequoia'].includes(String(value))) return 'sharp'\n if (['almond', 'palm'].includes(String(value))) return 'minimal'\n return typeof value === 'string' ? 'default' : undefined\n}\n\nfunction projectedNavbar(value: unknown): MigrationDocsConfig['navbar'] {\n const navbar = objectValue(value)\n if (!navbar) return undefined\n const links = Array.isArray(navbar.links)\n ? navbar.links.flatMap((entry) => {\n const link = objectValue(entry)\n const href = projectedHref(link?.href)\n if (!link || !href) return []\n const label = typeof link.label === 'string' ? link.label : typeof link.name === 'string' ? link.name : ''\n if (!label) return []\n return [{ label, href, ...(link.type === 'github' ? { type: 'github' as const } : {}) }]\n })\n : []\n const primaryValue = objectValue(navbar.primary)\n const primaryHref = projectedHref(primaryValue?.href)\n const primary = primaryValue && primaryHref\n ? {\n label: typeof primaryValue.label === 'string'\n ? primaryValue.label\n : primaryValue.type === 'github' ? 'GitHub' : 'Get started',\n href: primaryHref,\n }\n : undefined\n return links.length > 0 || primary ? { ...(links.length > 0 ? { links } : {}), ...(primary ? { primary } : {}) } : undefined\n}\n\nfunction projectedGlobalNavigationLinks(\n value: unknown,\n): NonNullable<NonNullable<MigrationDocsConfig['navbar']>['links']> {\n const global = objectValue(value)\n if (!global) return []\n const links: Array<{ label: string; href: string }> = []\n const visit = (entry: unknown): void => {\n if (Array.isArray(entry)) {\n entry.forEach(visit)\n return\n }\n const item = objectValue(entry)\n if (!item) return\n const href = projectedHref(item.href)\n if (href) {\n const label = labelFor(item, '')\n if (label) links.push({ label, href })\n }\n for (const key of ['tabs', 'anchors', 'dropdowns', 'products', 'versions', 'languages', 'menus']) {\n if (Array.isArray(item[key])) visit(item[key])\n }\n }\n visit(global)\n return links\n}\n\nfunction projectedFooter(value: unknown): MigrationDocsConfig['footer'] {\n const footer = objectValue(value)\n if (!footer) return undefined\n const socials = objectValue(footer.socials)\n const socialLinks = socials\n ? Object.fromEntries(Object.entries(socials).flatMap(([key, value]) => {\n const href = projectedHref(value)\n return href ? [[key, href]] : []\n }))\n : undefined\n const links = Array.isArray(footer.links)\n ? footer.links.flatMap((entry) => {\n const column = objectValue(entry)\n if (!column || !Array.isArray(column.items)) return []\n const heading = typeof column.heading === 'string'\n ? column.heading\n : typeof column.header === 'string' ? column.header : ''\n const items = column.items.flatMap((item) => {\n const link = objectValue(item)\n const href = projectedHref(link?.href)\n return link && typeof link.label === 'string' && href\n ? [{ label: link.label, href }]\n : []\n })\n return heading && items.length > 0 ? [{ heading, items }] : []\n })\n : []\n return (socialLinks && Object.keys(socialLinks).length > 0) || links.length > 0\n ? { ...(socialLinks && Object.keys(socialLinks).length > 0 ? { socials: socialLinks } : {}), ...(links.length > 0 ? { links } : {}) }\n : undefined\n}\n\nfunction projectedFont(value: unknown): { family: string; weight?: Array<string> } | undefined {\n if (typeof value === 'string' && value) return { family: value }\n const font = objectValue(value)\n if (!font) return undefined\n const family = typeof font.family === 'string'\n ? font.family\n : typeof font.name === 'string' ? font.name : undefined\n if (!family) return undefined\n const weight = Array.isArray(font.weight)\n ? font.weight.map(String)\n : Array.isArray(font.weights) ? font.weights.map(String) : undefined\n return { family, ...(weight && weight.length > 0 ? { weight } : {}) }\n}\n\nfunction projectedCompatibleConfig(config: Record<string, unknown>): Omit<MigrationDocsConfig, 'tabs' | 'i18n' | 'redirects'> {\n const banner = objectValue(config.banner)\n const bannerContent = banner && (typeof banner.content === 'string' || objectValue(banner.content))\n ? banner.content as string | Record<string, string>\n : undefined\n const bannerType = banner && ['info', 'warning', 'critical'].includes(String(banner.type ?? banner.variant))\n ? String(banner.type ?? banner.variant) as 'info' | 'warning' | 'critical'\n : undefined\n const bannerColor = objectValue(banner?.color)\n const bodyFont = projectedFont(objectValue(config.fonts)?.body ?? config.fonts)\n const headingFont = projectedFont(objectValue(config.fonts)?.heading)\n const feedback = objectValue(config.feedback)\n const seo = objectValue(config.seo)\n const navbar = projectedNavbar(config.navbar)\n const globalLinks = projectedGlobalNavigationLinks(objectValue(config.navigation)?.global)\n const navbarLinks = [...new Map(\n [...(navbar?.links ?? []), ...globalLinks].map((link) => [`${link.label}:${link.href}`, link]),\n ).values()]\n const projectedNavigation = navbarLinks.length > 0 || navbar?.primary\n ? { ...(navbarLinks.length > 0 ? { links: navbarLinks } : {}), ...(navbar?.primary ? { primary: navbar.primary } : {}) }\n : undefined\n return {\n ...(projectedTheme(config.theme) ? { theme: projectedTheme(config.theme) } : {}),\n ...(bannerContent ? {\n banner: {\n content: bannerContent,\n ...(banner?.dismissible === false ? { dismissible: false } : {}),\n ...(typeof banner?.id === 'string' ? { id: banner.id } : {}),\n ...(typeof banner?.revision === 'string' ? { revision: banner.revision } : {}),\n ...(bannerType ? { type: bannerType } : {}),\n ...(bannerColor ? { color: {\n ...(typeof bannerColor.light === 'string' ? { light: bannerColor.light } : {}),\n ...(typeof bannerColor.dark === 'string' ? { dark: bannerColor.dark } : {}),\n } } : {}),\n },\n } : {}),\n ...(projectedNavigation ? { navbar: projectedNavigation } : {}),\n ...(projectedFooter(config.footer) ? { footer: projectedFooter(config.footer) } : {}),\n ...(bodyFont || headingFont ? { fonts: { ...(bodyFont ? { body: bodyFont } : {}), ...(headingFont ? { heading: headingFont } : {}) } } : {}),\n ...(seo?.indexing === 'all' ? { seo: { indexing: 'all' } } : {}),\n ...(typeof feedback?.thumbsRating === 'boolean' ? { feedback: { thumbsRating: feedback.thumbsRating } } : {}),\n }\n}\n\n/** Convert current and legacy Mintlify navigation into Thally's schema. */\nexport function projectMintlifyNavigation(\n config: Record<string, unknown>,\n options: MintlifyProjectionOptions = {},\n): MintlifyNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const references: Array<MintlifyPageReference> = []\n const seenReferences = new Set<string>()\n const warningKeys = new Set<string>()\n const navigation = objectValue(config.navigation) ?? config\n const languages = Array.isArray(navigation.languages)\n ? navigation.languages.map(objectValue).filter((value): value is Record<string, unknown> => Boolean(value))\n : []\n let tabs: Array<MigrationNavigationTab> = []\n let i18n: MigrationDocsConfig['i18n']\n const projectionTrace: NavigationProjectionTrace = {}\n\n if (languages.length > 0) {\n const defaultLanguage = languages.find((entry) => entry.default === true) ?? languages[0]\n const defaultLocale = String(defaultLanguage.language ?? defaultLanguage.locale ?? 'en')\n const locales = languages.map((entry) => {\n const code = String(entry.language ?? entry.locale ?? 'en')\n let label: string | undefined = LANGUAGE_LABELS[code]\n try {\n label ??= new Intl.DisplayNames(['en'], { type: 'language' }).of(code) ?? undefined\n } catch {\n // Unknown extension tags remain readable as their normalized code.\n }\n return { code, label: label ?? code.toUpperCase() }\n })\n i18n = { defaultLocale, locales }\n for (const language of languages) {\n const locale = String(language.language ?? language.locale ?? defaultLocale)\n const context: ProjectionContext = {\n locale,\n pathPrefix: options.pathPrefix,\n references,\n seenReferences,\n warnings,\n warningKeys,\n }\n const languageTabs = convertContainerToTabs(\n language,\n context,\n 'Documentation',\n language === defaultLanguage ? projectionTrace : undefined,\n )\n if (language === defaultLanguage) tabs = languageTabs\n }\n } else {\n const context = { references, seenReferences, warnings, warningKeys, pathPrefix: options.pathPrefix }\n tabs = convertContainerToTabs(navigation, context, 'Documentation', projectionTrace)\n if (tabs.length === 0 && Array.isArray(config.navigation)) {\n const children = convertNavigationValues(config.navigation, context)\n if (children.length > 0) {\n const hasRootPages = children.some((page) => typeof page === 'string')\n tabs = [{\n tab: 'Documentation',\n ...(hasRootPages\n ? { pages: children }\n : { groups: children as Array<MigrationNavigationGroup> }),\n }]\n }\n }\n }\n\n if (tabs.length === 0) {\n warnings.push({\n code: 'unsupported-config',\n message: 'Mintlify navigation could not be projected; generated navigation will be used.',\n })\n }\n const redirects = Array.isArray(config.redirects)\n ? config.redirects.flatMap((value) => {\n const redirect = objectValue(value)\n if (!redirect || typeof redirect.source !== 'string' || typeof redirect.destination !== 'string') return []\n const source = redirect.source.trim()\n const destination = redirect.destination.trim()\n if (!source.startsWith('/') || !destination.startsWith('/')\n || source.startsWith('//') || destination.startsWith('//')) return []\n return [{\n source,\n destination,\n ...(typeof redirect.permanent === 'boolean' ? { permanent: redirect.permanent } : {}),\n }]\n })\n : []\n return {\n docsConfig: {\n tabs,\n ...(projectionTrace.rootContainerKind === 'dropdowns'\n ? { navigation: { display: 'dropdown' as const } }\n : {}),\n ...projectedCompatibleConfig(config),\n ...(i18n ? { i18n } : {}),\n ...(redirects.length > 0 ? { redirects } : {}),\n },\n pageReferences: references,\n warnings,\n }\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_]/)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\ninterface GeneratedNavigationOptions {\n /** Dedicated docs platforms expose their primary sections as top-level tabs. */\n topLevelTabs?: boolean\n /** Ordered tabs recovered from the source site's rendered navigation. */\n topLevelNavigation?: ReadonlyArray<{\n section: string\n label: string\n pageId: string\n }>\n}\n\nconst TOP_LEVEL_LABELS: Record<string, string> = {\n 'api-reference': 'API Reference',\n cli: 'CLI',\n faqs: 'FAQs',\n introduction: 'Overview',\n 'mcp-server': 'MCP Server',\n sdk: 'SDK',\n}\n\nfunction topLevelLabel(segment: string): string {\n return TOP_LEVEL_LABELS[segment] ?? titleCase(segment)\n}\n\nfunction groupsWithinSection(\n section: string,\n pageIds: Array<string>,\n sectionLabel = topLevelLabel(section),\n): Array<MigrationNavigationGroup> {\n const groups = new Map<string, Array<string>>()\n for (const id of pageIds) {\n const relative = id === 'introduction'\n ? ''\n : id.startsWith(`${section}/`)\n ? id.slice(section.length + 1)\n : id\n const nestedSegment = relative.includes('/') ? relative.split('/', 1)[0] : 'overview'\n const group = groups.get(nestedSegment) ?? []\n group.push(id)\n groups.set(nestedSegment, group)\n }\n return [...groups].map(([segment, pages]) => ({\n group: segment === 'overview' ? sectionLabel : titleCase(segment),\n pages,\n }))\n}\n\nfunction preferredLandingPage(\n section: string,\n pageIds: Array<string>,\n): string | undefined {\n const candidates = [\n section === 'introduction' ? 'introduction' : undefined,\n `${section}/overview`,\n `${section}/introduction`,\n section,\n ]\n return candidates.find((candidate): candidate is string => Boolean(candidate && pageIds.includes(candidate)))\n}\n\n/** Build deterministic fallback navigation from imported default-locale pages. */\nexport function buildNavigationFromPages(\n pages: Array<MigrationPage>,\n options: GeneratedNavigationOptions = {},\n): MigrationDocsConfig {\n const ids = pages.filter((page) => !page.locale || page.locale === 'en').map((page) => page.navigationId)\n const ordered = [...new Set(ids)]\n if (options.topLevelTabs) {\n const sourceNavigation = (options.topLevelNavigation ?? []).flatMap((entry) => {\n const sectionPages = ordered.filter((id) => id === entry.section || id.startsWith(`${entry.section}/`))\n const pageId = ordered.includes(entry.pageId)\n ? entry.pageId\n : preferredLandingPage(entry.section, sectionPages) ?? sectionPages[0]\n return pageId ? [{ ...entry, pageId }] : []\n })\n if (sourceNavigation.length > 1) {\n const claimedIds = new Set<string>()\n const tabs = sourceNavigation.map((entry) => {\n const pageIds = ordered.filter((id) => {\n const matches = id === entry.pageId\n || id === entry.section\n || id.startsWith(`${entry.section}/`)\n if (matches) claimedIds.add(id)\n return matches\n })\n return { entry, pageIds }\n })\n // Mintlify's first tab is the documentation home and owns pages that do\n // not belong to another product tab (for example /create and /deploy).\n tabs[0].pageIds.push(...ordered.filter((id) => !claimedIds.has(id)))\n return {\n tabs: tabs.map(({ entry, pageIds }) => ({\n tab: entry.label,\n href: entry.pageId === 'introduction' ? '/' : `/${entry.pageId}`,\n groups: groupsWithinSection(entry.section, [...new Set(pageIds)], entry.label),\n })),\n }\n }\n const sectionNames = [...new Set(ordered\n .filter((id) => id.includes('/'))\n .map((id) => id.split('/', 1)[0]))]\n if (sectionNames.length > 1) {\n const defaultSection = sectionNames.includes('introduction')\n ? 'introduction'\n : sectionNames[0]\n const sections = new Map<string, Array<string>>()\n for (const id of ordered) {\n const section = id.includes('/') ? id.split('/', 1)[0] : defaultSection\n const bucket = sections.get(section) ?? []\n bucket.push(id)\n sections.set(section, bucket)\n }\n return {\n tabs: [...sections].map(([section, pageIds]) => {\n const label = topLevelLabel(section)\n const landingPage = preferredLandingPage(section, pageIds)\n return {\n tab: label,\n ...(landingPage\n ? { href: landingPage === 'introduction' ? '/' : `/${landingPage}` }\n : {}),\n groups: groupsWithinSection(section, pageIds),\n }\n }),\n }\n }\n }\n const buckets = new Map<string, Array<string>>()\n for (const id of ordered) {\n const segment = id.includes('/') ? id.split('/', 1)[0] : 'overview'\n const bucket = buckets.get(segment) ?? []\n bucket.push(id)\n buckets.set(segment, bucket)\n }\n const groups = [...buckets].map(([segment, pageIds]) => ({\n group: segment === 'overview' ? 'Overview' : titleCase(segment),\n pages: pageIds,\n }))\n return { tabs: [{ tab: 'Documentation', groups }] }\n}\n\n/** Exposed for repository discovery and focused unit tests. */\nexport function isDocumentationExtension(filename: string): boolean {\n return ['.md', '.mdx', '.rst', '.txt'].includes(extname(filename).toLowerCase())\n}\n","/** Render canonical migration bundles into a portable Thally repository tree. */\n\nimport type {\n MigrationBundle,\n MigrationDocsConfig,\n MigrationNavigationGroup,\n RenderedMigrationFile,\n} from './types.js'\n\nfunction yamlString(value: string): string {\n return JSON.stringify(value.replace(/\\s+/g, ' ').trim())\n}\n\nfunction renderPage(bundle: MigrationBundle, page: MigrationBundle['pages'][number]): string {\n return [\n '---',\n `title: ${yamlString(page.title)}`,\n page.navTitle ? `navTitle: ${yamlString(page.navTitle)}` : null,\n `description: ${yamlString(page.description)}`,\n page.badge ? `badge: ${yamlString(page.badge)}` : null,\n page.keywords.length > 0 ? `keywords: [${page.keywords.map(yamlString).join(', ')}]` : null,\n page.mode ? `mode: ${yamlString(page.mode)}` : null,\n page.hidden ? 'hidden: true' : null,\n page.noindex ? 'noindex: true' : null,\n page.openapi ? `openapi: ${yamlString(page.openapi)}` : null,\n bundle.sourceKind === 'url' ? `source: ${yamlString(page.source)}` : null,\n '---',\n '',\n page.body,\n '',\n ].filter((line) => line !== null).join('\\n')\n}\n\n/** Merge imported tabs into an existing site without duplicating changelog tabs. */\nexport function mergeMigrationConfig(\n existing: MigrationDocsConfig,\n incoming: MigrationDocsConfig,\n): MigrationDocsConfig {\n const tabs = existing.tabs.filter((tab) => tab.tab.toLowerCase() !== 'changelog')\n const names = new Set(tabs.map((tab) => tab.tab.toLowerCase()))\n const seenPages = new Set<string>()\n function recordPages(pages: Array<string | MigrationNavigationGroup> = []): void {\n for (const page of pages) {\n if (typeof page === 'string') seenPages.add(page)\n else recordPages(page.pages)\n }\n }\n for (const tab of tabs) {\n recordPages(tab.pages)\n recordPages(tab.groups)\n }\n function uniquePages(\n pages: Array<string | MigrationNavigationGroup> = [],\n ): Array<string | MigrationNavigationGroup> {\n return pages.flatMap<string | MigrationNavigationGroup>((page) => {\n if (typeof page === 'string') {\n if (seenPages.has(page)) return []\n seenPages.add(page)\n return [page]\n }\n const children = uniquePages(page.pages)\n return children.length > 0 ? [{ ...page, pages: children }] : []\n })\n }\n function uniqueGroups(\n groups: Array<MigrationNavigationGroup> | undefined,\n ): Array<MigrationNavigationGroup> {\n return uniquePages(groups ?? []) as Array<MigrationNavigationGroup>\n }\n for (const tab of incoming.tabs) {\n if (tab.tab.toLowerCase() === 'changelog') continue\n const uniqueTab = {\n ...tab,\n ...(tab.pages ? { pages: uniquePages(tab.pages) } : {}),\n ...(tab.groups ? { groups: uniqueGroups(tab.groups) } : {}),\n }\n if ((tab.pages || tab.groups)\n && !uniqueTab.pages?.length\n && !uniqueTab.groups?.length\n && !tab.href\n && !tab.api) continue\n if (!names.has(tab.tab.toLowerCase())) {\n tabs.push(uniqueTab)\n names.add(tab.tab.toLowerCase())\n continue\n }\n const target = tabs.find((item) => item.tab.toLowerCase() === tab.tab.toLowerCase())\n if (!target) continue\n const incomingRootNodes = [\n ...(uniqueTab.pages ?? []),\n ...(uniqueTab.groups ?? []),\n ]\n if (uniqueTab.pages?.length) {\n target.pages = [...(target.pages ?? target.groups ?? []), ...incomingRootNodes]\n delete target.groups\n } else if (uniqueTab.groups?.length) {\n if (target.pages) target.pages = [...target.pages, ...uniqueTab.groups]\n else target.groups = [...(target.groups ?? []), ...uniqueTab.groups]\n }\n }\n const changelog = existing.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n ?? incoming.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog) tabs.push(changelog)\n const i18n = existing.i18n || incoming.i18n\n ? {\n defaultLocale: existing.i18n?.defaultLocale ?? incoming.i18n?.defaultLocale ?? 'en',\n locales: [...new Map(\n [...(existing.i18n?.locales ?? []), ...(incoming.i18n?.locales ?? [])]\n .map((locale) => [locale.code, locale]),\n ).values()],\n }\n : undefined\n return {\n ...incoming,\n ...existing,\n tabs,\n // Collection presentation belongs to the imported information\n // architecture; starter defaults must not coerce source dropdowns to tabs.\n navigation: incoming.navigation ?? existing.navigation,\n ...(i18n ? { i18n } : {}),\n }\n}\n\n/** Materialize every canonical page, asset, and config as repository file changes. */\nexport function renderMigrationFiles(\n bundle: MigrationBundle,\n options: { existingConfig?: MigrationDocsConfig } = {},\n): Array<RenderedMigrationFile> {\n const config = options.existingConfig\n ? mergeMigrationConfig(options.existingConfig, bundle.docsConfig)\n : bundle.docsConfig\n return [\n ...bundle.pages.map((page) => ({\n path: `src/content/${page.id}.mdx`,\n content: renderPage(bundle, page),\n })),\n ...bundle.assets.map((asset) => ({ path: `public/${asset.path}`, content: asset.content })),\n { path: 'docs.json', content: `${JSON.stringify(config, null, 2)}\\n` },\n ]\n}\n","/**\n * Public URL adapter for the shared migration engine. Discovery prefers\n * machine-readable Markdown and sitemaps, remains scoped to the submitted docs\n * path, then falls back to bounded navigation crawling and HTML extraction.\n */\n\nimport { load } from 'cheerio'\nimport TurndownService from 'turndown'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport { parseMarkdownPage } from './mdx.js'\nimport { addMintlifyDirectoryRedirects, buildNavigationFromPages, projectMintlifyNavigation } from './navigation.js'\nimport { pageIdFromReference } from './path.js'\nimport type {\n MigrationBundle,\n MigrationFetcher,\n MigrationFetchResponse,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationPlatform,\n MigrationWarning,\n} from './types.js'\n\nconst DEFAULT_MAX_PAGES = 1_000\nconst DEFAULT_MAX_TOTAL_BYTES = 100_000_000\nconst MAX_DISCOVERED_URLS = 5_000\nconst MAX_LOCAL_RESPONSE_BYTES = 2_000_000\nconst MAX_SITEMAP_DOCUMENTS = 25\nconst PORTABLE_MDX_COMPONENTS = new Set([\n 'Accordion', 'AccordionGroup', 'Badge', 'Callout', 'Card', 'CardGroup',\n 'Check', 'CodeGroup', 'Color', 'Column', 'Columns', 'ContentPanel', 'Danger', 'Error', 'Expandable',\n 'Agent', 'AgentPrompt', 'BannerPreview', 'Embed', 'File', 'Folder', 'Frame', 'GitHub', 'Github', 'Hero', 'Human',\n 'Icon', 'Info', 'InlinePanel', 'InlineRequestExample', 'InlineResponseExample',\n 'Latex', 'LegacyView', 'Mermaid', 'Note', 'Panel', 'ParamField', 'Prompt',\n 'PromptAssistant', 'PromptUser',\n 'RequestExample', 'ResponseExample', 'ResponseField', 'Step', 'Steps',\n 'Tab', 'Tabs', 'Terminal', 'TerminalInput', 'TerminalOutput', 'Tile', 'TileGroup',\n 'Tip', 'Tooltip', 'Tree', 'Update', 'View', 'Visibility', 'Warning',\n])\nconst LOCALE_CODES = new Set([\n 'ar', 'cs', 'da', 'de', 'el', 'es', 'fi', 'fr', 'he', 'hi', 'hu', 'id',\n 'it', 'ja', 'ko', 'ms', 'nl', 'no', 'pl', 'pt', 'ro', 'ru', 'sk', 'sv',\n 'th', 'tr', 'uk', 'vi', 'zh', 'pt-br', 'zh-hans', 'zh-hant',\n])\nconst PORTABLE_URL_PROPS = 'href|src|img|primaryHref|secondaryHref'\n\ninterface EmbeddedOpenApiFragment {\n method: string\n path: string\n document: Record<string, unknown>\n}\n\nexport interface UrlMigrationOptions {\n sourceUrl: string\n /** Explicit caller selection; omitted callers retain source auto-detection. */\n platform?: MigrationPlatform\n fetcher?: MigrationFetcher\n maxPages?: number\n concurrency?: number\n maxTotalBytes?: number\n}\n\n/** Validate the transport-level shape of a docs URL; hosted callers add SSRF checks. */\nexport function validateMigrationUrl(value: string): URL {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new Error('Enter a complete documentation URL, including https://.')\n }\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new Error('Documentation imports support only HTTP and HTTPS URLs.')\n }\n if (url.username || url.password) throw new Error('Documentation URLs cannot contain credentials.')\n url.hash = ''\n return url\n}\n\nasync function readResponseBody(response: Response): Promise<string> {\n const contentLength = Number(response.headers.get('content-length') ?? 0)\n if (contentLength > MAX_LOCAL_RESPONSE_BYTES) throw new Error('A documentation response exceeded the 2 MB import limit.')\n if (!response.body) return ''\n const reader = response.body.getReader()\n const chunks: Array<Uint8Array> = []\n let size = 0\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n size += value.byteLength\n if (size > MAX_LOCAL_RESPONSE_BYTES) {\n await reader.cancel()\n throw new Error('A documentation response exceeded the 2 MB import limit.')\n }\n chunks.push(value)\n }\n const body = new Uint8Array(size)\n let offset = 0\n for (const chunk of chunks) {\n body.set(chunk, offset)\n offset += chunk.byteLength\n }\n return new TextDecoder().decode(body)\n}\n\n/** Fetch implementation for local CLI usage. Cloud injects its pinned network boundary. */\nexport const defaultMigrationFetcher: MigrationFetcher = async (url, request) => {\n const response = await fetch(url, {\n headers: {\n Accept: request.accept,\n 'User-Agent': 'Thally-Migrate/1.0 (+https://thally.io)',\n },\n redirect: 'follow',\n signal: AbortSignal.timeout(15_000),\n })\n if (!response.ok) throw new Error(`Documentation server returned ${response.status}.`)\n return {\n finalUrl: new URL(response.url),\n body: await readResponseBody(response),\n contentType: response.headers.get('content-type') ?? '',\n headers: Object.fromEntries(response.headers.entries()),\n }\n}\n\nfunction docsScopePath(source: URL): string {\n const path = source.pathname.replace(/\\/+$/, '') || '/'\n if (path === '/') return '/'\n const segments = path.split('/').filter(Boolean)\n return `/${segments.length > 1 ? segments[0] : segments.join('/')}`\n}\n\nfunction machineIndexScopePath(\n source: URL,\n documents: Array<MigrationFetchResponse | null>,\n): string | null {\n const candidates = new Set<string>()\n for (const document of documents) {\n if (!document) continue\n const references = [...headerLinks(document)]\n if (/html/i.test(document.contentType)) {\n const $ = load(document.body)\n references.push(...$('link[href], a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter((href) => /\\/(?:llms(?:-full)?\\.txt|sitemap\\.xml)(?:[?#]|$)/i.test(href)))\n }\n for (const reference of references) {\n try {\n const indexUrl = new URL(reference, document.finalUrl)\n if (indexUrl.origin !== source.origin) continue\n const scope = indexUrl.pathname.replace(/\\/(?:llms(?:-full)?\\.txt|sitemap\\.xml)$/i, '') || '/'\n if (isInScope(source, source, scope)) candidates.add(scope)\n } catch {\n // Malformed discovery hints are ignored just like malformed page links.\n }\n }\n }\n return [...candidates].sort((left, right) => right.length - left.length)[0] ?? null\n}\n\nfunction isInScope(url: URL, source: URL, scopePath: string): boolean {\n if (url.origin !== source.origin || !['http:', 'https:'].includes(url.protocol)) return false\n const path = url.pathname.replace(/\\/+$/, '') || '/'\n if (scopePath === '/') return true\n return path === scopePath || path === `${scopePath}.md` || path.startsWith(`${scopePath}/`)\n}\n\nfunction normalizeCandidate(value: string, base: URL, source: URL, scopePath: string): URL | null {\n try {\n const url = new URL(value, base)\n url.hash = ''\n if (!isInScope(url, source, scopePath)) return null\n if (url.pathname.startsWith('/cdn-cgi/')) return null\n if (/\\/(?:llms(?:-full)?|robots)\\.txt$/i.test(url.pathname)\n || /\\/sitemap\\.xml$/i.test(url.pathname)) return null\n if (/\\.(?:avif|bmp|gif|ico|jpe?g|mp[34]|pdf|png|svg|ya?ml|webm|webp|zip)$/i.test(url.pathname)\n || /\\/(?:openapi|swagger|asyncapi)[^/]*\\.json$/i.test(url.pathname)) return null\n return url\n } catch {\n return null\n }\n}\n\nfunction candidateIdentity(url: URL): string {\n const pathname = url.pathname.replace(/\\.mdx?$/i, '').replace(/\\/+$/, '') || '/'\n return `${url.origin}${pathname}${url.search}`\n}\n\nfunction pageIdForUrl(url: URL, scopePath: string): string | null {\n let path = url.pathname.replace(/\\/+$/, '')\n if (scopePath !== '/') {\n if (path === `${scopePath}.md`) path = ''\n else if (path === scopePath) path = ''\n else if (path.startsWith(`${scopePath}/`)) path = path.slice(scopePath.length + 1)\n }\n return pageIdFromReference(path.replace(/^\\/+/, '') || 'introduction', true)\n}\n\nfunction canonicalLocalizedPageId(id: string): string {\n const [segment, ...rest] = id.split('/')\n if (LOCALE_CODES.has(segment)) return rest.length > 0 ? id : `${segment}/introduction`\n for (const locale of LOCALE_CODES) {\n if (segment !== `${locale}-api-reference`) continue\n return [locale, 'api-reference', ...rest].join('/')\n }\n return id\n}\n\nfunction detectUrlPlatform(document: MigrationFetchResponse): MigrationPlatform {\n const headers = Object.entries(document.headers ?? {})\n .map(([key, value]) => `${key}:${value ?? ''}`)\n .join(' ')\n const value = `${document.body.slice(0, 200_000)} ${headers}`.toLowerCase()\n if (value.includes('__mintlify') || value.includes('/mintlify-assets/')\n || value.includes('x-mintlify-') || value.includes('/_mintlify/')) return 'mintlify'\n if (value.includes('docusaurus') || value.includes('__docusaurus')) return 'docusaurus'\n if (value.includes('gitbook') || value.includes('gitbook.io')) return 'gitbook'\n if (value.includes('nextra')) return 'nextra'\n if (value.includes('vitepress')) return 'vitepress'\n if (value.includes('starlight')) return 'starlight'\n return 'generic'\n}\n\nfunction jsonObjectAfterKey(value: string, key: string): Record<string, unknown> | null {\n let cursor = 0\n const marker = `\"${key}\":`\n while (cursor < value.length) {\n const markerIndex = value.indexOf(marker, cursor)\n if (markerIndex < 0) return null\n let start = markerIndex + marker.length\n while (/\\s/.test(value[start] ?? '')) start += 1\n if (value[start] !== '{') {\n cursor = start + 1\n continue\n }\n let depth = 0\n let isQuoted = false\n let isEscaped = false\n for (let index = start; index < value.length; index += 1) {\n const character = value[index]\n if (isQuoted) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === '\"') isQuoted = false\n continue\n }\n if (character === '\"') {\n isQuoted = true\n continue\n }\n if (character === '{') depth += 1\n if (character === '}') {\n depth -= 1\n if (depth !== 0) continue\n try {\n const parsed = JSON.parse(value.slice(start, index + 1)) as unknown\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : null\n } catch {\n break\n }\n }\n }\n cursor = start + 1\n }\n return null\n}\n\n/**\n * Current Mintlify themes embed the resolved docs config and scoped navigation\n * in React Flight. Reading that data is substantially more faithful than\n * inferring information architecture from whichever responsive nav is visible.\n */\nfunction embeddedMintlifyConfig(body: string): Record<string, unknown> | null {\n const $ = load(body)\n const flightPayloads: Array<string> = []\n $('script').each((_index, element) => {\n const script = $(element).text()\n for (const match of script.matchAll(/self\\.__next_f\\.push\\(\\[1,(\"(?:\\\\.|[^\"\\\\])*\")\\]\\)/g)) {\n try {\n const payload = JSON.parse(match[1])\n if (typeof payload === 'string') flightPayloads.push(payload)\n } catch {\n // Older or customized shells fall back to bounded DOM inference.\n }\n }\n })\n if (flightPayloads.length === 0) return null\n const payload = flightPayloads.join('\\n')\n const docsConfig = jsonObjectAfterKey(payload, 'docsConfig')\n const scopedNavigation = jsonObjectAfterKey(payload, 'scopedNav')\n if (!docsConfig && !scopedNavigation) return null\n return {\n ...(docsConfig ?? {}),\n ...(scopedNavigation ? { navigation: scopedNavigation } : {}),\n }\n}\n\nfunction plainDescription(value: string): string {\n return value\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .replace(/[`*_>#-]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n .slice(0, 240)\n}\n\nfunction withoutFencedCode(body: string): string {\n let fenceCharacter = ''\n let fenceLength = 0\n return body.split('\\n').map((line) => {\n const match = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (match && !fenceCharacter) {\n fenceCharacter = match[1][0]\n fenceLength = match[1].length\n return ''\n }\n if (match && match[1][0] === fenceCharacter && match[1].length >= fenceLength\n && match[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n return ''\n }\n return fenceCharacter ? '' : line\n }).join('\\n')\n}\n\nfunction eventHandlerPropEnd(value: string, start: number): number | null {\n const opening = value[start]\n if (opening === '\"' || opening === \"'\") {\n for (let index = start + 1; index < value.length; index += 1) {\n if (value[index] === opening && value[index - 1] !== '\\\\') return index + 1\n }\n return null\n }\n if (opening !== '{') {\n const match = value.slice(start).match(/^[^\\s>]+/)\n return match ? start + match[0].length : null\n }\n let depth = 0\n let quote = ''\n for (let index = start; index < value.length; index += 1) {\n const character = value[index]\n if (quote) {\n if (character === quote && value[index - 1] !== '\\\\') quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '{') depth += 1\n if (character === '}') {\n depth -= 1\n if (depth === 0) return index + 1\n }\n }\n return null\n}\n\nfunction stripEventHandlerProps(line: string): string {\n const matcher = /\\s+on[A-Z][A-Za-z0-9]*\\s*=\\s*/g\n let cursor = 0\n let result = ''\n for (const match of line.matchAll(matcher)) {\n const start = match.index\n const valueStart = start + match[0].length\n const end = eventHandlerPropEnd(line, valueStart)\n if (end === null) continue\n result += line.slice(cursor, start)\n cursor = end\n }\n return cursor === 0 ? line : `${result}${line.slice(cursor)}`\n}\n\nfunction hasUnsafeUrlScheme(value: string): boolean {\n const normalized = value\n .trim()\n .replace(/[\\u0000-\\u0020]/g, '')\n .replace(/&(?:#x0*3a|#0*58|colon);/gi, ':')\n return /^(?:javascript|data|vbscript):/i.test(normalized)\n}\n\nfunction hasUnsafePortableUrlProp(value: string): boolean {\n const quotedProps = new RegExp(`\\\\b(?:${PORTABLE_URL_PROPS})\\\\s*=\\\\s*(['\"])([^'\"\\\\r\\\\n]*)\\\\1`, 'gi')\n for (const match of value.matchAll(quotedProps)) {\n if (hasUnsafeUrlScheme(match[2])) return true\n }\n const expressionProps = new RegExp(`\\\\b(?:${PORTABLE_URL_PROPS})\\\\s*=\\\\s*\\\\{\\\\s*(\"(?:\\\\\\\\.|[^\"\\\\\\\\])*\")\\\\s*\\\\}`, 'gi')\n for (const match of value.matchAll(expressionProps)) {\n try {\n if (hasUnsafeUrlScheme(JSON.parse(match[1]))) return true\n } catch {\n return true\n }\n }\n return false\n}\n\nfunction portableHtmlToMarkdown(value: string): string {\n return value\n .replace(/<span\\b[^>]*>|<\\/span>/gi, '')\n .replace(/<a\\b([^>]*)>([\\s\\S]*?)<\\/a>/gi, (_original, attributes: string, label: string) => {\n const href = attributes.match(/\\bhref\\s*=\\s*(['\"])(.*?)\\1/i)?.[2]\n const plainLabel = label.replace(/<[^>]+>/g, '').trim()\n if (!href || hasUnsafeUrlScheme(href)) return plainLabel\n return `[${plainLabel.replace(/]/g, '\\\\]')}](${href})`\n })\n .replace(/<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi, (_original, level: string, content: string) => {\n return `\\n${'#'.repeat(Number(level))} ${content.trim()}\\n`\n })\n .replace(/<p\\b[^>]*>([\\s\\S]*?)<\\/p>/gi, (_original, content: string) => `\\n${content.trim()}\\n`)\n .replace(/<br\\s*\\/?\\s*>/gi, '\\n')\n .replace(/<\\/?(?:article|div|main|section)\\b[^>]*>/gi, '')\n}\n\nfunction transformMarkdownProse(body: string, transform: (value: string) => string): string {\n const output: Array<string> = []\n let prose: Array<string> = []\n let fenceCharacter = ''\n let fenceLength = 0\n const flushProse = () => {\n if (prose.length === 0) return\n output.push(transform(prose.join('\\n')))\n prose = []\n }\n for (const line of body.split('\\n')) {\n const fence = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (fence && !fenceCharacter) {\n flushProse()\n fenceCharacter = fence[1][0]\n fenceLength = fence[1].length\n output.push(line)\n continue\n }\n if (fenceCharacter) {\n output.push(line)\n if (fence && fence[1][0] === fenceCharacter && fence[1].length >= fenceLength\n && fence[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n }\n continue\n }\n prose.push(line)\n }\n flushProse()\n return output.join('\\n')\n}\n\nfunction sanitizeRemoteMarkdown(body: string): string | null {\n let fenceCharacter = ''\n let fenceLength = 0\n const portableBody = transformMarkdownProse(body, portableHtmlToMarkdown)\n const sanitized = portableBody.split('\\n').map((line) => {\n const fence = line.match(/^\\s{0,3}(`{3,}|~{3,})(.*)$/)\n if (fence && !fenceCharacter) {\n fenceCharacter = fence[1][0]\n fenceLength = fence[1].length\n return line\n }\n if (fence && fence[1][0] === fenceCharacter && fence[1].length >= fenceLength\n && fence[2].trim() === '') {\n fenceCharacter = ''\n fenceLength = 0\n return line\n }\n if (fenceCharacter) return line\n return portableHtmlToMarkdown(stripEventHandlerProps(line\n .replace(/!\\[([^\\]]*)\\]\\(\\s*([^)]+)\\)/g, (original, alternative: string, destination: string) => {\n return hasUnsafeUrlScheme(destination.replace(/^<|>$/g, '')) ? alternative : original\n })\n .replace(/<img\\s+([^>]*?)\\/?\\s*>/gi, (original, attributes: string) => {\n const source = attributes.match(/\\bsrc\\s*=\\s*(['\"])(.*?)\\1/i)?.[2]\n const alternative = attributes.match(/\\balt\\s*=\\s*(['\"])(.*?)\\1/i)?.[2] ?? ''\n if (!source || hasUnsafeUrlScheme(source)) return ''\n return `![${alternative.replace(/]/g, '\\\\]')}](${source})`\n })))\n }).join('\\n')\n const executable = withoutFencedCode(sanitized)\n .replace(/\\{\\/\\*[\\s\\S]*?\\*\\/\\}/g, '')\n .replace(/<(?:https?:\\/\\/|mailto:)[^>]+>/gi, '')\n .replace(/(`+)[\\s\\S]*?\\1/g, '')\n if (/^\\s*(?:import|export)\\s/m.test(executable)) return null\n // A public Markdown endpoint is still attacker-controlled MDX. Preserve\n // known documentation primitives and JSON-literal props, but never compile\n // executable expressions, raw HTML, event handlers, or local components.\n let hasUnsafeExpression = false\n const withoutStaticProps = executable.replace(/=\\{([^{}\\n]*)\\}/g, (original, value: string) => {\n try {\n JSON.parse(value)\n return '=\"\"'\n } catch {\n hasUnsafeExpression = true\n return original\n }\n }).replace(/\\\\[{}]/g, '')\n if (hasUnsafeExpression || /[{}]/.test(withoutStaticProps)\n || /\\bon[A-Z][A-Za-z]*\\s*=/g.test(withoutStaticProps)\n || hasUnsafePortableUrlProp(executable)) return null\n for (const match of withoutStaticProps.matchAll(/<\\/?([A-Za-z][A-Za-z0-9.]*)(?:\\s|>|\\/)/g)) {\n const component = match[1].split('.', 1)[0]\n if (!PORTABLE_MDX_COMPONENTS.has(component)) return null\n }\n return sanitized\n}\n\nfunction migratedHref(\n href: string,\n currentUrl: URL,\n source: URL,\n scopePath: string,\n importedIds: Set<string>,\n sourceHomePageId?: string,\n): string {\n if (/^(?:javascript|data|vbscript):/i.test(href)) return '#'\n if (href.startsWith('#') || /^(?:mailto|tel):/i.test(href)) return href\n try {\n const target = new URL(href, currentUrl)\n if (target.origin !== source.origin) return href\n if (scopePath === '/' && candidateIdentity(target) === candidateIdentity(source)) {\n return `/${target.search}${target.hash}`\n }\n let path = target.pathname\n if (scopePath !== '/' && (path === scopePath || path.startsWith(`${scopePath}/`))) {\n path = path.slice(scopePath.length)\n }\n const id = pageIdFromReference(path.replace(/^\\/+/, '') || 'introduction')\n const localizedId = id ? canonicalLocalizedPageId(id) : id\n const destinationId = localizedId === sourceHomePageId ? 'introduction' : localizedId\n let importedDestinationId = destinationId && importedIds.has(destinationId)\n ? destinationId\n : undefined\n if (destinationId && !importedDestinationId) {\n importedDestinationId = [`${destinationId}/overview`, `${destinationId}/introduction`]\n .find((candidate) => importedIds.has(candidate))\n ?? [...importedIds].find((candidate) => candidate.startsWith(`${destinationId}/`))\n }\n if (importedDestinationId) {\n const destination = importedDestinationId === 'introduction' ? '/' : `/${importedDestinationId}`\n return `${destination}${target.search}${target.hash}`\n }\n // Same-origin marketing and intentionally missing example links remain\n // valid external URLs instead of becoming broken links in the new site.\n return target.toString()\n } catch {\n return href\n }\n}\n\nfunction rewriteInternalLinks(\n body: string,\n currentUrl: URL,\n source: URL,\n scopePath: string,\n importedIds: Set<string>,\n sourceHomePageId?: string,\n): string {\n const markdown = body.replace(/(?<!!)\\[([^\\]]+)\\]\\(([^)\\s]+)(\\s+['\"][^'\"]*['\"])?\\)/g, (\n original,\n label: string,\n href: string,\n title = '',\n ) => {\n const destination = migratedHref(href, currentUrl, source, scopePath, importedIds, sourceHomePageId)\n return destination === href ? original : `[${label}](${destination}${title})`\n })\n return markdown.replace(/\\bhref=(['\"])([^'\"]+)\\1/g, (_original, quote: string, href: string) => {\n const destination = migratedHref(href, currentUrl, source, scopePath, importedIds, sourceHomePageId)\n return `href=${quote}${destination}${quote}`\n })\n}\n\nfunction remoteMarkdownMetadata(body: string): {\n content: string\n title?: string\n description?: string\n sidebarTitle?: string\n tag?: string\n mode?: string\n hidden?: boolean\n noindex?: boolean\n} {\n if (!/^---\\r?\\n/.test(body)) return { content: body }\n const end = body.slice(4, 65_540).search(/\\r?\\n---(?:\\r?\\n|$)/)\n if (end < 0) return { content: body }\n const frontmatter = body.slice(4, end + 4)\n const contentStart = end + 4 + body.slice(end + 4).match(/^\\r?\\n---(?:\\r?\\n|$)/)![0].length\n function scalar(key: string): string | undefined {\n const value = frontmatter.match(new RegExp(`^${key}:\\\\s*(.+)$`, 'm'))?.[1].trim()\n if (!value) return undefined\n if (/^['\"].*['\"]$/.test(value)) {\n try {\n const parsed = JSON.parse(value.replace(/^'/, '\"').replace(/'$/, '\"'))\n return typeof parsed === 'string' ? parsed : undefined\n } catch {\n return value.slice(1, -1)\n }\n }\n return value.slice(0, 500)\n }\n return {\n content: body.slice(contentStart),\n title: scalar('title'),\n description: scalar('description'),\n sidebarTitle: scalar('sidebarTitle'),\n tag: scalar('tag'),\n mode: scalar('mode'),\n hidden: scalar('hidden') === 'true' ? true : undefined,\n noindex: scalar('noindex') === 'true' ? true : undefined,\n }\n}\n\nfunction stripMintlifyDocumentationIndex(body: string): string {\n const lines = body.split(/\\r?\\n/)\n if (!/^>\\s*##\\s+Documentation Index\\s*$/i.test(lines[0] ?? '')\n || !/^>.*\\/llms(?:-full)?\\.txt/i.test(lines[1] ?? '')\n || !/^>.*discover all available pages/i.test(lines[2] ?? '')) return body\n let index = 3\n while (index < lines.length && /^>/.test(lines[index])) index += 1\n while (index < lines.length && lines[index].trim() === '') index += 1\n return lines.slice(index).join('\\n')\n}\n\nfunction extractEmbeddedOpenApi(content: string): {\n content: string\n openapi?: string\n fragment?: EmbeddedOpenApiFragment\n} {\n const fencePattern = /^\\s{0,3}(`{3,}|~{3,})(?:yaml|yml|json)\\s+(\\S+\\.(?:yaml|yml|json))\\s+(delete|get|head|options|patch|post|put|trace)\\s+(\\/\\S+)\\s*\\r?\\n([\\s\\S]*?)^\\s{0,3}\\1\\s*$/im\n const match = fencePattern.exec(content)\n if (!match) return { content }\n try {\n const parsed = parseYaml(match[5], { maxAliasCount: 50 })\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return { content }\n const document = parsed as Record<string, unknown>\n if (typeof document.openapi !== 'string' && typeof document.swagger !== 'string') return { content }\n const method = match[3].toUpperCase()\n const path = match[4]\n const paths = document.paths\n if (!paths || typeof paths !== 'object' || Array.isArray(paths)) return { content }\n const pathItem = (paths as Record<string, unknown>)[path]\n if (!pathItem || typeof pathItem !== 'object' || Array.isArray(pathItem)\n || !(match[3].toLowerCase() in pathItem)) return { content }\n const before = content.slice(0, match.index).replace(/(?:^|\\n)##\\s+OpenAPI\\s*\\n\\s*$/i, '\\n')\n const after = content.slice(match.index + match[0].length)\n return {\n content: `${before}${after}`.trim(),\n openapi: `${method} ${path}`,\n fragment: {\n method,\n path,\n document,\n },\n }\n } catch {\n return { content }\n }\n}\n\nfunction markdownPage(document: MigrationFetchResponse, id: string): {\n page: MigrationPage | null\n openApiFragment?: EmbeddedOpenApiFragment\n} {\n const parsed = remoteMarkdownMetadata(document.body)\n let content = stripMintlifyDocumentationIndex(parsed.content).trimStart()\n const titleMatch = content.match(/^#\\s+(.+)\\r?\\n/)\n const title = parsed.title ?? titleMatch?.[1] ?? id.split('/').at(-1) ?? 'Introduction'\n if (titleMatch) content = content.slice(titleMatch[0].length).trimStart()\n let description = parsed.description\n if (!description) {\n const quoteMatch = content.match(/^(>[^\\r\\n]*(?:\\r?\\n>[^\\r\\n]*)*)\\r?\\n/)\n if (quoteMatch) {\n description = plainDescription(quoteMatch[1].replace(/^>\\s?/gm, ''))\n content = content.slice(quoteMatch[0].length).trimStart()\n }\n }\n // Re-emit only scalar metadata we parsed ourselves. The shared YAML parser\n // handles trusted repository sources but never receives attacker-controlled\n // aliases from a public URL.\n const embeddedOpenApi = extractEmbeddedOpenApi(content)\n const raw = [\n '---',\n `title: ${JSON.stringify(title)}`,\n ...(description ? [`description: ${JSON.stringify(description)}`] : []),\n ...(parsed.sidebarTitle ? [`sidebarTitle: ${JSON.stringify(parsed.sidebarTitle)}`] : []),\n ...(parsed.tag ? [`tag: ${JSON.stringify(parsed.tag)}`] : []),\n ...(parsed.mode ? [`mode: ${JSON.stringify(parsed.mode)}`] : []),\n ...(parsed.hidden ? ['hidden: true'] : []),\n ...(parsed.noindex ? ['noindex: true'] : []),\n ...(embeddedOpenApi.openapi ? [`openapi: ${JSON.stringify(embeddedOpenApi.openapi)}`] : []),\n '---',\n '',\n embeddedOpenApi.content,\n ].join('\\n')\n return {\n page: parseMarkdownPage({ id, raw, source: document.finalUrl.toString() }),\n openApiFragment: embeddedOpenApi.fragment,\n }\n}\n\nfunction mergeRecord(target: Record<string, unknown>, source: unknown): void {\n if (!source || typeof source !== 'object' || Array.isArray(source)) return\n for (const [key, value] of Object.entries(source)) {\n if (['__proto__', 'constructor', 'prototype'].includes(key)) continue\n if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = value\n continue\n }\n const current = target[key]\n if (current && value && typeof current === 'object' && typeof value === 'object'\n && !Array.isArray(current) && !Array.isArray(value)) {\n mergeRecord(current as Record<string, unknown>, value)\n }\n }\n}\n\nfunction mergeEmbeddedOpenApi(fragments: Array<EmbeddedOpenApiFragment>): Uint8Array | null {\n const first = fragments[0]\n if (!first) return null\n const combined: Record<string, unknown> = {\n ...first.document,\n paths: {},\n components: {},\n }\n const combinedPaths = combined.paths as Record<string, unknown>\n const combinedComponents = combined.components as Record<string, unknown>\n const tags = new Map<string, unknown>()\n for (const fragment of fragments) {\n const sourcePaths = fragment.document.paths as Record<string, unknown>\n const sourcePathItem = sourcePaths?.[fragment.path]\n if (!sourcePathItem || typeof sourcePathItem !== 'object' || Array.isArray(sourcePathItem)) continue\n const sourceOperation = (sourcePathItem as Record<string, unknown>)[fragment.method.toLowerCase()]\n if (!sourceOperation || typeof sourceOperation !== 'object' || Array.isArray(sourceOperation)) continue\n const operation = { ...(sourceOperation as Record<string, unknown>) }\n if (!operation.servers && Array.isArray(fragment.document.servers)) operation.servers = fragment.document.servers\n if (!operation.security && Array.isArray(fragment.document.security)) operation.security = fragment.document.security\n const existingPath = combinedPaths[fragment.path]\n const pathItem = existingPath && typeof existingPath === 'object' && !Array.isArray(existingPath)\n ? existingPath as Record<string, unknown>\n : {}\n for (const sharedKey of ['parameters', 'servers', 'summary', 'description']) {\n const sharedValue = (sourcePathItem as Record<string, unknown>)[sharedKey]\n if (sharedValue !== undefined && pathItem[sharedKey] === undefined) pathItem[sharedKey] = sharedValue\n }\n pathItem[fragment.method.toLowerCase()] = operation\n combinedPaths[fragment.path] = pathItem\n mergeRecord(combinedComponents, fragment.document.components)\n for (const tag of Array.isArray(fragment.document.tags) ? fragment.document.tags : []) {\n if (!tag || typeof tag !== 'object' || Array.isArray(tag)) continue\n const name = (tag as Record<string, unknown>).name\n if (typeof name === 'string' && !tags.has(name)) tags.set(name, tag)\n }\n }\n if (Object.keys(combinedPaths).length === 0) return null\n if (Object.keys(combinedComponents).length === 0) delete combined.components\n if (tags.size > 0) combined.tags = [...tags.values()]\n return new TextEncoder().encode(stringifyYaml(combined))\n}\n\nfunction htmlPage(\n document: MigrationFetchResponse,\n id: string,\n): { page: MigrationPage | null; links: Array<string> } {\n const $ = load(document.body)\n const links = $('nav a[href], main a[href], article a[href], [role=\"main\"] a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter(Boolean)\n const title = $('main h1, article h1, h1').first().text().trim()\n || $('meta[property=\"og:title\"]').attr('content')?.trim()\n || $('title').text().split('|')[0].trim()\n const description = $('meta[name=\"description\"]').attr('content')?.trim()\n || $('meta[property=\"og:description\"]').attr('content')?.trim()\n const content = $('main article, article, main, [role=\"main\"]').first()\n const root = content.length ? content : $('body')\n root.find('script,style,noscript,nav,header,footer,aside,form,button,svg,iframe,object,embed,link,meta').remove()\n root.find('.theme-doc-version-badge,.theme-doc-breadcrumbs,.theme-doc-toc-mobile,.table-of-contents,.hash-link').remove()\n root.find('a[href]').each((_index, element) => {\n const href = $(element).attr('href')\n if (!href) return\n try {\n const resolved = new URL(href, document.finalUrl)\n if (['http:', 'https:', 'mailto:', 'tel:'].includes(resolved.protocol)) {\n $(element).attr('href', resolved.toString())\n } else {\n $(element).removeAttr('href')\n }\n } catch {\n $(element).removeAttr('href')\n }\n })\n root.find('img[src]').each((_index, element) => {\n const src = $(element).attr('src')\n if (!src) return\n try {\n const resolved = new URL(src, document.finalUrl)\n if (['http:', 'https:'].includes(resolved.protocol)) {\n $(element).attr('src', resolved.toString())\n } else {\n $(element).removeAttr('src')\n }\n } catch {\n $(element).removeAttr('src')\n }\n })\n const turndown = new TurndownService({ codeBlockStyle: 'fenced', emDelimiter: '_', headingStyle: 'atx' })\n turndown.remove(['script', 'style', 'noscript'])\n turndown.addRule('docusaurus-admonition', {\n filter: (node) => node.nodeName === 'DIV'\n && (node as HTMLElement).classList.contains('theme-admonition'),\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const className = element.className\n const tag = /admonition-(?:danger)/.test(className)\n ? 'Error'\n : /admonition-(?:caution|warning)/.test(className)\n ? 'Warning'\n : /admonition-info/.test(className)\n ? 'Info'\n : 'Note'\n const fragment = load(element.outerHTML)\n const clone = fragment('.theme-admonition').first()\n const title = clone.find('[class*=\"admonitionHeading\"],.admonition-heading').first()\n const titleText = title.text().trim()\n title.remove()\n const markdown = turndown.turndown(clone.html() ?? '').trim()\n return `\\n\\n<${tag}>\\n${titleText ? `**${titleText}**\\n\\n` : ''}${markdown}\\n</${tag}>\\n\\n`\n },\n })\n turndown.addRule('docusaurus-tabs', {\n filter: (node) => node.nodeName === 'DIV'\n && (node as HTMLElement).classList.contains('tabs-container'),\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const fragment = load(element.outerHTML)\n const container = fragment('.tabs-container').first()\n const labels = container.children('ul.tabs').children('li').toArray()\n .map((item) => fragment(item).text().trim() || 'Tab')\n const panels = container.children('div[role=\"tabpanel\"]').toArray()\n if (panels.length === 0) return _content\n const tabs = panels.map((panel, index) => {\n const title = (labels[index] ?? `Tab ${index + 1}`).replace(/\"/g, '"')\n return `<Tab title=\"${title}\">\\n${turndown.turndown(fragment(panel).html() ?? '').trim()}\\n</Tab>`\n })\n return `\\n\\n<Tabs>\\n${tabs.join('\\n\\n')}\\n</Tabs>\\n\\n`\n },\n })\n turndown.addRule('gfm-table', {\n filter: 'table',\n replacement: (_content, node) => {\n const fragment = load((node as HTMLElement).outerHTML)\n const rows = fragment('tr').toArray().map((row) => (\n fragment(row).children('th,td').toArray().map((cell) => fragment(cell).text()\n .replace(/\\s+/g, ' ')\n .replace(/\\|/g, '\\\\|')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\\{/g, '{')\n .replace(/\\}/g, '}')\n .trim())\n )).filter((row) => row.length > 0)\n if (rows.length === 0) return ''\n const width = Math.max(...rows.map((row) => row.length))\n const normalized = rows.map((row) => [...row, ...Array<string>(width - row.length).fill('')])\n return `\\n\\n| ${normalized[0].join(' | ')} |\\n| ${Array<string>(width).fill('---').join(' | ')} |\\n${normalized.slice(1).map((row) => `| ${row.join(' | ')} |`).join('\\n')}\\n\\n`\n },\n })\n turndown.addRule('migration-safe-fenced-code', {\n filter: (node) => node.nodeName === 'PRE',\n replacement: (_content, node) => {\n const element = node as HTMLElement\n const fragment = load(element.outerHTML)\n const tokenLines = fragment('.token-line').toArray()\n const code = (tokenLines.length > 0\n ? tokenLines.map((line) => fragment(line).text()).join('\\n')\n : fragment('pre').text()).replace(/\\n$/, '')\n const language = fragment('code').attr('class')?.match(/(?:language-|lang-)([A-Za-z0-9_+-]+)/)?.[1] ?? ''\n const longestFence = Math.max(0, ...[...code.matchAll(/`+/g)].map((match) => match[0].length))\n const fence = '`'.repeat(Math.max(3, longestFence + 1))\n return `\\n\\n${fence}${language}\\n${code}\\n${fence}\\n\\n`\n },\n })\n const escape = turndown.escape.bind(turndown)\n turndown.escape = (text: string) => escape(text).replace(/[<{]/g, (match) => `\\\\${match}`)\n const body = turndown.turndown(root.html() ?? '').trim()\n // Docusaurus can intentionally publish title-only reference/partial pages.\n // Keep those real article routes while still rejecting empty search/app\n // shells that happen to expose a document title.\n if (!title || (body.length < 40 && $('article').length === 0)) return { page: null, links }\n return {\n page: {\n id,\n navigationId: id,\n title,\n description: description || plainDescription(body) || `Documentation imported from ${document.finalUrl.hostname}.`,\n keywords: [],\n body,\n source: document.finalUrl.toString(),\n },\n links,\n }\n}\n\nfunction htmlNavigationLinks(document: MigrationFetchResponse): Array<string> {\n const $ = load(document.body)\n return $('.nav-tabs a[href], nav a[href], aside a[href], [role=\"navigation\"] a[href]')\n .map((_index, element) => $(element).attr('href') ?? '')\n .get()\n .filter(Boolean)\n}\n\ninterface SourceNavigationTab {\n section: string\n label: string\n pageId: string\n}\n\ninterface DocusaurusSidebarItem {\n label: string\n href?: string\n items?: Array<DocusaurusSidebarItem>\n isCategory?: boolean\n}\n\ninterface DocusaurusSidebarSnapshot {\n items: Array<DocusaurusSidebarItem>\n}\n\ninterface DocusaurusDiscovery {\n scopePath: string\n excludedVersionPrefixes: Array<string>\n sidebar: DocusaurusSidebarSnapshot | null\n}\n\nfunction normalizedLinkLabel(value: string): string {\n return value.replace(/\\s+/g, ' ').trim()\n}\n\nfunction readDocusaurusSidebar(document: MigrationFetchResponse): DocusaurusSidebarSnapshot | null {\n if (!/html/i.test(document.contentType)) return null\n const $ = load(document.body)\n const sidebar = $('ul.theme-doc-sidebar-menu').first()\n if (sidebar.length === 0) return null\n\n type CheerioSelector = Exclude<Parameters<ReturnType<typeof load>>[0], undefined>\n function readList(list: CheerioSelector): Array<DocusaurusSidebarItem> {\n return $(list).children('li').toArray().flatMap((item) => {\n const directLink = $(item).children('a.menu__link').first()\n const collapsibleLink = $(item)\n .children('.menu__list-item-collapsible')\n .children('a.menu__link')\n .first()\n const link = directLink.length > 0 ? directLink : collapsibleLink\n const label = normalizedLinkLabel(link.text())\n const href = link.attr('href')\n const nested = $(item).children('ul.menu__list').first()\n const children = nested.length > 0 ? readList(nested.get(0)!) : []\n const isCategory = $(item).hasClass('theme-doc-sidebar-item-category')\n || link.hasClass('menu__link--sublist')\n if (!label && children.length === 0) return []\n return [{\n label: label || 'Documentation',\n ...(href ? { href: new URL(href, document.finalUrl).toString() } : {}),\n ...(children.length > 0 ? { items: children } : {}),\n ...(isCategory ? { isCategory: true } : {}),\n }]\n })\n }\n\n return { items: readList(sidebar.get(0)!) }\n}\n\nfunction docusaurusSidebarHrefs(snapshot: DocusaurusSidebarSnapshot | null): Array<string> {\n const hrefs: Array<string> = []\n const visit = (items: Array<DocusaurusSidebarItem>) => {\n for (const item of items) {\n if (item.href) hrefs.push(item.href)\n if (item.items) visit(item.items)\n }\n }\n if (snapshot) visit(snapshot.items)\n return hrefs\n}\n\nfunction deriveDocusaurusScope(\n source: URL,\n document: MigrationFetchResponse,\n submittedScopePath: string,\n): DocusaurusDiscovery {\n const $ = load(document.body)\n const sidebar = readDocusaurusSidebar(document)\n const internalPaths = docusaurusSidebarHrefs(sidebar).flatMap((href) => {\n try {\n const url = new URL(href)\n return url.origin === source.origin ? [url.pathname.replace(/\\/+$/, '') || '/'] : []\n } catch {\n return []\n }\n })\n const counts = new Map<string, number>()\n for (const path of internalPaths) {\n const segments = path.split('/').filter(Boolean)\n for (let length = 1; length < segments.length; length++) {\n const prefix = `/${segments.slice(0, length).join('/')}`\n counts.set(prefix, (counts.get(prefix) ?? 0) + 1)\n }\n }\n const threshold = Math.max(2, Math.ceil(internalPaths.length * 0.6))\n const scopePath = [...counts]\n .filter(([, count]) => count >= threshold)\n .sort((left, right) => right[0].split('/').length - left[0].split('/').length\n || right[1] - left[1])[0]?.[0]\n ?? submittedScopePath\n\n const excludedVersionPrefixes = $('.dropdown__menu a[href]').toArray().flatMap((element) => {\n const href = $(element).attr('href')\n if (!href) return []\n try {\n const target = new URL(href, document.finalUrl)\n if (target.origin !== source.origin || !isInScope(target, source, scopePath)) return []\n const relativePath = target.pathname.slice(scopePath.length).replace(/^\\/+/, '')\n const version = relativePath.split('/', 1)[0]\n if (!/^(?:legacy|next|v\\d[\\w.-]*)$/i.test(version)) return []\n return [`${scopePath}/${version}`]\n } catch {\n return []\n }\n })\n\n return {\n scopePath,\n excludedVersionPrefixes: [...new Set(excludedVersionPrefixes)],\n sidebar,\n }\n}\n\nfunction docusaurusRouteIdForUrl(url: URL, scopePath: string): string | null {\n let path = url.pathname.replace(/\\/+$/, '')\n if (scopePath === '/') path = path.replace(/^\\/+/, '')\n else if (path === scopePath) path = ''\n else if (path.startsWith(`${scopePath}/`)) path = path.slice(scopePath.length + 1)\n else return null\n const segments = path.split('/').filter(Boolean).map((segment) => {\n let decoded = segment\n try {\n decoded = decodeURIComponent(segment)\n } catch {\n // Preserve malformed source segments as literal route input.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n }).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction storageIdForDocusaurusRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction docusaurusNavigationFromSnapshots(\n snapshots: Array<DocusaurusSidebarSnapshot>,\n pages: Array<MigrationPage>,\n scopePath: string,\n): ReturnType<typeof buildNavigationFromPages> {\n const imported = new Set(pages.map((page) => page.navigationId))\n const claimed = new Set<string>()\n const uniqueSnapshots = [...new Map(snapshots.map((snapshot) => [\n JSON.stringify(snapshot.items),\n snapshot,\n ])).values()]\n const mergedSnapshots: Array<DocusaurusSidebarSnapshot> = []\n function mergeItems(\n target: Array<DocusaurusSidebarItem>,\n incoming: Array<DocusaurusSidebarItem>,\n ): void {\n for (const item of incoming) {\n const existing = target.find((candidate) => candidate.label === item.label\n && (candidate.items || item.items))\n ?? target.find((candidate) => candidate.label === item.label && candidate.href === item.href)\n if (!existing) {\n target.push(structuredClone(item))\n continue\n }\n if (!existing.href && item.href) existing.href = item.href\n if (item.items) {\n existing.items ??= []\n mergeItems(existing.items, item.items)\n }\n }\n }\n for (const snapshot of uniqueSnapshots) {\n const incomingLabels = new Set(snapshot.items.map((item) => item.label))\n const cluster = mergedSnapshots.find((candidate) => {\n const candidateLabels = new Set(candidate.items.map((item) => item.label))\n const overlap = [...incomingLabels].filter((label) => candidateLabels.has(label)).length\n return overlap >= Math.max(2, Math.ceil(Math.min(incomingLabels.size, candidateLabels.size) * 0.5))\n })\n if (cluster) mergeItems(cluster.items, snapshot.items)\n else mergedSnapshots.push(structuredClone(snapshot))\n }\n const pageIdsFor = (snapshot: DocusaurusSidebarSnapshot): Array<string> => docusaurusSidebarHrefs(snapshot)\n .flatMap((href) => {\n const id = docusaurusRouteIdForUrl(new URL(href), scopePath)\n return id && imported.has(id) ? [id] : []\n })\n mergedSnapshots.sort((left, right) => pageIdsFor(right).length - pageIdsFor(left).length)\n\n const tabs = mergedSnapshots.flatMap((snapshot, snapshotIndex) => {\n function convert(items: Array<DocusaurusSidebarItem>): Array<string | MigrationNavigationGroup> {\n const converted: Array<string | MigrationNavigationGroup> = []\n for (const item of items) {\n const routeId = item.href\n ? docusaurusRouteIdForUrl(new URL(item.href), scopePath)\n : null\n const page = routeId && imported.has(routeId) && !claimed.has(routeId) ? routeId : null\n if (page) claimed.add(page)\n const children = item.items ? convert(item.items) : []\n if (children.length > 0 || item.isCategory) {\n converted.push({ group: item.label, pages: page ? [page, ...children] : children })\n continue\n }\n if (page) converted.push(page)\n }\n return converted\n }\n const converted = convert(snapshot.items)\n const loosePages = converted.filter((item): item is string => typeof item === 'string')\n const groups = converted.filter((item): item is Exclude<typeof item, string> => typeof item !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n const snapshotPageIds = pageIdsFor(snapshot)\n const firstSegments = new Set(snapshotPageIds.map((id) => id.split('/', 1)[0]))\n const tab = snapshotIndex > 0 && firstSegments.size === 1\n ? normalizedLinkLabel([...firstSegments][0].replace(/[-_]/g, ' ')).replace(/\\b\\w/g, (letter) => letter.toUpperCase())\n : 'Documentation'\n return [{ tab, groups }]\n })\n\n const additional = pages\n .map((page) => page.navigationId)\n .filter((id) => !claimed.has(id))\n if (additional.length > 0) {\n if (tabs.length === 0) return buildNavigationFromPages(pages)\n tabs[0].groups?.push({ group: 'Additional', pages: additional })\n }\n return { tabs }\n}\n\nfunction htmlTopLevelNavigation(\n document: MigrationFetchResponse,\n source: URL,\n scopePath: string,\n): Array<SourceNavigationTab> {\n const $ = load(document.body)\n interface NavigationCandidate {\n entries: Array<SourceNavigationTab>\n anchorCount: number\n }\n const collectCandidates = (selector: string): Array<NavigationCandidate> => {\n const candidates: Array<NavigationCandidate> = []\n $(selector).each((_containerIndex, container) => {\n const entries: Array<SourceNavigationTab> = []\n const seenSections = new Set<string>()\n let anchorCount = 0\n $(container).find('a[href]').each((_index, element) => {\n const label = $(element).text().replace(/\\s+/g, ' ').trim()\n const href = $(element).attr('href')\n if (!label || !href) return\n try {\n const target = new URL(href, document.finalUrl)\n if (!isInScope(target, source, scopePath)) return\n anchorCount += 1\n const targetId = canonicalLocalizedPageId(pageIdForUrl(target, scopePath) ?? '')\n const pageId = targetId\n const section = targetId.split('/', 1)[0] || 'introduction'\n if (!pageId || seenSections.has(section)) return\n seenSections.add(section)\n entries.push({ section, label, pageId })\n } catch {\n // Ignore malformed navigation targets; discovery applies the same rule.\n }\n })\n if (entries.length > 1) {\n candidates.push({ entries, anchorCount })\n }\n })\n return candidates\n }\n // Mintlify marks its product-tab strip consistently. Prefer that explicit\n // platform signal; generic nav elements usually describe only the sidebar.\n const tabCandidates = collectCandidates('.nav-tabs')\n const candidates = tabCandidates.length > 0\n ? tabCandidates\n : collectCandidates('nav, [role=\"navigation\"]')\n const entries = candidates.sort((left, right) => {\n const densityDifference = (right.entries.length / right.anchorCount)\n - (left.entries.length / left.anchorCount)\n return densityDifference || right.entries.length - left.entries.length\n })[0]?.entries ?? []\n // A product switcher with dozens of entries is invariably a sidebar or\n // responsive page strip, not authored top-level navigation. Refuse to turn\n // that ambiguity into an unusable header.\n const normalizedLabels = entries.map((entry) => entry.label.trim().toLowerCase())\n if (entries.length > 12 || new Set(normalizedLabels).size !== normalizedLabels.length) return []\n return entries\n}\n\nfunction remapNavigationHome(\n config: MigrationBundle['docsConfig'],\n sourceHomePageId: string | undefined,\n): MigrationBundle['docsConfig'] {\n if (!sourceHomePageId || sourceHomePageId === 'introduction') return config\n const remapPages = (\n pages: Array<string | MigrationNavigationGroup>,\n ): Array<string | MigrationNavigationGroup> => pages.map((page) => typeof page === 'string'\n ? page === sourceHomePageId ? 'introduction' : page\n : { ...page, pages: remapPages(page.pages) })\n const remapGroups = (groups: Array<MigrationNavigationGroup>): Array<MigrationNavigationGroup> => groups.map((group) => ({\n ...group,\n pages: remapPages(group.pages),\n }))\n return {\n ...config,\n tabs: config.tabs.map((tab) => ({\n ...tab,\n ...(tab.href === `/${sourceHomePageId}` ? { href: '/' } : {}),\n ...(tab.pages ? { pages: remapPages(tab.pages) } : {}),\n ...(tab.groups ? { groups: remapGroups(tab.groups) } : {}),\n })),\n }\n}\n\nfunction markdownLinks(body: string): Array<string> {\n return [...body.matchAll(/\\[[^\\]]+\\]\\(([^)\\s]+)(?:\\s+['\"][^'\"]*['\"])?\\)/g)]\n .map((match) => match[1])\n}\n\nfunction sitemapLinks(body: string): Array<string> {\n const $ = load(body, { xmlMode: true })\n return $('url > loc, sitemap > loc').map((_index, element) => $(element).text().trim()).get().filter(Boolean)\n}\n\nfunction robotsSitemaps(body: string): Array<string> {\n return body.split('\\n')\n .map((line) => line.match(/^\\s*Sitemap:\\s*(\\S+)/i)?.[1])\n .filter((value): value is string => Boolean(value))\n}\n\nfunction headerLinks(document: MigrationFetchResponse): Array<string> {\n const links: Array<string> = []\n const llms = document.headers?.['x-llms-txt']\n if (llms) links.push(llms)\n const linkHeader = document.headers?.link ?? ''\n for (const match of linkHeader.matchAll(/<([^>]+)>\\s*;[^,]*(?:rel=[\"']?(?:alternate|llms-txt)[\"']?|type=[\"']text\\/(?:markdown|plain)[\"'])/gi)) {\n links.push(match[1])\n }\n return links\n}\n\nasync function safeFetch(\n fetcher: MigrationFetcher,\n url: URL,\n accept: string,\n): Promise<MigrationFetchResponse | null> {\n try {\n return await fetcher(url, { accept })\n } catch {\n return null\n }\n}\n\n/** Crawl one public docs origin into a canonical, caller-independent bundle. */\nexport async function migrateUrl(options: UrlMigrationOptions): Promise<MigrationBundle> {\n const source = validateMigrationUrl(options.sourceUrl)\n const fetcher = options.fetcher ?? defaultMigrationFetcher\n const maxPages = Math.max(1, Math.min(options.maxPages ?? DEFAULT_MAX_PAGES, 1_000))\n const concurrency = Math.max(1, Math.min(options.concurrency ?? 5, 10))\n const maxTotalBytes = Math.max(1_000_000, Math.min(options.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES, 500_000_000))\n const submittedScopePath = docsScopePath(source)\n const initial = await fetcher(source, { accept: 'text/markdown,text/html,application/xhtml+xml;q=0.9' })\n if (!isInScope(initial.finalUrl, source, submittedScopePath)) {\n throw new Error('The documentation URL redirected outside the submitted docs origin or path.')\n }\n const htmlProbe = /html/i.test(initial.contentType)\n ? initial\n : await safeFetch(fetcher, source, 'text/html,application/xhtml+xml')\n // Content negotiation must not let an HTML-only redirect escape the path\n // boundary already validated for the submitted documentation response.\n const scopedHtmlProbe = htmlProbe && isInScope(htmlProbe.finalUrl, source, submittedScopePath)\n ? htmlProbe\n : null\n const platform = options.platform ?? detectUrlPlatform(scopedHtmlProbe ?? initial)\n let docusaurusHtmlProbe = platform === 'docusaurus' ? scopedHtmlProbe : null\n if (docusaurusHtmlProbe && !readDocusaurusSidebar(docusaurusHtmlProbe)) {\n const $ = load(docusaurusHtmlProbe.body)\n const docsHref = $('nav a[href]').toArray().map((element) => ({\n href: $(element).attr('href'),\n label: normalizedLinkLabel($(element).text()),\n })).find((link) => /^docs(?:umentation)?$/i.test(link.label))?.href\n if (docsHref) {\n try {\n const docsUrl = new URL(docsHref, docusaurusHtmlProbe.finalUrl)\n if (docsUrl.origin === source.origin && isInScope(docsUrl, source, submittedScopePath)) {\n const probe = await safeFetch(fetcher, docsUrl, 'text/html,application/xhtml+xml')\n if (probe && probe.finalUrl.origin === source.origin && /html/i.test(probe.contentType)) {\n docusaurusHtmlProbe = probe\n }\n }\n } catch {\n // A malformed navbar link falls back to the submitted path boundary.\n }\n }\n }\n const docusaurusDiscovery = platform === 'docusaurus' && docusaurusHtmlProbe\n ? deriveDocusaurusScope(source, docusaurusHtmlProbe, submittedScopePath)\n : null\n // A Mintlify site may own an entire docs origin or a path below a marketing\n // site. Its llms/sitemap location is the authoritative crawl boundary.\n const scopePath = platform === 'mintlify'\n ? machineIndexScopePath(source, [initial, scopedHtmlProbe]) ?? submittedScopePath\n : docusaurusDiscovery?.scopePath ?? submittedScopePath\n const sourceMintlifyConfig = platform === 'mintlify' && scopedHtmlProbe && /html/i.test(scopedHtmlProbe.contentType)\n ? embeddedMintlifyConfig(scopedHtmlProbe.body)\n : null\n const sourceMintlifyProjection = sourceMintlifyConfig\n ? projectMintlifyNavigation(sourceMintlifyConfig, { pathPrefix: scopePath })\n : null\n const hasStructuredMintlifyNavigation = Boolean(\n sourceMintlifyProjection?.docsConfig.tabs.length\n && sourceMintlifyProjection.pageReferences.length,\n )\n const sourceTopLevelNavigation = platform === 'mintlify' && !hasStructuredMintlifyNavigation\n && scopedHtmlProbe && /html/i.test(scopedHtmlProbe.contentType)\n ? htmlTopLevelNavigation(scopedHtmlProbe, source, scopePath)\n : undefined\n // The submitted URL can be any page. Mintlify's first authored product tab,\n // rather than the submitted page, defines which source page becomes `/`.\n // Older single-section themes do not expose a tab strip, so they retain the\n // legacy dedicated-origin fallback when no authored home can be recovered.\n const sourceHomePageId = sourceMintlifyProjection?.pageReferences[0]?.navigationId\n ?? sourceTopLevelNavigation?.[0]?.pageId\n ?? (platform === 'mintlify' && scopePath === '/'\n ? canonicalLocalizedPageId(pageIdForUrl(source, scopePath) ?? '') || undefined\n : undefined)\n const cache = new Map([[source.toString(), initial]])\n if (docusaurusHtmlProbe) cache.set(docusaurusHtmlProbe.finalUrl.toString(), docusaurusHtmlProbe)\n const queue: Array<URL> = [source]\n const queued = new Set([candidateIdentity(source)])\n const warnings: Array<MigrationWarning> = []\n const fetchedSitemaps = new Set<string>()\n const docusaurusSidebars: Array<DocusaurusSidebarSnapshot> = docusaurusDiscovery?.sidebar\n ? [docusaurusDiscovery.sidebar]\n : []\n const docusaurusRedirects: Array<{ source: string; destination: string }> = []\n\n function enqueue(value: string, base: URL): void {\n if (queued.size >= MAX_DISCOVERED_URLS) return\n const url = normalizeCandidate(value, base, source, scopePath)\n if (!url || queued.has(candidateIdentity(url))) return\n if (platform === 'docusaurus' && url.pathname.replace(/\\/+$/, '') === `${scopePath}/search`) return\n if (docusaurusDiscovery?.excludedVersionPrefixes.some((prefix) => {\n const path = url.pathname.replace(/\\/+$/, '')\n return path === prefix || path.startsWith(`${prefix}/`)\n })) return\n queued.add(candidateIdentity(url))\n queue.push(url)\n }\n\n for (const reference of sourceMintlifyProjection?.pageReferences ?? []) {\n let href = reference.ref\n if (scopePath !== '/' && href.startsWith('/')\n && href !== scopePath && !href.startsWith(`${scopePath}/`)) {\n href = `${scopePath}${href}`\n }\n enqueue(href, source)\n }\n\n // Mintlify renders the authored navigation into the HTML shell. Seed the\n // queue from that order before machine indexes add completeness fallbacks.\n const navigationProbe = docusaurusHtmlProbe ?? scopedHtmlProbe\n if (navigationProbe && /html/i.test(navigationProbe.contentType)) {\n for (const link of htmlNavigationLinks(navigationProbe)) enqueue(link, navigationProbe.finalUrl)\n }\n\n async function discoverDocumentLinks(document: MigrationFetchResponse, depth = 0): Promise<void> {\n const links = sitemapLinks(document.body)\n for (const link of links) {\n let url: URL\n try {\n url = new URL(link, document.finalUrl)\n } catch {\n continue\n }\n if (depth < 2 && /\\.xml(?:$|\\?)/i.test(url.pathname)) {\n if (url.origin !== source.origin || fetchedSitemaps.size >= MAX_SITEMAP_DOCUMENTS\n || fetchedSitemaps.has(url.toString())) continue\n fetchedSitemaps.add(url.toString())\n const nested = await safeFetch(fetcher, url, 'application/xml,text/xml')\n if (nested && nested.finalUrl.origin === source.origin) await discoverDocumentLinks(nested, depth + 1)\n } else {\n enqueue(link, document.finalUrl)\n }\n }\n }\n\n for (const link of headerLinks(initial)) {\n let url: URL\n try {\n url = new URL(link, initial.finalUrl)\n } catch {\n continue\n }\n if (url.origin !== source.origin) continue\n const document = await safeFetch(fetcher, url, 'text/plain,text/markdown')\n if (!document || document.finalUrl.origin !== source.origin) continue\n for (const candidate of markdownLinks(document.body)) enqueue(candidate, document.finalUrl)\n }\n\n const pathRoot = scopePath === '/' ? source.origin : `${source.origin}${scopePath}`\n const discoveryUrls = [\n new URL('/llms.txt', source.origin),\n new URL(`${pathRoot.replace(source.origin, '')}/llms.txt`, source.origin),\n new URL('/robots.txt', source.origin),\n new URL('/sitemap.xml', source.origin),\n new URL(`${pathRoot.replace(source.origin, '')}/sitemap.xml`, source.origin),\n ]\n const uniqueDiscovery = [...new Map(discoveryUrls.map((url) => [url.toString(), url])).values()]\n for (const url of uniqueDiscovery) {\n const document = await safeFetch(fetcher, url, 'text/plain,application/xml,text/xml;q=0.9')\n if (!document || document.finalUrl.origin !== source.origin) continue\n const isRobots = url.pathname.endsWith('robots.txt')\n const isSitemap = url.pathname.endsWith('sitemap.xml') || document.contentType.includes('xml')\n if (isRobots) {\n for (const link of robotsSitemaps(document.body)) {\n let sitemapUrl: URL\n try {\n sitemapUrl = new URL(link, document.finalUrl)\n } catch {\n continue\n }\n if (sitemapUrl.origin !== source.origin || fetchedSitemaps.size >= MAX_SITEMAP_DOCUMENTS\n || fetchedSitemaps.has(sitemapUrl.toString())) continue\n fetchedSitemaps.add(sitemapUrl.toString())\n const sitemap = await safeFetch(fetcher, sitemapUrl, 'application/xml,text/xml')\n if (sitemap && sitemap.finalUrl.origin === source.origin) await discoverDocumentLinks(sitemap)\n }\n } else if (isSitemap) {\n await discoverDocumentLinks(document)\n } else {\n for (const link of markdownLinks(document.body)) enqueue(link, document.finalUrl)\n }\n }\n\n const pages: Array<MigrationPage> = []\n const openApiFragments: Array<EmbeddedOpenApiFragment> = []\n const seenIds = new Set<string>()\n const seenSources = new Set<string>()\n const visited = new Set<string>()\n let importedBytes = 0\n let isByteBudgetExhausted = false\n while (queue.length > 0 && pages.length < maxPages && !isByteBudgetExhausted) {\n const batch: Array<URL> = []\n while (queue.length > 0 && batch.length < Math.min(concurrency, maxPages - pages.length)) {\n const candidate = queue.shift()\n if (!candidate || visited.has(candidate.toString())) continue\n visited.add(candidate.toString())\n batch.push(candidate)\n }\n if (batch.length === 0) continue\n const results = await Promise.all(batch.map(async (candidate) => {\n let document = cache.get(candidate.toString())\n ?? await safeFetch(fetcher, candidate, 'text/markdown,text/html,application/xhtml+xml;q=0.9')\n if (!document) {\n return { candidate, page: null, links: [] as Array<string>, failure: true }\n }\n if (!isInScope(document.finalUrl, source, scopePath)) {\n return { candidate, page: null, links: [] as Array<string>, failure: false }\n }\n const isMarkdown = /(?:markdown|text\\/plain)/i.test(document.contentType)\n || /\\.mdx?$/i.test(document.finalUrl.pathname)\n if (!isMarkdown && !/\\.mdx?$/i.test(candidate.pathname)) {\n const markdownUrl = new URL(candidate)\n markdownUrl.pathname = `${markdownUrl.pathname.replace(/\\/$/, '')}.md`\n const markdownDocument = await safeFetch(fetcher, markdownUrl, 'text/markdown,text/plain')\n if (markdownDocument && isInScope(markdownDocument.finalUrl, source, scopePath)\n && /(?:markdown|text\\/plain)/i.test(markdownDocument.contentType)) {\n document = markdownDocument\n }\n }\n const isResolvedMarkdown = /(?:markdown|text\\/plain)/i.test(document.contentType)\n || /\\.mdx?$/i.test(document.finalUrl.pathname)\n const sanitizedMarkdown = isResolvedMarkdown ? sanitizeRemoteMarkdown(document.body) : null\n if (isResolvedMarkdown && sanitizedMarkdown === null) {\n const htmlUrl = new URL(candidate)\n htmlUrl.pathname = htmlUrl.pathname.replace(/\\.mdx?$/i, '') || '/'\n const htmlDocument = await safeFetch(fetcher, htmlUrl, 'text/html,application/xhtml+xml')\n if (htmlDocument && isInScope(htmlDocument.finalUrl, source, scopePath)\n && /html/i.test(htmlDocument.contentType)) {\n document = htmlDocument\n } else {\n // Never recover by compiling the rejected MDX. A source that does\n // not expose a safe rendered representation is skipped instead.\n return { candidate, page: null, links: [] as Array<string>, failure: false }\n }\n } else if (sanitizedMarkdown !== null) {\n document = { ...document, body: sanitizedMarkdown }\n }\n const responseBytes = Buffer.byteLength(document.body, 'utf8')\n if (importedBytes + responseBytes > maxTotalBytes) {\n isByteBudgetExhausted = true\n return { candidate, page: null, links: [] as Array<string>, failure: false, budgetExceeded: true }\n }\n importedBytes += responseBytes\n const discoveredNavigationId = platform === 'docusaurus'\n ? docusaurusRouteIdForUrl(document.finalUrl, scopePath)\n ?? docusaurusRouteIdForUrl(candidate, scopePath)\n : pageIdForUrl(document.finalUrl, scopePath)\n ?? pageIdForUrl(candidate, scopePath)\n const navigationId = discoveredNavigationId\n && canonicalLocalizedPageId(discoveredNavigationId) === sourceHomePageId\n ? 'introduction'\n : discoveredNavigationId\n if (!navigationId) return { candidate, page: null, links: [] as Array<string>, failure: false }\n const id = platform === 'docusaurus'\n ? storageIdForDocusaurusRoute(navigationId)\n : navigationId\n if (/(?:markdown|text\\/plain)/i.test(document.contentType) || /\\.mdx?$/i.test(document.finalUrl.pathname)) {\n const markdown = markdownPage(document, id)\n if (markdown.page) markdown.page.navigationId = navigationId\n return {\n candidate,\n page: markdown.page,\n openApiFragment: markdown.openApiFragment,\n links: markdownLinks(document.body),\n base: document.finalUrl,\n failure: false,\n }\n }\n const extracted = htmlPage(document, id)\n if (extracted.page) extracted.page.navigationId = navigationId\n const sidebar = platform === 'docusaurus' ? readDocusaurusSidebar(document) : null\n return { candidate, page: extracted.page, links: extracted.links, base: document.finalUrl, sidebar, failure: false }\n }))\n for (const result of results) {\n if (result.failure) {\n warnings.push({ code: 'fetch-failed', message: 'A discovered documentation page could not be fetched.', source: result.candidate.toString() })\n continue\n }\n if (result.budgetExceeded) continue\n if (result.page && platform !== 'docusaurus') {\n result.page.id = canonicalLocalizedPageId(result.page.id)\n result.page.navigationId = canonicalLocalizedPageId(result.page.navigationId)\n }\n const sourceIdentity = result.page\n ? candidateIdentity(new URL(result.page.source))\n : null\n if (result.page && sourceIdentity && !seenSources.has(sourceIdentity)\n && !seenIds.has(result.page.id) && pages.length < maxPages) {\n pages.push(result.page)\n if ('openApiFragment' in result && result.openApiFragment) {\n openApiFragments.push(result.openApiFragment)\n }\n seenIds.add(result.page.id)\n seenSources.add(sourceIdentity)\n }\n if (platform === 'docusaurus' && result.page) {\n const candidateRoute = docusaurusRouteIdForUrl(result.candidate, scopePath)\n if (candidateRoute && candidateRoute !== result.page.navigationId) {\n docusaurusRedirects.push({\n source: candidateRoute === 'introduction' ? '/' : `/${candidateRoute}`,\n destination: result.page.navigationId === 'introduction' ? '/' : `/${result.page.navigationId}`,\n })\n }\n }\n if ('sidebar' in result && result.sidebar) docusaurusSidebars.push(result.sidebar)\n for (const link of result.links) enqueue(link, result.base ?? result.candidate)\n }\n }\n\n if (pages.length === 0) throw new Error('No readable documentation pages were found at that URL.')\n for (const page of pages) {\n const [locale, ...navigationSegments] = page.id.split('/')\n if (LOCALE_CODES.has(locale)) {\n if (navigationSegments.length === 0) page.id = `${locale}/introduction`\n page.locale = locale\n page.navigationId = navigationSegments.join('/') || 'introduction'\n }\n }\n const importedIds = new Set(pages.map((page) => page.navigationId))\n for (const page of pages) {\n page.body = rewriteInternalLinks(\n page.body,\n new URL(page.source),\n source,\n scopePath,\n importedIds,\n sourceHomePageId,\n )\n }\n if (isByteBudgetExhausted) {\n warnings.push({ code: 'limit-reached', message: `Import stopped after reaching the ${Math.round(maxTotalBytes / 1_000_000)} MB content budget.` })\n } else if (queue.length > 0 || queued.size >= MAX_DISCOVERED_URLS) {\n warnings.push({ code: 'limit-reached', message: `Import stopped after ${pages.length} pages; narrow the URL or raise the caller limit to import more.` })\n }\n const topLevelNavigation = sourceTopLevelNavigation?.map((entry) => ({\n ...entry,\n pageId: entry.pageId === sourceHomePageId ? 'introduction' : entry.pageId,\n }))\n let docsConfig = platform === 'docusaurus'\n ? docusaurusNavigationFromSnapshots(docusaurusSidebars, pages, scopePath)\n : hasStructuredMintlifyNavigation && sourceMintlifyProjection\n ? remapNavigationHome(sourceMintlifyProjection.docsConfig, sourceHomePageId)\n : buildNavigationFromPages(pages, {\n topLevelTabs: platform === 'mintlify',\n topLevelNavigation,\n })\n if (sourceMintlifyProjection) warnings.push(...sourceMintlifyProjection.warnings)\n if (docusaurusRedirects.length > 0) {\n docsConfig.redirects = [...new Map(docusaurusRedirects.map((redirect) => [\n `${redirect.source}:${redirect.destination}`,\n redirect,\n ])).values()]\n }\n const openApiAsset = mergeEmbeddedOpenApi(openApiFragments)\n if (openApiAsset) {\n const operationPageIds = new Set(pages.filter((page) => page.openapi).map((page) => page.navigationId))\n const containsOperation = (\n navigationPages: Array<string | MigrationNavigationGroup> = [],\n ): boolean => navigationPages.some((page) => typeof page === 'string'\n ? operationPageIds.has(page)\n : containsOperation(page.pages))\n const apiTab = docsConfig.tabs.find((tab) => (\n containsOperation(tab.pages) || containsOperation(tab.groups)\n )) ?? docsConfig.tabs[0]\n if (apiTab) {\n // Migrated operation pages preserve the source URLs and sidebar order.\n // The spec is still configured for operation rendering, but its derived\n // `/api/*` navigation would duplicate every imported endpoint.\n apiTab.api = { source: '/openapi.yaml', navigation: false }\n }\n }\n const locales = [...new Set(pages.map((page) => page.locale).filter((value): value is string => Boolean(value)))]\n if (locales.length > 0) {\n docsConfig.i18n = {\n defaultLocale: 'en',\n locales: [\n { code: 'en', label: 'English' },\n ...locales.filter((locale) => locale !== 'en').map((locale) => ({ code: locale, label: locale.toUpperCase() })),\n ],\n }\n }\n if (platform === 'mintlify') docsConfig = addMintlifyDirectoryRedirects(docsConfig, pages)\n return {\n sourceUrl: source.toString(),\n sourceKind: 'url',\n platform,\n pages,\n assets: openApiAsset ? [{ path: 'openapi.yaml', content: openApiAsset }] : [],\n docsConfig,\n ...(sourceMintlifyConfig ? {\n site: {\n ...(typeof sourceMintlifyConfig.name === 'string' ? { name: sourceMintlifyConfig.name } : {}),\n ...(typeof sourceMintlifyConfig.description === 'string' ? { description: sourceMintlifyConfig.description } : {}),\n },\n } : {}),\n warnings,\n stats: {\n discovered: visited.size,\n imported: pages.length,\n skipped: Math.max(0, visited.size - pages.length),\n },\n }\n}\n"],"mappings":"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","names":["existsSync","lstatSync","readFileSync","dirname","extname","relative","parseYaml","existsSync","lstatSync","readFileSync","extname","relative","objectValue","existsSync","lstatSync","relative","readFileSync","value","titleCase","extname","existsSync","lstatSync","readFileSync","dirname","relative","resolve","extname","parseYaml","value","payload","parseYaml","title","converted","candidates","entries"]}
|