@thallylabs/migrate 0.2.5 → 0.2.6
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/dist/index.d.ts +4 -0
- package/dist/index.js +212 -24
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/repository.ts","../src/components.ts","../src/frontmatter.ts","../src/path.ts","../src/docusaurus.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 { createComponentMigrator } from './components.js'\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 addMintlifyHomepageRedirects,\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport {\n normalizeAssetPath,\n mintlifyLocalizedReference,\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/** Identify component ownership independently of checkout paths and URL syntax. */\nfunction componentSourceIdentity(sourceUrl: string, repositoryDir: string, siteRoot: string): string {\n const url = new URL(sourceUrl)\n // A GitHub tree URL and the repository root identify the same source. Branch\n // changes should update its components, while separate monorepo sites must\n // retain independent namespaces even if their snippet filenames coincide.\n // Credentials, queries and fragments are not source identity and never feed\n // generated names; only the canonical origin/path and docs root participate.\n const repository = url.hostname.toLowerCase() === 'github.com'\n ? `https://github.com/${url.pathname.split('/').filter(Boolean).slice(0, 2).join('/').replace(/\\.git$/i, '').toLowerCase()}`\n : `${url.origin}${trimTrailingSlashes(url.pathname)}`\n return JSON.stringify([repository, relative(repositoryDir, siteRoot).replace(/\\\\/g, '/')])\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 const componentRoot = mintlifyProjectRoot ?? repositoryDir\n const componentMigrator = platform === 'mintlify'\n ? createComponentMigrator(componentRoot, warnings, componentSourceIdentity(options.sourceUrl, repositoryDir, componentRoot))\n : undefined\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 // Shared source pages may appear in several language menus. The\n // projector visits the default language first; retain that primary\n // file so other locales can use the runtime's content fallback.\n if (!referenceMap.has(key)) referenceMap.set(key, reference)\n const exactKey = exactReferenceKey(reference.ref)\n if (!exactReferenceMap.has(exactKey)) exactReferenceMap.set(exactKey, reference)\n if (!referenceOrder.has(key)) 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 defaultPageIds = new Set([...referenceMap.values()]\n .filter((reference) => !reference.locale || reference.locale === localeConfig?.defaultLocale)\n .map((reference) => reference.navigationId))\n const routeAliases: NonNullable<MigrationDocsConfig['redirects']> = []\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 for (const entry of localeConfig.locales) {\n const localized = mintlifyLocalizedReference(file.relativePath, entry.code, defaultPageIds)\n if (localized === file.relativePath) continue\n locale = entry.code\n navigationId = pageIdFromReference(localized, platform === 'mintlify')\n break\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 let raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n mintlifyProjectRoot ?? docusaurusProjectRoot ?? repositoryDir,\n snippetAliases,\n )\n if (componentMigrator) raw = componentMigrator.transform(raw, file.absolutePath)\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 (platform === 'mintlify') {\n const sourcePath = exactReferenceKey(file.relativePath)\n // Only literal portable paths become Next redirects: source filenames\n // must never introduce route patterns such as `:param` or wildcards.\n if (sourcePath !== page.id && /^[A-Za-z0-9_./-]+$/.test(sourcePath)) {\n routeAliases.push({ source: `/${sourcePath}`, destination: `/${page.id}`, permanent: false })\n }\n }\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') {\n const sources = new Set((docsConfig.redirects ?? []).map((redirect) => redirect.source))\n const aliases = routeAliases.filter((redirect) => !sources.has(redirect.source))\n if (aliases.length > 0) docsConfig = { ...docsConfig, redirects: [...(docsConfig.redirects ?? []), ...aliases] }\n docsConfig = addMintlifyHomepageRedirects(addMintlifyDirectoryRedirects(docsConfig, pages), pages)\n }\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 ...(componentMigrator ? { componentFiles: componentMigrator.files() } : {}),\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 * Move repository-owned MDX components into the customer component registry.\n * Source is parsed, never evaluated. Every dependency must remain inside the\n * documentation root and traverse only ordinary files (including its parents).\n */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { dirname, extname, relative, resolve } from 'node:path'\nimport remarkMdx from 'remark-mdx'\nimport remarkParse from 'remark-parse'\nimport ts from 'typescript'\nimport { unified } from 'unified'\n\nimport { parseFrontmatter } from './frontmatter.js'\nimport { resolveWithin } from './path.js'\nimport type { MigrationWarning, RenderedMigrationFile } from './types.js'\n\ninterface MdxNode {\n type: string\n name?: string | null\n value?: string\n attributes?: Array<{ name?: string; type: string; value?: string | { value?: string } | null }>\n children?: Array<MdxNode>\n position?: { start: { offset?: number }; end: { offset?: number } }\n}\n\ninterface Replacement { start: number; end: number; value: string }\ninterface Binding { local: string; imported: string; source: string }\n\nconst parser = unified().use(remarkParse).use(remarkMdx)\nconst CODE_EXTENSIONS = new Set(['.js', '.jsx', '.ts', '.tsx', '.mjs'])\nconst DATA_EXTENSIONS = new Set(['.json', '.css', '.svg', '.png', '.jpg', '.jpeg', '.webp', '.gif', '.avif', '.woff', '.woff2'])\nconst SHARED_IMPORTS = new Set(['react', 'react/jsx-runtime', 'react/jsx-dev-runtime'])\nconst REACT_GLOBALS = new Set([\n 'useState', 'useEffect', 'useLayoutEffect', 'useMemo', 'useCallback', 'useRef',\n 'useReducer', 'useContext', 'useId', 'useTransition', 'useDeferredValue',\n 'useImperativeHandle', 'useSyncExternalStore', 'useInsertionEffect',\n 'useOptimistic', 'useActionState', 'use', 'createContext', 'forwardRef', 'memo',\n])\nconst MAX_COMPONENT_FILES = 300\nconst MAX_COMPONENT_BYTES = 20_000_000\nconst MAX_FILE_BYTES = 2_000_000\n\nfunction applyReplacements(source: string, replacements: Array<Replacement>): string {\n return replacements.sort((a, b) => b.start - a.start).reduce(\n (text, edit) => text.slice(0, edit.start) + edit.value + text.slice(edit.end), source,\n )\n}\n\nfunction hash(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 12)\n}\n\nfunction portableSpecifier(path: string): string {\n // Customer tsconfigs do not opt into allowImportingTsExtensions. Next's\n // bundler resolves these extensionless source imports without that flag.\n return path.replace(/\\.tsx?$/, '')\n}\n\nfunction sourceFile(source: string, filename: string): ts.SourceFile {\n return ts.createSourceFile(filename, source, ts.ScriptTarget.Latest, true,\n /\\.[cm]?ts$/.test(filename) ? ts.ScriptKind.TS : ts.ScriptKind.TSX)\n}\n\nfunction walk(node: MdxNode, visitor: (node: MdxNode) => void): void {\n visitor(node)\n for (const child of node.children ?? []) walk(child, visitor)\n}\n\nfunction implicitReactImports(source: ts.SourceFile): string {\n const bindings = new Set<string>()\n const references = new Set<string>()\n function bind(name: ts.BindingName): void {\n if (ts.isIdentifier(name)) bindings.add(name.text)\n else for (const element of name.elements) if (ts.isBindingElement(element)) bind(element.name)\n }\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const clause = statement.importClause\n if (clause.name) bindings.add(clause.name.text)\n if (clause.namedBindings) {\n if (ts.isNamespaceImport(clause.namedBindings)) bindings.add(clause.namedBindings.name.text)\n else for (const element of clause.namedBindings.elements) bindings.add(element.name.text)\n }\n }\n if (ts.isVariableStatement(statement)) for (const declaration of statement.declarationList.declarations) bind(declaration.name)\n if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && statement.name) bindings.add(statement.name.text)\n }\n function visit(node: ts.Node): void {\n if (ts.isIdentifier(node) && !(ts.isPropertyAccessExpression(node.parent) && node.parent.name === node)\n && !(ts.isPropertyAssignment(node.parent) && node.parent.name === node)) references.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(source)\n const hooks = [...REACT_GLOBALS].filter((name) => references.has(name) && !bindings.has(name)).sort()\n return [\n references.has('React') && !bindings.has('React') ? \"import * as React from 'react';\" : '',\n hooks.length ? `import { ${hooks.join(', ')} } from 'react';` : '',\n ].filter(Boolean).join('\\n')\n}\n\nfunction imports(statement: ts.ImportDeclaration): Array<Binding> {\n if (!ts.isStringLiteral(statement.moduleSpecifier) || !statement.importClause) return []\n const clause = statement.importClause\n if (clause.isTypeOnly) return []\n const source = statement.moduleSpecifier.text\n const bindings: Array<Binding> = clause.name ? [{ local: clause.name.text, imported: 'default', source }] : []\n if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {\n for (const element of clause.namedBindings.elements) {\n if (!element.isTypeOnly) bindings.push({ local: element.name.text, imported: element.propertyName?.text ?? element.name.text, source })\n }\n }\n return bindings\n}\n\n/** Create one bounded component graph and registry for a repository migration. */\nexport function createComponentMigrator(siteRoot: string, warnings: Array<MigrationWarning>, sourceIdentity: string): {\n transform: (raw: string, currentFile: string) => string\n files: () => Array<RenderedMigrationFile>\n} {\n const root = resolve(siteRoot)\n // A destination can contain imports from several repositories with identical\n // snippet names. Stable source identity isolates their graphs without tying\n // registry names to a temporary checkout path or changing repeat imports.\n const destinationRoot = `src/mdx/migrated/${hash(sourceIdentity)}`\n const copied = new Map<string, RenderedMigrationFile>()\n const registrations = new Map<string, { path: string; imported: string }>()\n let copiedBytes = 0\n\n function warn(message: string, source: string): void {\n warnings.push({ code: 'unsupported-config', message, source: relative(root, source).replace(/\\\\/g, '/') })\n }\n\n function checkedFile(path: string): string {\n const local = relative(root, path)\n resolveWithin(root, local)\n let current = root\n if (lstatSync(current).isSymbolicLink()) throw new Error('symbolic links are not imported')\n for (const segment of local.split(/[\\\\/]/)) {\n current = resolveWithin(current, segment)\n if (lstatSync(current).isSymbolicLink()) throw new Error('symbolic links are not imported')\n }\n if (!lstatSync(path).isFile()) throw new Error('dependency is not a regular file')\n return path\n }\n\n function resolveDependency(specifier: string, importer: string): string {\n if (specifier.includes('\\\\') || specifier.includes('\\0') || /[?#]/.test(specifier)) throw new Error('unsupported component dependency path')\n const candidate = specifier.startsWith('/')\n ? resolveWithin(root, specifier.slice(1))\n : resolveWithin(root, relative(root, resolve(dirname(importer), specifier)))\n const candidates = [candidate]\n if (!extname(candidate)) {\n candidates.push(...['.tsx', '.jsx', '.ts', '.js', '.mjs', '.json'].map((extension) => candidate + extension))\n candidates.push(...['index.tsx', 'index.jsx', 'index.ts', 'index.js'].map((name) => resolve(candidate, name)))\n } else if (extname(candidate) === '.js') {\n candidates.push(candidate.slice(0, -3) + '.ts', candidate.slice(0, -3) + '.tsx')\n }\n for (const path of candidates) {\n if (existsSync(path) && lstatSync(path).isFile()) return checkedFile(path)\n }\n throw new Error(`component dependency ${specifier} was not found`)\n }\n\n function outputPath(path: string): string {\n return `${destinationRoot}/source/${relative(root, path).replace(/\\\\/g, '/')}`\n }\n\n function copyGraph(entry: string): string {\n // Stage the entire graph in memory. A missing leaf must not leave a partly\n // registered component or consume the successful-copy budget.\n const staged = new Map<string, RenderedMigrationFile>()\n let stagedBytes = 0\n function visit(path: string): void {\n const destination = outputPath(path)\n if (copied.has(destination) || staged.has(destination)) return\n checkedFile(path)\n const size = lstatSync(path).size\n if (size > MAX_FILE_BYTES || copiedBytes + stagedBytes + size > MAX_COMPONENT_BYTES\n || copied.size + staged.size >= MAX_COMPONENT_FILES) throw new Error('component migration budget exceeded')\n const extension = extname(path).toLowerCase()\n if (!CODE_EXTENSIONS.has(extension) && !DATA_EXTENSIONS.has(extension)) throw new Error(`unsupported dependency file type ${extension}`)\n stagedBytes += size\n const content = readFileSync(path)\n staged.set(destination, { path: destination, content })\n if (!CODE_EXTENSIONS.has(extension)) {\n if (extension === '.css' && /@import\\b|url\\s*\\(/i.test(content.toString('utf8'))) throw new Error('CSS resource dependencies require manual migration')\n return\n }\n const text = content.toString('utf8')\n const syntax = ts.transpileModule(text, { fileName: path, reportDiagnostics: true,\n compilerOptions: { jsx: ts.JsxEmit.Preserve, target: ts.ScriptTarget.ESNext, module: ts.ModuleKind.ESNext } })\n if (syntax.diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error)) throw new Error('component source contains unsupported JavaScript or TypeScript syntax')\n const ast = sourceFile(text, path)\n if (ast.statements.some((statement) => ts.isExpressionStatement(statement)\n && ts.isStringLiteral(statement.expression) && statement.expression.text === 'use server')) throw new Error('server-only component modules require manual migration')\n const edits: Array<Replacement> = []\n function dependency(literal: ts.StringLiteralLike): void {\n const specifier = literal.text\n if (SHARED_IMPORTS.has(specifier)) return\n if (!specifier.startsWith('.') && !specifier.startsWith('/')) {\n throw new Error(`external package ${specifier} requires manual installation and review`)\n }\n const target = resolveDependency(specifier, path)\n visit(target)\n const nextPath = relative(dirname(destination), outputPath(target)).replace(/\\\\/g, '/')\n edits.push({ start: literal.getStart(ast), end: literal.end, value: JSON.stringify(portableSpecifier(nextPath.startsWith('.') ? nextPath : `./${nextPath}`)) })\n }\n function inspect(node: ts.Node): void {\n if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) dependency(node.moduleSpecifier)\n if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword\n || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) {\n const argument = node.arguments[0]\n if (node.arguments.length !== 1 || !argument || !ts.isStringLiteralLike(argument)) throw new Error('computed component imports require manual migration')\n dependency(argument)\n }\n ts.forEachChild(node, inspect)\n }\n inspect(ast)\n // Mark copied code as client-owned even when the source platform inferred\n // its client boundary. Browser hooks must never run in MDX's server scope.\n staged.set(destination, { path: destination, content: `'use client';\\n\\n${implicitReactImports(ast)}\\n${applyReplacements(text, edits)}` })\n }\n visit(entry)\n for (const [path, file] of staged) copied.set(path, file)\n copiedBytes += stagedBytes\n return outputPath(entry)\n }\n\n function register(path: string, imported: string): string {\n const name = `Migrated${hash(`${path}:${imported}`)}`\n registrations.set(name, { path, imported })\n return name\n }\n\n function transform(raw: string, currentFile: string): string {\n const content = parseFrontmatter(raw).content\n const frontmatter = raw.slice(0, raw.length - content.length)\n let tree: MdxNode\n try {\n tree = parser.parse(content) as MdxNode\n } catch {\n warn('Custom component analysis could not parse this MDX; its source was preserved for manual migration.', currentFile)\n return raw\n }\n const aliases = new Map<string, string>()\n const edits: Array<Replacement> = []\n const declarations: Array<{ start: number; end: number; source: string }> = []\n const moduleImports: Array<string> = []\n const sharedImportEdits: Array<Replacement> = []\n let hasUnsupportedImports = false\n function hasExpressionReference(names: Set<string>, options: {\n excludedNodes?: Array<MdxNode>\n includeDeclarations?: boolean\n includeDirectTags?: boolean\n } = {}): boolean {\n let found = false\n function inspect(node: ts.Node): void {\n if (ts.isIdentifier(node) && names.has(node.text)) found = true\n ts.forEachChild(node, inspect)\n }\n walk(tree, (node) => {\n if (options.excludedNodes?.some((excluded) => node.position?.start.offset !== undefined\n && node.position.end.offset !== undefined\n && node.position.start.offset >= excluded.position!.start.offset!\n && node.position.end.offset <= excluded.position!.end.offset!)) return\n if (node.name && [...names].some((name) => node.name!.startsWith(`${name}.`)\n || (options.includeDirectTags && node.name === name))) found = true\n if (options.includeDeclarations !== false && node.type === 'mdxjsEsm' && node.value) {\n for (const statement of sourceFile(node.value, 'expression.tsx').statements) {\n if (!ts.isImportDeclaration(statement)) inspect(statement)\n }\n }\n const expressions = [\n ...(['mdxFlowExpression', 'mdxTextExpression'].includes(node.type) ? [node.value ?? ''] : []),\n ...(node.attributes ?? []).flatMap((attribute) => {\n if (attribute.type === 'mdxJsxExpressionAttribute' && typeof attribute.value === 'string') return [attribute.value]\n return attribute.value && typeof attribute.value === 'object' ? [attribute.value.value ?? ''] : []\n }),\n ]\n for (const expression of expressions) inspect(sourceFile(expression, 'expression.tsx'))\n })\n return found\n }\n for (const node of tree.children ?? []) {\n if (node.type !== 'mdxjsEsm' || node.value === undefined || node.position?.start.offset === undefined) continue\n const ast = sourceFile(node.value, 'inline.tsx')\n for (const statement of ast.statements) {\n if (!ts.isImportDeclaration(statement)) {\n let unsupportedDependency = ts.isExportDeclaration(statement) && !!statement.moduleSpecifier\n function inspect(node: ts.Node): void {\n if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword\n || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) unsupportedDependency = true\n ts.forEachChild(node, inspect)\n }\n inspect(statement)\n if (unsupportedDependency) {\n hasUnsupportedImports = true\n warn('Inline MDX module dependencies require manual extraction; source was preserved.', currentFile)\n }\n declarations.push({\n start: node.position.start.offset + statement.getStart(ast),\n end: node.position.start.offset + statement.end,\n source: statement.getText(ast),\n })\n continue\n }\n const bindings = imports(statement)\n const specifier = ts.isStringLiteral(statement.moduleSpecifier) ? statement.moduleSpecifier.text : ''\n if (!specifier.startsWith('.') && !specifier.startsWith('/')) {\n if (SHARED_IMPORTS.has(specifier)) {\n moduleImports.push(statement.getText(ast))\n sharedImportEdits.push({ start: node.position.start.offset + statement.getStart(ast), end: node.position.start.offset + statement.end, value: '' })\n } else {\n hasUnsupportedImports = true\n warn(`MDX import ${specifier} requires manual package installation or registration; the import was preserved.`, currentFile)\n }\n continue\n }\n if (/\\.mdx?$/.test(specifier)) continue\n if (!bindings.length || (statement.importClause?.namedBindings && ts.isNamespaceImport(statement.importClause.namedBindings))) {\n warn('Namespace or side-effect MDX imports require manual registration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n if (bindings.some((binding) => !/^[A-Z]/.test(binding.local))) {\n warn('MDX imports containing non-component values require manual migration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n if (hasExpressionReference(new Set(bindings.map((binding) => binding.local)))) {\n warn('Imported components used in MDX expressions, component props, or member tags require manual migration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n try {\n const path = copyGraph(resolveDependency(specifier, currentFile))\n for (const binding of bindings) {\n const name = register(path, binding.imported)\n aliases.set(binding.local, name)\n moduleImports.push(`import { ${binding.imported} as ${binding.local} } from ${JSON.stringify(portableSpecifier(`./${relative(destinationRoot, path).replace(/\\\\/g, '/')}`))};`)\n }\n edits.push({ start: node.position.start.offset + statement.getStart(ast), end: node.position.start.offset + statement.end, value: '' })\n } catch (error) {\n hasUnsupportedImports = true\n warn(`Custom component was preserved for manual migration: ${error instanceof Error ? error.message : 'unsupported dependency'}.`, currentFile)\n }\n }\n }\n\n // Extract whole HTML JSX roots with event handlers. Markdown and global\n // built-ins remain server-rendered; React functions stay inside the client\n // module, so no function is serialized across a server/client boundary.\n const extracted: Array<{ node: MdxNode; name: string; jsx: string }> = []\n for (const candidate of tree.children ?? []) {\n const node = candidate.type === 'paragraph' && candidate.children?.length === 1 ? candidate.children[0] : candidate\n if (!['mdxJsxFlowElement', 'mdxJsxTextElement'].includes(node.type) || node.position?.start.offset === undefined || node.position.end.offset === undefined) continue\n let interactive = false\n let supported = true\n walk(node, (child) => {\n if (child.attributes?.some((attribute) => /^on[A-Z]/.test(attribute.name ?? ''))) interactive = true\n if (child.name && /^[A-Z]/.test(child.name) && !aliases.has(child.name)) supported = false\n if (!['mdxJsxFlowElement', 'mdxJsxTextElement', 'mdxFlowExpression', 'mdxTextExpression', 'text', 'paragraph'].includes(child.type)) supported = false\n })\n if (!interactive) continue\n if (!supported || hasUnsupportedImports) {\n warn('Interactive MDX containing Markdown or unregistered components requires manual extraction; source was preserved.', currentFile)\n continue\n }\n const jsx = content.slice(node.position.start.offset, node.position.end.offset)\n // The JSX compiler is the final syntax gate: Markdown embedded in JSX\n // must not accidentally become JavaScript in the generated module.\n const result = ts.transpileModule(`export default function Inline() { return (${jsx}); }`, {\n fileName: 'inline.jsx', compilerOptions: { jsx: ts.JsxEmit.Preserve }, reportDiagnostics: true,\n })\n if (result.diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error)) {\n warn('Interactive MDX could not be safely extracted as JSX; source was preserved.', currentFile)\n continue\n }\n extracted.push({ node, name: `Inline${extracted.length}`, jsx })\n }\n if (extracted.length && declarations.length) {\n const declared = new Set<string>()\n function bind(name: ts.BindingName): void {\n if (ts.isIdentifier(name)) declared.add(name.text)\n else for (const element of name.elements) if (ts.isBindingElement(element)) bind(element.name)\n }\n for (const declaration of declarations) {\n for (const statement of sourceFile(declaration.source, 'declaration.tsx').statements) {\n if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && statement.name) declared.add(statement.name.text)\n if (ts.isVariableStatement(statement)) for (const variable of statement.declarationList.declarations) bind(variable.name)\n }\n }\n const hasSharedDeclarations = hasExpressionReference(declared, {\n excludedNodes: extracted.map((entry) => entry.node),\n includeDeclarations: false,\n includeDirectTags: true,\n })\n if (hasSharedDeclarations) {\n warn('Interactive MDX shares declarations with remaining page content; source was preserved for manual extraction.', currentFile)\n extracted.length = 0\n }\n }\n if (extracted.length && (copied.size >= MAX_COMPONENT_FILES\n || Buffer.byteLength(content) > MAX_FILE_BYTES\n || copiedBytes + Buffer.byteLength(content) > MAX_COMPONENT_BYTES)) {\n warn('Interactive MDX exceeded the component migration budget; source was preserved.', currentFile)\n extracted.length = 0\n }\n if (extracted.length) {\n const path = `${destinationRoot}/inline-${hash(relative(root, currentFile))}.jsx`\n let declarationSource = [...new Set(declarations.map((entry) => entry.source))].join('\\n\\n')\n // Mintlify exposes this DOM id as its documented search trigger. Thally\n // opens search through the same keyboard event handled by CommandSearch.\n declarationSource = declarationSource.replace(/document\\.getElementById\\(\\s*(['\"])search-bar-entry\\1\\s*\\)\\.click\\(\\s*\\)/g,\n `document.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', ctrlKey: true, bubbles: true }))`)\n const inlineSource = [\n \"'use client';\", '', ...moduleImports, '', declarationSource, '',\n ...extracted.map(({ name, jsx }) => `export function ${name}() {\\n return (${jsx});\\n}`), '',\n ].join('\\n')\n copied.set(path, { path, content: `'use client';\\n${implicitReactImports(sourceFile(inlineSource, 'inline.jsx'))}\\n${inlineSource}` })\n copiedBytes += Buffer.byteLength(inlineSource)\n for (const { node, name } of extracted) {\n edits.push({ start: node.position!.start.offset!, end: node.position!.end.offset!, value: `<${register(path, name)} />` })\n }\n edits.push(...declarations.map(({ start, end }) => ({ start, end, value: '' })), ...sharedImportEdits)\n }\n walk(tree, (node) => {\n const replacement = node.name ? aliases.get(node.name) : undefined\n if (!replacement || node.position?.start.offset === undefined || node.position.end.offset === undefined) return\n const start = node.position.start.offset\n const end = node.position.end.offset\n if (extracted.some((item) => start >= item.node.position!.start.offset! && end <= item.node.position!.end.offset!)) return\n const text = content.slice(start, end)\n const opening = text.indexOf(`<${node.name}`)\n if (opening >= 0) edits.push({ start: start + opening + 1, end: start + opening + 1 + node.name!.length, value: replacement })\n const closing = text.lastIndexOf(`</${node.name}`)\n if (closing >= 0) edits.push({ start: start + closing + 2, end: start + closing + 2 + node.name!.length, value: replacement })\n })\n return frontmatter + applyReplacements(content, edits)\n }\n\n function files(): Array<RenderedMigrationFile> {\n if (!registrations.size) return []\n const entries = [...registrations.entries()].sort(([a], [b]) => a.localeCompare(b))\n return [...copied.values(), {\n path: 'src/mdx/custom-components.tsx',\n content: [\n '/** Repository components preserved by migration; this registry is customer-owned. */',\n \"import type { MDXComponents } from 'mdx/types'\", ...entries.map(([name, binding]) => {\n const path = portableSpecifier(`./${relative('src/mdx', binding.path).replace(/\\\\/g, '/')}`)\n return `import { ${binding.imported} as ${name} } from ${JSON.stringify(path)}`\n }), '', 'export const customComponents: MDXComponents = {',\n ...entries.map(([name]) => ` ${name},`), '}', '',\n ].join('\\n'),\n }]\n }\n return { transform, files }\n}\n\n/** Preserve an authored component registry while adding an isolated import map. */\nexport function mergeComponentRegistry(existing: string, incoming: string): Array<RenderedMigrationFile> {\n const fingerprint = hash(incoming)\n const name = `MigratedRegistry${fingerprint}`\n const registryPath = `./migrated-components-${fingerprint}`\n const source = sourceFile(existing, 'custom-components.tsx')\n const alreadyImported = source.statements.some((statement) => ts.isImportDeclaration(statement)\n && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === registryPath)\n let initializer: ts.Expression | undefined\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement) || !statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) continue\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.name.text === 'customComponents') initializer = declaration.initializer\n }\n }\n while (initializer && (ts.isAsExpression(initializer) || ts.isSatisfiesExpression(initializer) || ts.isParenthesizedExpression(initializer))) initializer = initializer.expression\n if (!initializer || !ts.isObjectLiteralExpression(initializer)) {\n throw new Error('Cannot safely merge src/mdx/custom-components.tsx: export customComponents as an object literal before importing components. The existing registry was preserved.')\n }\n const content = alreadyImported ? existing : applyReplacements(existing, [\n { start: source.statements.filter((statement) => ts.isExpressionStatement(statement) && ts.isStringLiteral(statement.expression)).at(-1)?.end ?? 0,\n end: source.statements.filter((statement) => ts.isExpressionStatement(statement) && ts.isStringLiteral(statement.expression)).at(-1)?.end ?? 0,\n value: `\\nimport { customComponents as ${name} } from ${JSON.stringify(registryPath)}\\n` },\n { start: initializer.getStart(source) + 1, end: initializer.getStart(source) + 1, value: `\\n ...${name},` },\n ])\n return [\n { path: `src/mdx/migrated-components-${fingerprint}.tsx`, content: incoming },\n { path: 'src/mdx/custom-components.tsx', content },\n ]\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","/** 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/**\n * Resolve language directories and legacy language-prefixed sections to the\n * same content identity used by default-language navigation. A hyphenated\n * section is only an alias when its unprefixed counterpart actually exists.\n */\nexport function mintlifyLocalizedReference(\n value: string,\n locale: string,\n defaultPageIds: ReadonlySet<string> = new Set(),\n): string {\n const reference = value.replace(/^\\/+/, '')\n const localePrefix = `${locale.toLowerCase()}/`\n if (reference.toLowerCase().startsWith(localePrefix)) return reference.slice(localePrefix.length)\n const sectionPrefix = `${locale.toLowerCase()}-`\n if (reference.toLowerCase().startsWith(sectionPrefix)) {\n const candidate = reference.slice(sectionPrefix.length)\n const candidateId = pageIdFromReference(candidate, true)\n if (candidateId && defaultPageIds.has(candidateId)) return candidate\n }\n return value\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 * 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: Array<[string, unknown]> = 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","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport remarkMdx from 'remark-mdx'\nimport remarkParse from 'remark-parse'\nimport { unified } from 'unified'\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\ninterface DescriptionNode {\n type: string\n value?: string\n alt?: string | null\n children?: Array<DescriptionNode>\n}\n\nconst descriptionParser = unified().use(remarkParse).use(remarkMdx)\n\nfunction firstParagraph(content: string): string {\n function plainText(node: DescriptionNode): string {\n if (node.type === 'text' || node.type === 'inlineCode') return node.value ?? ''\n if (node.type === 'image') return node.alt ?? ''\n if (node.type === 'break') return ' '\n return (node.children ?? []).map(plainText).join('')\n }\n function findParagraph(node: DescriptionNode): string {\n if (node.type === 'paragraph') {\n const value = plainText(node).replace(/\\s+/g, ' ').trim()\n if (value) return value.slice(0, 240)\n }\n for (const child of node.children ?? []) {\n const value = findParagraph(child)\n if (value) return value\n }\n return ''\n }\n // Component wrappers, imports, expressions, and code fences are syntax, not\n // description copy. Reading paragraph nodes also finds prose nested inside\n // accordions without leaking their closing tags into page metadata.\n try {\n return findParagraph(descriptionParser.parse(content) as DescriptionNode)\n } catch {\n // Unparseable source is already retained for the migration validator. An\n // empty generated description is safer than exposing source-code fragments.\n return ''\n }\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 { mintlifyLocalizedReference, 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.map((page) => page.id))\n const redirects = [...(config.redirects ?? [])]\n const redirectSources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n function hasAuthoredRedirect(source: string): boolean {\n if (redirectSources.has(source)) return true\n return (config.redirects ?? []).some((redirect) => {\n // A trailing catch-all also owns its empty suffix. Do not insert an\n // exact alias that competes with that authored directory behavior.\n const match = redirect.source.match(/^(.*)\\/:[A-Za-z_][A-Za-z0-9_]*\\*\\/?$/)\n return match ? source === match[1] || source.startsWith(`${match[1]}/`) : false\n })\n }\n for (const page of pages) {\n if (!/\\/(?:overview|introduction)$/.test(page.navigationId)) continue\n const parent = page.id.replace(/\\/(?:overview|introduction)$/, '')\n if (!parent || pageIds.has(parent)) continue\n const source = `/${parent}`\n if (hasAuthoredRedirect(source)) continue\n redirects.push({ source, destination: `/${page.id}`, permanent: false })\n redirectSources.add(source)\n }\n\n const navigationOrder: Array<string> = []\n function collectPages(nodes: Array<string | MigrationNavigationGroup>): void {\n for (const node of nodes) {\n if (typeof node === 'string') navigationOrder.push(node)\n else if (!node.hidden) collectPages(node.pages)\n }\n }\n for (const tab of config.tabs) {\n if (!tab.hidden) collectPages([...(tab.pages ?? []), ...(tab.groups ?? [])])\n }\n const pagesByNavigationId = new Map<string, Array<MigrationPage>>()\n for (const page of pages) {\n if (page.hidden) continue\n const variants = pagesByNavigationId.get(page.navigationId) ?? []\n variants.push(page)\n pagesByNavigationId.set(page.navigationId, variants)\n }\n const firstDescendantByDirectory = new Map<string, MigrationPage>()\n for (const navigationId of navigationOrder) {\n for (const page of pagesByNavigationId.get(navigationId) ?? []) {\n const segments = page.id.split('/')\n for (let length = 1; length < segments.length; length++) {\n const directory = segments.slice(0, length).join('/')\n if (!firstDescendantByDirectory.has(directory)) firstDescendantByDirectory.set(directory, page)\n }\n }\n }\n for (const redirect of config.redirects ?? []) {\n // An authored redirect is evidence that a directory itself was a public\n // route, even when its landing page has no overview/introduction filename.\n // Resolve only that destination, using source navigation order rather than\n // filesystem order. Required parameters and arbitrary patterns stay intact.\n const destination = redirect.destination.split(/[?#]/, 1)[0]\n .replace(/\\/:[A-Za-z_][A-Za-z0-9_]*\\*\\/?$/, '')\n if (!destination.startsWith('/') || destination.startsWith('//') || /[:*()[\\]{}]/.test(destination)) continue\n const directory = trimEdgeSlashes(destination)\n if (!directory || pageIds.has(directory)) continue\n const source = `/${directory}`\n if (hasAuthoredRedirect(source)) continue\n const landing = firstDescendantByDirectory.get(directory)\n if (!landing) continue\n // Match full stored ids, not locale-independent navigation ids: a French\n // directory must never be redirected to an English descendant.\n redirects.push({ source, destination: `/${landing.id}`, permanent: false })\n redirectSources.add(source)\n }\n return redirects.length > 0 ? { ...config, redirects } : config\n}\n\n/**\n * Keep authored page URLs while resolving bare documentation roots to the\n * first visible navigation page. An unrelated `home.mdx` is not evidence that\n * Mintlify served it at `/`; explicit source redirects always take priority.\n */\nexport function addMintlifyHomepageRedirects(\n config: MigrationDocsConfig,\n pages: Array<MigrationPage>,\n): MigrationDocsConfig {\n const defaultPages = new Set(pages\n .filter((page) => !page.locale || page.locale === config.i18n?.defaultLocale)\n .map((page) => page.navigationId))\n function firstPage(nodes: Array<string | MigrationNavigationGroup>): string | undefined {\n for (const node of nodes) {\n if (typeof node === 'string') {\n if (defaultPages.has(node)) return node\n } else if (!node.hidden) {\n const page = firstPage(node.pages)\n if (page) return page\n }\n }\n }\n const homepage = config.tabs.filter((tab) => !tab.hidden)\n .map((tab) => firstPage([...(tab.pages ?? []), ...(tab.groups ?? [])]))\n .find(Boolean)\n if (!homepage || homepage === 'introduction') return config\n const redirects = [...(config.redirects ?? [])]\n const sources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n const roots = ['', ...(config.i18n?.locales ?? [])\n .filter((locale) => locale.code !== config.i18n?.defaultLocale)\n .map((locale) => locale.code)]\n for (const locale of roots) {\n const source = locale ? `/${locale}` : '/'\n if (sources.has(source)) continue\n redirects.push({ source, destination: `${locale ? `/${locale}` : ''}/${homepage}`, permanent: false })\n }\n return { ...config, redirects }\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 defaultPageIds?: ReadonlySet<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 localizedValue = context.locale\n ? mintlifyLocalizedReference(value, context.locale, context.defaultPageIds)\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.flatMap((value): Array<Record<string, unknown>> => {\n const language = objectValue(value)\n if (!language) return []\n try {\n const code = Intl.getCanonicalLocales(String(language.language ?? language.locale ?? 'en'))[0]\n return [{ ...language, language: code }]\n } catch {\n warnings.push({ code: 'unsupported-config', message: 'A navigation language with an invalid locale code was skipped.' })\n return []\n }\n })\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)\n const locales = languages.map((entry) => {\n const code = String(entry.language)\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 const defaultPageIds = new Set<string>()\n // The default language supplies canonical page identities even when it\n // appears after translations in the authored language picker.\n for (const language of [defaultLanguage, ...languages.filter((entry) => entry !== defaultLanguage)]) {\n const locale = String(language.language)\n const context: ProjectionContext = {\n locale,\n defaultPageIds,\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) {\n tabs = languageTabs\n for (const reference of references) defaultPageIds.add(reference.navigationId)\n }\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 { mergeComponentRegistry } from './components.js'\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; existingComponentRegistry?: string } = {},\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 ...(bundle.componentFiles ?? []).flatMap((file) => file.path === 'src/mdx/custom-components.tsx'\n && options.existingComponentRegistry !== undefined && typeof file.content === 'string'\n ? mergeComponentRegistry(options.existingComponentRegistry, file.content)\n : [file]),\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":";AAMA,SAAS,aAAa;AACtB;AAAA,EACE,cAAAA;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AAAA,EACA;AAAA,OACK;AACP,SAAS,UAAU,WAAAC,UAAS,WAAAC,UAAS,YAAAC,WAAU,WAAW,mBAAmB;;;ACP7E,SAAS,kBAAkB;AAC3B,SAAS,YAAY,WAAW,oBAAoB;AACpD,SAAS,SAAS,SAAS,YAAAC,WAAU,WAAAC,gBAAe;AACpD,OAAO,eAAe;AACtB,OAAO,iBAAiB;AACxB,OAAO,QAAQ;AACf,SAAS,eAAe;;;ACAxB,SAAS,SAAS,iBAAiB;AAQ5B,SAAS,iBAAiB,KAAgC;AAC/D,QAAM,SAAS,IAAI,WAAW,CAAC,MAAM,QAAS,IAAI,MAAM,CAAC,IAAI;AAC7D,QAAM,UAAU,sBAAsB,KAAK,MAAM;AACjD,MAAI,CAAC,WAAW,QAAQ,CAAC,EAAE,WAAW,GAAG,EAAG,QAAO,EAAE,SAAS,QAAQ,MAAM,CAAC,EAAE;AAE/E,QAAM,WAAW,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY;AAC/C,QAAM,YAAY,OAAO,MAAM,QAAQ,CAAC,EAAE,MAAM;AAChD,QAAM,UAAU,kBAAkB,KAAK,SAAS;AAChD,QAAM,SAAS,UAAU,UAAU,MAAM,GAAG,QAAQ,KAAK,IAAI;AAC7D,MAAI,UAAU,UAAU,UAAU,MAAM,QAAQ,QAAQ,QAAQ,CAAC,EAAE,MAAM,IAAI;AAC7E,MAAI,QAAQ,WAAW,MAAM,EAAG,WAAU,QAAQ,MAAM,CAAC;AAAA,WAChD,QAAQ,WAAW,IAAI,EAAG,WAAU,QAAQ,MAAM,CAAC;AAE5D,MAAI,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,IAAI,QAAQ,KAAK,EAAE,SAAS,QAAQ,GAAG;AACnE,WAAO,EAAE,SAAS,MAAM,CAAC,EAAE;AAAA,EAC7B;AACA,QAAM,SAAS,UAAU,MAAM;AAC/B,SAAO;AAAA,IACL;AAAA,IACA,MAAM,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,IAC/D,SACA,CAAC;AAAA,EACP;AACF;;;ACzCA,SAAS,YAAY,UAAU,SAAS,WAAW;AAEnD,IAAM,eAAe;AAMd,SAAS,oBAAoB,OAAuB;AACzD,MAAI,MAAM,MAAM;AAChB,SAAO,MAAM,KAAK,MAAM,WAAW,MAAM,CAAC,MAAM,GAAI;AACpD,SAAO,MAAM,MAAM,GAAG,GAAG;AAC3B;AAGO,SAAS,gBAAgB,OAAuB;AACrD,MAAI,QAAQ;AACZ,MAAI,MAAM,MAAM;AAChB,SAAO,QAAQ,OAAO,MAAM,WAAW,KAAK,MAAM,GAAI;AACtD,SAAO,MAAM,SAAS,MAAM,WAAW,MAAM,CAAC,MAAM,GAAI;AACxD,SAAO,MAAM,MAAM,OAAO,GAAG;AAC/B;AAGO,SAAS,eAAe,OAAe,eAAe,OAAe;AAC1E,MAAI,UAAU;AACd,MAAI;AACF,cAAU,mBAAmB,KAAK;AAAA,EACpC,QAAQ;AAAA,EAGR;AACA,QAAM,aAAa,eAAe,UAAU,QAAQ,YAAY;AAChE,SAAO,WACJ,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,cAAc,GAAG,EACzB,QAAQ,YAAY,EAAE;AAC3B;AAMO,SAAS,oBAAoB,OAAe,eAAe,OAAsB;AACtF,QAAM,eAAe,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE;AACrF,MAAI,CAAC,gBAAgB,aAAa,SAAS,IAAI,EAAG,QAAO;AACzD,QAAM,cAAc,aAAa,MAAM,GAAG,EAAE,OAAO,OAAO;AAC1D,MAAI,YAAY,KAAK,CAAC,YAAY,YAAY,QAAQ,YAAY,GAAG,EAAG,QAAO;AAC/E,QAAM,OAAO,YAAY,GAAG,EAAE,GAAG,QAAQ,wBAAwB,EAAE,KAAK;AACxE,QAAM,eAAe,sBAAsB,KAAK,IAAI,IAAI,YAAY,MAAM,GAAG,EAAE,IAAI;AACnF,MAAI,CAAC,sBAAsB,KAAK,IAAI,GAAG;AACrC,iBAAa,aAAa,SAAS,CAAC,IAAI;AAAA,EAC1C;AACA,QAAM,WAAW,aAAa,IAAI,CAAC,YAAY,eAAe,SAAS,YAAY,CAAC,EAAE,OAAO,OAAO;AACpG,SAAO,SAAS,KAAK,GAAG,KAAK;AAC/B;AAOO,SAAS,2BACd,OACA,QACA,iBAAsC,oBAAI,IAAI,GACtC;AACR,QAAM,YAAY,MAAM,QAAQ,QAAQ,EAAE;AAC1C,QAAM,eAAe,GAAG,OAAO,YAAY,CAAC;AAC5C,MAAI,UAAU,YAAY,EAAE,WAAW,YAAY,EAAG,QAAO,UAAU,MAAM,aAAa,MAAM;AAChG,QAAM,gBAAgB,GAAG,OAAO,YAAY,CAAC;AAC7C,MAAI,UAAU,YAAY,EAAE,WAAW,aAAa,GAAG;AACrD,UAAM,YAAY,UAAU,MAAM,cAAc,MAAM;AACtD,UAAM,cAAc,oBAAoB,WAAW,IAAI;AACvD,QAAI,eAAe,eAAe,IAAI,WAAW,EAAG,QAAO;AAAA,EAC7D;AACA,SAAO;AACT;AAGO,SAAS,cAAc,MAAc,WAA2B;AACrE,MAAI,WAAW,SAAS,KAAK,UAAU,SAAS,IAAI,GAAG;AACrD,UAAM,IAAI,MAAM,0BAA0B,SAAS,EAAE;AAAA,EACvD;AACA,QAAM,SAAS,QAAQ,MAAM,SAAS;AACtC,QAAM,WAAW,SAAS,QAAQ,IAAI,GAAG,MAAM;AAC/C,MAAI,aAAa,QAAQ,SAAS,WAAW,KAAK,GAAG,EAAE,KAAK,WAAW,QAAQ,GAAG;AAChF,UAAM,IAAI,MAAM,oCAAoC,SAAS,EAAE;AAAA,EACjE;AACA,SAAO;AACT;AAGO,SAAS,mBAAmB,OAA8B;AAC/D,QAAM,aAAa,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE;AAC/D,MAAI,CAAC,cAAc,WAAW,SAAS,IAAI,EAAG,QAAO;AACrD,QAAM,WAAW,WAAW,MAAM,GAAG,EAAE,OAAO,OAAO;AACrD,MAAI,SAAS,KAAK,CAAC,YAAY,YAAY,OAAO,YAAY,IAAI,EAAG,QAAO;AAC5E,SAAO,SAAS,KAAK,GAAG;AAC1B;;;AFvEA,IAAM,SAAS,QAAQ,EAAE,IAAI,WAAW,EAAE,IAAI,SAAS;AACvD,IAAM,kBAAkB,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,QAAQ,MAAM,CAAC;AACtE,IAAM,kBAAkB,oBAAI,IAAI,CAAC,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,SAAS,QAAQ,SAAS,SAAS,QAAQ,CAAC;AAC/H,IAAM,iBAAiB,oBAAI,IAAI,CAAC,SAAS,qBAAqB,uBAAuB,CAAC;AACtF,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EAAY;AAAA,EAAa;AAAA,EAAmB;AAAA,EAAW;AAAA,EAAe;AAAA,EACtE;AAAA,EAAc;AAAA,EAAc;AAAA,EAAS;AAAA,EAAiB;AAAA,EACtD;AAAA,EAAuB;AAAA,EAAwB;AAAA,EAC/C;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAO;AAAA,EAAiB;AAAA,EAAc;AAC3E,CAAC;AACD,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,iBAAiB;AAEvB,SAAS,kBAAkB,QAAgB,cAA0C;AACnF,SAAO,aAAa,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;AAAA,IACpD,CAAC,MAAM,SAAS,KAAK,MAAM,GAAG,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,GAAG;AAAA,IAAG;AAAA,EACjF;AACF;AAEA,SAAS,KAAK,OAAuB;AACnC,SAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACrE;AAEA,SAAS,kBAAkB,MAAsB;AAG/C,SAAO,KAAK,QAAQ,WAAW,EAAE;AACnC;AAEA,SAAS,WAAW,QAAgB,UAAiC;AACnE,SAAO,GAAG;AAAA,IAAiB;AAAA,IAAU;AAAA,IAAQ,GAAG,aAAa;AAAA,IAAQ;AAAA,IACnE,aAAa,KAAK,QAAQ,IAAI,GAAG,WAAW,KAAK,GAAG,WAAW;AAAA,EAAG;AACtE;AAEA,SAAS,KAAK,MAAe,SAAwC;AACnE,UAAQ,IAAI;AACZ,aAAW,SAAS,KAAK,YAAY,CAAC,EAAG,MAAK,OAAO,OAAO;AAC9D;AAEA,SAAS,qBAAqB,QAA+B;AAC3D,QAAM,WAAW,oBAAI,IAAY;AACjC,QAAM,aAAa,oBAAI,IAAY;AACnC,WAAS,KAAK,MAA4B;AACxC,QAAI,GAAG,aAAa,IAAI,EAAG,UAAS,IAAI,KAAK,IAAI;AAAA,QAC5C,YAAW,WAAW,KAAK,SAAU,KAAI,GAAG,iBAAiB,OAAO,EAAG,MAAK,QAAQ,IAAI;AAAA,EAC/F;AACA,aAAW,aAAa,OAAO,YAAY;AACzC,QAAI,GAAG,oBAAoB,SAAS,KAAK,UAAU,cAAc;AAC/D,YAAM,SAAS,UAAU;AACzB,UAAI,OAAO,KAAM,UAAS,IAAI,OAAO,KAAK,IAAI;AAC9C,UAAI,OAAO,eAAe;AACxB,YAAI,GAAG,kBAAkB,OAAO,aAAa,EAAG,UAAS,IAAI,OAAO,cAAc,KAAK,IAAI;AAAA,YACtF,YAAW,WAAW,OAAO,cAAc,SAAU,UAAS,IAAI,QAAQ,KAAK,IAAI;AAAA,MAC1F;AAAA,IACF;AACA,QAAI,GAAG,oBAAoB,SAAS,EAAG,YAAW,eAAe,UAAU,gBAAgB,aAAc,MAAK,YAAY,IAAI;AAC9H,SAAK,GAAG,sBAAsB,SAAS,KAAK,GAAG,mBAAmB,SAAS,MAAM,UAAU,KAAM,UAAS,IAAI,UAAU,KAAK,IAAI;AAAA,EACnI;AACA,WAAS,MAAM,MAAqB;AAClC,QAAI,GAAG,aAAa,IAAI,KAAK,EAAE,GAAG,2BAA2B,KAAK,MAAM,KAAK,KAAK,OAAO,SAAS,SAC7F,EAAE,GAAG,qBAAqB,KAAK,MAAM,KAAK,KAAK,OAAO,SAAS,MAAO,YAAW,IAAI,KAAK,IAAI;AACnG,OAAG,aAAa,MAAM,KAAK;AAAA,EAC7B;AACA,QAAM,MAAM;AACZ,QAAM,QAAQ,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC,SAAS,WAAW,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK;AACpG,SAAO;AAAA,IACL,WAAW,IAAI,OAAO,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,oCAAoC;AAAA,IACxF,MAAM,SAAS,YAAY,MAAM,KAAK,IAAI,CAAC,qBAAqB;AAAA,EAClE,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC7B;AAEA,SAAS,QAAQ,WAAiD;AAChE,MAAI,CAAC,GAAG,gBAAgB,UAAU,eAAe,KAAK,CAAC,UAAU,aAAc,QAAO,CAAC;AACvF,QAAM,SAAS,UAAU;AACzB,MAAI,OAAO,WAAY,QAAO,CAAC;AAC/B,QAAM,SAAS,UAAU,gBAAgB;AACzC,QAAM,WAA2B,OAAO,OAAO,CAAC,EAAE,OAAO,OAAO,KAAK,MAAM,UAAU,WAAW,OAAO,CAAC,IAAI,CAAC;AAC7G,MAAI,OAAO,iBAAiB,GAAG,eAAe,OAAO,aAAa,GAAG;AACnE,eAAW,WAAW,OAAO,cAAc,UAAU;AACnD,UAAI,CAAC,QAAQ,WAAY,UAAS,KAAK,EAAE,OAAO,QAAQ,KAAK,MAAM,UAAU,QAAQ,cAAc,QAAQ,QAAQ,KAAK,MAAM,OAAO,CAAC;AAAA,IACxI;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,wBAAwB,UAAkB,UAAmC,gBAG3F;AACA,QAAM,OAAOC,SAAQ,QAAQ;AAI7B,QAAM,kBAAkB,oBAAoB,KAAK,cAAc,CAAC;AAChE,QAAM,SAAS,oBAAI,IAAmC;AACtD,QAAM,gBAAgB,oBAAI,IAAgD;AAC1E,MAAI,cAAc;AAElB,WAAS,KAAK,SAAiB,QAAsB;AACnD,aAAS,KAAK,EAAE,MAAM,sBAAsB,SAAS,QAAQC,UAAS,MAAM,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,CAAC;AAAA,EAC3G;AAEA,WAAS,YAAY,MAAsB;AACzC,UAAM,QAAQA,UAAS,MAAM,IAAI;AACjC,kBAAc,MAAM,KAAK;AACzB,QAAI,UAAU;AACd,QAAI,UAAU,OAAO,EAAE,eAAe,EAAG,OAAM,IAAI,MAAM,iCAAiC;AAC1F,eAAW,WAAW,MAAM,MAAM,OAAO,GAAG;AAC1C,gBAAU,cAAc,SAAS,OAAO;AACxC,UAAI,UAAU,OAAO,EAAE,eAAe,EAAG,OAAM,IAAI,MAAM,iCAAiC;AAAA,IAC5F;AACA,QAAI,CAAC,UAAU,IAAI,EAAE,OAAO,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACjF,WAAO;AAAA,EACT;AAEA,WAAS,kBAAkB,WAAmB,UAA0B;AACtE,QAAI,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,IAAI,KAAK,OAAO,KAAK,SAAS,EAAG,OAAM,IAAI,MAAM,uCAAuC;AAC3I,UAAM,YAAY,UAAU,WAAW,GAAG,IACtC,cAAc,MAAM,UAAU,MAAM,CAAC,CAAC,IACtC,cAAc,MAAMA,UAAS,MAAMD,SAAQ,QAAQ,QAAQ,GAAG,SAAS,CAAC,CAAC;AAC7E,UAAM,aAAa,CAAC,SAAS;AAC7B,QAAI,CAAC,QAAQ,SAAS,GAAG;AACvB,iBAAW,KAAK,GAAG,CAAC,QAAQ,QAAQ,OAAO,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,cAAc,YAAY,SAAS,CAAC;AAC5G,iBAAW,KAAK,GAAG,CAAC,aAAa,aAAa,YAAY,UAAU,EAAE,IAAI,CAAC,SAASA,SAAQ,WAAW,IAAI,CAAC,CAAC;AAAA,IAC/G,WAAW,QAAQ,SAAS,MAAM,OAAO;AACvC,iBAAW,KAAK,UAAU,MAAM,GAAG,EAAE,IAAI,OAAO,UAAU,MAAM,GAAG,EAAE,IAAI,MAAM;AAAA,IACjF;AACA,eAAW,QAAQ,YAAY;AAC7B,UAAI,WAAW,IAAI,KAAK,UAAU,IAAI,EAAE,OAAO,EAAG,QAAO,YAAY,IAAI;AAAA,IAC3E;AACA,UAAM,IAAI,MAAM,wBAAwB,SAAS,gBAAgB;AAAA,EACnE;AAEA,WAAS,WAAW,MAAsB;AACxC,WAAO,GAAG,eAAe,WAAWC,UAAS,MAAM,IAAI,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,EAC9E;AAEA,WAAS,UAAU,OAAuB;AAGxC,UAAM,SAAS,oBAAI,IAAmC;AACtD,QAAI,cAAc;AAClB,aAAS,MAAM,MAAoB;AACjC,YAAM,cAAc,WAAW,IAAI;AACnC,UAAI,OAAO,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,EAAG;AACxD,kBAAY,IAAI;AAChB,YAAM,OAAO,UAAU,IAAI,EAAE;AAC7B,UAAI,OAAO,kBAAkB,cAAc,cAAc,OAAO,uBAC3D,OAAO,OAAO,OAAO,QAAQ,oBAAqB,OAAM,IAAI,MAAM,qCAAqC;AAC5G,YAAM,YAAY,QAAQ,IAAI,EAAE,YAAY;AAC5C,UAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,CAAC,gBAAgB,IAAI,SAAS,EAAG,OAAM,IAAI,MAAM,oCAAoC,SAAS,EAAE;AACvI,qBAAe;AACf,YAAM,UAAU,aAAa,IAAI;AACjC,aAAO,IAAI,aAAa,EAAE,MAAM,aAAa,QAAQ,CAAC;AACtD,UAAI,CAAC,gBAAgB,IAAI,SAAS,GAAG;AACnC,YAAI,cAAc,UAAU,sBAAsB,KAAK,QAAQ,SAAS,MAAM,CAAC,EAAG,OAAM,IAAI,MAAM,oDAAoD;AACtJ;AAAA,MACF;AACA,YAAM,OAAO,QAAQ,SAAS,MAAM;AACpC,YAAM,SAAS,GAAG,gBAAgB,MAAM;AAAA,QAAE,UAAU;AAAA,QAAM,mBAAmB;AAAA,QAC3E,iBAAiB,EAAE,KAAK,GAAG,QAAQ,UAAU,QAAQ,GAAG,aAAa,QAAQ,QAAQ,GAAG,WAAW,OAAO;AAAA,MAAE,CAAC;AAC/G,UAAI,OAAO,aAAa,KAAK,CAAC,eAAe,WAAW,aAAa,GAAG,mBAAmB,KAAK,EAAG,OAAM,IAAI,MAAM,uEAAuE;AAC1L,YAAM,MAAM,WAAW,MAAM,IAAI;AACjC,UAAI,IAAI,WAAW,KAAK,CAAC,cAAc,GAAG,sBAAsB,SAAS,KACpE,GAAG,gBAAgB,UAAU,UAAU,KAAK,UAAU,WAAW,SAAS,YAAY,EAAG,OAAM,IAAI,MAAM,wDAAwD;AACtK,YAAM,QAA4B,CAAC;AACnC,eAAS,WAAW,SAAqC;AACvD,cAAM,YAAY,QAAQ;AAC1B,YAAI,eAAe,IAAI,SAAS,EAAG;AACnC,YAAI,CAAC,UAAU,WAAW,GAAG,KAAK,CAAC,UAAU,WAAW,GAAG,GAAG;AAC5D,gBAAM,IAAI,MAAM,oBAAoB,SAAS,0CAA0C;AAAA,QACzF;AACA,cAAM,SAAS,kBAAkB,WAAW,IAAI;AAChD,cAAM,MAAM;AACZ,cAAM,WAAWA,UAAS,QAAQ,WAAW,GAAG,WAAW,MAAM,CAAC,EAAE,QAAQ,OAAO,GAAG;AACtF,cAAM,KAAK,EAAE,OAAO,QAAQ,SAAS,GAAG,GAAG,KAAK,QAAQ,KAAK,OAAO,KAAK,UAAU,kBAAkB,SAAS,WAAW,GAAG,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC,EAAE,CAAC;AAAA,MAChK;AACA,eAAS,QAAQ,MAAqB;AACpC,aAAK,GAAG,oBAAoB,IAAI,KAAK,GAAG,oBAAoB,IAAI,MAAM,KAAK,mBAAmB,GAAG,gBAAgB,KAAK,eAAe,EAAG,YAAW,KAAK,eAAe;AACvK,YAAI,GAAG,iBAAiB,IAAI,MAAM,KAAK,WAAW,SAAS,GAAG,WAAW,iBACnE,GAAG,aAAa,KAAK,UAAU,KAAK,KAAK,WAAW,SAAS,YAAa;AAC9E,gBAAM,WAAW,KAAK,UAAU,CAAC;AACjC,cAAI,KAAK,UAAU,WAAW,KAAK,CAAC,YAAY,CAAC,GAAG,oBAAoB,QAAQ,EAAG,OAAM,IAAI,MAAM,qDAAqD;AACxJ,qBAAW,QAAQ;AAAA,QACrB;AACA,WAAG,aAAa,MAAM,OAAO;AAAA,MAC/B;AACA,cAAQ,GAAG;AAGX,aAAO,IAAI,aAAa,EAAE,MAAM,aAAa,SAAS;AAAA;AAAA,EAAoB,qBAAqB,GAAG,CAAC;AAAA,EAAK,kBAAkB,MAAM,KAAK,CAAC,GAAG,CAAC;AAAA,IAC5I;AACA,UAAM,KAAK;AACX,eAAW,CAAC,MAAM,IAAI,KAAK,OAAQ,QAAO,IAAI,MAAM,IAAI;AACxD,mBAAe;AACf,WAAO,WAAW,KAAK;AAAA,EACzB;AAEA,WAAS,SAAS,MAAc,UAA0B;AACxD,UAAM,OAAO,WAAW,KAAK,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;AACnD,kBAAc,IAAI,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,WAAO;AAAA,EACT;AAEA,WAAS,UAAU,KAAa,aAA6B;AAC3D,UAAM,UAAU,iBAAiB,GAAG,EAAE;AACtC,UAAM,cAAc,IAAI,MAAM,GAAG,IAAI,SAAS,QAAQ,MAAM;AAC5D,QAAI;AACJ,QAAI;AACF,aAAO,OAAO,MAAM,OAAO;AAAA,IAC7B,QAAQ;AACN,WAAK,sGAAsG,WAAW;AACtH,aAAO;AAAA,IACT;AACA,UAAM,UAAU,oBAAI,IAAoB;AACxC,UAAM,QAA4B,CAAC;AACnC,UAAM,eAAsE,CAAC;AAC7E,UAAM,gBAA+B,CAAC;AACtC,UAAM,oBAAwC,CAAC;AAC/C,QAAI,wBAAwB;AAC5B,aAAS,uBAAuB,OAAoB,UAIhD,CAAC,GAAY;AACf,UAAI,QAAQ;AACZ,eAASC,SAAQ,MAAqB;AACpC,YAAI,GAAG,aAAa,IAAI,KAAK,MAAM,IAAI,KAAK,IAAI,EAAG,SAAQ;AAC3D,WAAG,aAAa,MAAMA,QAAO;AAAA,MAC/B;AACA,WAAK,MAAM,CAAC,SAAS;AACnB,YAAI,QAAQ,eAAe,KAAK,CAAC,aAAa,KAAK,UAAU,MAAM,WAAW,UACzE,KAAK,SAAS,IAAI,WAAW,UAC7B,KAAK,SAAS,MAAM,UAAU,SAAS,SAAU,MAAM,UACvD,KAAK,SAAS,IAAI,UAAU,SAAS,SAAU,IAAI,MAAO,EAAG;AAClE,YAAI,KAAK,QAAQ,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,SAAS,KAAK,KAAM,WAAW,GAAG,IAAI,GAAG,KACrE,QAAQ,qBAAqB,KAAK,SAAS,IAAK,EAAG,SAAQ;AACjE,YAAI,QAAQ,wBAAwB,SAAS,KAAK,SAAS,cAAc,KAAK,OAAO;AACnF,qBAAW,aAAa,WAAW,KAAK,OAAO,gBAAgB,EAAE,YAAY;AAC3E,gBAAI,CAAC,GAAG,oBAAoB,SAAS,EAAG,CAAAA,SAAQ,SAAS;AAAA,UAC3D;AAAA,QACF;AACA,cAAM,cAAc;AAAA,UAClB,GAAI,CAAC,qBAAqB,mBAAmB,EAAE,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE,IAAI,CAAC;AAAA,UAC3F,IAAI,KAAK,cAAc,CAAC,GAAG,QAAQ,CAAC,cAAc;AAChD,gBAAI,UAAU,SAAS,+BAA+B,OAAO,UAAU,UAAU,SAAU,QAAO,CAAC,UAAU,KAAK;AAClH,mBAAO,UAAU,SAAS,OAAO,UAAU,UAAU,WAAW,CAAC,UAAU,MAAM,SAAS,EAAE,IAAI,CAAC;AAAA,UACnG,CAAC;AAAA,QACH;AACA,mBAAW,cAAc,YAAa,CAAAA,SAAQ,WAAW,YAAY,gBAAgB,CAAC;AAAA,MACxF,CAAC;AACD,aAAO;AAAA,IACT;AACA,eAAW,QAAQ,KAAK,YAAY,CAAC,GAAG;AACtC,UAAI,KAAK,SAAS,cAAc,KAAK,UAAU,UAAa,KAAK,UAAU,MAAM,WAAW,OAAW;AACvG,YAAM,MAAM,WAAW,KAAK,OAAO,YAAY;AAC/C,iBAAW,aAAa,IAAI,YAAY;AACtC,YAAI,CAAC,GAAG,oBAAoB,SAAS,GAAG;AAEtC,cAASA,WAAT,SAAiBC,OAAqB;AACpC,gBAAI,GAAG,iBAAiBA,KAAI,MAAMA,MAAK,WAAW,SAAS,GAAG,WAAW,iBACnE,GAAG,aAAaA,MAAK,UAAU,KAAKA,MAAK,WAAW,SAAS,WAAa,yBAAwB;AACxG,eAAG,aAAaA,OAAMD,QAAO;AAAA,UAC/B;AAJS,wBAAAA;AADT,cAAI,wBAAwB,GAAG,oBAAoB,SAAS,KAAK,CAAC,CAAC,UAAU;AAM7E,UAAAA,SAAQ,SAAS;AACjB,cAAI,uBAAuB;AACzB,oCAAwB;AACxB,iBAAK,mFAAmF,WAAW;AAAA,UACrG;AACA,uBAAa,KAAK;AAAA,YAChB,OAAO,KAAK,SAAS,MAAM,SAAS,UAAU,SAAS,GAAG;AAAA,YAC1D,KAAK,KAAK,SAAS,MAAM,SAAS,UAAU;AAAA,YAC5C,QAAQ,UAAU,QAAQ,GAAG;AAAA,UAC/B,CAAC;AACD;AAAA,QACF;AACA,cAAM,WAAW,QAAQ,SAAS;AAClC,cAAM,YAAY,GAAG,gBAAgB,UAAU,eAAe,IAAI,UAAU,gBAAgB,OAAO;AACnG,YAAI,CAAC,UAAU,WAAW,GAAG,KAAK,CAAC,UAAU,WAAW,GAAG,GAAG;AAC5D,cAAI,eAAe,IAAI,SAAS,GAAG;AACjC,0BAAc,KAAK,UAAU,QAAQ,GAAG,CAAC;AACzC,8BAAkB,KAAK,EAAE,OAAO,KAAK,SAAS,MAAM,SAAS,UAAU,SAAS,GAAG,GAAG,KAAK,KAAK,SAAS,MAAM,SAAS,UAAU,KAAK,OAAO,GAAG,CAAC;AAAA,UACpJ,OAAO;AACL,oCAAwB;AACxB,iBAAK,cAAc,SAAS,oFAAoF,WAAW;AAAA,UAC7H;AACA;AAAA,QACF;AACA,YAAI,UAAU,KAAK,SAAS,EAAG;AAC/B,YAAI,CAAC,SAAS,UAAW,UAAU,cAAc,iBAAiB,GAAG,kBAAkB,UAAU,aAAa,aAAa,GAAI;AAC7H,eAAK,+FAA+F,WAAW;AAC/G,kCAAwB;AACxB;AAAA,QACF;AACA,YAAI,SAAS,KAAK,CAAC,YAAY,CAAC,SAAS,KAAK,QAAQ,KAAK,CAAC,GAAG;AAC7D,eAAK,mGAAmG,WAAW;AACnH,kCAAwB;AACxB;AAAA,QACF;AACA,YAAI,uBAAuB,IAAI,IAAI,SAAS,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC,CAAC,GAAG;AAC7E,eAAK,oIAAoI,WAAW;AACpJ,kCAAwB;AACxB;AAAA,QACF;AACA,YAAI;AACF,gBAAM,OAAO,UAAU,kBAAkB,WAAW,WAAW,CAAC;AAChE,qBAAW,WAAW,UAAU;AAC9B,kBAAM,OAAO,SAAS,MAAM,QAAQ,QAAQ;AAC5C,oBAAQ,IAAI,QAAQ,OAAO,IAAI;AAC/B,0BAAc,KAAK,YAAY,QAAQ,QAAQ,OAAO,QAAQ,KAAK,WAAW,KAAK,UAAU,kBAAkB,KAAKD,UAAS,iBAAiB,IAAI,EAAE,QAAQ,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG;AAAA,UAChL;AACA,gBAAM,KAAK,EAAE,OAAO,KAAK,SAAS,MAAM,SAAS,UAAU,SAAS,GAAG,GAAG,KAAK,KAAK,SAAS,MAAM,SAAS,UAAU,KAAK,OAAO,GAAG,CAAC;AAAA,QACxI,SAAS,OAAO;AACd,kCAAwB;AACxB,eAAK,wDAAwD,iBAAiB,QAAQ,MAAM,UAAU,wBAAwB,KAAK,WAAW;AAAA,QAChJ;AAAA,MACF;AAAA,IACF;AAKA,UAAM,YAAiE,CAAC;AACxE,eAAW,aAAa,KAAK,YAAY,CAAC,GAAG;AAC3C,YAAM,OAAO,UAAU,SAAS,eAAe,UAAU,UAAU,WAAW,IAAI,UAAU,SAAS,CAAC,IAAI;AAC1G,UAAI,CAAC,CAAC,qBAAqB,mBAAmB,EAAE,SAAS,KAAK,IAAI,KAAK,KAAK,UAAU,MAAM,WAAW,UAAa,KAAK,SAAS,IAAI,WAAW,OAAW;AAC5J,UAAI,cAAc;AAClB,UAAI,YAAY;AAChB,WAAK,MAAM,CAAC,UAAU;AACpB,YAAI,MAAM,YAAY,KAAK,CAAC,cAAc,WAAW,KAAK,UAAU,QAAQ,EAAE,CAAC,EAAG,eAAc;AAChG,YAAI,MAAM,QAAQ,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,IAAI,EAAG,aAAY;AACrF,YAAI,CAAC,CAAC,qBAAqB,qBAAqB,qBAAqB,qBAAqB,QAAQ,WAAW,EAAE,SAAS,MAAM,IAAI,EAAG,aAAY;AAAA,MACnJ,CAAC;AACD,UAAI,CAAC,YAAa;AAClB,UAAI,CAAC,aAAa,uBAAuB;AACvC,aAAK,oHAAoH,WAAW;AACpI;AAAA,MACF;AACA,YAAM,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,IAAI,MAAM;AAG9E,YAAM,SAAS,GAAG,gBAAgB,8CAA8C,GAAG,QAAQ;AAAA,QACzF,UAAU;AAAA,QAAc,iBAAiB,EAAE,KAAK,GAAG,QAAQ,SAAS;AAAA,QAAG,mBAAmB;AAAA,MAC5F,CAAC;AACD,UAAI,OAAO,aAAa,KAAK,CAAC,eAAe,WAAW,aAAa,GAAG,mBAAmB,KAAK,GAAG;AACjG,aAAK,+EAA+E,WAAW;AAC/F;AAAA,MACF;AACA,gBAAU,KAAK,EAAE,MAAM,MAAM,SAAS,UAAU,MAAM,IAAI,IAAI,CAAC;AAAA,IACjE;AACA,QAAI,UAAU,UAAU,aAAa,QAAQ;AAE3C,UAASG,QAAT,SAAc,MAA4B;AACxC,YAAI,GAAG,aAAa,IAAI,EAAG,UAAS,IAAI,KAAK,IAAI;AAAA,YAC5C,YAAW,WAAW,KAAK,SAAU,KAAI,GAAG,iBAAiB,OAAO,EAAG,CAAAA,MAAK,QAAQ,IAAI;AAAA,MAC/F;AAHS,iBAAAA;AADT,YAAM,WAAW,oBAAI,IAAY;AAKjC,iBAAW,eAAe,cAAc;AACtC,mBAAW,aAAa,WAAW,YAAY,QAAQ,iBAAiB,EAAE,YAAY;AACpF,eAAK,GAAG,sBAAsB,SAAS,KAAK,GAAG,mBAAmB,SAAS,MAAM,UAAU,KAAM,UAAS,IAAI,UAAU,KAAK,IAAI;AACjI,cAAI,GAAG,oBAAoB,SAAS,EAAG,YAAW,YAAY,UAAU,gBAAgB,aAAc,CAAAA,MAAK,SAAS,IAAI;AAAA,QAC1H;AAAA,MACF;AACA,YAAM,wBAAwB,uBAAuB,UAAU;AAAA,QAC7D,eAAe,UAAU,IAAI,CAAC,UAAU,MAAM,IAAI;AAAA,QAClD,qBAAqB;AAAA,QACrB,mBAAmB;AAAA,MACrB,CAAC;AACD,UAAI,uBAAuB;AACzB,aAAK,gHAAgH,WAAW;AAChI,kBAAU,SAAS;AAAA,MACrB;AAAA,IACF;AACA,QAAI,UAAU,WAAW,OAAO,QAAQ,uBACnC,OAAO,WAAW,OAAO,IAAI,kBAC7B,cAAc,OAAO,WAAW,OAAO,IAAI,sBAAsB;AACpE,WAAK,kFAAkF,WAAW;AAClG,gBAAU,SAAS;AAAA,IACrB;AACA,QAAI,UAAU,QAAQ;AACpB,YAAM,OAAO,GAAG,eAAe,WAAW,KAAKH,UAAS,MAAM,WAAW,CAAC,CAAC;AAC3E,UAAI,oBAAoB,CAAC,GAAG,IAAI,IAAI,aAAa,IAAI,CAAC,UAAU,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,MAAM;AAG3F,0BAAoB,kBAAkB;AAAA,QAAQ;AAAA,QAC5C;AAAA,MAAkG;AACpG,YAAM,eAAe;AAAA,QACnB;AAAA,QAAiB;AAAA,QAAI,GAAG;AAAA,QAAe;AAAA,QAAI;AAAA,QAAmB;AAAA,QAC9D,GAAG,UAAU,IAAI,CAAC,EAAE,MAAM,IAAI,MAAM,mBAAmB,IAAI;AAAA,YAAmB,GAAG;AAAA,EAAO;AAAA,QAAG;AAAA,MAC7F,EAAE,KAAK,IAAI;AACX,aAAO,IAAI,MAAM,EAAE,MAAM,SAAS;AAAA,EAAkB,qBAAqB,WAAW,cAAc,YAAY,CAAC,CAAC;AAAA,EAAK,YAAY,GAAG,CAAC;AACrI,qBAAe,OAAO,WAAW,YAAY;AAC7C,iBAAW,EAAE,MAAM,KAAK,KAAK,WAAW;AACtC,cAAM,KAAK,EAAE,OAAO,KAAK,SAAU,MAAM,QAAS,KAAK,KAAK,SAAU,IAAI,QAAS,OAAO,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC;AAAA,MAC3H;AACA,YAAM,KAAK,GAAG,aAAa,IAAI,CAAC,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,EAAE,GAAG,GAAG,iBAAiB;AAAA,IACvG;AACA,SAAK,MAAM,CAAC,SAAS;AACnB,YAAM,cAAc,KAAK,OAAO,QAAQ,IAAI,KAAK,IAAI,IAAI;AACzD,UAAI,CAAC,eAAe,KAAK,UAAU,MAAM,WAAW,UAAa,KAAK,SAAS,IAAI,WAAW,OAAW;AACzG,YAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,YAAM,MAAM,KAAK,SAAS,IAAI;AAC9B,UAAI,UAAU,KAAK,CAAC,SAAS,SAAS,KAAK,KAAK,SAAU,MAAM,UAAW,OAAO,KAAK,KAAK,SAAU,IAAI,MAAO,EAAG;AACpH,YAAM,OAAO,QAAQ,MAAM,OAAO,GAAG;AACrC,YAAM,UAAU,KAAK,QAAQ,IAAI,KAAK,IAAI,EAAE;AAC5C,UAAI,WAAW,EAAG,OAAM,KAAK,EAAE,OAAO,QAAQ,UAAU,GAAG,KAAK,QAAQ,UAAU,IAAI,KAAK,KAAM,QAAQ,OAAO,YAAY,CAAC;AAC7H,YAAM,UAAU,KAAK,YAAY,KAAK,KAAK,IAAI,EAAE;AACjD,UAAI,WAAW,EAAG,OAAM,KAAK,EAAE,OAAO,QAAQ,UAAU,GAAG,KAAK,QAAQ,UAAU,IAAI,KAAK,KAAM,QAAQ,OAAO,YAAY,CAAC;AAAA,IAC/H,CAAC;AACD,WAAO,cAAc,kBAAkB,SAAS,KAAK;AAAA,EACvD;AAEA,WAAS,QAAsC;AAC7C,QAAI,CAAC,cAAc,KAAM,QAAO,CAAC;AACjC,UAAM,UAAU,CAAC,GAAG,cAAc,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAClF,WAAO,CAAC,GAAG,OAAO,OAAO,GAAG;AAAA,MAC1B,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QAAkD,GAAG,QAAQ,IAAI,CAAC,CAAC,MAAM,OAAO,MAAM;AACpF,gBAAM,OAAO,kBAAkB,KAAKA,UAAS,WAAW,QAAQ,IAAI,EAAE,QAAQ,OAAO,GAAG,CAAC,EAAE;AAC3F,iBAAO,YAAY,QAAQ,QAAQ,OAAO,IAAI,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,QAC/E,CAAC;AAAA,QAAG;AAAA,QAAI;AAAA,QACR,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,IAAI,GAAG;AAAA,QAAG;AAAA,QAAK;AAAA,MACjD,EAAE,KAAK,IAAI;AAAA,IACb,CAAC;AAAA,EACH;AACA,SAAO,EAAE,WAAW,MAAM;AAC5B;AAGO,SAAS,uBAAuB,UAAkB,UAAgD;AACvG,QAAM,cAAc,KAAK,QAAQ;AACjC,QAAM,OAAO,mBAAmB,WAAW;AAC3C,QAAM,eAAe,yBAAyB,WAAW;AACzD,QAAM,SAAS,WAAW,UAAU,uBAAuB;AAC3D,QAAM,kBAAkB,OAAO,WAAW,KAAK,CAAC,cAAc,GAAG,oBAAoB,SAAS,KACzF,GAAG,gBAAgB,UAAU,eAAe,KAAK,UAAU,gBAAgB,SAAS,YAAY;AACrG,MAAI;AACJ,aAAW,aAAa,OAAO,YAAY;AACzC,QAAI,CAAC,GAAG,oBAAoB,SAAS,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,aAAa,SAAS,SAAS,GAAG,WAAW,aAAa,EAAG;AACnI,eAAW,eAAe,UAAU,gBAAgB,cAAc;AAChE,UAAI,GAAG,aAAa,YAAY,IAAI,KAAK,YAAY,KAAK,SAAS,mBAAoB,eAAc,YAAY;AAAA,IACnH;AAAA,EACF;AACA,SAAO,gBAAgB,GAAG,eAAe,WAAW,KAAK,GAAG,sBAAsB,WAAW,KAAK,GAAG,0BAA0B,WAAW,GAAI,eAAc,YAAY;AACxK,MAAI,CAAC,eAAe,CAAC,GAAG,0BAA0B,WAAW,GAAG;AAC9D,UAAM,IAAI,MAAM,mKAAmK;AAAA,EACrL;AACA,QAAM,UAAU,kBAAkB,WAAW,kBAAkB,UAAU;AAAA,IACvE;AAAA,MAAE,OAAO,OAAO,WAAW,OAAO,CAAC,cAAc,GAAG,sBAAsB,SAAS,KAAK,GAAG,gBAAgB,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO;AAAA,MAC/I,KAAK,OAAO,WAAW,OAAO,CAAC,cAAc,GAAG,sBAAsB,SAAS,KAAK,GAAG,gBAAgB,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO;AAAA,MAC7I,OAAO;AAAA,+BAAkC,IAAI,WAAW,KAAK,UAAU,YAAY,CAAC;AAAA;AAAA,IAAK;AAAA,IAC3F,EAAE,OAAO,YAAY,SAAS,MAAM,IAAI,GAAG,KAAK,YAAY,SAAS,MAAM,IAAI,GAAG,OAAO;AAAA,OAAU,IAAI,IAAI;AAAA,EAC7G,CAAC;AACD,SAAO;AAAA,IACL,EAAE,MAAM,+BAA+B,WAAW,QAAQ,SAAS,SAAS;AAAA,IAC5E,EAAE,MAAM,iCAAiC,QAAQ;AAAA,EACnD;AACF;;;AGpeA,SAAS,cAAAI,aAAY,aAAAC,YAAW,gBAAAC,qBAAoB;AACpD,SAAS,WAAAC,UAAS,aAAa;AAE/B,OAAO,WAAW;AAClB,SAAS,SAASC,kBAAiB;AAWnC,IAAM,mBAAmB;AACzB,IAAM,qBAAqB,CAAC,mBAAmB,kBAAkB,iBAAiB;AAClF,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAyCA,SAAS,YAAY,OAAgD;AACnE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACtE,QACA;AACN;AAEA,SAAS,kBAAkB,OAAuB;AAChD,SAAO,MAAM,QAAQ,aAAa,EAAE;AACtC;AAEA,SAAS,eAAe,OAAuB;AAC7C,SAAO,MACJ,MAAM,QAAQ,CAAC,EAAE,CAAC,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,QAAQ,EAAE,EAClB,QAAQ,gBAAgB,EAAE,EAC1B,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,iBAAiB,EACrB,KAAK,GAAG;AACb;AAEA,SAAS,yBAAyB,OAAuB;AACvD,MAAI,UAAU;AACd,MAAI;AACF,cAAU,mBAAmB,KAAK;AAAA,EACpC,QAAQ;AAAA,EAER;AACA,SAAO,QACJ,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,qBAAqB,GAAG,EAChC,QAAQ,YAAY,EAAE;AAC3B;AAEA,SAAS,kBAAkB,OAA8B;AACvD,QAAM,WAAW,eAAe,KAAK,EAClC,MAAM,GAAG,EACT,IAAI,wBAAwB,EAC5B,OAAO,OAAO;AACjB,SAAO,SAAS,KAAK,GAAG,KAAK;AAC/B;AAEA,SAAS,yBAAyB,OAA8B;AAC9D,QAAM,WAAW,eAAe,KAAK,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AAChE,MAAI,sBAAsB,KAAK,SAAS,GAAG,EAAE,KAAK,EAAE,EAAG,UAAS,IAAI;AACpE,QAAM,aAAa,SAAS,IAAI,wBAAwB,EAAE,OAAO,OAAO;AACxE,SAAO,WAAW,KAAK,GAAG,KAAK;AACjC;AAEA,SAAS,kBAAkB,SAAyB;AAClD,SAAO,6BAA6B,KAAK,OAAO,IAAI,GAAG,OAAO,WAAW;AAC3E;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,kBAAkB,KAAK,EAC3B,QAAQ,aAAa,EAAE,EACvB,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,CAAC,OAAO,OAAO,OAAO,IAAI,EAAE,SAAS,KAAK,YAAY,CAAC,IAClE,KAAK,YAAY,IACjB,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC/C,KAAK,GAAG;AACb;AAEA,SAAS,cAAc,MAAc,UAAkB,iBAAyC;AAC9F,MAAI,SAAS,IAAK,QAAO;AACzB,MAAI,KAAK,WAAW,GAAG,EAAG,QAAO,kBAAkB,IAAI;AACvD,QAAM,oBAAoB,oBAAoB,aAAa,iBAAiB,KAAK,MAAM,QAAQ,QAAQ;AACvG,QAAM,WAAW,MAAM,UAAU,MAAM,KAAK,mBAAmB,IAAI,CAAC;AACpE,MAAI,aAAa,QAAQ,SAAS,WAAW,KAAK,EAAG,QAAO;AAC5D,SAAO,kBAAkB,QAAQ;AACnC;AAGO,SAAS,8BACd,YACA,aACA,UACyF;AACzF,QAAM,cAAc,eAAe,UAAU;AAC7C,QAAM,kBAAkB,MAAM,QAAQ,WAAW;AACjD,QAAM,eAAe,OAAO,YAAY,OAAO,YAAY,YAAY,GAAG,KAAK,IAC3E,kBAAkB,YAAY,GAAG,KAAK,CAAC,IACvC;AACJ,QAAM,QAAQ,eACV,eAAe,oBAAoB,MAAM,eAAe,MAAM,KAAK,iBAAiB,YAAY,CAAC,IACjG;AAGJ,QAAM,sBAAsB,yBAAyB,KAAK,KAAK,SAAS;AACxE,QAAM,iBAAiB,OAAO,YAAY,SAAS,WAAW,YAAY,KAAK,KAAK,IAAI;AACxF,QAAM,eAAe,iBACjB;AAAA,IACE;AAAA,IACA;AAAA,IACA,oBAAoB,MAAM,KAAK;AAAA,EACjC,KAAK,sBACL;AACJ,QAAM,WAAW,OAAO,YAAY,qBAAqB,YACpD,OAAO,SAAS,YAAY,gBAAgB,IAC7C,YAAY,mBACZ;AACJ,SAAO;AAAA,IACL,UAAU,EAAE,IAAI,kBAAkB,YAAY,GAAG,aAAa;AAAA,IAC9D,YAAY;AAAA,MACV,YAAY,WAAW,QAAQ,OAAO,GAAG;AAAA,MACzC;AAAA,MACA;AAAA,MACA,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,iBAAiB,SAAS;AAAA,IAChE;AAAA,EACF;AACF;AAEA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,gBAAgB,EAAE,EAAE,QAAQ,OAAO,EAAE;AACpG;AAOO,SAAS,uBACd,MACA,SACA,aACQ;AACR,QAAM,SAAS,oBAAI,IAAoB;AACvC,aAAW,cAAc,aAAa;AACpC,UAAM,YAAY,mBAAmB,WAAW,UAAU;AAC1D,WAAO,IAAI,WAAW,WAAW,YAAY;AAC7C,WAAO,IAAI,mBAAmB,WAAW,KAAK,GAAG,WAAW,YAAY;AACxE,WAAO,IAAI,mBAAmB,WAAW,YAAY,GAAG,WAAW,YAAY;AAC/E,UAAM,cAAc,oBAAoB,SAAS;AACjD,QAAI,YAAa,QAAO,IAAI,aAAa,WAAW,YAAY;AAAA,EAClE;AACA,QAAM,mBAAmB,MAAM,QAAQ,mBAAmB,QAAQ,UAAU,CAAC;AAE7E,WAAS,cAAc,QAAwB;AAC7C,QAAI,CAAC,UAAU,OAAO,WAAW,GAAG,KAAK,gCAAgC,KAAK,MAAM,EAAG,QAAO;AAC9F,UAAM,cAAc,OAAO,OAAO,MAAM;AACxC,UAAM,OAAO,eAAe,IAAI,OAAO,MAAM,GAAG,WAAW,IAAI;AAC/D,UAAM,SAAS,eAAe,IAAI,OAAO,MAAM,WAAW,IAAI;AAC9D,UAAM,aAAa,KAAK,WAAW,GAAG,IAClC,CAAC,mBAAmB,IAAI,GAAG,mBAAmB,IAAI,EAAE,QAAQ,WAAW,EAAE,CAAC,IAC1E;AAAA,MACE,mBAAmB,MAAM,UAAU,MAAM,KAAK,kBAAkB,IAAI,CAAC,CAAC;AAAA,MACtE,mBAAmB,IAAI;AAAA,IACzB;AACJ,UAAM,QAAQ,WAAW,IAAI,CAAC,cAAc,OAAO,IAAI,SAAS,CAAC,EAAE,KAAK,OAAO;AAC/E,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,GAAG,UAAU,iBAAiB,MAAM,IAAI,KAAK,EAAE,GAAG,MAAM;AAAA,EACjE;AAEA,MAAI,YAA2B;AAC/B,SAAO,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS;AACpC,UAAM,QAAQ,KAAK,MAAM,mBAAmB;AAC5C,QAAI,OAAO;AACT,UAAI,CAAC,UAAW,aAAY,MAAM,CAAC,EAAE,CAAC;AAAA,eAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,UAAW,aAAY;AAChD,aAAO;AAAA,IACT;AACA,QAAI,UAAW,QAAO;AACtB,WAAO,KACJ,QAAQ,+BAA+B,CAAC,QAAQ,QAAgB,WAAmB,GAAG,MAAM,GAAG,cAAc,MAAM,CAAC,EAAE,EACtH,QAAQ,yBAAyB,CAAC,QAAQ,QAAgB,QAAgB,WAAmB,GAAG,MAAM,GAAG,cAAc,MAAM,CAAC,GAAG,MAAM,EAAE;AAAA,EAC9I,CAAC,EAAE,KAAK,IAAI;AACd;AAEA,SAAS,gBAAgB,MAAsB;AAC7C,MAAIC,WAAU,IAAI,EAAE,OAAO,kBAAkB;AAC3C,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,SAAOC,cAAa,MAAM,MAAM;AAClC;AAEA,SAAS,sBAAsB,QAAgB,OAA8B;AAC3E,MAAI,QAAQ;AACZ,MAAI,QAAuB;AAC3B,MAAI,YAAY;AAChB,MAAI,cAAc;AAClB,MAAI,eAAe;AACnB,MAAI,cAAc;AAElB,WAAS,QAAQ,OAAO,QAAQ,OAAO,QAAQ,SAAS;AACtD,UAAM,OAAO,OAAO,KAAK;AACzB,UAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,QAAI,aAAa;AACf,UAAI,SAAS,KAAM,eAAc;AACjC;AAAA,IACF;AACA,QAAI,cAAc;AAChB,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,uBAAe;AACf;AAAA,MACF;AACA;AAAA,IACF;AACA,QAAI,OAAO;AACT,UAAI,UAAW,aAAY;AAAA,eAClB,SAAS,KAAM,aAAY;AAAA,eAC3B,SAAS,MAAO,SAAQ;AACjC;AAAA,IACF;AACA,QAAI,SAAS,OAAO,SAAS,KAAK;AAChC,oBAAc;AACd;AACA;AAAA,IACF;AACA,QAAI,SAAS,OAAO,SAAS,KAAK;AAChC,qBAAe;AACf;AACA;AAAA,IACF;AACA,QAAI,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AAChD,cAAQ;AACR;AAAA,IACF;AACA,QAAI,SAAS,KAAK;AAChB,UAAI,cAAc,EAAG,eAAc;AACnC;AAAA,IACF,WAAW,SAAS,OAAO,eAAe,GAAG;AAC3C;AACA,UAAI,UAAU,EAAG,QAAO,OAAO,MAAM,aAAa,QAAQ,CAAC;AAAA,IAC7D,WAAW,cAAc,KAAK,CAAC,KAAK,KAAK,IAAI,GAAG;AAC9C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,QAAyC;AACzE,QAAM,WAAW,oBAAI,IAAqC;AAC1D,QAAM,mBAAmB,yBAAyB,MAAM;AACxD,QAAM,gBAA+B,CAAC;AACtC,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,aAAa,mBAAmB,QAAQ,CAAC,YAAY,CAAC,GAAG,iBAAiB,SAAS,OAAO,CAAC,CAAC,EAC/F,KAAK,CAAC,MAAM,WAAW,KAAK,SAAS,MAAM,MAAM,SAAS,EAAE;AAE/D,aAAW,aAAa,YAAY;AAClC,UAAM,UAAU,sBAAsB,mBAAmB,UAAU,SAAS,KAAK,UAAU,CAAC,EAAE,MAAM;AACpG,QAAI,CAAC,QAAS;AACd,QAAI;AACF,YAAM,cAAc,CAAC,GAAG,QAAQ,EAAE;AAAA,QAChC,CAAC,OAAO,CAAC,MAAM,OAAO,MAAM,MAAM;AAAA,UAChC,IAAI,OAAO,UAAU,IAAI,OAAO,GAAG;AAAA,UACnC,CAAC,QAAQ,WAAmB,GAAG,MAAM,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,QACjE;AAAA,QACA;AAAA,MACF;AACA,YAAM,SAAS,MAAM,MAAM,WAAW;AACtC,YAAM,SAAS,YAAY,MAAM;AACjC,UAAI,CAAC,OAAQ;AACb,YAAM,cAAc,UAAU,CAAC,EAAE,MAAM,0CAA0C,IAAI,CAAC;AACtF,UAAI,aAAa;AACf,iBAAS,IAAI,aAAa,MAAM;AAChC;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAM,OAAO,OAAO,QAAQ,MAAM,WAAW,IAAI,CAAC,KAAK,CAAC;AACxD,YAAM,UAAU,OAAO,IAAI,QAAQ,MAAM,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,GAAG,IAAI;AAClG,oBAAc,KAAK,GAAG,OAAO,GAAG,UAAU,SAAS,OAAO,KAAK,EAAE,EAAE;AAAA,IAErE;AAAA,EACF;AACA,QAAM,kBAAkB,iBAAiB,MAAM,2CAA2C,IAAI,CAAC,KAC1F,iBAAiB,MAAM,8CAA8C,IAAI,CAAC;AAC/E,MAAI,mBAAmB,SAAS,IAAI,eAAe,EAAG,QAAO,SAAS,IAAI,eAAe;AACzF,QAAM,IAAI,MAAM,0EAA0E,cAAc,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;AAC5I;AAEA,SAAS,yBAAyB,QAAwB;AACxD,QAAM,SAAS;AACf,MAAI,SAAS;AACb,MAAI,aAAa;AACjB,SAAO,MAAM;AACX,UAAM,QAAQ,OAAO,QAAQ,QAAQ,UAAU;AAC/C,QAAI,QAAQ,EAAG,QAAO,OAAO,QAAQ,UAAU,GAAG;AAClD,UAAM,cAAc,OAAO,QAAQ,KAAK,QAAQ,OAAO,MAAM;AAC7D,QAAI,cAAc,EAAG,QAAO;AAC5B,UAAM,gBAAgB,sBAAsB,QAAQ,WAAW;AAC/D,QAAI,CAAC,eAAe;AAClB,mBAAa,QAAQ,OAAO;AAC5B;AAAA,IACF;AACA,UAAM,YAAY,cAAc,cAAc;AAC9C,UAAM,QAAQ,OAAO,QAAQ,KAAK,SAAS;AAC3C,QAAI,QAAQ,EAAG,QAAO;AACtB,UAAM,gBAAgB,qBAAqB,KAAK,aAAa;AAC7D,QAAI,cAAc;AAClB,QAAI,eAAe;AACjB,YAAM,aAAa,cAAc,QAAQ,KAAK,cAAc,QAAQ,cAAc,CAAC,EAAE,MAAM;AAC3F,UAAI,cAAc,GAAG;AACnB,cAAM,QAAQ,qBAAqB,eAAe,UAAU;AAC5D,YAAI,MAAO,eAAc,MAAM,MAAM,GAAG,EAAE;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,aAAa,QAAQ;AACzB,QAAI,CAAC,aAAa;AAChB,YAAM,gBAAgB,OAAO,MAAM,UAAU,EAAE,MAAM,OAAO;AAC5D,UAAI,cAAe,eAAc,cAAc,CAAC,EAAE;AAAA,IACpD;AACA,aAAS,GAAG,OAAO,MAAM,GAAG,KAAK,CAAC,GAAG,WAAW,GAAG,OAAO,MAAM,UAAU,CAAC;AAC3E,iBAAa,QAAQ,YAAY;AAAA,EACnC;AACF;AAEA,SAAS,qBAAqB,QAAgB,OAA8B;AAC1E,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,MAAI,YAAY;AAChB,WAAS,QAAQ,OAAO,QAAQ,OAAO,QAAQ,SAAS;AACtD,UAAM,YAAY,OAAO,KAAK;AAC9B,QAAI,OAAO;AACT,UAAI,UAAW,aAAY;AAAA,eAClB,cAAc,KAAM,aAAY;AAAA,eAChC,cAAc,MAAO,SAAQ;AACtC;AAAA,IACF;AACA,QAAI,cAAc,OAAO,cAAc,OAAO,cAAc,KAAK;AAC/D,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK;AACvB,QAAI,cAAc,OAAO,EAAE,UAAU,EAAG,QAAO,OAAO,MAAM,OAAO,QAAQ,CAAC;AAAA,EAC9E;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,gBAAuC;AACpE,aAAW,YAAY,CAAC,wBAAwB,wBAAwB,uBAAuB,GAAG;AAChG,UAAM,OAAO,cAAc,gBAAgB,QAAQ;AACnD,QAAI,CAACC,YAAW,IAAI,EAAG;AACvB,UAAM,SAAS,gBAAgB,IAAI;AACnC,UAAM,QAAQ,OAAO,MAAM,gEAAgE;AAC3F,QAAI,CAAC,MAAO;AACZ,UAAM,YAAY,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE;AAC9C,UAAM,WAAW,cAAc,gBAAgB,SAAS;AACxD,QAAIA,YAAW,QAAQ,KAAKF,WAAU,QAAQ,EAAE,OAAO,EAAG,QAAO;AAAA,EACnE;AACA,SAAO;AACT;AAGO,SAAS,uBAAuB,gBAAmD;AACxF,QAAM,aAAa,sBAAsB,cAAc;AACvD,QAAM,aAAa,CAAC,YAAY,GAAG,iBAAiB,EACjD,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,KAAK,CAAC,cAAcE,YAAW,cAAc,gBAAgB,SAAS,CAAC,CAAC;AAC3E,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,eAAe,cAAc,gBAAgB,UAAU;AAC7D,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,SAASC,SAAQ,UAAU,EAAE,YAAY,MAAM,UACjD,YAAY,MAAM,MAAM,MAAM,CAAC,IAC/B,yBAAyB,MAAM;AACnC,MAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,kDAAkD;AAC/E,SAAO,EAAE,QAAQ,QAAQ,WAAW;AACtC;AAEA,SAAS,qBAAqB,aAAqB,WAAqC;AACtF,aAAW,YAAY,oBAAoB;AACzC,UAAM,OAAO,cAAc,aAAa,MAAM,KAAK,WAAW,QAAQ,CAAC;AACvE,QAAI,CAACD,YAAW,IAAI,KAAK,CAACF,WAAU,IAAI,EAAE,OAAO,EAAG;AACpD,QAAI;AACF,YAAM,MAAM,gBAAgB,IAAI;AAChC,YAAM,SAAS,SAAS,SAAS,OAAO,IAAI,MAAM,MAAM,GAAG,IAAII,WAAU,GAAG;AAC5E,YAAM,SAAS,YAAY,MAAM;AACjC,UAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,aAAO;AAAA,QACL,GAAI,OAAO,OAAO,UAAU,WAAW,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,QAClE,GAAI,OAAO,OAAO,aAAa,WAAW,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,QAC3E,GAAI,UAAU,SAAS,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,MAClD;AAAA,IACF,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAEA,SAAS,eAAe,MAAgC,OAAyC;AAC/F,QAAM,eAAe,KAAK,mBAAmB,OAAO;AACpD,QAAM,gBAAgB,MAAM,mBAAmB,OAAO;AACtD,MAAI,iBAAiB,cAAe,QAAO,eAAe;AAC1D,SAAO,KAAK,WAAW,cAAc,MAAM,YAAY,QAAW,EAAE,SAAS,KAAK,CAAC;AACrF;AAEA,SAAS,YAAY,OAAe,SAA2C;AAC7E,QAAM,MAAM,eAAe,KAAK;AAChC,QAAM,aAAa,QAAQ,kBAAkB,IAAI,GAAG,KAC/C,QAAQ,YAAY,KAAK,CAAC,SAAS,KAAK,iBAAiB,kBAAkB,GAAG,CAAC;AACpF,MAAI,CAAC,YAAY;AACf,YAAQ,SAAS,KAAK;AAAA,MACpB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,IACV,CAAC;AACD,WAAO;AAAA,EACT;AACA,UAAQ,wBAAwB,IAAI,WAAW,YAAY;AAC3D,SAAO,WAAW;AACpB;AAEA,SAAS,mBACP,OACA,WACA,SACe;AACf,QAAM,OAAO,YAAY,SAAS;AAClC,MAAI,CAAC,KAAM,QAAO;AAClB,MAAI,KAAK,SAAS,SAAS,OAAO,KAAK,OAAO,SAAU,QAAO,YAAY,KAAK,IAAI,OAAO;AAC3F,MAAI,KAAK,SAAS,kBAAmB,QAAO;AAC5C,QAAM,WAAW,YAAY,eAAe,KAAK,CAAC;AAClD,QAAM,yBAAyB,OAAO,KAAK,SAAS,WAChD,cAAc,KAAK,MAAM,QAAQ,KAAK,WACtC;AACJ,QAAM,eAAe,QAAQ,eACxB,2BAA2B,QAAQ,eACnC,CAAC,uBAAuB,WAAW,GAAG,QAAQ,WAAW,GAAG,IAC7D,MAAM,KAAK,QAAQ,aAAa,sBAAsB,IACtD;AACJ,MAAI,CAAC,QAAQ,aAAa,IAAI,YAAY,KACrC,CAAC,QAAQ,YAAY,KAAK,CAAC,SAAS,KAAK,iBAAiB,YAAY,GAAG;AAC5E,UAAM,cAAc,OAAO,KAAK,gBAAgB,WAC5C,KAAK,cACL,cAAc,KAAK;AACvB,YAAQ,eAAe,KAAK;AAAA,MAC1B,IAAI,kBAAkB,YAAY;AAAA,MAClC;AAAA,MACA,OAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,MACrD;AAAA,MACA,UAAU,MAAM,QAAQ,KAAK,QAAQ,IACjC,KAAK,SAAS,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IAC1E,CAAC;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,GAAG,QAAQ,SAAS,IAAI,QAAQ,aAAa;AAAA,IACvD,CAAC;AACD,YAAQ,aAAa,IAAI,YAAY;AAAA,EACvC;AACA,UAAQ,wBAAwB,IAAI,YAAY;AAChD,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAiB,SAAsE;AACjH,QAAM,gBAAgB,YAAY,MAAM,KAAK,eAAe,OAAO;AACnE,QAAM,cAAc,QAAQ,YAAY,OAAO,CAAC,eAAe;AAC7D,UAAM,SAAS,WAAW,WAAW,QAAQ,gBAAgB,EAAE;AAC/D,WAAO,CAAC,iBAAiB,WAAW,iBAAiB,OAAO,WAAW,GAAG,aAAa,GAAG;AAAA,EAC5F,CAAC;AACD,QAAM,cAA+C,CAAC;AACtD,QAAM,mBAAmB,oBAAI,IAAY;AACzC,aAAW,cAAc,aAAa;AACpC,UAAM,SAAS,WAAW,WAAW,QAAQ,gBAAgB,EAAE;AAC/D,UAAM,eAAe,gBAAgB,MAAM,SAAS,eAAe,MAAM,IAAI;AAC7E,UAAM,WAAW,aAAa,MAAM,GAAG,EAAE,OAAO,OAAO;AACvD,QAAI,SAAS,UAAU,EAAG,aAAY,KAAK,UAAU;AAAA,QAChD,kBAAiB,IAAI,SAAS,CAAC,CAAC;AAAA,EACvC;AAEA,QAAM,QAAkD,YACrD,KAAK,cAAc,EACnB,IAAI,CAAC,eAAe;AACnB,YAAQ,wBAAwB,IAAI,WAAW,YAAY;AAC3D,WAAO,WAAW;AAAA,EACpB,CAAC;AACH,QAAM,SAAS,CAAC,GAAG,gBAAgB,EAAE,IAAI,CAAC,YAAY;AACpD,UAAM,YAAY,gBAAgB,MAAM,KAAK,eAAe,OAAO,IAAI;AACvE,UAAM,WAAW,qBAAqB,QAAQ,aAAa,SAAS;AACpE,UAAM,QAAQ,mBAAmB,WAAW,OAAO;AACnD,UAAM,UAAU,mBAAmB,SAAS,SAAS,UAAU,OAAO,GAAG,SAAS,MAAM,OAAO;AAC/F,QAAI,WAAW,CAAC,MAAM,SAAS,OAAO,EAAG,OAAM,QAAQ,OAAO;AAC9D,WAAO;AAAA,MACL,UAAU,SAAS,YAAY,OAAO;AAAA,MACtC;AAAA,MACA,OAAO;AAAA,QACL,OAAO,SAAS,SAAS,UAAU,OAAO;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,WAAW,MAAM,YAC1C,KAAK,QAAQ,cAAc,MAAM,SAAS,QAAW,EAAE,SAAS,KAAK,CAAC,CAAC;AAC5E,QAAM,KAAK,GAAG,OAAO,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC;AAChD,SAAO;AACT;AAEA,SAAS,aAAa,OAAgB,SAAsE;AAC1G,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,OAAO,YAAY,OAAO,OAAO;AACvC,WAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,EAC1B;AACA,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,QAAQ,CAAC,UAAU,aAAa,OAAO,OAAO,CAAC;AACtF,QAAM,SAAS,YAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,MAAI,OAAO,SAAS,SAAS,OAAO,SAAS,OAAO;AAClD,UAAM,OAAO,OAAO,OAAO,OAAO,WAAW,YAAY,OAAO,IAAI,OAAO,IAAI;AAC/E,WAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,EAC1B;AACA,MAAI,OAAO,SAAS,iBAAiB;AACnC,WAAO,mBAAmB,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU,KAAK,OAAO;AAAA,EAC9F;AACA,MAAI,OAAO,SAAS,YAAY;AAC9B,UAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAChE,UAAM,QAAQ,aAAa,OAAO,OAAO,OAAO;AAChD,UAAM,UAAU,mBAAmB,OAAO,OAAO,MAAM,OAAO;AAC9D,QAAI,WAAW,CAAC,MAAM,SAAS,OAAO,EAAG,OAAM,QAAQ,OAAO;AAC9D,WAAO,MAAM,SAAS,IAAI,CAAC,EAAE,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC;AAAA,EACzD;AACA,MAAI,OAAO,SAAS,UAAU,OAAO,SAAS,OAAQ,QAAO,CAAC;AAG9D,SAAO,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM;AACxD,UAAM,QAAQ,aAAa,OAAO,OAAO;AACzC,WAAO,MAAM,SAAS,IAAI,CAAC,EAAE,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC;AAAA,EACzD,CAAC;AACH;AAGO,SAAS,4BAA4B,OAMb;AAC7B,QAAM,WAAoC,CAAC;AAC3C,QAAM,oBAAoB,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;AACrF,QAAM,UAA6B;AAAA,IACjC,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IACnB;AAAA,IACA,gBAAgB,CAAC;AAAA,IACjB,cAAc,oBAAI,IAAI;AAAA,IACtB,yBAAyB,oBAAI,IAAI;AAAA,IACjC,WAAW,MAAM;AAAA,IACjB,aAAa,MAAM,eAAe;AAAA,IAClC,eAAe,MAAM,UAAU,cAAc;AAAA,IAC7C;AAAA,EACF;AACA,QAAM,iBAA2C,MAAM,WAAW,OAAO,QAAQ,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,QAAQ;AAAA,IAClH,EAAE,MAAM,iBAAiB,SAAS,IAAI;AAAA,EACxC,CAAC,CAAC;AACF,QAAM,OAAO,eAAe,QAAQ,CAAC,CAAC,WAAW,KAAK,MAAM;AAC1D,UAAM,YAAY,aAAa,OAAO,OAAO;AAC7C,UAAM,aAAa,UAAU,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ;AACzF,UAAM,SAAS,UAAU,OAAO,CAAC,UAA6C,OAAO,UAAU,QAAQ;AACvG,QAAI,WAAW,SAAS,EAAG,QAAO,QAAQ,EAAE,OAAO,YAAY,OAAO,WAAW,CAAC;AAClF,QAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,WAAO,CAAC;AAAA,MACN,KAAK,eAAe,WAAW,IAAI,kBAAkB,UAAU,SAAS;AAAA,MACxE;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,eAAe,MAAM,YACxB,OAAO,CAAC,SAAS,CAAC,QAAQ,wBAAwB,IAAI,KAAK,YAAY,CAAC,EACxE,KAAK,cAAc,EACnB,IAAI,CAAC,SAAS,KAAK,YAAY;AAClC,MAAI,aAAa,SAAS,GAAG;AAC3B,QAAI,KAAK,WAAW,EAAG,MAAK,KAAK,EAAE,KAAK,iBAAiB,QAAQ,CAAC,EAAE,CAAC;AACrE,SAAK,CAAC,EAAE,QAAQ,KAAK,EAAE,OAAO,cAAc,OAAO,aAAa,CAAC;AAAA,EACnE;AACA,SAAO;AAAA,IACL,YAAY,EAAE,KAAK;AAAA,IACnB,gBAAgB,QAAQ;AAAA,IACxB,yBAAyB,QAAQ;AAAA,IACjC;AAAA,EACF;AACF;;;ACnoBA,OAAOC,gBAAe;AACtB,OAAOC,kBAAiB;AACxB,SAAS,WAAAC,gBAAe;AAWxB,SAAS,YAAY,IAAoB;AACvC,QAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK;AACtC,MAAI,UAAU,eAAgB,QAAO;AACrC,SAAO,MACJ,MAAM,MAAM,EACZ,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AACb;AASA,IAAM,oBAAoBC,SAAQ,EAAE,IAAIC,YAAW,EAAE,IAAIC,UAAS;AAElE,SAAS,eAAe,SAAyB;AAC/C,WAAS,UAAU,MAA+B;AAChD,QAAI,KAAK,SAAS,UAAU,KAAK,SAAS,aAAc,QAAO,KAAK,SAAS;AAC7E,QAAI,KAAK,SAAS,QAAS,QAAO,KAAK,OAAO;AAC9C,QAAI,KAAK,SAAS,QAAS,QAAO;AAClC,YAAQ,KAAK,YAAY,CAAC,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE;AAAA,EACrD;AACA,WAAS,cAAc,MAA+B;AACpD,QAAI,KAAK,SAAS,aAAa;AAC7B,YAAM,QAAQ,UAAU,IAAI,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACxD,UAAI,MAAO,QAAO,MAAM,MAAM,GAAG,GAAG;AAAA,IACtC;AACA,eAAW,SAAS,KAAK,YAAY,CAAC,GAAG;AACvC,YAAM,QAAQ,cAAc,KAAK;AACjC,UAAI,MAAO,QAAO;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAIA,MAAI;AACF,WAAO,cAAc,kBAAkB,MAAM,OAAO,CAAoB;AAAA,EAC1E,QAAQ;AAGN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,MAAqD;AACpF,MAAI,SAAS,SAAU,QAAO;AAC9B,MAAI,SAAS,OAAQ,QAAO;AAC5B,MAAI,SAAS,aAAa,SAAS,UAAW,QAAO;AACrD,SAAO;AACT;AAOA,SAAS,+BAA+B,MAAsB;AAC5D,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,kBAA6D,CAAC;AACpE,MAAI,YAA2B;AAE/B,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAM,YAAY,KAAK,MAAM,mBAAmB;AAChD,QAAI,WAAW;AACb,UAAI,CAAC,UAAW,aAAY,UAAU,CAAC,EAAE,CAAC;AAAA,eACjC,UAAU,CAAC,EAAE,CAAC,MAAM,UAAW,aAAY;AACpD,aAAO;AAAA,IACT;AACA,QAAI,UAAW,QAAO;AAEtB,UAAM,UAAU,KAAK,MAAM,iFAAiF;AAC5G,QAAI,SAAS;AACX,YAAM,MAAM,wBAAwB,QAAQ,CAAC,EAAE,YAAY,CAAC;AAC5D,sBAAgB,KAAK,EAAE,WAAW,QAAQ,CAAC,GAAG,IAAI,CAAC;AACnD,YAAM,SAAS,QAAQ,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK;AAC/C,aAAO,QAAQ,IAAI,GAAG;AAAA,IAAQ,KAAK,OAAO,IAAI,GAAG;AAAA,IACnD;AAEA,UAAM,UAAU,KAAK,MAAM,iBAAiB;AAC5C,UAAM,UAAU,gBAAgB,GAAG,EAAE;AACrC,QAAI,WAAW,SAAS,cAAc,QAAQ,CAAC,GAAG;AAChD,sBAAgB,IAAI;AACpB,aAAO,KAAK,QAAQ,GAAG;AAAA,IACzB;AACA,WAAO;AAAA,EACT,CAAC,EAAE,KAAK,IAAI;AACd;AAGO,SAAS,aAAa,MAAsB;AACjD,SAAO,+BAA+B,IAAI,EAGvC,QAAQ,mHAAmH,EAAE,EAC7H,QAAQ,uBAAuB,CAAC,QAAQ,eAAuB;AAC9D,UAAM,QAAQ,WAAW,MAAM,iCAAiC,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,KACnF,WAAW,MAAM,iCAAiC,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,KAC1E;AACL,WAAO,eAAe,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACrD,CAAC,EACA,QAAQ,gBAAgB,QAAQ,EAChC,QAAQ,uDAAuD,CAAC,QAAQ,QAAgB,cAAsB,cAAsB,UACnI,KAAK,MAAM,SAAS,gBAAgB,YAAY,IAAI,KAAK,GAC1D,EACA,QAAQ,aAAa,MAAM,EAC3B,QAAQ,yCAAyC,EAAE,EACnD,QAAQ,sBAAsB,CAAC,QAAQ,YAAoB,MAAM,OAAO,KAAK,EAC7E,QAAQ,uBAAuB,WAAW,EAC1C,QAAQ,eAAe,UAAU,EACjC,QAAQ,qBAAqB,aAAa,EAC1C,QAAQ,aAAa,YAAY,EACjC,QAAQ,sBAAsB,UAAU,EACxC,QAAQ,cAAc,SAAS,EAC/B,QAAQ,kBAAkB,SAAS,EACnC,QAAQ,qBAAqB,WAAW,EACxC,QAAQ,gBAAgB,OAAO,EAC/B,QAAQ,mBAAmB,SAAS;AACzC;AAGO,SAAS,kBAAkB,OAWT;AACvB,QAAM,SAAS,iBAAiB,MAAM,GAAG;AACzC,QAAM,mBAAyC;AAAA,IAC7C,IAAI,MAAM;AAAA,IACV,cAAc,MAAM,gBAAgB,MAAM;AAAA,IAC1C,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,EACjD;AACA,QAAM,WAAW,MAAM,kBAAkB,OAAO,MAAM,gBAAgB,KAAK;AAC3E,QAAM,OAAO,aAAa,OAAO,OAAO,EAAE,KAAK;AAC/C,QAAM,WAAW,MAAM,QAAQ,OAAO,KAAK,QAAQ,IAC/C,OAAO,KAAK,SAAS,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IACjF,CAAC;AACL,QAAM,QAAQ,OAAO,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,MAAM,KAAK,IAC1E,OAAO,KAAK,MAAM,KAAK,IACvB,YAAY,SAAS,YAAY;AACrC,QAAM,WAAW,OAAO,OAAO,KAAK,iBAAiB,YAAY,OAAO,KAAK,aAAa,KAAK,IAC3F,OAAO,KAAK,aAAa,KAAK,IAC9B,OAAO,OAAO,KAAK,aAAa,YAAY,OAAO,KAAK,SAAS,KAAK,IACpE,OAAO,KAAK,SAAS,KAAK,IAC1B;AACN,QAAM,QAAQ,OAAO,OAAO,KAAK,QAAQ,YAAY,OAAO,KAAK,IAAI,KAAK,IACtE,OAAO,KAAK,IAAI,KAAK,IACrB,OAAO,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,MAAM,KAAK,IAC9D,OAAO,KAAK,MAAM,KAAK,IACvB;AACN,QAAM,aAAa,OAAO,OAAO,KAAK,SAAS,WAAW,OAAO,KAAK,OAAO;AAG7E,QAAM,OAAO,eAAe,UACxB,SACA,CAAC,WAAW,QAAQ,UAAU,UAAU,MAAM,EAAE,SAAS,cAAc,EAAE,IACvE,aACA;AACN,QAAM,cAAc,OAAO,OAAO,KAAK,gBAAgB,YAAY,OAAO,KAAK,YAAY,KAAK,IAC5F,OAAO,KAAK,YAAY,KAAK,IAC7B,eAAe,IAAI;AACvB,SAAO;AAAA,IACL,IAAI,SAAS;AAAA,IACb,cAAc,SAAS;AAAA,IACvB,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,KAAK,WAAW,OAAO,OAAO;AAAA,IAC7C,SAAS,OAAO,KAAK,YAAY,QAAQ,OAAO,KAAK,YAAY,SAAS,OAAO;AAAA,IACjF,SAAS,OAAO,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,IAChF;AAAA,IACA,QAAQ,MAAM;AAAA,EAChB;AACF;;;ACrMA,SAAS,cAAAC,aAAY,aAAAC,YAAW,gBAAAC,eAAc,oBAAoB;AAClE,SAAS,WAAAC,UAAS,WAAAC,UAAS,YAAAC,iBAAgB;AAiB3C,IAAM,4BAA4B;AAc3B,SAAS,8BACd,QACA,OACqB;AACrB,QAAM,UAAU,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AACpD,QAAM,YAAY,CAAC,GAAI,OAAO,aAAa,CAAC,CAAE;AAC9C,QAAM,kBAAkB,IAAI,IAAI,UAAU,IAAI,CAAC,aAAa,SAAS,OAAO,QAAQ,OAAO,EAAE,KAAK,GAAG,CAAC;AACtG,WAAS,oBAAoB,QAAyB;AACpD,QAAI,gBAAgB,IAAI,MAAM,EAAG,QAAO;AACxC,YAAQ,OAAO,aAAa,CAAC,GAAG,KAAK,CAAC,aAAa;AAGjD,YAAM,QAAQ,SAAS,OAAO,MAAM,sCAAsC;AAC1E,aAAO,QAAQ,WAAW,MAAM,CAAC,KAAK,OAAO,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI;AAAA,IAC5E,CAAC;AAAA,EACH;AACA,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,+BAA+B,KAAK,KAAK,YAAY,EAAG;AAC7D,UAAM,SAAS,KAAK,GAAG,QAAQ,gCAAgC,EAAE;AACjE,QAAI,CAAC,UAAU,QAAQ,IAAI,MAAM,EAAG;AACpC,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI,oBAAoB,MAAM,EAAG;AACjC,cAAU,KAAK,EAAE,QAAQ,aAAa,IAAI,KAAK,EAAE,IAAI,WAAW,MAAM,CAAC;AACvE,oBAAgB,IAAI,MAAM;AAAA,EAC5B;AAEA,QAAM,kBAAiC,CAAC;AACxC,WAAS,aAAa,OAAuD;AAC3E,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,SAAU,iBAAgB,KAAK,IAAI;AAAA,eAC9C,CAAC,KAAK,OAAQ,cAAa,KAAK,KAAK;AAAA,IAChD;AAAA,EACF;AACA,aAAW,OAAO,OAAO,MAAM;AAC7B,QAAI,CAAC,IAAI,OAAQ,cAAa,CAAC,GAAI,IAAI,SAAS,CAAC,GAAI,GAAI,IAAI,UAAU,CAAC,CAAE,CAAC;AAAA,EAC7E;AACA,QAAM,sBAAsB,oBAAI,IAAkC;AAClE,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,OAAQ;AACjB,UAAM,WAAW,oBAAoB,IAAI,KAAK,YAAY,KAAK,CAAC;AAChE,aAAS,KAAK,IAAI;AAClB,wBAAoB,IAAI,KAAK,cAAc,QAAQ;AAAA,EACrD;AACA,QAAM,6BAA6B,oBAAI,IAA2B;AAClE,aAAW,gBAAgB,iBAAiB;AAC1C,eAAW,QAAQ,oBAAoB,IAAI,YAAY,KAAK,CAAC,GAAG;AAC9D,YAAM,WAAW,KAAK,GAAG,MAAM,GAAG;AAClC,eAAS,SAAS,GAAG,SAAS,SAAS,QAAQ,UAAU;AACvD,cAAM,YAAY,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG;AACpD,YAAI,CAAC,2BAA2B,IAAI,SAAS,EAAG,4BAA2B,IAAI,WAAW,IAAI;AAAA,MAChG;AAAA,IACF;AAAA,EACF;AACA,aAAW,YAAY,OAAO,aAAa,CAAC,GAAG;AAK7C,UAAM,cAAc,SAAS,YAAY,MAAM,QAAQ,CAAC,EAAE,CAAC,EACxD,QAAQ,mCAAmC,EAAE;AAChD,QAAI,CAAC,YAAY,WAAW,GAAG,KAAK,YAAY,WAAW,IAAI,KAAK,cAAc,KAAK,WAAW,EAAG;AACrG,UAAM,YAAY,gBAAgB,WAAW;AAC7C,QAAI,CAAC,aAAa,QAAQ,IAAI,SAAS,EAAG;AAC1C,UAAM,SAAS,IAAI,SAAS;AAC5B,QAAI,oBAAoB,MAAM,EAAG;AACjC,UAAM,UAAU,2BAA2B,IAAI,SAAS;AACxD,QAAI,CAAC,QAAS;AAGd,cAAU,KAAK,EAAE,QAAQ,aAAa,IAAI,QAAQ,EAAE,IAAI,WAAW,MAAM,CAAC;AAC1E,oBAAgB,IAAI,MAAM;AAAA,EAC5B;AACA,SAAO,UAAU,SAAS,IAAI,EAAE,GAAG,QAAQ,UAAU,IAAI;AAC3D;AAOO,SAAS,6BACd,QACA,OACqB;AACrB,QAAM,eAAe,IAAI,IAAI,MAC1B,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,KAAK,WAAW,OAAO,MAAM,aAAa,EAC3E,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AACnC,WAAS,UAAU,OAAqE;AACtF,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,aAAa,IAAI,IAAI,EAAG,QAAO;AAAA,MACrC,WAAW,CAAC,KAAK,QAAQ;AACvB,cAAM,OAAO,UAAU,KAAK,KAAK;AACjC,YAAI,KAAM,QAAO;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,EACrD,IAAI,CAAC,QAAQ,UAAU,CAAC,GAAI,IAAI,SAAS,CAAC,GAAI,GAAI,IAAI,UAAU,CAAC,CAAE,CAAC,CAAC,EACrE,KAAK,OAAO;AACf,MAAI,CAAC,YAAY,aAAa,eAAgB,QAAO;AACrD,QAAM,YAAY,CAAC,GAAI,OAAO,aAAa,CAAC,CAAE;AAC9C,QAAM,UAAU,IAAI,IAAI,UAAU,IAAI,CAAC,aAAa,SAAS,OAAO,QAAQ,OAAO,EAAE,KAAK,GAAG,CAAC;AAC9F,QAAM,QAAQ,CAAC,IAAI,IAAI,OAAO,MAAM,WAAW,CAAC,GAC7C,OAAO,CAAC,WAAW,OAAO,SAAS,OAAO,MAAM,aAAa,EAC7D,IAAI,CAAC,WAAW,OAAO,IAAI,CAAC;AAC/B,aAAW,UAAU,OAAO;AAC1B,UAAM,SAAS,SAAS,IAAI,MAAM,KAAK;AACvC,QAAI,QAAQ,IAAI,MAAM,EAAG;AACzB,cAAU,KAAK,EAAE,QAAQ,aAAa,GAAG,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,QAAQ,IAAI,WAAW,MAAM,CAAC;AAAA,EACvG;AACA,SAAO,EAAE,GAAG,QAAQ,UAAU;AAChC;AAEA,IAAM,kBAA0C;AAAA,EAC9C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAASC,aAAY,OAAgD;AACnE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACtE,QACA;AACN;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,OAAO,MAAM,KAAK;AACxB,MAAI,CAAC,QAAQ,wBAAwB,KAAK,IAAI,EAAG,QAAO;AACxD,MAAI,uCAAuC,KAAK,IAAI,EAAG,QAAO;AAC9D,QAAM,SAAS,KAAK,MAAM,wBAAwB,IAAI,CAAC,EAAE,YAAY;AACrE,MAAI,UAAU,CAAC,CAAC,QAAQ,SAAS,UAAU,KAAK,EAAE,SAAS,MAAM,EAAG,QAAO;AAC3E,SAAO;AACT;AAEA,SAAS,SAAS,OAAgC,UAA0B;AAC1E,aAAW,OAAO,CAAC,OAAO,SAAS,UAAU,WAAW,YAAY,WAAW,QAAQ,SAAS,QAAQ,OAAO,GAAG;AAChH,QAAI,OAAO,MAAM,GAAG,MAAM,YAAY,MAAM,GAAG,EAAG,QAAO,OAAO,MAAM,GAAG,CAAC;AAAA,EAC5E;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAuB;AAC7C,SAAO,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC;AAC9B;AAEA,SAAS,YAAY,MAAe,SAA0B;AAC5D,MAAI,CAAC,WAAW,YAAY,IAAK,QAAO;AACxC,QAAM,SAAS,QAAQ,QAAQ,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO;AACrE,SAAO,OAAO,OAAgB,CAAC,SAAS,UAAU;AAChD,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,YAAM,QAAQ,OAAO,KAAK;AAC1B,aAAO,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;AAAA,IACtE;AACA,UAAM,SAASA,aAAY,OAAO;AAClC,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,OAAO,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,EAC7D,GAAG,IAAI;AACT;AAEA,SAAS,iBAAiB,MAAc,gBAAiC;AACvE,MAAI,CAACC,YAAW,IAAI,KAAK,CAACC,WAAU,IAAI,EAAE,OAAO,GAAG;AAClD,UAAM,IAAI,MAAM,oDAAoDC,UAAS,gBAAgB,IAAI,CAAC,EAAE;AAAA,EACtG;AACA,QAAM,WAAW,aAAa,IAAI;AAClC,QAAM,WAAW,aAAa,cAAc;AAC5C,gBAAc,UAAUA,UAAS,UAAU,QAAQ,CAAC;AACpD,MAAID,WAAU,QAAQ,EAAE,OAAO,2BAA2B;AACxD,UAAM,IAAI,MAAM,sCAAsC,4BAA4B,GAAS,QAAQC,UAAS,gBAAgB,IAAI,CAAC,EAAE;AAAA,EACrI;AACA,SAAO,KAAK,MAAMC,cAAa,UAAU,MAAM,CAAC;AAClD;AAEA,SAAS,sBACP,OACA,aACA,gBACA,OACS;AACT,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,UAAU,sBAAsB,OAAO,aAAa,gBAAgB,KAAK,CAAC;AAAA,EAC9F;AACA,QAAM,SAASJ,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,SAAS,UAAU;AACnC,UAAM,CAAC,UAAU,UAAU,EAAE,IAAI,OAAO,KAAK,MAAM,KAAK,CAAC;AACzD,UAAM,iBAAiB,WACnB,cAAcK,SAAQ,WAAW,GAAG,QAAQ,IAC5C;AACJ,UAAM,eAAeF,UAAS,gBAAgB,cAAc;AAC5D,kBAAc,gBAAgB,YAAY;AAC1C,UAAM,WAAW,GAAG,cAAc,IAAI,OAAO;AAC7C,QAAI,MAAM,IAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,2BAA2B,OAAO,IAAI,EAAE;AACjF,UAAM,IAAI,QAAQ;AAClB,UAAM,iBAAiB,iBAAiB,gBAAgB,cAAc;AACtE,UAAM,aAAa,YAAY,gBAAgB,UAAU,IAAI,OAAO,KAAK,EAAE;AAC3E,UAAM,WAAW,sBAAsB,YAAY,gBAAgB,gBAAgB,KAAK;AACxF,UAAM,OAAO,QAAQ;AACrB,UAAM,WAAW,OAAO;AAAA,MACtB,OAAO,QAAQ,MAAM,EAClB,OAAO,CAAC,CAAC,GAAG,MAAM,QAAQ,MAAM,EAChC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,QACrB;AAAA,QACA,sBAAsB,OAAO,aAAa,gBAAgB,KAAK;AAAA,MACjE,CAAC;AAAA,IACL;AAIA,WAAOH,aAAY,QAAQ,IAAI,EAAE,GAAG,UAAqC,GAAG,SAAS,IAAI;AAAA,EAC3F;AACA,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC3C;AAAA,MACA,sBAAsB,OAAO,aAAa,gBAAgB,KAAK;AAAA,IACjE,CAAC;AAAA,EACH;AACF;AAGO,SAAS,mBAAmB,gBAAwD;AACzF,QAAM,aAAa,CAAC,aAAa,WAAW,EACzC,IAAI,CAAC,aAAa,cAAc,gBAAgB,QAAQ,CAAC,EACzD,KAAKC,WAAU;AAClB,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,MAAM,iBAAiB,YAAY,cAAc;AACvD,SAAO,sBAAsB,KAAK,YAAY,gBAAgB,oBAAI,IAAI,CAAC;AACzE;AAEA,SAAS,iBAAiB,OAAe,aAAa,IAAmB;AACvE,MAAI,qBAAqB,KAAK,KAAK,KAAK,MAAM,WAAW,GAAG,EAAG,QAAO;AACtE,MAAI,MAAM,eAAe,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ,QAAQ,EAAE;AACnE,QAAM,SAAS,gBAAgB,UAAU;AACzC,MAAI,WAAW,QAAQ,UAAU,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI;AAC9D,UAAM,QAAQ,SAAS,iBAAiB,IAAI,MAAM,OAAO,SAAS,CAAC;AAAA,EACrE;AACA,QAAM,IAAI,QAAQ,wBAAwB,EAAE;AAI5C,SAAO,oBAAoB,KAAK,IAAI;AACtC;AAYA,SAAS,SAAS,SAA4B,KAAa,SAAuB;AAChF,MAAI,QAAQ,YAAY,IAAI,GAAG,EAAG;AAClC,UAAQ,YAAY,IAAI,GAAG;AAC3B,UAAQ,SAAS,KAAK,EAAE,MAAM,sBAAsB,QAAQ,CAAC;AAC/D;AAEA,SAAS,SAAS,OAAoC;AACpD,MAAI,OAAO,UAAU,YAAY,MAAO,QAAO;AAC/C,QAAM,OAAOD,aAAY,KAAK;AAC9B,SAAO,OAAO,MAAM,SAAS,YAAY,KAAK,OAAO,KAAK,OAAO;AACnE;AAEA,SAAS,sBAAsB,OAG7B;AACA,SAAO;AAAA,IACL,GAAI,OAAO,MAAM,gBAAgB,YAAY,MAAM,YAAY,KAAK,IAChE,EAAE,aAAa,MAAM,YAAY,KAAK,EAAE,IACxC,CAAC;AAAA,IACL,GAAI,SAAS,MAAM,IAAI,IAAI,EAAE,MAAM,SAAS,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,kBAAkB,OAAe,SAA2C;AACnF,QAAM,iBAAiB,QAAQ,SAC3B,2BAA2B,OAAO,QAAQ,QAAQ,QAAQ,cAAc,IACxE;AACJ,QAAM,eAAe,iBAAiB,gBAAgB,QAAQ,UAAU;AACxE,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,MAAM,GAAG,QAAQ,UAAU,EAAE,IAAI,KAAK;AAC5C,MAAI,CAAC,QAAQ,eAAe,IAAI,GAAG,GAAG;AACpC,YAAQ,eAAe,IAAI,GAAG;AAC9B,YAAQ,WAAW,KAAK,EAAE,KAAK,OAAO,cAAc,QAAQ,QAAQ,OAAO,CAAC;AAAA,EAC9E;AACA,SAAO;AACT;AAEA,SAAS,YACP,OACA,SAC0C;AAC1C,MAAI,OAAO,UAAU,SAAU,QAAO,kBAAkB,OAAO,OAAO;AACtE,QAAM,SAASA,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,SAAS,SAAU,QAAO,kBAAkB,OAAO,MAAM,OAAO;AAClF,QAAM,OAAO,cAAc,OAAO,IAAI;AACtC,MAAI,QAAQ,CAAC,OAAO,SAAS,CAAC,OAAO,QAAQ;AAC3C,UAAM,OAAO,kBAAkB,MAAM,OAAO;AAC5C,QAAI,KAAM,QAAO;AACjB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,QAAQ,CAAC;AAC5D,MAAI,WAAW,UAAU,MAAM,SAAS,GAAG;AACzC,UAAM,WAAqD,CAAC;AAC5D,QAAI,OAAO,OAAO,SAAS,UAAU;AACnC,YAAM,OAAO,kBAAkB,OAAO,MAAM,OAAO;AACnD,UAAI,KAAM,UAAS,KAAK,IAAI;AAAA,IAC9B;AACA,eAAW,QAAQ,OAAO;AACxB,YAAM,YAAY,YAAY,MAAM,OAAO;AAC3C,UAAI,UAAW,UAAS,KAAK,SAAS;AAAA,IACxC;AACA,QAAI,SAAS,WAAW,EAAG,QAAO;AAClC,WAAO;AAAA,MACL,OAAO,SAAS,QAAQ,eAAe;AAAA,MACvC,GAAI,SAAS,OAAO,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO,IAAI,EAAE,IAAI,CAAC;AAAA,MAC/D,GAAI,OAAO,WAAW,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,wBACP,QACA,SAC0C;AAC1C,SAAO,OAAO,QAA2C,CAAC,UAAU;AAClE,UAAM,OAAO,YAAY,OAAO,OAAO;AACvC,WAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AAAA,EAC1B,CAAC;AACH;AAMA,SAAS,uBACP,gBACA,SACA,aACA,OACA,QAAQ,GACuB;AAC/B,QAAM,YAAYA,aAAY,cAAc;AAC5C,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,QAAM,gBAAgB,CAAC,QAAQ,WAAW,YAAY,aAAa,YAAY,OAAO;AACtF,aAAW,OAAO,eAAe;AAC/B,QAAI,CAAC,MAAM,QAAQ,UAAU,GAAG,CAAC,EAAG;AACpC,UAAM,UAAU,CAAC,GAAG,UAAU,GAAG,CAAmB;AACpD,QAAI,QAAQ,YAAY;AACtB,cAAQ,KAAK,CAAC,MAAM,UAAU,OAAOA,aAAY,KAAK,GAAG,YAAY,IAAI,IAAI,OAAOA,aAAY,IAAI,GAAG,YAAY,IAAI,CAAC;AAAA,IAC1H;AACA,UAAM,OAAO,QAAQ,QAAQ,CAAC,OAAO,UAAU;AAC7C,YAAM,SAASA,aAAY,KAAK;AAChC,UAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,YAAM,MAAM,SAAS,QAAQ,GAAG,WAAW,IAAI,QAAQ,CAAC,EAAE;AAC1D,YAAM,OAAO,cAAc,OAAO,IAAI;AACtC,YAAM,sBAAsB,cAAc,KAAK,CAAC,iBAAiB,MAAM,QAAQ,OAAO,YAAY,CAAC,CAAC;AACpG,UAAI,QAAQ,CAAC,OAAO,SAAS,CAAC,OAAO,UAAU,CAAC,qBAAqB;AACnE,eAAO,CAAC;AAAA,UACN;AAAA,UACA;AAAA,UACA,GAAG,sBAAsB,MAAM;AAAA,UAC/B,GAAI,OAAO,WAAW,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,QACnD,CAAC;AAAA,MACH;AACA,YAAM,SAAS,uBAAuB,QAAQ,SAAS,KAAK,OAAO,QAAQ,CAAC;AAC5E,UAAI,OAAO,SAAS,GAAG;AACrB,YAAI,OAAO,WAAW,GAAG;AACvB,iBAAO,CAAC;AAAA,YACN,GAAG,OAAO,CAAC;AAAA,YACX;AAAA,YACA,GAAG,sBAAsB,MAAM;AAAA,YAC/B,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,YACvB,GAAI,OAAO,WAAW,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,UACnD,CAAC;AAAA,QACH;AACA,cAAM,eAAe,sBAAsB,MAAM;AACjD,eAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB;AAAA,UACvC,GAAG;AAAA,UACH,GAAG;AAAA,UACH,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG;AAAA,UACxB,GAAI,eAAe,KAAK,QAAQ,CAAC,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,UACzD,GAAI,OAAO,WAAW,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,QACnD,EAAE;AAAA,MACJ;AACA,aAAO,CAAC;AAAA,IACV,CAAC;AACD,QAAI,KAAK,SAAS,GAAG;AACnB,UAAI,UAAU,KAAK,MAAO,OAAM,oBAAoB;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AACA,QAAM,YAAY,MAAM,QAAQ,UAAU,MAAM,IAAI,UAAU,SAAS,CAAC;AACxE,QAAM,WAAW,MAAM,QAAQ,UAAU,KAAK,IAAI,UAAU,QAAQ,CAAC;AACrE,QAAM,eAAe,OAAO,UAAU,SAAS,YAAY,SAAS,SAAS;AAC7E,QAAM,SAAS;AAAA,IACb,GAAI,OAAO,UAAU,SAAS,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC;AAAA,IAC7D,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACA,QAAM,WAAW,wBAAwB,QAAQ,OAAO;AACxD,SAAO,SAAS,SAAS,IACrB,CAAC;AAAA,IACC,KAAK;AAAA,IACL,GAAI,eACA,EAAE,OAAO,SAAS,IAClB,EAAE,QAAQ,SAA4C;AAAA,IAC1D,GAAG,sBAAsB,SAAS;AAAA,IAClC,GAAI,cAAc,UAAU,IAAI,IAAI,EAAE,MAAM,cAAc,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,IAC/E,GAAI,UAAU,WAAW,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,EACtD,CAAC,IACD,CAAC;AACP;AAEA,SAAS,eAAe,OAA8C;AACpE,MAAI,UAAU,QAAS,QAAO;AAC9B,MAAI,CAAC,SAAS,QAAQ,SAAS,EAAE,SAAS,OAAO,KAAK,CAAC,EAAG,QAAO;AACjE,MAAI,CAAC,UAAU,MAAM,EAAE,SAAS,OAAO,KAAK,CAAC,EAAG,QAAO;AACvD,SAAO,OAAO,UAAU,WAAW,YAAY;AACjD;AAEA,SAAS,gBAAgB,OAA+C;AACtE,QAAM,SAASA,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IACpC,OAAO,MAAM,QAAQ,CAAC,UAAU;AAC9B,UAAM,OAAOA,aAAY,KAAK;AAC9B,UAAM,OAAO,cAAc,MAAM,IAAI;AACrC,QAAI,CAAC,QAAQ,CAAC,KAAM,QAAO,CAAC;AAC5B,UAAM,QAAQ,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACxG,QAAI,CAAC,MAAO,QAAO,CAAC;AACpB,WAAO,CAAC,EAAE,OAAO,MAAM,GAAI,KAAK,SAAS,WAAW,EAAE,MAAM,SAAkB,IAAI,CAAC,EAAG,CAAC;AAAA,EACzF,CAAC,IACD,CAAC;AACL,QAAM,eAAeA,aAAY,OAAO,OAAO;AAC/C,QAAM,cAAc,cAAc,cAAc,IAAI;AACpD,QAAM,UAAU,gBAAgB,cAC5B;AAAA,IACE,OAAO,OAAO,aAAa,UAAU,WACjC,aAAa,QACb,aAAa,SAAS,WAAW,WAAW;AAAA,IAChD,MAAM;AAAA,EACR,IACA;AACJ,SAAO,MAAM,SAAS,KAAK,UAAU,EAAE,GAAI,MAAM,SAAS,IAAI,EAAE,MAAM,IAAI,CAAC,GAAI,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAG,IAAI;AACrH;AAEA,SAAS,+BACP,OACkE;AAClE,QAAM,SAASA,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,QAAM,QAAgD,CAAC;AACvD,QAAM,QAAQ,CAAC,UAAyB;AACtC,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,KAAK;AACnB;AAAA,IACF;AACA,UAAM,OAAOA,aAAY,KAAK;AAC9B,QAAI,CAAC,KAAM;AACX,UAAM,OAAO,cAAc,KAAK,IAAI;AACpC,QAAI,MAAM;AACR,YAAM,QAAQ,SAAS,MAAM,EAAE;AAC/B,UAAI,MAAO,OAAM,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IACvC;AACA,eAAW,OAAO,CAAC,QAAQ,WAAW,aAAa,YAAY,YAAY,aAAa,OAAO,GAAG;AAChG,UAAI,MAAM,QAAQ,KAAK,GAAG,CAAC,EAAG,OAAM,KAAK,GAAG,CAAC;AAAA,IAC/C;AAAA,EACF;AACA,QAAM,MAAM;AACZ,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA+C;AACtE,QAAM,SAASA,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAUA,aAAY,OAAO,OAAO;AAC1C,QAAM,cAAc,UAChB,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAKM,MAAK,MAAM;AACnE,UAAM,OAAO,cAAcA,MAAK;AAChC,WAAO,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,CAAC,IACF;AACJ,QAAM,QAAQ,MAAM,QAAQ,OAAO,KAAK,IACpC,OAAO,MAAM,QAAQ,CAAC,UAAU;AAC9B,UAAM,SAASN,aAAY,KAAK;AAChC,QAAI,CAAC,UAAU,CAAC,MAAM,QAAQ,OAAO,KAAK,EAAG,QAAO,CAAC;AACrD,UAAM,UAAU,OAAO,OAAO,YAAY,WACtC,OAAO,UACP,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AACxD,UAAM,QAAQ,OAAO,MAAM,QAAQ,CAAC,SAAS;AAC3C,YAAM,OAAOA,aAAY,IAAI;AAC7B,YAAM,OAAO,cAAc,MAAM,IAAI;AACrC,aAAO,QAAQ,OAAO,KAAK,UAAU,YAAY,OAC7C,CAAC,EAAE,OAAO,KAAK,OAAO,KAAK,CAAC,IAC5B,CAAC;AAAA,IACP,CAAC;AACD,WAAO,WAAW,MAAM,SAAS,IAAI,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC;AAAA,EAC/D,CAAC,IACD,CAAC;AACL,SAAQ,eAAe,OAAO,KAAK,WAAW,EAAE,SAAS,KAAM,MAAM,SAAS,IAC1E,EAAE,GAAI,eAAe,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,EAAE,SAAS,YAAY,IAAI,CAAC,GAAI,GAAI,MAAM,SAAS,IAAI,EAAE,MAAM,IAAI,CAAC,EAAG,IAClI;AACN;AAEA,SAAS,cAAc,OAAwE;AAC7F,MAAI,OAAO,UAAU,YAAY,MAAO,QAAO,EAAE,QAAQ,MAAM;AAC/D,QAAM,OAAOA,aAAY,KAAK;AAC9B,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,SAAS,OAAO,KAAK,WAAW,WAClC,KAAK,SACL,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAChD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,IACpC,KAAK,OAAO,IAAI,MAAM,IACtB,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI;AAC7D,SAAO,EAAE,QAAQ,GAAI,UAAU,OAAO,SAAS,IAAI,EAAE,OAAO,IAAI,CAAC,EAAG;AACtE;AAEA,SAAS,0BAA0B,QAA2F;AAC5H,QAAM,SAASA,aAAY,OAAO,MAAM;AACxC,QAAM,gBAAgB,WAAW,OAAO,OAAO,YAAY,YAAYA,aAAY,OAAO,OAAO,KAC7F,OAAO,UACP;AACJ,QAAM,aAAa,UAAU,CAAC,QAAQ,WAAW,UAAU,EAAE,SAAS,OAAO,OAAO,QAAQ,OAAO,OAAO,CAAC,IACvG,OAAO,OAAO,QAAQ,OAAO,OAAO,IACpC;AACJ,QAAM,cAAcA,aAAY,QAAQ,KAAK;AAC7C,QAAM,WAAW,cAAcA,aAAY,OAAO,KAAK,GAAG,QAAQ,OAAO,KAAK;AAC9E,QAAM,cAAc,cAAcA,aAAY,OAAO,KAAK,GAAG,OAAO;AACpE,QAAM,WAAWA,aAAY,OAAO,QAAQ;AAC5C,QAAM,MAAMA,aAAY,OAAO,GAAG;AAClC,QAAM,SAAS,gBAAgB,OAAO,MAAM;AAC5C,QAAM,cAAc,+BAA+BA,aAAY,OAAO,UAAU,GAAG,MAAM;AACzF,QAAM,cAAc,CAAC,GAAG,IAAI;AAAA,IAC1B,CAAC,GAAI,QAAQ,SAAS,CAAC,GAAI,GAAG,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA,EAC/F,EAAE,OAAO,CAAC;AACV,QAAM,sBAAsB,YAAY,SAAS,KAAK,QAAQ,UAC1D,EAAE,GAAI,YAAY,SAAS,IAAI,EAAE,OAAO,YAAY,IAAI,CAAC,GAAI,GAAI,QAAQ,UAAU,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC,EAAG,IACrH;AACJ,SAAO;AAAA,IACL,GAAI,eAAe,OAAO,KAAK,IAAI,EAAE,OAAO,eAAe,OAAO,KAAK,EAAE,IAAI,CAAC;AAAA,IAC9E,GAAI,gBAAgB;AAAA,MAClB,QAAQ;AAAA,QACN,SAAS;AAAA,QACT,GAAI,QAAQ,gBAAgB,QAAQ,EAAE,aAAa,MAAM,IAAI,CAAC;AAAA,QAC9D,GAAI,OAAO,QAAQ,OAAO,WAAW,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC;AAAA,QAC1D,GAAI,OAAO,QAAQ,aAAa,WAAW,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,QAC5E,GAAI,aAAa,EAAE,MAAM,WAAW,IAAI,CAAC;AAAA,QACzC,GAAI,cAAc,EAAE,OAAO;AAAA,UACzB,GAAI,OAAO,YAAY,UAAU,WAAW,EAAE,OAAO,YAAY,MAAM,IAAI,CAAC;AAAA,UAC5E,GAAI,OAAO,YAAY,SAAS,WAAW,EAAE,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,QAC3E,EAAE,IAAI,CAAC;AAAA,MACT;AAAA,IACF,IAAI,CAAC;AAAA,IACL,GAAI,sBAAsB,EAAE,QAAQ,oBAAoB,IAAI,CAAC;AAAA,IAC7D,GAAI,gBAAgB,OAAO,MAAM,IAAI,EAAE,QAAQ,gBAAgB,OAAO,MAAM,EAAE,IAAI,CAAC;AAAA,IACnF,GAAI,YAAY,cAAc,EAAE,OAAO,EAAE,GAAI,WAAW,EAAE,MAAM,SAAS,IAAI,CAAC,GAAI,GAAI,cAAc,EAAE,SAAS,YAAY,IAAI,CAAC,EAAG,EAAE,IAAI,CAAC;AAAA,IAC1I,GAAI,KAAK,aAAa,QAAQ,EAAE,KAAK,EAAE,UAAU,MAAM,EAAE,IAAI,CAAC;AAAA,IAC9D,GAAI,OAAO,UAAU,iBAAiB,YAAY,EAAE,UAAU,EAAE,cAAc,SAAS,aAAa,EAAE,IAAI,CAAC;AAAA,EAC7G;AACF;AAGO,SAAS,0BACd,QACA,UAAqC,CAAC,GACZ;AAC1B,QAAM,WAAoC,CAAC;AAC3C,QAAM,aAA2C,CAAC;AAClD,QAAM,iBAAiB,oBAAI,IAAY;AACvC,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,aAAaA,aAAY,OAAO,UAAU,KAAK;AACrD,QAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,IAChD,WAAW,UAAU,QAAQ,CAAC,UAA0C;AACtE,UAAM,WAAWA,aAAY,KAAK;AAClC,QAAI,CAAC,SAAU,QAAO,CAAC;AACvB,QAAI;AACF,YAAM,OAAO,KAAK,oBAAoB,OAAO,SAAS,YAAY,SAAS,UAAU,IAAI,CAAC,EAAE,CAAC;AAC7F,aAAO,CAAC,EAAE,GAAG,UAAU,UAAU,KAAK,CAAC;AAAA,IACzC,QAAQ;AACN,eAAS,KAAK,EAAE,MAAM,sBAAsB,SAAS,iEAAiE,CAAC;AACvH,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC,IACD,CAAC;AACL,MAAI,OAAsC,CAAC;AAC3C,MAAI;AACJ,QAAM,kBAA6C,CAAC;AAEpD,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM,kBAAkB,UAAU,KAAK,CAAC,UAAU,MAAM,YAAY,IAAI,KAAK,UAAU,CAAC;AACxF,UAAM,gBAAgB,OAAO,gBAAgB,QAAQ;AACrD,UAAM,UAAU,UAAU,IAAI,CAAC,UAAU;AACvC,YAAM,OAAO,OAAO,MAAM,QAAQ;AAClC,UAAI,QAA4B,gBAAgB,IAAI;AACpD,UAAI;AACF,kBAAU,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG,EAAE,MAAM,WAAW,CAAC,EAAE,GAAG,IAAI,KAAK;AAAA,MAC5E,QAAQ;AAAA,MAER;AACA,aAAO,EAAE,MAAM,OAAO,SAAS,KAAK,YAAY,EAAE;AAAA,IACpD,CAAC;AACD,WAAO,EAAE,eAAe,QAAQ;AAChC,UAAM,iBAAiB,oBAAI,IAAY;AAGvC,eAAW,YAAY,CAAC,iBAAiB,GAAG,UAAU,OAAO,CAAC,UAAU,UAAU,eAAe,CAAC,GAAG;AACnG,YAAM,SAAS,OAAO,SAAS,QAAQ;AACvC,YAAM,UAA6B;AAAA,QACjC;AAAA,QACA;AAAA,QACA,YAAY,QAAQ;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa,kBAAkB,kBAAkB;AAAA,MACnD;AACA,UAAI,aAAa,iBAAiB;AAChC,eAAO;AACP,mBAAW,aAAa,WAAY,gBAAe,IAAI,UAAU,YAAY;AAAA,MAC/E;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,UAAU,EAAE,YAAY,gBAAgB,UAAU,aAAa,YAAY,QAAQ,WAAW;AACpG,WAAO,uBAAuB,YAAY,SAAS,iBAAiB,eAAe;AACnF,QAAI,KAAK,WAAW,KAAK,MAAM,QAAQ,OAAO,UAAU,GAAG;AACzD,YAAM,WAAW,wBAAwB,OAAO,YAAY,OAAO;AACnE,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,eAAe,SAAS,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ;AACrE,eAAO,CAAC;AAAA,UACN,KAAK;AAAA,UACL,GAAI,eACA,EAAE,OAAO,SAAS,IAClB,EAAE,QAAQ,SAA4C;AAAA,QAC5D,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,QAAM,YAAY,MAAM,QAAQ,OAAO,SAAS,IAC5C,OAAO,UAAU,QAAQ,CAAC,UAAU;AAClC,UAAM,WAAWA,aAAY,KAAK;AAClC,QAAI,CAAC,YAAY,OAAO,SAAS,WAAW,YAAY,OAAO,SAAS,gBAAgB,SAAU,QAAO,CAAC;AAC1G,UAAM,SAAS,SAAS,OAAO,KAAK;AACpC,UAAM,cAAc,SAAS,YAAY,KAAK;AAC9C,QAAI,CAAC,OAAO,WAAW,GAAG,KAAK,CAAC,YAAY,WAAW,GAAG,KACrD,OAAO,WAAW,IAAI,KAAK,YAAY,WAAW,IAAI,EAAG,QAAO,CAAC;AACtE,WAAO,CAAC;AAAA,MACN;AAAA,MACA;AAAA,MACA,GAAI,OAAO,SAAS,cAAc,YAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,IACrF,CAAC;AAAA,EACH,CAAC,IACD,CAAC;AACL,SAAO;AAAA,IACL,YAAY;AAAA,MACV;AAAA,MACA,GAAI,gBAAgB,sBAAsB,cACtC,EAAE,YAAY,EAAE,SAAS,WAAoB,EAAE,IAC/C,CAAC;AAAA,MACL,GAAG,0BAA0B,MAAM;AAAA,MACnC,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MACvB,GAAI,UAAU,SAAS,IAAI,EAAE,UAAU,IAAI,CAAC;AAAA,IAC9C;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAASO,WAAU,OAAuB;AACxC,SAAO,MACJ,MAAM,MAAM,EACZ,IAAI,CAAC,SAAS,CAAC,OAAO,OAAO,OAAO,IAAI,EAAE,SAAS,KAAK,YAAY,CAAC,IAClE,KAAK,YAAY,IACjB,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC/C,KAAK,GAAG;AACb;AAaA,IAAM,mBAA2C;AAAA,EAC/C,iBAAiB;AAAA,EACjB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,cAAc;AAAA,EACd,cAAc;AAAA,EACd,KAAK;AACP;AAEA,SAAS,cAAc,SAAyB;AAC9C,SAAO,iBAAiB,OAAO,KAAKA,WAAU,OAAO;AACvD;AAEA,SAAS,oBACP,SACA,SACA,eAAe,cAAc,OAAO,GACH;AACjC,QAAM,SAAS,oBAAI,IAA2B;AAC9C,aAAW,MAAM,SAAS;AACxB,UAAMJ,YAAW,OAAO,iBACpB,KACA,GAAG,WAAW,GAAG,OAAO,GAAG,IACzB,GAAG,MAAM,QAAQ,SAAS,CAAC,IAC3B;AACN,UAAM,gBAAgBA,UAAS,SAAS,GAAG,IAAIA,UAAS,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI;AAC3E,UAAM,QAAQ,OAAO,IAAI,aAAa,KAAK,CAAC;AAC5C,UAAM,KAAK,EAAE;AACb,WAAO,IAAI,eAAe,KAAK;AAAA,EACjC;AACA,SAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO;AAAA,IAC5C,OAAO,YAAY,aAAa,eAAeI,WAAU,OAAO;AAAA,IAChE;AAAA,EACF,EAAE;AACJ;AAEA,SAAS,qBACP,SACA,SACoB;AACpB,QAAM,aAAa;AAAA,IACjB,YAAY,iBAAiB,iBAAiB;AAAA,IAC9C,GAAG,OAAO;AAAA,IACV,GAAG,OAAO;AAAA,IACV;AAAA,EACF;AACA,SAAO,WAAW,KAAK,CAAC,cAAmC,QAAQ,aAAa,QAAQ,SAAS,SAAS,CAAC,CAAC;AAC9G;AAGO,SAAS,yBACd,OACA,UAAsC,CAAC,GAClB;AACrB,QAAM,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,UAAU,KAAK,WAAW,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY;AACxG,QAAM,UAAU,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;AAChC,MAAI,QAAQ,cAAc;AACxB,UAAM,oBAAoB,QAAQ,sBAAsB,CAAC,GAAG,QAAQ,CAAC,UAAU;AAC7E,YAAM,eAAe,QAAQ,OAAO,CAAC,OAAO,OAAO,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,OAAO,GAAG,CAAC;AACtG,YAAM,SAAS,QAAQ,SAAS,MAAM,MAAM,IACxC,MAAM,SACN,qBAAqB,MAAM,SAAS,YAAY,KAAK,aAAa,CAAC;AACvE,aAAO,SAAS,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAAA,IAC5C,CAAC;AACD,QAAI,iBAAiB,SAAS,GAAG;AAC/B,YAAM,aAAa,oBAAI,IAAY;AACnC,YAAM,OAAO,iBAAiB,IAAI,CAAC,UAAU;AAC3C,cAAM,UAAU,QAAQ,OAAO,CAAC,OAAO;AACrC,gBAAM,UAAU,OAAO,MAAM,UACxB,OAAO,MAAM,WACb,GAAG,WAAW,GAAG,MAAM,OAAO,GAAG;AACtC,cAAI,QAAS,YAAW,IAAI,EAAE;AAC9B,iBAAO;AAAA,QACT,CAAC;AACD,eAAO,EAAE,OAAO,QAAQ;AAAA,MAC1B,CAAC;AAGD,WAAK,CAAC,EAAE,QAAQ,KAAK,GAAG,QAAQ,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACnE,aAAO;AAAA,QACL,MAAM,KAAK,IAAI,CAAC,EAAE,OAAO,QAAQ,OAAO;AAAA,UACtC,KAAK,MAAM;AAAA,UACX,MAAM,MAAM,WAAW,iBAAiB,MAAM,IAAI,MAAM,MAAM;AAAA,UAC9D,QAAQ,oBAAoB,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,KAAK;AAAA,QAC/E,EAAE;AAAA,MACJ;AAAA,IACF;AACA,UAAM,eAAe,CAAC,GAAG,IAAI,IAAI,QAC9B,OAAO,CAAC,OAAO,GAAG,SAAS,GAAG,CAAC,EAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,QAAI,aAAa,SAAS,GAAG;AAC3B,YAAM,iBAAiB,aAAa,SAAS,cAAc,IACvD,iBACA,aAAa,CAAC;AAClB,YAAM,WAAW,oBAAI,IAA2B;AAChD,iBAAW,MAAM,SAAS;AACxB,cAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI;AACzD,cAAM,SAAS,SAAS,IAAI,OAAO,KAAK,CAAC;AACzC,eAAO,KAAK,EAAE;AACd,iBAAS,IAAI,SAAS,MAAM;AAAA,MAC9B;AACA,aAAO;AAAA,QACL,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,SAAS,OAAO,MAAM;AAC9C,gBAAM,QAAQ,cAAc,OAAO;AACnC,gBAAM,cAAc,qBAAqB,SAAS,OAAO;AACzD,iBAAO;AAAA,YACL,KAAK;AAAA,YACL,GAAI,cACA,EAAE,MAAM,gBAAgB,iBAAiB,MAAM,IAAI,WAAW,GAAG,IACjE,CAAC;AAAA,YACL,QAAQ,oBAAoB,SAAS,OAAO;AAAA,UAC9C;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,oBAAI,IAA2B;AAC/C,aAAW,MAAM,SAAS;AACxB,UAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI;AACzD,UAAM,SAAS,QAAQ,IAAI,OAAO,KAAK,CAAC;AACxC,WAAO,KAAK,EAAE;AACd,YAAQ,IAAI,SAAS,MAAM;AAAA,EAC7B;AACA,QAAM,SAAS,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO;AAAA,IACvD,OAAO,YAAY,aAAa,aAAaA,WAAU,OAAO;AAAA,IAC9D,OAAO;AAAA,EACT,EAAE;AACF,SAAO,EAAE,MAAM,CAAC,EAAE,KAAK,iBAAiB,OAAO,CAAC,EAAE;AACpD;AAGO,SAAS,yBAAyB,UAA2B;AAClE,SAAO,CAAC,OAAO,QAAQ,QAAQ,MAAM,EAAE,SAASC,SAAQ,QAAQ,EAAE,YAAY,CAAC;AACjF;;;AN/0BA,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,wBAAwB;AAC9B,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAS;AAAA,EAAU;AAAA,EAAW;AAAA,EACjD;AAAA,EAAgB;AAAA,EAAQ;AAAA,EAAS;AACnC,CAAC;AACD,IAAM,oBAAoB,oBAAI,IAAI,CAAC,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,CAAC;AAC1F,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAC1D;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AACnC,CAAC;AACD,IAAM,4BAA4B,oBAAI,IAAI;AAAA,EACxC;AAAA,EAAa;AAAA,EAAa;AAAA,EAAsB;AAAA,EAChD;AAAA,EAAc;AAAA,EAAa;AAC7B,CAAC;AACD,IAAM,sBAAsB,oBAAI,IAAI,CAAC,YAAY,aAAa,YAAY,WAAW,CAAC;AACtF,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAChC;AAAA,EAAgB;AAAA,EAAgB;AAClC,CAAC;AA8BD,IAAM,8BAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,oBAAoB,WAA4B;AACvD,SAAO,4BAA4B,KAAK,CAAC,aAAa;AACpD,UAAM,OAAO,cAAc,WAAW,QAAQ;AAC9C,WAAOC,YAAW,IAAI,KAAKC,WAAU,IAAI,EAAE,OAAO;AAAA,EACpD,CAAC;AACH;AAEA,SAAS,kBAAkB,WAA4B;AACrD,SAAO,CAAC,aAAa,WAAW,EAAE,KAAK,CAAC,aAAa;AACnD,UAAM,OAAO,cAAc,WAAW,QAAQ;AAC9C,QAAI,CAACD,YAAW,IAAI,KAAK,CAACC,WAAU,IAAI,EAAE,OAAO,EAAG,QAAO;AAC3D,QAAI,aAAa,YAAa,QAAO;AACrC,QAAI;AACF,YAAM,SAAS,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AACpD,aAAO,OAAO,OAAO,WAAW,EAAE,EAAE,SAAS,UAAU,KAAK,gBAAgB;AAAA,IAC9E,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,SAAS,wBAAwB,eAAuB,SAAiC;AACvF,MAAI,YAAY,QAAW;AACzB,QAAI,YAAY,oBAAoB,OAAO;AAC3C,WAAO,MAAM;AACX,YAAM,OAAO,cAAc,eAAe,aAAa,GAAG;AAC1D,UAAI,kBAAkB,IAAI,EAAG,QAAO;AACpC,UAAI,CAAC,UAAW;AAChB,YAAM,SAASC,SAAQ,SAAS;AAChC,kBAAY,WAAW,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AACA,QAAM,QAAqD,CAAC,EAAE,WAAW,eAAe,OAAO,EAAE,CAAC;AAClG,MAAI,UAAU;AACd,SAAO,MAAM,SAAS,KAAK,UAAU,KAAK;AACxC,UAAM,UAAU,MAAM,MAAM;AAC5B;AACA,QAAI,kBAAkB,QAAQ,SAAS,EAAG,QAAO,QAAQ;AACzD,QAAI,QAAQ,SAAS,EAAG;AACxB,eAAW,SAAS,YAAY,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AAC3E,UAAI,CAAC,MAAM,YAAY,KAAK,MAAM,eAAe,KAAK,oBAAoB,IAAI,MAAM,IAAI,EAAG;AAC3F,YAAM,KAAK,EAAE,WAAW,cAAc,QAAQ,WAAW,MAAM,IAAI,GAAG,OAAO,QAAQ,QAAQ,EAAE,CAAC;AAAA,IAClG;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,eAAuB,SAAiC;AACzF,MAAI,YAAY,QAAW;AACzB,QAAI,YAAY,oBAAoB,OAAO;AAC3C,WAAO,MAAM;AACX,YAAM,OAAO,cAAc,eAAe,aAAa,GAAG;AAC1D,UAAI,oBAAoB,IAAI,EAAG,QAAO;AACtC,UAAI,CAAC,UAAW;AAChB,YAAM,SAASA,SAAQ,SAAS;AAChC,kBAAY,WAAW,MAAM,KAAK;AAAA,IACpC;AAAA,EACF;AAEA,QAAM,QAAqD,CAAC,EAAE,WAAW,eAAe,OAAO,EAAE,CAAC;AAClG,MAAI,UAAU;AACd,SAAO,MAAM,SAAS,KAAK,UAAU,KAAK;AACxC,UAAM,UAAU,MAAM,MAAM;AAC5B;AACA,QAAI,oBAAoB,QAAQ,SAAS,EAAG,QAAO,QAAQ;AAC3D,QAAI,QAAQ,SAAS,EAAG;AACxB,eAAW,SAAS,YAAY,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AAC3E,UAAI,CAAC,MAAM,YAAY,KAAK,MAAM,eAAe,KAAK,oBAAoB,IAAI,MAAM,IAAI,EAAG;AAC3F,YAAM,KAAK;AAAA,QACT,WAAW,cAAc,QAAQ,WAAW,MAAM,IAAI;AAAA,QACtD,OAAO,QAAQ,QAAQ;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,aAA6B;AAC/D,QAAM,OAAO,4BACV,IAAI,CAAC,aAAa,cAAc,aAAa,QAAQ,CAAC,EACtD,KAAK,CAAC,cAAcH,YAAW,SAAS,KAAKC,WAAU,SAAS,EAAE,OAAO,CAAC;AAC7E,MAAI,CAAC,QAAQA,WAAU,IAAI,EAAE,OAAO,IAAW,QAAO;AACtD,SAAOC,cAAa,MAAM,MAAM;AAClC;AAEA,SAAS,+BAA+B,aAA6B;AACnE,QAAM,SAAS,2BAA2B,WAAW;AACrD,QAAM,aAAa,OAAO,MAAM,6DAA6D,IAAI,CAAC;AAClG,SAAO,oBAAoB,YAAY,QAAQ,SAAS,EAAE,KAAK,EAAE,KAAK;AACxE;AAEA,SAAS,gCACP,eACA,aAC6B;AAC7B,QAAM,SAAS,2BAA2B,WAAW;AACrD,QAAM,kBAAkBE,UAAS,eAAe,WAAW,EAAE,QAAQ,OAAO,GAAG;AAC/E,QAAM,UAAuC,CAAC;AAC9C,QAAM,UAAU;AAChB,aAAW,SAAS,OAAO,SAAS,OAAO,GAAG;AAC5C,UAAM,YAAY,oBAAoB,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,CAAC;AACnE,UAAM,cAAc,gBAAgB,MAAM,CAAC,CAAC;AAC5C,QAAI,CAAC,aAAa,CAAC,YAAa;AAChC,UAAM,UAAU,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACrE,UAAM,WAAW,cAAc,eAAe,OAAO;AACrD,QAAI,CAACJ,YAAW,QAAQ,KAAK,CAACC,WAAU,QAAQ,EAAE,YAAY,EAAG;AACjE,YAAQ,KAAK,EAAE,SAAS,YAAY,CAAC;AAAA,EACvC;AACA,SAAO;AACT;AAGO,SAAS,yBAAyB,QAAwC;AAC/E,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,MAAM;AAAA,EACtB,QAAQ;AACN,UAAM,IAAI,MAAM,uBAAuB,MAAM,EAAE;AAAA,EACjD;AACA,MAAI,IAAI,aAAa,YAAY,IAAI,SAAS,YAAY,MAAM,cAAc;AAC5E,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,MAAI,IAAI,YAAY,IAAI,YAAY,IAAI,MAAM;AAC5C,UAAM,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACA,QAAM,WAAW,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,kBAAkB;AAC/E,QAAM,CAAC,OAAO,OAAO,IAAI;AACzB,QAAM,OAAO,SAAS,QAAQ,WAAW,EAAE;AAC3C,QAAM,WAAW;AACjB,MAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,IAAI,GAAG;AACpE,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,MAAI,SAAS;AACb,MAAI,UAAU;AACd,MAAI,SAAS,CAAC,MAAM,UAAU,SAAS,CAAC,GAAG;AACzC,aAAS,SAAS,CAAC;AACnB,cAAU,SAAS,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACtC;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,sBAAsB,KAAK,IAAI,IAAI;AAAA,EAC/C;AACF;AAGA,eAAsB,sBACpB,QACA,WACe;AACf,QAAM,OAAO,CAAC,SAAS,WAAW,KAAK,iBAAiB;AACxD,MAAI,OAAO,WAAW,OAAQ,MAAK,KAAK,YAAY,OAAO,MAAM;AACjE,OAAK,KAAK,MAAM,OAAO,UAAU,SAAS;AAC1C,QAAM,IAAI,QAAc,CAACI,UAAS,WAAW;AAC3C,UAAM,QAAQ,MAAM,OAAO,MAAM,EAAE,OAAO,CAAC,UAAU,UAAU,MAAM,EAAE,CAAC;AACxE,QAAI,SAAS;AACb,UAAM,OAAO,YAAY,MAAM;AAC/B,UAAM,OAAO,GAAG,QAAQ,CAAC,UAAkB;AACzC,UAAI,OAAO,SAAS,KAAQ,WAAU;AAAA,IACxC,CAAC;AACD,UAAM,GAAG,SAAS,MAAM;AACxB,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,EAAG,CAAAA,SAAQ;AAAA,UACnB,QAAO,IAAI,MAAM,mBAAmB,OAAO,KAAK,IAAI,OAAO,IAAI,KAAK,OAAO,KAAK,KAAK,cAAc,IAAI,EAAE,EAAE,CAAC;AAAA,IACnH,CAAC;AAAA,EACH,CAAC;AACH;AAGO,SAAS,yBAAyB,eAAuB,SAAqC;AACnG,MAAI,wBAAwB,eAAe,OAAO,EAAG,QAAO;AAC5D,QAAM,eAAe,YAAY,SAAY,gBAAgB,cAAc,eAAe,WAAW,GAAG;AACxG,QAAM,WAAW,cAAc,cAAc,WAAW;AACxD,MAAIL,YAAW,QAAQ,GAAG;AACxB,QAAI;AACF,YAAM,SAAS,KAAK,MAAME,cAAa,UAAU,MAAM,CAAC;AACxD,UAAI,MAAM,QAAQ,OAAO,IAAI,EAAG,QAAO;AAAA,IACzC,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,CAAC,wBAAwB,wBAAwB,uBAAuB,EACzE,KAAK,CAAC,SAASF,YAAW,cAAc,eAAe,IAAI,CAAC,CAAC,EAAG,QAAO;AAC1E,MAAI,0BAA0B,aAAa,EAAG,QAAO;AACrD,MAAIA,YAAW,cAAc,eAAe,YAAY,CAAC,EAAG,QAAO;AACnE,MAAIA,YAAW,cAAc,eAAe,YAAY,CAAC,EAAG,QAAO;AACnE,MAAI,CAAC,oBAAoB,iBAAiB,EACvC,KAAK,CAAC,SAASA,YAAW,cAAc,eAAe,IAAI,CAAC,CAAC,EAAG,QAAO;AAC1E,MAAI,CAAC,oBAAoB,YAAY,EAClC,KAAK,CAAC,SAASA,YAAW,cAAc,eAAe,IAAI,CAAC,CAAC,EAAG,QAAO;AAC1E,SAAO;AACT;AAEA,SAAS,iBAAiB,WAAmB,QAAQ,GAAY;AAC/D,MAAI,QAAQ,EAAG,QAAO;AACtB,aAAW,SAAS,YAAY,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AACnE,QAAI,oBAAoB,IAAI,MAAM,IAAI,KAAK,MAAM,eAAe,EAAG;AACnE,UAAM,OAAO,cAAc,WAAW,MAAM,IAAI;AAChD,QAAI,MAAM,OAAO,KAAK,CAAC,OAAO,MAAM,EAAE,SAASM,SAAQ,MAAM,IAAI,EAAE,YAAY,CAAC,EAAG,QAAO;AAC1F,QAAI,MAAM,YAAY,KAAK,iBAAiB,MAAM,QAAQ,CAAC,EAAG,QAAO;AAAA,EACvE;AACA,SAAO;AACT;AAGO,SAAS,wBAAwB,eAA+B;AACrE,aAAW,aAAa,CAAC,QAAQ,iBAAiB,WAAW,SAAS,eAAe,aAAa,SAAS,UAAU,EAAE,GAAG;AACxH,UAAM,OAAO,cAAc,eAAe,SAAS;AACnD,QAAIN,YAAW,IAAI,KAAKC,WAAU,IAAI,EAAE,YAAY,KAAK,iBAAiB,IAAI,EAAG,QAAO;AAAA,EAC1F;AACA,SAAO;AACT;AAOA,SAAS,UAAU,MAAkC;AACnD,QAAM,QAA4B,CAAC;AACnC,WAAS,MAAM,WAAyB;AACtC,QAAI,MAAM,UAAU,iBAAkB;AACtC,eAAW,SAAS,YAAY,WAAW,EAAE,eAAe,KAAK,CAAC,GAAG;AACnE,UAAI,MAAM,UAAU,iBAAkB;AACtC,UAAI,oBAAoB,IAAI,MAAM,IAAI,KAAK,MAAM,eAAe,EAAG;AACnE,YAAM,OAAO,cAAc,WAAW,MAAM,IAAI;AAChD,UAAI,MAAM,YAAY,EAAG,OAAM,IAAI;AAAA,eAC1B,MAAM,OAAO,EAAG,OAAM,KAAK,EAAE,cAAc,MAAM,cAAcG,UAAS,MAAM,IAAI,EAAE,QAAQ,OAAO,GAAG,EAAE,CAAC;AAAA,IACpH;AAAA,EACF;AACA,QAAM,IAAI;AACV,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAuB;AACrD,SAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC,EAC5B,QAAQ,QAAQ,EAAE,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,wBAAwB,EAAE,EAClC,QAAQ,wBAAwB,EAAE,EAClC,QAAQ,uBAAuB,EAAE,KAAK;AAC3C;AAEA,SAAS,kBAAkB,OAAuB;AAChD,SAAO,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC,EAC5B,QAAQ,QAAQ,EAAE,EAClB,QAAQ,OAAO,GAAG,EAClB,QAAQ,wBAAwB,EAAE;AACvC;AAEA,SAAS,YAAY,OAA+C;AAClE,SAAO,MAAM,KAAK,CAAC,SAAS,kBAAkB,IAAI,SAAS,KAAK,YAAY,EAAE,YAAY,CAAC,CAAC,KAAK;AACnG;AAEA,SAAS,8BACP,QACA,OACoB;AACpB,QAAM,MAAM,QAAQ,OAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,OAAO,GAAG,IAClF,OAAO,MACP;AACJ,QAAM,aAAa,OAAO,KAAK,YAAY,WACvC,CAAC,IAAI,OAAO,IACZ,MAAM,QAAQ,KAAK,OAAO,IAAI,IAAI,QAAQ,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,IAAI,CAAC;AAC/G,aAAW,aAAa,YAAY;AAClC,QAAI,qBAAqB,KAAK,SAAS,EAAG;AAC1C,UAAM,MAAM,UAAU,MAAM,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,GAAG;AAChF,UAAM,QAAQ,MAAM,KAAK,CAAC,SAAS,KAAK,iBAAiB,GAAG;AAC5D,QAAI,MAAO,QAAO;AAAA,EACpB;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,QAAQ,mCAAmC,EAAE,EAAE,KAAK;AACnE;AAEA,SAAS,wBAAwB,YAAyC;AACxE,QAAM,aAAa,oBAAI,IAAoB;AAC3C,QAAM,UAAU;AAChB,aAAW,SAAS,WAAW,SAAS,OAAO,GAAG;AAChD,eAAW,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE;AAAA,EAC7E;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAiB,YAA4B;AACvE,QAAM,aAAa,wBAAwB,UAAU;AACrD,MAAI,WAAW,SAAS,EAAG,QAAO;AAClC,MAAI,QAAQ;AACZ,SAAO,QAAQ,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS;AACvC,UAAM,SAAS,KAAK,MAAM,mBAAmB,IAAI,CAAC;AAClD,QAAI,QAAQ;AACV,UAAI,CAAC,MAAO,SAAQ,OAAO,CAAC;AAAA,eACnB,OAAO,CAAC,MAAM,MAAO,SAAQ;AACtC,aAAO;AAAA,IACT;AACA,QAAI,MAAO,QAAO;AAClB,WAAO,KAAK,QAAQ,iCAAiC,CAAC,UAAU,SAAiB;AAC/E,aAAO,WAAW,IAAI,IAAI,KAAK;AAAA,IACjC,CAAC;AAAA,EACH,CAAC,EAAE,KAAK,IAAI;AACd;AAEA,SAAS,mBACP,YACA,aACA,gBACA,UACQ;AACR,QAAM,qBAAqB,WAAW,WAAW,QAAQ,IACrDA,UAAS,gBAAgB,cAAc,UAAU,WAAW,MAAM,SAAS,MAAM,CAAC,CAAC,EAAE,QAAQ,OAAO,GAAG,IACvG,WAAW,WAAW,GAAG,IACvBA,UAAS,gBAAgB,cAAc,UAAU,WAAW,QAAQ,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,OAAO,GAAG,IACpGA,UAAS,gBAAgB,YAAYD,SAAQ,WAAW,GAAG,UAAU,CAAC,EAAE,QAAQ,OAAO,GAAG;AAChG,QAAM,YAAY,cAAc,gBAAgB,kBAAkB;AAClE,gBAAc,gBAAgBC,UAAS,gBAAgB,SAAS,CAAC;AACjE,SAAO;AACT;AAEA,SAAS,qBACP,OACA,gBACA,UACqB;AACrB,QAAM,UAAU,oBAAI,IAAoB;AACxC,QAAM,UAAU;AAChB,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,KAAK,aAAa,MAAM,GAAG;AAC5C,QAAI,CAAC,SAAS,KAAK,CAAC,YAAY,oBAAoB,IAAI,QAAQ,YAAY,CAAC,CAAC,EAAG;AACjF,UAAM,2BAA2B,SAAS,KAAK,YAAY,EAAE,QAAQ,YAAY,EAAE;AACnF,UAAM,oBAAoB,yBACvB,MAAM,eAAe,EACrB,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AACV,QAAI,kBAAmB,SAAQ,IAAI,mBAAmB,KAAK,YAAY;AAAA,EACzE;AACA,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,CAAC,OAAO,MAAM,EAAE,SAASE,SAAQ,KAAK,YAAY,EAAE,YAAY,CAAC,EAAG;AACzE,UAAM,MAAMJ,cAAa,KAAK,cAAc,MAAM;AAClD,eAAW,SAAS,IAAI,SAAS,OAAO,GAAG;AACzC,UAAI;AACF,cAAM,YAAY,mBAAmB,MAAM,CAAC,GAAG,KAAK,cAAc,gBAAgB,QAAQ;AAC1F,YAAIF,YAAW,SAAS,KAAKC,WAAU,SAAS,EAAE,OAAO,GAAG;AAC1D,kBAAQ,IAAI,MAAM,CAAC,GAAG,SAAS;AAAA,QACjC;AAAA,MACF,QAAQ;AAAA,MAGR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,aACA,UACe;AACf,QAAM,cAAc,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG;AAC/D,QAAM,MAAM,cAAc,MAAM,MAAM,GAAG,EAAE,IAAI;AAC/C,MAAI,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,gCAAgC,KAAK,GAAG,EAAG,QAAO;AACrF,QAAM,cAAc,IAAI,OAAO,MAAM;AACrC,QAAM,WAAW,eAAe,IAAI,IAAI,MAAM,GAAG,WAAW,IAAI;AAChE,QAAM,SAAS,eAAe,IAAI,IAAI,MAAM,WAAW,IAAI;AAC3D,MAAI;AACJ,MAAI;AACF,kBAAc,mBAAmB,QAAQ;AAAA,EAC3C,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,CAAC,iBAAiB,IAAIK,SAAQ,WAAW,EAAE,YAAY,CAAC,EAAG,QAAO;AACtE,MAAI;AACF,UAAM,YAAY,YAAY,WAAW,GAAG,IACxC,cAAc,UAAU,YAAY,QAAQ,QAAQ,EAAE,CAAC,IACvD,cAAcH,SAAQ,WAAW,GAAG,WAAW;AAGnD,UAAM,eAAeC,UAAS,UAAU,SAAS,EAAE,QAAQ,OAAO,GAAG;AACrE,kBAAc,UAAU,YAAY;AACpC,QAAI,CAACJ,YAAW,SAAS,KAAK,CAACC,WAAU,SAAS,EAAE,OAAO,EAAG,QAAO;AACrE,UAAM,aAAa,mBAAmB,YAAY;AAClD,QAAI,CAAC,WAAY,QAAO;AACxB,UAAM,YAAY,IAAI,UAAU,GAAG,MAAM;AAGzC,WAAO,cAAc,IAAI,SAAS,MAAM;AAAA,EAC1C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4BAA4B,MAAc,aAAqB,UAA0B;AAChG,SAAO,KACJ,QAAQ,+CAA+C,CACtD,UACA,SACA,aACA,YACG;AACH,UAAM,YAAY,oBAAoB,aAAa,aAAa,QAAQ;AACxE,WAAO,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,KAAK;AAAA,EAC1D,CAAC,EACA,QAAQ,4CAA4C,CACnD,UACA,UACA,OACA,gBACG;AACH,UAAM,YAAY,oBAAoB,aAAa,aAAa,QAAQ;AACxE,WAAO,YAAY,GAAG,QAAQ,IAAI,KAAK,GAAG,SAAS,GAAG,KAAK,KAAK;AAAA,EAClE,CAAC;AACL;AAEA,SAAS,kBACP,KACA,aACA,gBACA,UACA,QAAQ,GACR,WAAW,gBACX,gBAAqC,oBAAI,IAAI,GACrC;AACR,MAAI,SAAS,EAAG,QAAO;AACvB,QAAM,WAAW,oBAAI,IAAoB;AACzC,QAAM,iBAAiB,IAAI;AAAA,IACzB;AAAA,IACA,CAAC,YAAY,eAAuB,eAAuB;AACzD,UAAI;AACF,cAAM,YAAY,mBAAmB,YAAY,aAAa,gBAAgB,QAAQ;AACtF,YAAI,CAACD,YAAW,SAAS,KAAK,CAACC,WAAU,SAAS,EAAE,OAAO,EAAG,OAAM,IAAI,MAAM,gBAAgB;AAC9F,cAAM,SAAS;AAAA,UACb,mBAAmBC,cAAa,WAAW,MAAM,CAAC;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACF;AACA,iBAAS,IAAI,eAAe,MAAM;AAClC,eAAO;AAAA,MACT,QAAQ;AACN,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,oBAAoB,UAAU;AAAA,UACvC,QAAQE,UAAS,gBAAgB,WAAW,EAAE,QAAQ,OAAO,GAAG;AAAA,QAClE,CAAC;AACD,iBAAS,IAAI,eAAe,iCAAiC,UAAU,MAAM;AAC7E,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAKA,aAAW,CAAC,eAAe,SAAS,KAAK,eAAe;AACtD,QAAI,SAAS,IAAI,aAAa,KAAK,CAAC,IAAI,OAAO,IAAI,aAAa,aAAa,EAAE,KAAK,cAAc,EAAG;AACrG,UAAM,SAAS;AAAA,MACb,mBAAmBF,cAAa,WAAW,MAAM,CAAC;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,aAAS,IAAI,eAAe,MAAM;AAAA,EACpC;AACA,MAAI,SAAS;AACb,aAAW,CAAC,eAAe,OAAO,KAAK,UAAU;AAC/C,aAAS,OACN,QAAQ,IAAI,OAAO,IAAI,aAAa,yBAAyB,GAAG,GAAG,CAAC,MAAM,eAAuB;AAChG,aAAO,mBAAmB,SAAS,UAAU;AAAA,IAC/C,CAAC,EACA,QAAQ,IAAI,OAAO,IAAI,aAAa,qCAAqC,aAAa,KAAK,GAAG,GAAG,CAAC,MAAM,eAAuB;AAC9H,aAAO,mBAAmB,SAAS,UAAU;AAAA,IAC/C,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,cAAc,QAA6B,UAAuC;AACzF,QAAM,OAAO,OAAO,KAAK,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE;AAClD,QAAM,SAAS,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,YAAY,EAAE,SAAS,KAAK,CAAC;AACvE,MAAI,OAAQ,QAAO,MAAM,EAAE,QAAQ,IAAI,QAAQ,IAAI,YAAY,MAAM;AAAA,MAChE,MAAK,KAAK,EAAE,KAAK,iBAAiB,KAAK,EAAE,QAAQ,IAAI,QAAQ,GAAG,EAAE,CAAC;AACxE,SAAO,EAAE,GAAG,QAAQ,KAAK;AAC3B;AAGA,SAAS,wBAAwB,WAAmB,eAAuB,UAA0B;AACnG,QAAM,MAAM,IAAI,IAAI,SAAS;AAM7B,QAAM,aAAa,IAAI,SAAS,YAAY,MAAM,eAC9C,sBAAsB,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,QAAQ,WAAW,EAAE,EAAE,YAAY,CAAC,KACxH,GAAG,IAAI,MAAM,GAAG,oBAAoB,IAAI,QAAQ,CAAC;AACrD,SAAO,KAAK,UAAU,CAAC,YAAYE,UAAS,eAAe,QAAQ,EAAE,QAAQ,OAAO,GAAG,CAAC,CAAC;AAC3F;AAGO,SAAS,kBAAkB,SAAsD;AACtF,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,WAAW,QAAQ,YAAY,yBAAyB,eAAe,QAAQ,OAAO;AAC5F,QAAM,sBAAsB,aAAa,aACrC,wBAAwB,eAAe,QAAQ,OAAO,IACtD;AACJ,QAAM,wBAAwB,aAAa,eACvC,0BAA0B,eAAe,QAAQ,OAAO,IACxD;AACJ,QAAM,qBAAqB,MAAM;AAC/B,QAAI,QAAQ,YAAY,QAAW;AACjC,YAAM,WAAW,cAAc,eAAe,QAAQ,WAAW,GAAG;AACpE,UAAI,aAAa,gBAAgB,oBAAoB,QAAQ,GAAG;AAC9D,cAAM,kBAAkBA,UAAS,eAAe,QAAQ,EAAE,QAAQ,OAAO,GAAG;AAC5E,eAAO,CAAC,iBAAiB,+BAA+B,QAAQ,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC7F;AACA,aAAO,QAAQ;AAAA,IACjB;AACA,QAAI,uBAAuB;AACzB,YAAM,kBAAkBA,UAAS,eAAe,qBAAqB,EAAE,QAAQ,OAAO,GAAG;AACzF,aAAO,CAAC,iBAAiB,+BAA+B,qBAAqB,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAC1G;AACA,QAAI,aAAa,cAAc,qBAAqB;AAClD,aAAOA,UAAS,eAAe,mBAAmB,EAAE,QAAQ,OAAO,GAAG;AAAA,IACxE;AACA,WAAO,aAAa,aAAa,KAAK,wBAAwB,aAAa;AAAA,EAC7E,GAAG;AACH,QAAM,WAAoC,CAAC;AAC3C,QAAM,gBAAgB,uBAAuB;AAC7C,QAAM,oBAAoB,aAAa,aACnC,wBAAwB,eAAe,UAAU,wBAAwB,QAAQ,WAAW,eAAe,aAAa,CAAC,IACzH;AACJ,MAAI,aAAkC,EAAE,MAAM,CAAC,EAAE;AACjD,QAAM,eAAe,oBAAI,IAAuD;AAChF,QAAM,oBAAoB,oBAAI,IAAuD;AACrF,QAAM,iBAAiB,oBAAI,IAAoB;AAC/C,MAAI,qBAAgD;AACpD,MAAI,iBAAiD;AAErD,MAAI,aAAa,YAAY;AAC3B,QAAI;AACF,YAAM,SAAS,mBAAmB,uBAAuB,aAAa;AACtE,UAAI,QAAQ;AACV,yBAAiB;AACjB,cAAM,YAAY,0BAA0B,MAAM;AAClD,qBAAa,UAAU;AACvB,iBAAS,KAAK,GAAG,UAAU,QAAQ;AACnC,mBAAW,CAAC,OAAO,SAAS,KAAK,UAAU,eAAe,QAAQ,GAAG;AACnE,gBAAM,MAAM,uBAAuB,UAAU,GAAG;AAIhD,cAAI,CAAC,aAAa,IAAI,GAAG,EAAG,cAAa,IAAI,KAAK,SAAS;AAC3D,gBAAM,WAAW,kBAAkB,UAAU,GAAG;AAChD,cAAI,CAAC,kBAAkB,IAAI,QAAQ,EAAG,mBAAkB,IAAI,UAAU,SAAS;AAC/E,cAAI,CAAC,eAAe,IAAI,GAAG,EAAG,gBAAe,IAAI,KAAK,KAAK;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,sCAAsC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACvG,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,aAAa,cAAc;AAC7B,QAAI;AACF,2BAAqB,QAAQ,yBAAyB,CAAC,wBACnD,OACA,uBAAuB,qBAAqB;AAAA,IAClD,SAAS,OAAO;AACd,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,gDAAgD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACjH,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,cAAc,cAAc,eAAe,iBAAiB;AAClE,MAAI,CAACJ,YAAW,WAAW,KAAK,CAACC,WAAU,WAAW,EAAE,YAAY,GAAG;AACrE,UAAM,IAAI,MAAM,2CAA2C,qBAAqB,GAAG,EAAE;AAAA,EACvF;AACA,QAAM,QAAQ,UAAU,WAAW;AACnC,QAAM,QAA8B,CAAC;AACrC,QAAM,SAAgC,CAAC;AACvC,QAAM,wBAAyD,CAAC;AAChE,QAAM,cAAc,oBAAI,IAAY;AACpC,MAAI,UAAU;AACd,MAAI,aAAa,MAAM;AAEvB,QAAM,eAAe,WAAW;AAChC,QAAM,iBAAiB,IAAI,IAAI,CAAC,GAAG,aAAa,OAAO,CAAC,EACrD,OAAO,CAAC,cAAc,CAAC,UAAU,UAAU,UAAU,WAAW,cAAc,aAAa,EAC3F,IAAI,CAAC,cAAc,UAAU,YAAY,CAAC;AAC7C,QAAM,eAA8D,CAAC;AACrE,QAAM,YAAY,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,UAAU;AACjD,UAAM,YAAY,eAAe,IAAI,uBAAuB,KAAK,YAAY,CAAC,KAAK,OAAO;AAC1F,UAAM,aAAa,eAAe,IAAI,uBAAuB,MAAM,YAAY,CAAC,KAAK,OAAO;AAC5F,WAAO,YAAY,cAAc,KAAK,aAAa,cAAc,MAAM,YAAY;AAAA,EACrF,CAAC;AACD,QAAM,iBAAiB,aAAa,cAAc,sBAC9C,qBAAqB,OAAO,eAAe,mBAAmB,IAC9D,oBAAI,IAAoB;AAC5B,aAAW,QAAQ,WAAW;AAC5B,QAAI,CAAC,yBAAyB,KAAK,YAAY,EAAG;AAClD,UAAM,iBAAiB,KAAK,aAAa,MAAM,GAAG;AAClD,QAAI,eAAe,KAAK,CAAC,YAAY,oBAAoB,IAAI,QAAQ,YAAY,CAAC,CAAC,KAC7E,aAAa,gBAAgB,SAAS,KAAK,YAAY,EAAE,WAAW,GAAG,GAAI;AAC/E;AACA;AAAA,IACF;AACA,UAAM,eAAe,CAAC,KAAK,aAAa,SAAS,GAAG,IAAI,SAAS,KAAK,YAAY,EAAE,YAAY,IAAI;AACpG,QAAI,0BAA0B,IAAI,YAAY,KAAK,CAAC,kBAAkB,IAAI,kBAAkB,KAAK,YAAY,CAAC,GAAG;AAC/G;AACA;AAAA,IACF;AACA,QAAI,CAAC,CAAC,OAAO,MAAM,EAAE,SAASK,SAAQ,KAAK,YAAY,EAAE,YAAY,CAAC,GAAG;AACvE;AACA,eAAS,KAAK,EAAE,MAAM,gBAAgB,SAAS,qEAAqE,QAAQ,KAAK,aAAa,CAAC;AAC/I;AAAA,IACF;AACA,UAAM,OAAOL,WAAU,KAAK,YAAY,EAAE;AAC1C,QAAI,OAAO,gBAAgB;AACzB;AACA,eAAS,KAAK,EAAE,MAAM,gBAAgB,SAAS,mDAAmD,QAAQ,KAAK,aAAa,CAAC;AAC7H;AAAA,IACF;AACA,UAAM,MAAM,uBAAuB,KAAK,YAAY;AACpD,UAAM,aAAa,kBAAkB,IAAI,kBAAkB,KAAK,YAAY,CAAC,KAAK,aAAa,IAAI,GAAG;AACtG,QAAI,SAAS,YAAY;AACzB,QAAI,eAAe,YAAY,gBAAgB,oBAAoB,KAAK,cAAc,aAAa,UAAU;AAC7G,QAAI,CAAC,cAAc,cAAc;AAC/B,iBAAW,SAAS,aAAa,SAAS;AACxC,cAAM,YAAY,2BAA2B,KAAK,cAAc,MAAM,MAAM,cAAc;AAC1F,YAAI,cAAc,KAAK,aAAc;AACrC,iBAAS,MAAM;AACf,uBAAe,oBAAoB,WAAW,aAAa,UAAU;AACrE;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,cAAc;AACjB;AACA,eAAS,KAAK,EAAE,MAAM,gBAAgB,SAAS,6CAA6C,QAAQ,KAAK,aAAa,CAAC;AACvH;AAAA,IACF;AACA,UAAM,kBAAkB,CAAC,UAAU,WAAW,cAAc;AAC5D,UAAM,KAAK,kBAAkB,eAAe,GAAG,MAAM,IAAI,YAAY;AACrE,QAAI,MAAM;AAAA,MACRC,cAAa,KAAK,cAAc,MAAM;AAAA,MACtC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,uBAAuB,yBAAyB;AAAA,MAChD;AAAA,IACF;AACA,QAAI,kBAAmB,OAAM,kBAAkB,UAAU,KAAK,KAAK,YAAY;AAC/E,QAAI;AACJ,UAAM,OAAO,kBAAkB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3B;AAAA,MACA,QAAQ,GAAG,QAAQ,SAAS,IAAIE,UAAS,eAAe,KAAK,YAAY,EAAE,QAAQ,OAAO,GAAG,CAAC;AAAA,MAC9F,GAAI,aAAa,eAAe;AAAA,QAC9B,iBAAiB,CAAC,aAAa,aAAa;AAC1C,gBAAM,WAAW,8BAA8B,KAAK,cAAc,aAAa,QAAQ;AACvF,gBAAM,cAAc,QAAQ,0BAA0B,SAClD,SACA,gBAAgB,QAAQ,qBAAqB;AACjD,cAAI,CAAC,aAAa;AAChB,mCAAuB,SAAS;AAChC,mBAAO,SAAS;AAAA,UAClB;AACA,gBAAM,uBAAuB,SAAS,SAAS,iBAAiB,iBAC5D,cACA,GAAG,WAAW,IAAI,SAAS,SAAS,YAAY;AACpD,gBAAM,oBAAoB,SAAS,SAAS,OAAO,iBAC/C,cACA,GAAG,WAAW,IAAI,SAAS,SAAS,EAAE;AAC1C,iCAAuB;AAAA,YACrB,GAAG,SAAS;AAAA,YACZ,cAAc;AAAA,UAChB;AACA,iBAAO;AAAA,YACL,GAAG,SAAS;AAAA,YACZ,IAAI;AAAA,YACJ,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF,IAAI,CAAC;AAAA,IACP,CAAC;AACD,QAAI,CAAC,MAAM;AACT;AACA;AAAA,IACF;AACA,QAAI,aAAa,cAAc,qBAAqB;AAClD,WAAK,OAAO,4BAA4B,KAAK,MAAM,KAAK,cAAc,mBAAmB;AAAA,IAC3F;AACA,QAAI,YAAY,IAAI,KAAK,EAAE,GAAG;AAC5B;AACA,eAAS,KAAK,EAAE,MAAM,aAAa,SAAS,gCAAgC,KAAK,EAAE,8BAA8B,QAAQ,KAAK,aAAa,CAAC;AAC5I;AAAA,IACF;AACA,gBAAY,IAAI,KAAK,EAAE;AACvB,UAAM,KAAK,IAAI;AACf,QAAI,aAAa,YAAY;AAC3B,YAAM,aAAa,kBAAkB,KAAK,YAAY;AAGtD,UAAI,eAAe,KAAK,MAAM,qBAAqB,KAAK,UAAU,GAAG;AACnE,qBAAa,KAAK,EAAE,QAAQ,IAAI,UAAU,IAAI,aAAa,IAAI,KAAK,EAAE,IAAI,WAAW,MAAM,CAAC;AAAA,MAC9F;AAAA,IACF;AACA,QAAI,sBAAsB;AACxB,4BAAsB,KAAK,EAAE,GAAG,sBAAsB,OAAO,KAAK,MAAM,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,0BAA0B,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,uBAAuB,KAAK,YAAY,CAAC,CAAC;AACtG,aAAW,CAAC,GAAG,KAAK,cAAc;AAChC,QAAI,CAAC,wBAAwB,IAAI,GAAG,GAAG;AACrC,eAAS,KAAK,EAAE,MAAM,gBAAgB,SAAS,wDAAwD,QAAQ,IAAI,CAAC;AAAA,IACtH;AAAA,EACF;AAEA,QAAM,sBAAsB,yBAAyB;AACrD,QAAM,mBAAmB,aAAa,gBAAgB,qBAAqB,CAAC,QAAQ,uBAChF,CAAC,UAAU,QAAQ,EAAE,QAAQ,CAAC,cAAc;AAC1C,UAAM,OAAO,cAAc,qBAAqB,SAAS;AACzD,QAAI,CAACJ,YAAW,IAAI,KAAK,CAACC,WAAU,IAAI,EAAE,YAAY,EAAG,QAAO,CAAC;AACjE,WAAO,UAAU,IAAI,EAAE,IAAI,CAAC,UAAU;AAAA,MACpC,GAAG;AAAA,MACH,cAAc,GAAG,SAAS,IAAI,KAAK,YAAY;AAAA,IACjD,EAAE;AAAA,EACJ,CAAC,IACD,CAAC;AACL,MAAI,kBAAkB;AACtB,aAAW,QAAQ,CAAC,GAAG,OAAO,GAAG,gBAAgB,GAAG;AAClD,UAAM,eAAe,KAAK,aAAa,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,YAAY;AACpE,QAAI,CAAC,iBAAiB,IAAIK,SAAQ,KAAK,YAAY,EAAE,YAAY,CAAC,EAAG;AACrE,QAAI,aAAa,cAAc,CAAC,kBAAkB,IAAI,YAAY,EAAG;AACrE,UAAM,OAAOL,WAAU,KAAK,YAAY,EAAE;AAC1C,QAAI,OAAO,mBAAmB,kBAAkB,OAAO,uBAAuB;AAC5E,eAAS,KAAK,EAAE,MAAM,iBAAiB,SAAS,0EAA0E,QAAQ,KAAK,aAAa,CAAC;AACrJ;AAAA,IACF;AACA,UAAM,qBAAqB,aAAa,gBAAgB,iBAAiB;AACzE,UAAM,YAAY,mBAAmB,iBAAiB,WAClD,KAAK,aAAa,MAAM,UAAU,MAAM,IACxC,qBACE,KAAK,aAAa,MAAM,UAAU,MAAM,IACxC,KAAK,YAAY;AACvB,QAAI,CAAC,UAAW;AAChB,WAAO,KAAK,EAAE,MAAM,WAAW,SAASC,cAAa,KAAK,YAAY,EAAE,CAAC;AACzE,uBAAmB;AAAA,EACrB;AAEA,MAAI,MAAM,UAAU,kBAAkB;AACpC,aAAS,KAAK,EAAE,MAAM,iBAAiB,SAAS,mCAAmC,gBAAgB,UAAU,CAAC;AAAA,EAChH;AACA,MAAI,aAAa,cAAc;AAC7B,UAAM,YAAY,4BAA4B;AAAA,MAC5C,UAAU;AAAA,MACV,aAAa;AAAA,MACb;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AACD,iBAAa,UAAU;AACvB,aAAS,KAAK,GAAG,UAAU,QAAQ;AACnC,eAAW,QAAQ,UAAU,gBAAgB;AAC3C,UAAI,YAAY,IAAI,KAAK,EAAE,EAAG;AAC9B,kBAAY,IAAI,KAAK,EAAE;AACvB,YAAM,KAAK,IAAI;AAAA,IACjB;AACA,UAAM,2BAA2B,IAAI;AAAA,MACnC,sBAAsB,IAAI,CAAC,eAAe,CAAC,WAAW,cAAc,UAAU,CAAC;AAAA,IACjF;AACA,eAAW,QAAQ,OAAO;AACxB,YAAM,aAAa,yBAAyB,IAAI,KAAK,YAAY;AACjE,UAAI,WAAY,MAAK,OAAO,uBAAuB,KAAK,MAAM,YAAY,qBAAqB;AAAA,IACjG;AAAA,EACF;AACA,MAAI,WAAW,KAAK,WAAW,EAAG,cAAa,yBAAyB,KAAK;AAC7E,QAAM,UAAU,8BAA8B,gBAAgB,KAAK,KAAK,YAAY,KAAK;AACzF,MAAI,SAAS;AACX,UAAM,WAAW,SAAS,QAAQ,YAAY;AAC9C,QAAI,CAAC,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,QAAQ,GAAG;AACpD,aAAO,KAAK,EAAE,MAAM,UAAU,SAASA,cAAa,QAAQ,YAAY,EAAE,CAAC;AAAA,IAC7E;AACA,iBAAa,cAAc,YAAY,QAAQ;AAAA,EACjD;AACA,MAAI,aAAa,YAAY;AAC3B,UAAM,UAAU,IAAI,KAAK,WAAW,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,SAAS,MAAM,CAAC;AACvF,UAAM,UAAU,aAAa,OAAO,CAAC,aAAa,CAAC,QAAQ,IAAI,SAAS,MAAM,CAAC;AAC/E,QAAI,QAAQ,SAAS,EAAG,cAAa,EAAE,GAAG,YAAY,WAAW,CAAC,GAAI,WAAW,aAAa,CAAC,GAAI,GAAG,OAAO,EAAE;AAC/G,iBAAa,6BAA6B,8BAA8B,YAAY,KAAK,GAAG,KAAK;AAAA,EACnG;AAEA,MAAI,aAAa,gBAAgB,yBAAyB,CAAC,QAAQ,uBAAuB;AACxF,eAAW,UAAU,gCAAgC,eAAe,qBAAqB,GAAG;AAC1F,UAAI,OAAO,YAAY,kBAAmB;AAC1C,YAAM,eAAe,kBAAkB;AAAA,QACrC,GAAG;AAAA,QACH,SAAS,OAAO;AAAA,QAChB,UAAU;AAAA,QACV,uBAAuB,OAAO;AAAA,QAC9B,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,QACvB,sBAAsB;AAAA,MACxB,CAAC;AACD,iBAAW,QAAQ,aAAa,OAAO;AACrC,YAAI,YAAY,IAAI,KAAK,EAAE,EAAG;AAC9B,oBAAY,IAAI,KAAK,EAAE;AACvB,cAAM,KAAK,IAAI;AAAA,MACjB;AACA,YAAM,aAAa,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC;AAC5D,iBAAW,SAAS,aAAa,QAAQ;AACvC,YAAI,WAAW,IAAI,MAAM,IAAI,EAAG;AAChC,mBAAW,IAAI,MAAM,IAAI;AACzB,eAAO,KAAK,KAAK;AAAA,MACnB;AACA,YAAM,cAAc,OAAO,YACxB,MAAM,OAAO,EACb,OAAO,OAAO,EACd,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AACX,iBAAW,KAAK,KAAK,GAAG,aAAa,WAAW,KAAK,IAAI,CAAC,KAAK,WAAW;AAAA,QACxE,GAAG;AAAA,QACH,KAAK,UAAU,IAAI,cAAc,GAAG,WAAW,KAAK,IAAI,GAAG;AAAA,MAC7D,EAAE,CAAC;AACH,eAAS,KAAK,GAAG,aAAa,QAAQ;AACtC,oBAAc,aAAa,MAAM;AACjC,iBAAW,aAAa,MAAM;AAAA,IAChC;AAAA,EACF;AAEA,MAAI,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,mEAAmE;AAC3G,SAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,oBAAoB,EAAE,gBAAgB,kBAAkB,MAAM,EAAE,IAAI,CAAC;AAAA,IACzE;AAAA,IACA,GAAI,iBAAiB;AAAA,MACnB,MAAM;AAAA,QACJ,GAAI,OAAO,eAAe,SAAS,WAAW,EAAE,MAAM,eAAe,KAAK,IAAI,CAAC;AAAA,QAC/E,GAAI,OAAO,eAAe,gBAAgB,WAAW,EAAE,aAAa,eAAe,YAAY,IAAI,CAAC;AAAA,MACtG;AAAA,IACF,IAAI,CAAC;AAAA,IACL;AAAA,IACA,OAAO,EAAE,YAAY,UAAU,MAAM,QAAQ,QAAQ;AAAA,EACvD;AACF;;;AOp8BA,SAAS,WAAW,OAAuB;AACzC,SAAO,KAAK,UAAU,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK,CAAC;AACzD;AAEA,SAAS,WAAW,QAAyB,MAAgD;AAC3F,SAAO;AAAA,IACL;AAAA,IACA,UAAU,WAAW,KAAK,KAAK,CAAC;AAAA,IAChC,KAAK,WAAW,aAAa,WAAW,KAAK,QAAQ,CAAC,KAAK;AAAA,IAC3D,gBAAgB,WAAW,KAAK,WAAW,CAAC;AAAA,IAC5C,KAAK,QAAQ,UAAU,WAAW,KAAK,KAAK,CAAC,KAAK;AAAA,IAClD,KAAK,SAAS,SAAS,IAAI,cAAc,KAAK,SAAS,IAAI,UAAU,EAAE,KAAK,IAAI,CAAC,MAAM;AAAA,IACvF,KAAK,OAAO,SAAS,WAAW,KAAK,IAAI,CAAC,KAAK;AAAA,IAC/C,KAAK,SAAS,iBAAiB;AAAA,IAC/B,KAAK,UAAU,kBAAkB;AAAA,IACjC,KAAK,UAAU,YAAY,WAAW,KAAK,OAAO,CAAC,KAAK;AAAA,IACxD,OAAO,eAAe,QAAQ,WAAW,WAAW,KAAK,MAAM,CAAC,KAAK;AAAA,IACrE;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL;AAAA,EACF,EAAE,OAAO,CAAC,SAAS,SAAS,IAAI,EAAE,KAAK,IAAI;AAC7C;AAGO,SAAS,qBACd,UACA,UACqB;AACrB,QAAM,OAAO,SAAS,KAAK,OAAO,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,WAAW;AAChF,QAAM,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,YAAY,CAAC,CAAC;AAC9D,QAAM,YAAY,oBAAI,IAAY;AAClC,WAAS,YAAY,QAAkD,CAAC,GAAS;AAC/E,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,SAAU,WAAU,IAAI,IAAI;AAAA,UAC3C,aAAY,KAAK,KAAK;AAAA,IAC7B;AAAA,EACF;AACA,aAAW,OAAO,MAAM;AACtB,gBAAY,IAAI,KAAK;AACrB,gBAAY,IAAI,MAAM;AAAA,EACxB;AACA,WAAS,YACP,QAAkD,CAAC,GACT;AAC1C,WAAO,MAAM,QAA2C,CAAC,SAAS;AAChE,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,UAAU,IAAI,IAAI,EAAG,QAAO,CAAC;AACjC,kBAAU,IAAI,IAAI;AAClB,eAAO,CAAC,IAAI;AAAA,MACd;AACA,YAAM,WAAW,YAAY,KAAK,KAAK;AACvC,aAAO,SAAS,SAAS,IAAI,CAAC,EAAE,GAAG,MAAM,OAAO,SAAS,CAAC,IAAI,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AACA,WAAS,aACP,QACiC;AACjC,WAAO,YAAY,UAAU,CAAC,CAAC;AAAA,EACjC;AACA,aAAW,OAAO,SAAS,MAAM;AAC/B,QAAI,IAAI,IAAI,YAAY,MAAM,YAAa;AAC3C,UAAM,YAAY;AAAA,MAChB,GAAG;AAAA,MACH,GAAI,IAAI,QAAQ,EAAE,OAAO,YAAY,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,MACrD,GAAI,IAAI,SAAS,EAAE,QAAQ,aAAa,IAAI,MAAM,EAAE,IAAI,CAAC;AAAA,IAC3D;AACA,SAAK,IAAI,SAAS,IAAI,WACjB,CAAC,UAAU,OAAO,UAClB,CAAC,UAAU,QAAQ,UACnB,CAAC,IAAI,QACL,CAAC,IAAI,IAAK;AACf,QAAI,CAAC,MAAM,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG;AACrC,WAAK,KAAK,SAAS;AACnB,YAAM,IAAI,IAAI,IAAI,YAAY,CAAC;AAC/B;AAAA,IACF;AACA,UAAM,SAAS,KAAK,KAAK,CAAC,SAAS,KAAK,IAAI,YAAY,MAAM,IAAI,IAAI,YAAY,CAAC;AACnF,QAAI,CAAC,OAAQ;AACb,UAAM,oBAAoB;AAAA,MACxB,GAAI,UAAU,SAAS,CAAC;AAAA,MACxB,GAAI,UAAU,UAAU,CAAC;AAAA,IAC3B;AACA,QAAI,UAAU,OAAO,QAAQ;AAC3B,aAAO,QAAQ,CAAC,GAAI,OAAO,SAAS,OAAO,UAAU,CAAC,GAAI,GAAG,iBAAiB;AAC9E,aAAO,OAAO;AAAA,IAChB,WAAW,UAAU,QAAQ,QAAQ;AACnC,UAAI,OAAO,MAAO,QAAO,QAAQ,CAAC,GAAG,OAAO,OAAO,GAAG,UAAU,MAAM;AAAA,UACjE,QAAO,SAAS,CAAC,GAAI,OAAO,UAAU,CAAC,GAAI,GAAG,UAAU,MAAM;AAAA,IACrE;AAAA,EACF;AACA,QAAM,YAAY,SAAS,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,WAAW,KAC9E,SAAS,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,WAAW;AACtE,MAAI,UAAW,MAAK,KAAK,SAAS;AAClC,QAAM,OAAO,SAAS,QAAQ,SAAS,OACnC;AAAA,IACE,eAAe,SAAS,MAAM,iBAAiB,SAAS,MAAM,iBAAiB;AAAA,IAC/E,SAAS,CAAC,GAAG,IAAI;AAAA,MACf,CAAC,GAAI,SAAS,MAAM,WAAW,CAAC,GAAI,GAAI,SAAS,MAAM,WAAW,CAAC,CAAE,EAClE,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC;AAAA,IAC1C,EAAE,OAAO,CAAC;AAAA,EACZ,IACA;AACJ,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA;AAAA;AAAA,IAGA,YAAY,SAAS,cAAc,SAAS;AAAA,IAC5C,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AACF;AAGO,SAAS,qBACd,QACA,UAAwF,CAAC,GAC3D;AAC9B,QAAM,SAAS,QAAQ,iBACnB,qBAAqB,QAAQ,gBAAgB,OAAO,UAAU,IAC9D,OAAO;AACX,SAAO;AAAA,IACL,GAAG,OAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MAC7B,MAAM,eAAe,KAAK,EAAE;AAAA,MAC5B,SAAS,WAAW,QAAQ,IAAI;AAAA,IAClC,EAAE;AAAA,IACF,GAAG,OAAO,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,UAAU,MAAM,IAAI,IAAI,SAAS,MAAM,QAAQ,EAAE;AAAA,IAC1F,IAAI,OAAO,kBAAkB,CAAC,GAAG,QAAQ,CAAC,SAAS,KAAK,SAAS,mCAC5D,QAAQ,8BAA8B,UAAa,OAAO,KAAK,YAAY,WAC5E,uBAAuB,QAAQ,2BAA2B,KAAK,OAAO,IACtE,CAAC,IAAI,CAAC;AAAA,IACV,EAAE,MAAM,aAAa,SAAS,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,EAAK;AAAA,EACvE;AACF;;;AC3IA,SAAS,YAAY;AACrB,OAAO,qBAAqB;AAC5B,SAAS,SAASK,YAAW,aAAa,qBAAqB;AAe/D,IAAM,oBAAoB;AAC1B,IAAM,0BAA0B;AAChC,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B;AACjC,IAAM,wBAAwB;AAC9B,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EACtC;AAAA,EAAa;AAAA,EAAkB;AAAA,EAAS;AAAA,EAAW;AAAA,EAAQ;AAAA,EAC3D;AAAA,EAAS;AAAA,EAAa;AAAA,EAAS;AAAA,EAAU;AAAA,EAAW;AAAA,EAAgB;AAAA,EAAU;AAAA,EAAS;AAAA,EACvF;AAAA,EAAS;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EACzG;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAe;AAAA,EAAwB;AAAA,EACvD;AAAA,EAAS;AAAA,EAAc;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAc;AAAA,EACjE;AAAA,EAAmB;AAAA,EACnB;AAAA,EAAkB;AAAA,EAAmB;AAAA,EAAiB;AAAA,EAAQ;AAAA,EAC9D;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAQ;AAAA,EACtE;AAAA,EAAO;AAAA,EAAW;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAc;AAC5D,CAAC;AACD,IAAM,eAAe,oBAAI,IAAI;AAAA,EAC3B;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAClE;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAClE;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAS;AAAA,EAAW;AACpD,CAAC;AACD,IAAM,qBAAqB;AAmBpB,SAAS,qBAAqB,OAAoB;AACvD,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,KAAK;AAAA,EACrB,QAAQ;AACN,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,MAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,GAAG;AAC/C,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,MAAI,IAAI,YAAY,IAAI,SAAU,OAAM,IAAI,MAAM,gDAAgD;AAClG,MAAI,OAAO;AACX,SAAO;AACT;AAEA,eAAe,iBAAiB,UAAqC;AACnE,QAAM,gBAAgB,OAAO,SAAS,QAAQ,IAAI,gBAAgB,KAAK,CAAC;AACxE,MAAI,gBAAgB,yBAA0B,OAAM,IAAI,MAAM,0DAA0D;AACxH,MAAI,CAAC,SAAS,KAAM,QAAO;AAC3B,QAAM,SAAS,SAAS,KAAK,UAAU;AACvC,QAAM,SAA4B,CAAC;AACnC,MAAI,OAAO;AACX,SAAO,MAAM;AACX,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,KAAM;AACV,YAAQ,MAAM;AACd,QAAI,OAAO,0BAA0B;AACnC,YAAM,OAAO,OAAO;AACpB,YAAM,IAAI,MAAM,0DAA0D;AAAA,IAC5E;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,QAAM,OAAO,IAAI,WAAW,IAAI;AAChC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,SAAK,IAAI,OAAO,MAAM;AACtB,cAAU,MAAM;AAAA,EAClB;AACA,SAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AACtC;AAGO,IAAM,0BAA4C,OAAO,KAAK,YAAY;AAC/E,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,SAAS;AAAA,MACP,QAAQ,QAAQ;AAAA,MAChB,cAAc;AAAA,IAChB;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,YAAY,QAAQ,IAAM;AAAA,EACpC,CAAC;AACD,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,iCAAiC,SAAS,MAAM,GAAG;AACrF,SAAO;AAAA,IACL,UAAU,IAAI,IAAI,SAAS,GAAG;AAAA,IAC9B,MAAM,MAAM,iBAAiB,QAAQ;AAAA,IACrC,aAAa,SAAS,QAAQ,IAAI,cAAc,KAAK;AAAA,IACrD,SAAS,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,EACxD;AACF;AAEA,SAAS,cAAc,QAAqB;AAC1C,QAAM,OAAO,OAAO,SAAS,QAAQ,QAAQ,EAAE,KAAK;AACpD,MAAI,SAAS,IAAK,QAAO;AACzB,QAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,SAAO,IAAI,SAAS,SAAS,IAAI,SAAS,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC;AACnE;AAEA,SAAS,sBACP,QACA,WACe;AACf,QAAM,aAAa,oBAAI,IAAY;AACnC,aAAW,YAAY,WAAW;AAChC,QAAI,CAAC,SAAU;AACf,UAAM,aAAa,CAAC,GAAG,YAAY,QAAQ,CAAC;AAC5C,QAAI,QAAQ,KAAK,SAAS,WAAW,GAAG;AACtC,YAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,iBAAW,KAAK,GAAG,EAAE,qBAAqB,EACvC,IAAI,CAAC,QAAQ,YAAY,EAAE,OAAO,EAAE,KAAK,MAAM,KAAK,EAAE,EACtD,IAAI,EACJ,OAAO,CAAC,SAAS,oDAAoD,KAAK,IAAI,CAAC,CAAC;AAAA,IACrF;AACA,eAAW,aAAa,YAAY;AAClC,UAAI;AACF,cAAM,WAAW,IAAI,IAAI,WAAW,SAAS,QAAQ;AACrD,YAAI,SAAS,WAAW,OAAO,OAAQ;AACvC,cAAM,QAAQ,SAAS,SAAS,QAAQ,4CAA4C,EAAE,KAAK;AAC3F,YAAI,UAAU,QAAQ,QAAQ,KAAK,EAAG,YAAW,IAAI,KAAK;AAAA,MAC5D,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM,EAAE,CAAC,KAAK;AACjF;AAEA,SAAS,UAAU,KAAU,QAAa,WAA4B;AACpE,MAAI,IAAI,WAAW,OAAO,UAAU,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAG,QAAO;AACxF,QAAM,OAAO,IAAI,SAAS,QAAQ,QAAQ,EAAE,KAAK;AACjD,MAAI,cAAc,IAAK,QAAO;AAC9B,SAAO,SAAS,aAAa,SAAS,GAAG,SAAS,SAAS,KAAK,WAAW,GAAG,SAAS,GAAG;AAC5F;AAEA,SAAS,mBAAmB,OAAe,MAAW,QAAa,WAA+B;AAChG,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,OAAO,IAAI;AAC/B,QAAI,OAAO;AACX,QAAI,CAAC,UAAU,KAAK,QAAQ,SAAS,EAAG,QAAO;AAC/C,QAAI,IAAI,SAAS,WAAW,WAAW,EAAG,QAAO;AACjD,QAAI,qCAAqC,KAAK,IAAI,QAAQ,KACrD,mBAAmB,KAAK,IAAI,QAAQ,EAAG,QAAO;AACnD,QAAI,wEAAwE,KAAK,IAAI,QAAQ,KACxF,8CAA8C,KAAK,IAAI,QAAQ,EAAG,QAAO;AAC9E,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,KAAkB;AAC3C,QAAM,WAAW,IAAI,SAAS,QAAQ,YAAY,EAAE,EAAE,QAAQ,QAAQ,EAAE,KAAK;AAC7E,SAAO,GAAG,IAAI,MAAM,GAAG,QAAQ,GAAG,IAAI,MAAM;AAC9C;AAEA,SAAS,aAAa,KAAU,WAAkC;AAChE,MAAI,OAAO,IAAI,SAAS,QAAQ,QAAQ,EAAE;AAC1C,MAAI,cAAc,KAAK;AACrB,QAAI,SAAS,GAAG,SAAS,MAAO,QAAO;AAAA,aAC9B,SAAS,UAAW,QAAO;AAAA,aAC3B,KAAK,WAAW,GAAG,SAAS,GAAG,EAAG,QAAO,KAAK,MAAM,UAAU,SAAS,CAAC;AAAA,EACnF;AACA,SAAO,oBAAoB,KAAK,QAAQ,QAAQ,EAAE,KAAK,gBAAgB,IAAI;AAC7E;AAEA,SAAS,yBAAyB,IAAoB;AACpD,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI,GAAG,MAAM,GAAG;AACvC,MAAI,aAAa,IAAI,OAAO,EAAG,QAAO,KAAK,SAAS,IAAI,KAAK,GAAG,OAAO;AACvE,aAAW,UAAU,cAAc;AACjC,QAAI,YAAY,GAAG,MAAM,iBAAkB;AAC3C,WAAO,CAAC,QAAQ,iBAAiB,GAAG,IAAI,EAAE,KAAK,GAAG;AAAA,EACpD;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,UAAqD;AAC9E,QAAM,UAAU,OAAO,QAAQ,SAAS,WAAW,CAAC,CAAC,EAClD,IAAI,CAAC,CAAC,KAAKC,MAAK,MAAM,GAAG,GAAG,IAAIA,UAAS,EAAE,EAAE,EAC7C,KAAK,GAAG;AACX,QAAM,QAAQ,GAAG,SAAS,KAAK,MAAM,GAAG,GAAO,CAAC,IAAI,OAAO,GAAG,YAAY;AAC1E,MAAI,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,mBAAmB,KACjE,MAAM,SAAS,aAAa,KAAK,MAAM,SAAS,aAAa,EAAG,QAAO;AAC5E,MAAI,MAAM,SAAS,YAAY,KAAK,MAAM,SAAS,cAAc,EAAG,QAAO;AAC3E,MAAI,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,YAAY,EAAG,QAAO;AACtE,MAAI,MAAM,SAAS,QAAQ,EAAG,QAAO;AACrC,MAAI,MAAM,SAAS,WAAW,EAAG,QAAO;AACxC,MAAI,MAAM,SAAS,WAAW,EAAG,QAAO;AACxC,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAe,KAA6C;AACtF,MAAI,SAAS;AACb,QAAM,SAAS,IAAI,GAAG;AACtB,SAAO,SAAS,MAAM,QAAQ;AAC5B,UAAM,cAAc,MAAM,QAAQ,QAAQ,MAAM;AAChD,QAAI,cAAc,EAAG,QAAO;AAC5B,QAAI,QAAQ,cAAc,OAAO;AACjC,WAAO,KAAK,KAAK,MAAM,KAAK,KAAK,EAAE,EAAG,UAAS;AAC/C,QAAI,MAAM,KAAK,MAAM,KAAK;AACxB,eAAS,QAAQ;AACjB;AAAA,IACF;AACA,QAAI,QAAQ;AACZ,QAAI,WAAW;AACf,QAAI,YAAY;AAChB,aAAS,QAAQ,OAAO,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACxD,YAAM,YAAY,MAAM,KAAK;AAC7B,UAAI,UAAU;AACZ,YAAI,UAAW,aAAY;AAAA,iBAClB,cAAc,KAAM,aAAY;AAAA,iBAChC,cAAc,IAAK,YAAW;AACvC;AAAA,MACF;AACA,UAAI,cAAc,KAAK;AACrB,mBAAW;AACX;AAAA,MACF;AACA,UAAI,cAAc,IAAK,UAAS;AAChC,UAAI,cAAc,KAAK;AACrB,iBAAS;AACT,YAAI,UAAU,EAAG;AACjB,YAAI;AACF,gBAAM,SAAS,KAAK,MAAM,MAAM,MAAM,OAAO,QAAQ,CAAC,CAAC;AACvD,iBAAO,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,IAChE,SACA;AAAA,QACN,QAAQ;AACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,aAAS,QAAQ;AAAA,EACnB;AACA,SAAO;AACT;AAOA,SAAS,uBAAuB,MAA8C;AAC5E,QAAM,IAAI,KAAK,IAAI;AACnB,QAAM,iBAAgC,CAAC;AACvC,IAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,YAAY;AACpC,UAAM,SAAS,EAAE,OAAO,EAAE,KAAK;AAC/B,eAAW,SAAS,OAAO,SAAS,oDAAoD,GAAG;AACzF,UAAI;AACF,cAAMC,WAAU,KAAK,MAAM,MAAM,CAAC,CAAC;AACnC,YAAI,OAAOA,aAAY,SAAU,gBAAe,KAAKA,QAAO;AAAA,MAC9D,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,eAAe,WAAW,EAAG,QAAO;AACxC,QAAM,UAAU,eAAe,KAAK,IAAI;AACxC,QAAM,aAAa,mBAAmB,SAAS,YAAY;AAC3D,QAAM,mBAAmB,mBAAmB,SAAS,WAAW;AAChE,MAAI,CAAC,cAAc,CAAC,iBAAkB,QAAO;AAC7C,SAAO;AAAA,IACL,GAAI,cAAc,CAAC;AAAA,IACnB,GAAI,mBAAmB,EAAE,YAAY,iBAAiB,IAAI,CAAC;AAAA,EAC7D;AACF;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,SAAO,MACJ,QAAQ,0BAA0B,IAAI,EACtC,QAAQ,aAAa,EAAE,EACvB,QAAQ,QAAQ,GAAG,EACnB,KAAK,EACL,MAAM,GAAG,GAAG;AACjB;AAEA,SAAS,kBAAkB,MAAsB;AAC/C,MAAI,iBAAiB;AACrB,MAAI,cAAc;AAClB,SAAO,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS;AACpC,UAAM,QAAQ,KAAK,MAAM,4BAA4B;AACrD,QAAI,SAAS,CAAC,gBAAgB;AAC5B,uBAAiB,MAAM,CAAC,EAAE,CAAC;AAC3B,oBAAc,MAAM,CAAC,EAAE;AACvB,aAAO;AAAA,IACT;AACA,QAAI,SAAS,MAAM,CAAC,EAAE,CAAC,MAAM,kBAAkB,MAAM,CAAC,EAAE,UAAU,eAC7D,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AAC3B,uBAAiB;AACjB,oBAAc;AACd,aAAO;AAAA,IACT;AACA,WAAO,iBAAiB,KAAK;AAAA,EAC/B,CAAC,EAAE,KAAK,IAAI;AACd;AAEA,SAAS,oBAAoB,OAAe,OAA8B;AACxE,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,YAAY,OAAO,YAAY,KAAK;AACtC,aAAS,QAAQ,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AAC5D,UAAI,MAAM,KAAK,MAAM,WAAW,MAAM,QAAQ,CAAC,MAAM,KAAM,QAAO,QAAQ;AAAA,IAC5E;AACA,WAAO;AAAA,EACT;AACA,MAAI,YAAY,KAAK;AACnB,UAAM,QAAQ,MAAM,MAAM,KAAK,EAAE,MAAM,UAAU;AACjD,WAAO,QAAQ,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,EAC3C;AACA,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,WAAS,QAAQ,OAAO,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACxD,UAAM,YAAY,MAAM,KAAK;AAC7B,QAAI,OAAO;AACT,UAAI,cAAc,SAAS,MAAM,QAAQ,CAAC,MAAM,KAAM,SAAQ;AAC9D;AAAA,IACF;AACA,QAAI,cAAc,OAAO,cAAc,OAAO,cAAc,KAAK;AAC/D,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,IAAK,UAAS;AAChC,QAAI,cAAc,KAAK;AACrB,eAAS;AACT,UAAI,UAAU,EAAG,QAAO,QAAQ;AAAA,IAClC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAsB;AACpD,QAAM,UAAU;AAChB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,aAAW,SAAS,KAAK,SAAS,OAAO,GAAG;AAC1C,UAAM,QAAQ,MAAM;AACpB,UAAM,aAAa,QAAQ,MAAM,CAAC,EAAE;AACpC,UAAM,MAAM,oBAAoB,MAAM,UAAU;AAChD,QAAI,QAAQ,KAAM;AAClB,cAAU,KAAK,MAAM,QAAQ,KAAK;AAClC,aAAS;AAAA,EACX;AACA,SAAO,WAAW,IAAI,OAAO,GAAG,MAAM,GAAG,KAAK,MAAM,MAAM,CAAC;AAC7D;AAEA,SAAS,mBAAmB,OAAwB;AAClD,QAAM,aAAa,MAChB,KAAK,EACL,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,8BAA8B,GAAG;AAC5C,SAAO,kCAAkC,KAAK,UAAU;AAC1D;AAEA,SAAS,yBAAyB,OAAwB;AACxD,QAAM,cAAc,IAAI,OAAO,SAAS,kBAAkB,qCAAqC,IAAI;AACnG,aAAW,SAAS,MAAM,SAAS,WAAW,GAAG;AAC/C,QAAI,mBAAmB,MAAM,CAAC,CAAC,EAAG,QAAO;AAAA,EAC3C;AACA,QAAM,kBAAkB,IAAI,OAAO,SAAS,kBAAkB,mDAAmD,IAAI;AACrH,aAAW,SAAS,MAAM,SAAS,eAAe,GAAG;AACnD,QAAI;AACF,UAAI,mBAAmB,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC,EAAG,QAAO;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAuB;AACrD,SAAO,MACJ,QAAQ,4BAA4B,EAAE,EACtC,QAAQ,iCAAiC,CAAC,WAAW,YAAoB,UAAkB;AAC1F,UAAM,OAAO,WAAW,MAAM,6BAA6B,IAAI,CAAC;AAChE,UAAM,aAAa,MAAM,QAAQ,YAAY,EAAE,EAAE,KAAK;AACtD,QAAI,CAAC,QAAQ,mBAAmB,IAAI,EAAG,QAAO;AAC9C,WAAO,IAAI,WAAW,QAAQ,MAAM,KAAK,CAAC,KAAK,IAAI;AAAA,EACrD,CAAC,EACA,QAAQ,wCAAwC,CAAC,WAAW,OAAe,YAAoB;AAC9F,WAAO;AAAA,EAAK,IAAI,OAAO,OAAO,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC;AAAA;AAAA,EACzD,CAAC,EACA,QAAQ,+BAA+B,CAAC,WAAW,YAAoB;AAAA,EAAK,QAAQ,KAAK,CAAC;AAAA,CAAI,EAC9F,QAAQ,mBAAmB,IAAI,EAC/B,QAAQ,8CAA8C,EAAE;AAC7D;AAEA,SAAS,uBAAuB,MAAc,WAA8C;AAC1F,QAAM,SAAwB,CAAC;AAC/B,MAAI,QAAuB,CAAC;AAC5B,MAAI,iBAAiB;AACrB,MAAI,cAAc;AAClB,QAAM,aAAa,MAAM;AACvB,QAAI,MAAM,WAAW,EAAG;AACxB,WAAO,KAAK,UAAU,MAAM,KAAK,IAAI,CAAC,CAAC;AACvC,YAAQ,CAAC;AAAA,EACX;AACA,aAAW,QAAQ,KAAK,MAAM,IAAI,GAAG;AACnC,UAAM,QAAQ,KAAK,MAAM,4BAA4B;AACrD,QAAI,SAAS,CAAC,gBAAgB;AAC5B,iBAAW;AACX,uBAAiB,MAAM,CAAC,EAAE,CAAC;AAC3B,oBAAc,MAAM,CAAC,EAAE;AACvB,aAAO,KAAK,IAAI;AAChB;AAAA,IACF;AACA,QAAI,gBAAgB;AAClB,aAAO,KAAK,IAAI;AAChB,UAAI,SAAS,MAAM,CAAC,EAAE,CAAC,MAAM,kBAAkB,MAAM,CAAC,EAAE,UAAU,eAC7D,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AAC3B,yBAAiB;AACjB,sBAAc;AAAA,MAChB;AACA;AAAA,IACF;AACA,UAAM,KAAK,IAAI;AAAA,EACjB;AACA,aAAW;AACX,SAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAS,uBAAuB,MAA6B;AAC3D,MAAI,iBAAiB;AACrB,MAAI,cAAc;AAClB,QAAM,eAAe,uBAAuB,MAAM,sBAAsB;AACxE,QAAM,YAAY,aAAa,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS;AACvD,UAAM,QAAQ,KAAK,MAAM,4BAA4B;AACrD,QAAI,SAAS,CAAC,gBAAgB;AAC5B,uBAAiB,MAAM,CAAC,EAAE,CAAC;AAC3B,oBAAc,MAAM,CAAC,EAAE;AACvB,aAAO;AAAA,IACT;AACA,QAAI,SAAS,MAAM,CAAC,EAAE,CAAC,MAAM,kBAAkB,MAAM,CAAC,EAAE,UAAU,eAC7D,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AAC3B,uBAAiB;AACjB,oBAAc;AACd,aAAO;AAAA,IACT;AACA,QAAI,eAAgB,QAAO;AAC3B,WAAO,uBAAuB,uBAAuB,KAClD,QAAQ,gCAAgC,CAAC,UAAU,aAAqB,gBAAwB;AAC/F,aAAO,mBAAmB,YAAY,QAAQ,UAAU,EAAE,CAAC,IAAI,cAAc;AAAA,IAC/E,CAAC,EACA,QAAQ,4BAA4B,CAAC,UAAU,eAAuB;AACrE,YAAM,SAAS,WAAW,MAAM,4BAA4B,IAAI,CAAC;AACjE,YAAM,cAAc,WAAW,MAAM,4BAA4B,IAAI,CAAC,KAAK;AAC3E,UAAI,CAAC,UAAU,mBAAmB,MAAM,EAAG,QAAO;AAClD,aAAO,KAAK,YAAY,QAAQ,MAAM,KAAK,CAAC,KAAK,MAAM;AAAA,IACzD,CAAC,CAAC,CAAC;AAAA,EACP,CAAC,EAAE,KAAK,IAAI;AACZ,QAAM,aAAa,kBAAkB,SAAS,EAC3C,QAAQ,yBAAyB,EAAE,EACnC,QAAQ,oCAAoC,EAAE,EAC9C,QAAQ,mBAAmB,EAAE;AAChC,MAAI,2BAA2B,KAAK,UAAU,EAAG,QAAO;AAIxD,MAAI,sBAAsB;AAC1B,QAAM,qBAAqB,WAAW,QAAQ,oBAAoB,CAAC,UAAU,UAAkB;AAC7F,QAAI;AACF,WAAK,MAAM,KAAK;AAChB,aAAO;AAAA,IACT,QAAQ;AACN,4BAAsB;AACtB,aAAO;AAAA,IACT;AAAA,EACF,CAAC,EAAE,QAAQ,WAAW,EAAE;AACxB,MAAI,uBAAuB,OAAO,KAAK,kBAAkB,KACpD,0BAA0B,KAAK,kBAAkB,KACjD,yBAAyB,UAAU,EAAG,QAAO;AAClD,aAAW,SAAS,mBAAmB,SAAS,yCAAyC,GAAG;AAC1F,UAAM,YAAY,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;AAC1C,QAAI,CAAC,wBAAwB,IAAI,SAAS,EAAG,QAAO;AAAA,EACtD;AACA,SAAO;AACT;AAEA,SAAS,aACP,MACA,YACA,QACA,WACA,aACA,kBACQ;AACR,MAAI,kCAAkC,KAAK,IAAI,EAAG,QAAO;AACzD,MAAI,KAAK,WAAW,GAAG,KAAK,oBAAoB,KAAK,IAAI,EAAG,QAAO;AACnE,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,MAAM,UAAU;AACvC,QAAI,OAAO,WAAW,OAAO,OAAQ,QAAO;AAC5C,QAAI,cAAc,OAAO,kBAAkB,MAAM,MAAM,kBAAkB,MAAM,GAAG;AAChF,aAAO,IAAI,OAAO,MAAM,GAAG,OAAO,IAAI;AAAA,IACxC;AACA,QAAI,OAAO,OAAO;AAClB,QAAI,cAAc,QAAQ,SAAS,aAAa,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI;AACjF,aAAO,KAAK,MAAM,UAAU,MAAM;AAAA,IACpC;AACA,UAAM,KAAK,oBAAoB,KAAK,QAAQ,QAAQ,EAAE,KAAK,cAAc;AACzE,UAAM,cAAc,KAAK,yBAAyB,EAAE,IAAI;AACxD,UAAM,gBAAgB,gBAAgB,mBAAmB,iBAAiB;AAC1E,QAAI,wBAAwB,iBAAiB,YAAY,IAAI,aAAa,IACtE,gBACA;AACJ,QAAI,iBAAiB,CAAC,uBAAuB;AAC3C,8BAAwB,CAAC,GAAG,aAAa,aAAa,GAAG,aAAa,eAAe,EAClF,KAAK,CAAC,cAAc,YAAY,IAAI,SAAS,CAAC,KAC5C,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,cAAc,UAAU,WAAW,GAAG,aAAa,GAAG,CAAC;AAAA,IACrF;AACA,QAAI,uBAAuB;AACzB,YAAM,cAAc,0BAA0B,iBAAiB,MAAM,IAAI,qBAAqB;AAC9F,aAAO,GAAG,WAAW,GAAG,OAAO,MAAM,GAAG,OAAO,IAAI;AAAA,IACrD;AAGA,WAAO,OAAO,SAAS;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBACP,MACA,YACA,QACA,WACA,aACA,kBACQ;AACR,QAAM,WAAW,KAAK,QAAQ,wDAAwD,CACpF,UACA,OACA,MACA,QAAQ,OACL;AACH,UAAM,cAAc,aAAa,MAAM,YAAY,QAAQ,WAAW,aAAa,gBAAgB;AACnG,WAAO,gBAAgB,OAAO,WAAW,IAAI,KAAK,KAAK,WAAW,GAAG,KAAK;AAAA,EAC5E,CAAC;AACD,SAAO,SAAS,QAAQ,4BAA4B,CAAC,WAAW,OAAe,SAAiB;AAC9F,UAAM,cAAc,aAAa,MAAM,YAAY,QAAQ,WAAW,aAAa,gBAAgB;AACnG,WAAO,QAAQ,KAAK,GAAG,WAAW,GAAG,KAAK;AAAA,EAC5C,CAAC;AACH;AAEA,SAAS,uBAAuB,MAS9B;AACA,MAAI,CAAC,YAAY,KAAK,IAAI,EAAG,QAAO,EAAE,SAAS,KAAK;AACpD,QAAM,MAAM,KAAK,MAAM,GAAG,KAAM,EAAE,OAAO,qBAAqB;AAC9D,MAAI,MAAM,EAAG,QAAO,EAAE,SAAS,KAAK;AACpC,QAAM,cAAc,KAAK,MAAM,GAAG,MAAM,CAAC;AACzC,QAAM,eAAe,MAAM,IAAI,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM,sBAAsB,EAAG,CAAC,EAAE;AACrF,WAAS,OAAO,KAAiC;AAC/C,UAAM,QAAQ,YAAY,MAAM,IAAI,OAAO,IAAI,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK;AAChF,QAAI,CAAC,MAAO,QAAO;AACnB,QAAI,eAAe,KAAK,KAAK,GAAG;AAC9B,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,MAAM,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG,CAAC;AACrE,eAAO,OAAO,WAAW,WAAW,SAAS;AAAA,MAC/C,QAAQ;AACN,eAAO,MAAM,MAAM,GAAG,EAAE;AAAA,MAC1B;AAAA,IACF;AACA,WAAO,MAAM,MAAM,GAAG,GAAG;AAAA,EAC3B;AACA,SAAO;AAAA,IACL,SAAS,KAAK,MAAM,YAAY;AAAA,IAChC,OAAO,OAAO,OAAO;AAAA,IACrB,aAAa,OAAO,aAAa;AAAA,IACjC,cAAc,OAAO,cAAc;AAAA,IACnC,KAAK,OAAO,KAAK;AAAA,IACjB,MAAM,OAAO,MAAM;AAAA,IACnB,QAAQ,OAAO,QAAQ,MAAM,SAAS,OAAO;AAAA,IAC7C,SAAS,OAAO,SAAS,MAAM,SAAS,OAAO;AAAA,EACjD;AACF;AAEA,SAAS,gCAAgC,MAAsB;AAC7D,QAAM,QAAQ,KAAK,MAAM,OAAO;AAChC,MAAI,CAAC,qCAAqC,KAAK,MAAM,CAAC,KAAK,EAAE,KACxD,CAAC,6BAA6B,KAAK,MAAM,CAAC,KAAK,EAAE,KACjD,CAAC,oCAAoC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAG,QAAO;AACvE,MAAI,QAAQ;AACZ,SAAO,QAAQ,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,CAAC,EAAG,UAAS;AACjE,SAAO,QAAQ,MAAM,UAAU,MAAM,KAAK,EAAE,KAAK,MAAM,GAAI,UAAS;AACpE,SAAO,MAAM,MAAM,KAAK,EAAE,KAAK,IAAI;AACrC;AAEA,SAAS,uBAAuB,SAI9B;AACA,QAAM,eAAe;AACrB,QAAM,QAAQ,aAAa,KAAK,OAAO;AACvC,MAAI,CAAC,MAAO,QAAO,EAAE,QAAQ;AAC7B,MAAI;AACF,UAAM,SAASC,WAAU,MAAM,CAAC,GAAG,EAAE,eAAe,GAAG,CAAC;AACxD,QAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,QAAO,EAAE,QAAQ;AACrF,UAAM,WAAW;AACjB,QAAI,OAAO,SAAS,YAAY,YAAY,OAAO,SAAS,YAAY,SAAU,QAAO,EAAE,QAAQ;AACnG,UAAM,SAAS,MAAM,CAAC,EAAE,YAAY;AACpC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO,EAAE,QAAQ;AAClF,UAAM,WAAY,MAAkC,IAAI;AACxD,QAAI,CAAC,YAAY,OAAO,aAAa,YAAY,MAAM,QAAQ,QAAQ,KAClE,EAAE,MAAM,CAAC,EAAE,YAAY,KAAK,UAAW,QAAO,EAAE,QAAQ;AAC7D,UAAM,SAAS,QAAQ,MAAM,GAAG,MAAM,KAAK,EAAE,QAAQ,kCAAkC,IAAI;AAC3F,UAAM,QAAQ,QAAQ,MAAM,MAAM,QAAQ,MAAM,CAAC,EAAE,MAAM;AACzD,WAAO;AAAA,MACL,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AAAA,MAClC,SAAS,GAAG,MAAM,IAAI,IAAI;AAAA,MAC1B,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,QAAQ;AAAA,EACnB;AACF;AAEA,SAAS,aAAa,UAAkC,IAGtD;AACA,QAAM,SAAS,uBAAuB,SAAS,IAAI;AACnD,MAAI,UAAU,gCAAgC,OAAO,OAAO,EAAE,UAAU;AACxE,QAAM,aAAa,QAAQ,MAAM,gBAAgB;AACjD,QAAM,QAAQ,OAAO,SAAS,aAAa,CAAC,KAAK,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK;AACzE,MAAI,WAAY,WAAU,QAAQ,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU;AACxE,MAAI,cAAc,OAAO;AACzB,MAAI,CAAC,aAAa;AAChB,UAAM,aAAa,QAAQ,MAAM,sCAAsC;AACvE,QAAI,YAAY;AACd,oBAAc,iBAAiB,WAAW,CAAC,EAAE,QAAQ,WAAW,EAAE,CAAC;AACnE,gBAAU,QAAQ,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU;AAAA,IAC1D;AAAA,EACF;AAIA,QAAM,kBAAkB,uBAAuB,OAAO;AACtD,QAAM,MAAM;AAAA,IACV;AAAA,IACA,UAAU,KAAK,UAAU,KAAK,CAAC;AAAA,IAC/B,GAAI,cAAc,CAAC,gBAAgB,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,CAAC;AAAA,IACrE,GAAI,OAAO,eAAe,CAAC,iBAAiB,KAAK,UAAU,OAAO,YAAY,CAAC,EAAE,IAAI,CAAC;AAAA,IACtF,GAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC;AAAA,IAC3D,GAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,IAC9D,GAAI,OAAO,SAAS,CAAC,cAAc,IAAI,CAAC;AAAA,IACxC,GAAI,OAAO,UAAU,CAAC,eAAe,IAAI,CAAC;AAAA,IAC1C,GAAI,gBAAgB,UAAU,CAAC,YAAY,KAAK,UAAU,gBAAgB,OAAO,CAAC,EAAE,IAAI,CAAC;AAAA,IACzF;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,EAClB,EAAE,KAAK,IAAI;AACX,SAAO;AAAA,IACL,MAAM,kBAAkB,EAAE,IAAI,KAAK,QAAQ,SAAS,SAAS,SAAS,EAAE,CAAC;AAAA,IACzE,iBAAiB,gBAAgB;AAAA,EACnC;AACF;AAEA,SAAS,YAAY,QAAiC,QAAuB;AAC3E,MAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG;AACpE,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,CAAC,aAAa,eAAe,WAAW,EAAE,SAAS,GAAG,EAAG;AAC7D,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACtD,aAAO,GAAG,IAAI;AACd;AAAA,IACF;AACA,UAAM,UAAU,OAAO,GAAG;AAC1B,QAAI,WAAW,SAAS,OAAO,YAAY,YAAY,OAAO,UAAU,YACnE,CAAC,MAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,QAAQ,KAAK,GAAG;AACrD,kBAAY,SAAoC,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,WAA8D;AAC1F,QAAM,QAAQ,UAAU,CAAC;AACzB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,WAAoC;AAAA,IACxC,GAAG,MAAM;AAAA,IACT,OAAO,CAAC;AAAA,IACR,YAAY,CAAC;AAAA,EACf;AACA,QAAM,gBAAgB,SAAS;AAC/B,QAAM,qBAAqB,SAAS;AACpC,QAAM,OAAO,oBAAI,IAAqB;AACtC,aAAW,YAAY,WAAW;AAChC,UAAM,cAAc,SAAS,SAAS;AACtC,UAAM,iBAAiB,cAAc,SAAS,IAAI;AAClD,QAAI,CAAC,kBAAkB,OAAO,mBAAmB,YAAY,MAAM,QAAQ,cAAc,EAAG;AAC5F,UAAM,kBAAmB,eAA2C,SAAS,OAAO,YAAY,CAAC;AACjG,QAAI,CAAC,mBAAmB,OAAO,oBAAoB,YAAY,MAAM,QAAQ,eAAe,EAAG;AAC/F,UAAM,YAAY,EAAE,GAAI,gBAA4C;AACpE,QAAI,CAAC,UAAU,WAAW,MAAM,QAAQ,SAAS,SAAS,OAAO,EAAG,WAAU,UAAU,SAAS,SAAS;AAC1G,QAAI,CAAC,UAAU,YAAY,MAAM,QAAQ,SAAS,SAAS,QAAQ,EAAG,WAAU,WAAW,SAAS,SAAS;AAC7G,UAAM,eAAe,cAAc,SAAS,IAAI;AAChD,UAAM,WAAW,gBAAgB,OAAO,iBAAiB,YAAY,CAAC,MAAM,QAAQ,YAAY,IAC5F,eACA,CAAC;AACL,eAAW,aAAa,CAAC,cAAc,WAAW,WAAW,aAAa,GAAG;AAC3E,YAAM,cAAe,eAA2C,SAAS;AACzE,UAAI,gBAAgB,UAAa,SAAS,SAAS,MAAM,OAAW,UAAS,SAAS,IAAI;AAAA,IAC5F;AACA,aAAS,SAAS,OAAO,YAAY,CAAC,IAAI;AAC1C,kBAAc,SAAS,IAAI,IAAI;AAC/B,gBAAY,oBAAoB,SAAS,SAAS,UAAU;AAC5D,eAAW,OAAO,MAAM,QAAQ,SAAS,SAAS,IAAI,IAAI,SAAS,SAAS,OAAO,CAAC,GAAG;AACrF,UAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,MAAM,QAAQ,GAAG,EAAG;AAC3D,YAAM,OAAQ,IAAgC;AAC9C,UAAI,OAAO,SAAS,YAAY,CAAC,KAAK,IAAI,IAAI,EAAG,MAAK,IAAI,MAAM,GAAG;AAAA,IACrE;AAAA,EACF;AACA,MAAI,OAAO,KAAK,aAAa,EAAE,WAAW,EAAG,QAAO;AACpD,MAAI,OAAO,KAAK,kBAAkB,EAAE,WAAW,EAAG,QAAO,SAAS;AAClE,MAAI,KAAK,OAAO,EAAG,UAAS,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC;AACpD,SAAO,IAAI,YAAY,EAAE,OAAO,cAAc,QAAQ,CAAC;AACzD;AAEA,SAAS,SACP,UACA,IACsD;AACtD,QAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,QAAM,QAAQ,EAAE,mEAAmE,EAChF,IAAI,CAAC,QAAQ,YAAY,EAAE,OAAO,EAAE,KAAK,MAAM,KAAK,EAAE,EACtD,IAAI,EACJ,OAAO,OAAO;AACjB,QAAM,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAC1D,EAAE,2BAA2B,EAAE,KAAK,SAAS,GAAG,KAAK,KACrD,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAC1C,QAAM,cAAc,EAAE,0BAA0B,EAAE,KAAK,SAAS,GAAG,KAAK,KACnE,EAAE,iCAAiC,EAAE,KAAK,SAAS,GAAG,KAAK;AAChE,QAAM,UAAU,EAAE,4CAA4C,EAAE,MAAM;AACtE,QAAM,OAAO,QAAQ,SAAS,UAAU,EAAE,MAAM;AAChD,OAAK,KAAK,6FAA6F,EAAE,OAAO;AAChH,OAAK,KAAK,qGAAqG,EAAE,OAAO;AACxH,OAAK,KAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,YAAY;AAC7C,UAAM,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM;AACnC,QAAI,CAAC,KAAM;AACX,QAAI;AACF,YAAM,WAAW,IAAI,IAAI,MAAM,SAAS,QAAQ;AAChD,UAAI,CAAC,SAAS,UAAU,WAAW,MAAM,EAAE,SAAS,SAAS,QAAQ,GAAG;AACtE,UAAE,OAAO,EAAE,KAAK,QAAQ,SAAS,SAAS,CAAC;AAAA,MAC7C,OAAO;AACL,UAAE,OAAO,EAAE,WAAW,MAAM;AAAA,MAC9B;AAAA,IACF,QAAQ;AACN,QAAE,OAAO,EAAE,WAAW,MAAM;AAAA,IAC9B;AAAA,EACF,CAAC;AACD,OAAK,KAAK,UAAU,EAAE,KAAK,CAAC,QAAQ,YAAY;AAC9C,UAAM,MAAM,EAAE,OAAO,EAAE,KAAK,KAAK;AACjC,QAAI,CAAC,IAAK;AACV,QAAI;AACF,YAAM,WAAW,IAAI,IAAI,KAAK,SAAS,QAAQ;AAC/C,UAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,SAAS,QAAQ,GAAG;AACnD,UAAE,OAAO,EAAE,KAAK,OAAO,SAAS,SAAS,CAAC;AAAA,MAC5C,OAAO;AACL,UAAE,OAAO,EAAE,WAAW,KAAK;AAAA,MAC7B;AAAA,IACF,QAAQ;AACN,QAAE,OAAO,EAAE,WAAW,KAAK;AAAA,IAC7B;AAAA,EACF,CAAC;AACD,QAAM,WAAW,IAAI,gBAAgB,EAAE,gBAAgB,UAAU,aAAa,KAAK,cAAc,MAAM,CAAC;AACxG,WAAS,OAAO,CAAC,UAAU,SAAS,UAAU,CAAC;AAC/C,WAAS,QAAQ,yBAAyB;AAAA,IACxC,QAAQ,CAAC,SAAS,KAAK,aAAa,SAC9B,KAAqB,UAAU,SAAS,kBAAkB;AAAA,IAChE,aAAa,CAAC,UAAU,SAAS;AAC/B,YAAM,UAAU;AAChB,YAAM,YAAY,QAAQ;AAC1B,YAAM,MAAM,wBAAwB,KAAK,SAAS,IAC9C,UACA,iCAAiC,KAAK,SAAS,IAC7C,YACA,kBAAkB,KAAK,SAAS,IAC9B,SACA;AACR,YAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,YAAM,QAAQ,SAAS,mBAAmB,EAAE,MAAM;AAClD,YAAMC,SAAQ,MAAM,KAAK,kDAAkD,EAAE,MAAM;AACnF,YAAM,YAAYA,OAAM,KAAK,EAAE,KAAK;AACpC,MAAAA,OAAM,OAAO;AACb,YAAM,WAAW,SAAS,SAAS,MAAM,KAAK,KAAK,EAAE,EAAE,KAAK;AAC5D,aAAO;AAAA;AAAA,GAAQ,GAAG;AAAA,EAAM,YAAY,KAAK,SAAS;AAAA;AAAA,IAAW,EAAE,GAAG,QAAQ;AAAA,IAAO,GAAG;AAAA;AAAA;AAAA,IACtF;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,mBAAmB;AAAA,IAClC,QAAQ,CAAC,SAAS,KAAK,aAAa,SAC9B,KAAqB,UAAU,SAAS,gBAAgB;AAAA,IAC9D,aAAa,CAAC,UAAU,SAAS;AAC/B,YAAM,UAAU;AAChB,YAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,YAAM,YAAY,SAAS,iBAAiB,EAAE,MAAM;AACpD,YAAM,SAAS,UAAU,SAAS,SAAS,EAAE,SAAS,IAAI,EAAE,QAAQ,EACjE,IAAI,CAAC,SAAS,SAAS,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK;AACtD,YAAM,SAAS,UAAU,SAAS,sBAAsB,EAAE,QAAQ;AAClE,UAAI,OAAO,WAAW,EAAG,QAAO;AAChC,YAAM,OAAO,OAAO,IAAI,CAAC,OAAO,UAAU;AACxC,cAAMA,UAAS,OAAO,KAAK,KAAK,OAAO,QAAQ,CAAC,IAAI,QAAQ,MAAM,QAAQ;AAC1E,eAAO,eAAeA,MAAK;AAAA,EAAO,SAAS,SAAS,SAAS,KAAK,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,CAAC;AAAA;AAAA,MAC1F,CAAC;AACD,aAAO;AAAA;AAAA;AAAA,EAAe,KAAK,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,IACzC;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,aAAa;AAAA,IAC5B,QAAQ;AAAA,IACR,aAAa,CAAC,UAAU,SAAS;AAC/B,YAAM,WAAW,KAAM,KAAqB,SAAS;AACrD,YAAM,OAAO,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QACzC,SAAS,GAAG,EAAE,SAAS,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,SAAS,IAAI,EAAE,KAAK,EACzE,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,KAAK,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,OAAO,QAAQ,EACvB,QAAQ,OAAO,QAAQ,EACvB,KAAK,CAAC,CACV,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;AACjC,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,YAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;AACvD,YAAM,aAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,MAAc,QAAQ,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5F,aAAO;AAAA;AAAA,IAAS,WAAW,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,IAAS,MAAc,KAAK,EAAE,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC;AAAA,EAAO,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,IAC5K;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,8BAA8B;AAAA,IAC7C,QAAQ,CAAC,SAAS,KAAK,aAAa;AAAA,IACpC,aAAa,CAAC,UAAU,SAAS;AAC/B,YAAM,UAAU;AAChB,YAAM,WAAW,KAAK,QAAQ,SAAS;AACvC,YAAM,aAAa,SAAS,aAAa,EAAE,QAAQ;AACnD,YAAM,QAAQ,WAAW,SAAS,IAC9B,WAAW,IAAI,CAAC,SAAS,SAAS,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,IACzD,SAAS,KAAK,EAAE,KAAK,GAAG,QAAQ,OAAO,EAAE;AAC7C,YAAM,WAAW,SAAS,MAAM,EAAE,KAAK,OAAO,GAAG,MAAM,sCAAsC,IAAI,CAAC,KAAK;AACvG,YAAM,eAAe,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,MAAM,CAAC,EAAE,MAAM,CAAC;AAC7F,YAAM,QAAQ,IAAI,OAAO,KAAK,IAAI,GAAG,eAAe,CAAC,CAAC;AACtD,aAAO;AAAA;AAAA,EAAO,KAAK,GAAG,QAAQ;AAAA,EAAK,IAAI;AAAA,EAAK,KAAK;AAAA;AAAA;AAAA,IACnD;AAAA,EACF,CAAC;AACD,QAAM,SAAS,SAAS,OAAO,KAAK,QAAQ;AAC5C,WAAS,SAAS,CAAC,SAAiB,OAAO,IAAI,EAAE,QAAQ,SAAS,CAAC,UAAU,KAAK,KAAK,EAAE;AACzF,QAAM,OAAO,SAAS,SAAS,KAAK,KAAK,KAAK,EAAE,EAAE,KAAK;AAIvD,MAAI,CAAC,SAAU,KAAK,SAAS,MAAM,EAAE,SAAS,EAAE,WAAW,EAAI,QAAO,EAAE,MAAM,MAAM,MAAM;AAC1F,SAAO;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd;AAAA,MACA,aAAa,eAAe,iBAAiB,IAAI,KAAK,+BAA+B,SAAS,SAAS,QAAQ;AAAA,MAC/G,UAAU,CAAC;AAAA,MACX;AAAA,MACA,QAAQ,SAAS,SAAS,SAAS;AAAA,IACrC;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,oBAAoB,UAAiD;AAC5E,QAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,SAAO,EAAE,4EAA4E,EAClF,IAAI,CAAC,QAAQ,YAAY,EAAE,OAAO,EAAE,KAAK,MAAM,KAAK,EAAE,EACtD,IAAI,EACJ,OAAO,OAAO;AACnB;AAyBA,SAAS,oBAAoB,OAAuB;AAClD,SAAO,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACzC;AAEA,SAAS,sBAAsB,UAAoE;AACjG,MAAI,CAAC,QAAQ,KAAK,SAAS,WAAW,EAAG,QAAO;AAChD,QAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,QAAM,UAAU,EAAE,2BAA2B,EAAE,MAAM;AACrD,MAAI,QAAQ,WAAW,EAAG,QAAO;AAGjC,WAAS,SAAS,MAAqD;AACrE,WAAO,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS;AACxD,YAAM,aAAa,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,MAAM;AAC1D,YAAM,kBAAkB,EAAE,IAAI,EAC3B,SAAS,8BAA8B,EACvC,SAAS,cAAc,EACvB,MAAM;AACT,YAAM,OAAO,WAAW,SAAS,IAAI,aAAa;AAClD,YAAM,QAAQ,oBAAoB,KAAK,KAAK,CAAC;AAC7C,YAAM,OAAO,KAAK,KAAK,MAAM;AAC7B,YAAM,SAAS,EAAE,IAAI,EAAE,SAAS,eAAe,EAAE,MAAM;AACvD,YAAM,WAAW,OAAO,SAAS,IAAI,SAAS,OAAO,IAAI,CAAC,CAAE,IAAI,CAAC;AACjE,YAAM,aAAa,EAAE,IAAI,EAAE,SAAS,iCAAiC,KAChE,KAAK,SAAS,qBAAqB;AACxC,UAAI,CAAC,SAAS,SAAS,WAAW,EAAG,QAAO,CAAC;AAC7C,aAAO,CAAC;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,GAAI,OAAO,EAAE,MAAM,IAAI,IAAI,MAAM,SAAS,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;AAAA,QACpE,GAAI,SAAS,SAAS,IAAI,EAAE,OAAO,SAAS,IAAI,CAAC;AAAA,QACjD,GAAI,aAAa,EAAE,YAAY,KAAK,IAAI,CAAC;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,OAAO,SAAS,QAAQ,IAAI,CAAC,CAAE,EAAE;AAC5C;AAEA,SAAS,uBAAuB,UAA2D;AACzF,QAAM,QAAuB,CAAC;AAC9B,QAAM,QAAQ,CAAC,UAAwC;AACrD,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,KAAM,OAAM,KAAK,KAAK,IAAI;AACnC,UAAI,KAAK,MAAO,OAAM,KAAK,KAAK;AAAA,IAClC;AAAA,EACF;AACA,MAAI,SAAU,OAAM,SAAS,KAAK;AAClC,SAAO;AACT;AAEA,SAAS,sBACP,QACA,UACA,oBACqB;AACrB,QAAM,IAAI,KAAK,SAAS,IAAI;AAC5B,QAAM,UAAU,sBAAsB,QAAQ;AAC9C,QAAM,gBAAgB,uBAAuB,OAAO,EAAE,QAAQ,CAAC,SAAS;AACtE,QAAI;AACF,YAAM,MAAM,IAAI,IAAI,IAAI;AACxB,aAAO,IAAI,WAAW,OAAO,SAAS,CAAC,IAAI,SAAS,QAAQ,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;AAAA,IACrF,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AACD,QAAM,SAAS,oBAAI,IAAoB;AACvC,aAAW,QAAQ,eAAe;AAChC,UAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC/C,aAAS,SAAS,GAAG,SAAS,SAAS,QAAQ,UAAU;AACvD,YAAM,SAAS,IAAI,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,CAAC;AACtD,aAAO,IAAI,SAAS,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AACA,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,KAAK,cAAc,SAAS,GAAG,CAAC;AACnE,QAAM,YAAY,CAAC,GAAG,MAAM,EACzB,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,SAAS,EACxC,KAAK,CAAC,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,SAAS,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,UAClE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAC5B;AAEL,QAAM,0BAA0B,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY;AAC1F,UAAM,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM;AACnC,QAAI,CAAC,KAAM,QAAO,CAAC;AACnB,QAAI;AACF,YAAM,SAAS,IAAI,IAAI,MAAM,SAAS,QAAQ;AAC9C,UAAI,OAAO,WAAW,OAAO,UAAU,CAAC,UAAU,QAAQ,QAAQ,SAAS,EAAG,QAAO,CAAC;AACtF,YAAM,eAAe,OAAO,SAAS,MAAM,UAAU,MAAM,EAAE,QAAQ,QAAQ,EAAE;AAC/E,YAAM,UAAU,aAAa,MAAM,KAAK,CAAC,EAAE,CAAC;AAC5C,UAAI,CAAC,gCAAgC,KAAK,OAAO,EAAG,QAAO,CAAC;AAC5D,aAAO,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE;AAAA,IACnC,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,CAAC,GAAG,IAAI,IAAI,uBAAuB,CAAC;AAAA,IAC7D;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,KAAU,WAAkC;AAC3E,MAAI,OAAO,IAAI,SAAS,QAAQ,QAAQ,EAAE;AAC1C,MAAI,cAAc,IAAK,QAAO,KAAK,QAAQ,QAAQ,EAAE;AAAA,WAC5C,SAAS,UAAW,QAAO;AAAA,WAC3B,KAAK,WAAW,GAAG,SAAS,GAAG,EAAG,QAAO,KAAK,MAAM,UAAU,SAAS,CAAC;AAAA,MAC5E,QAAO;AACZ,QAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,YAAY;AAChE,QAAI,UAAU;AACd,QAAI;AACF,gBAAU,mBAAmB,OAAO;AAAA,IACtC,QAAQ;AAAA,IAER;AACA,WAAO,QACJ,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,qBAAqB,GAAG,EAChC,QAAQ,YAAY,EAAE;AAAA,EAC3B,CAAC,EAAE,OAAO,OAAO;AACjB,SAAO,SAAS,KAAK,GAAG,KAAK;AAC/B;AAEA,SAAS,4BAA4B,SAAyB;AAC5D,SAAO,6BAA6B,KAAK,OAAO,IAAI,GAAG,OAAO,WAAW;AAC3E;AAEA,SAAS,kCACP,WACA,OACA,WAC6C;AAC7C,QAAM,WAAW,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AAC/D,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,UAAU,IAAI,CAAC,aAAa;AAAA,IAC9D,KAAK,UAAU,SAAS,KAAK;AAAA,IAC7B;AAAA,EACF,CAAC,CAAC,EAAE,OAAO,CAAC;AACZ,QAAM,kBAAoD,CAAC;AAC3D,WAAS,WACP,QACA,UACM;AACN,eAAW,QAAQ,UAAU;AAC3B,YAAM,WAAW,OAAO,KAAK,CAAC,cAAc,UAAU,UAAU,KAAK,UAC/D,UAAU,SAAS,KAAK,MAAM,KAC/B,OAAO,KAAK,CAAC,cAAc,UAAU,UAAU,KAAK,SAAS,UAAU,SAAS,KAAK,IAAI;AAC9F,UAAI,CAAC,UAAU;AACb,eAAO,KAAK,gBAAgB,IAAI,CAAC;AACjC;AAAA,MACF;AACA,UAAI,CAAC,SAAS,QAAQ,KAAK,KAAM,UAAS,OAAO,KAAK;AACtD,UAAI,KAAK,OAAO;AACd,iBAAS,UAAU,CAAC;AACpB,mBAAW,SAAS,OAAO,KAAK,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACA,aAAW,YAAY,iBAAiB;AACtC,UAAM,iBAAiB,IAAI,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACvE,UAAM,UAAU,gBAAgB,KAAK,CAAC,cAAc;AAClD,YAAM,kBAAkB,IAAI,IAAI,UAAU,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACzE,YAAM,UAAU,CAAC,GAAG,cAAc,EAAE,OAAO,CAAC,UAAU,gBAAgB,IAAI,KAAK,CAAC,EAAE;AAClF,aAAO,WAAW,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,eAAe,MAAM,gBAAgB,IAAI,IAAI,GAAG,CAAC;AAAA,IACpG,CAAC;AACD,QAAI,QAAS,YAAW,QAAQ,OAAO,SAAS,KAAK;AAAA,QAChD,iBAAgB,KAAK,gBAAgB,QAAQ,CAAC;AAAA,EACrD;AACA,QAAM,aAAa,CAAC,aAAuD,uBAAuB,QAAQ,EACvG,QAAQ,CAAC,SAAS;AACjB,UAAM,KAAK,wBAAwB,IAAI,IAAI,IAAI,GAAG,SAAS;AAC3D,WAAO,MAAM,SAAS,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EAC1C,CAAC;AACH,kBAAgB,KAAK,CAAC,MAAM,UAAU,WAAW,KAAK,EAAE,SAAS,WAAW,IAAI,EAAE,MAAM;AAExF,QAAM,OAAO,gBAAgB,QAAQ,CAAC,UAAU,kBAAkB;AAChE,aAAS,QAAQ,OAA+E;AAC9F,YAAMC,aAAsD,CAAC;AAC7D,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,KAAK,OACjB,wBAAwB,IAAI,IAAI,KAAK,IAAI,GAAG,SAAS,IACrD;AACJ,cAAM,OAAO,WAAW,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,IAAI,UAAU;AACnF,YAAI,KAAM,SAAQ,IAAI,IAAI;AAC1B,cAAM,WAAW,KAAK,QAAQ,QAAQ,KAAK,KAAK,IAAI,CAAC;AACrD,YAAI,SAAS,SAAS,KAAK,KAAK,YAAY;AAC1C,UAAAA,WAAU,KAAK,EAAE,OAAO,KAAK,OAAO,OAAO,OAAO,CAAC,MAAM,GAAG,QAAQ,IAAI,SAAS,CAAC;AAClF;AAAA,QACF;AACA,YAAI,KAAM,CAAAA,WAAU,KAAK,IAAI;AAAA,MAC/B;AACA,aAAOA;AAAA,IACT;AACA,UAAM,YAAY,QAAQ,SAAS,KAAK;AACxC,UAAM,aAAa,UAAU,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ;AACtF,UAAM,SAAS,UAAU,OAAO,CAAC,SAA+C,OAAO,SAAS,QAAQ;AACxG,QAAI,WAAW,SAAS,EAAG,QAAO,QAAQ,EAAE,OAAO,YAAY,OAAO,WAAW,CAAC;AAClF,QAAI,OAAO,WAAW,EAAG,QAAO,CAAC;AACjC,UAAM,kBAAkB,WAAW,QAAQ;AAC3C,UAAM,gBAAgB,IAAI,IAAI,gBAAgB,IAAI,CAAC,OAAO,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,UAAM,MAAM,gBAAgB,KAAK,cAAc,SAAS,IACpD,oBAAoB,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,QAAQ,SAAS,GAAG,CAAC,EAAE,QAAQ,SAAS,CAAC,WAAW,OAAO,YAAY,CAAC,IAClH;AACJ,WAAO,CAAC,EAAE,KAAK,OAAO,CAAC;AAAA,EACzB,CAAC;AAED,QAAM,aAAa,MAChB,IAAI,CAAC,SAAS,KAAK,YAAY,EAC/B,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AAClC,MAAI,WAAW,SAAS,GAAG;AACzB,QAAI,KAAK,WAAW,EAAG,QAAO,yBAAyB,KAAK;AAC5D,SAAK,CAAC,EAAE,QAAQ,KAAK,EAAE,OAAO,cAAc,OAAO,WAAW,CAAC;AAAA,EACjE;AACA,SAAO,EAAE,KAAK;AAChB;AAEA,SAAS,uBACP,UACA,QACA,WAC4B;AAC5B,QAAM,IAAI,KAAK,SAAS,IAAI;AAK5B,QAAM,oBAAoB,CAAC,aAAiD;AAC1E,UAAMC,cAAyC,CAAC;AAChD,MAAE,QAAQ,EAAE,KAAK,CAAC,iBAAiB,cAAc;AAC/C,YAAMC,WAAsC,CAAC;AAC7C,YAAM,eAAe,oBAAI,IAAY;AACrC,UAAI,cAAc;AAClB,QAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,YAAY;AACrD,cAAM,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAC1D,cAAM,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM;AACnC,YAAI,CAAC,SAAS,CAAC,KAAM;AACrB,YAAI;AACF,gBAAM,SAAS,IAAI,IAAI,MAAM,SAAS,QAAQ;AAC9C,cAAI,CAAC,UAAU,QAAQ,QAAQ,SAAS,EAAG;AAC3C,yBAAe;AACf,gBAAM,WAAW,yBAAyB,aAAa,QAAQ,SAAS,KAAK,EAAE;AAC/E,gBAAM,SAAS;AACf,gBAAM,UAAU,SAAS,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK;AAC7C,cAAI,CAAC,UAAU,aAAa,IAAI,OAAO,EAAG;AAC1C,uBAAa,IAAI,OAAO;AACxB,UAAAA,SAAQ,KAAK,EAAE,SAAS,OAAO,OAAO,CAAC;AAAA,QACzC,QAAQ;AAAA,QAER;AAAA,MACF,CAAC;AACD,UAAIA,SAAQ,SAAS,GAAG;AACtB,QAAAD,YAAW,KAAK,EAAE,SAAAC,UAAS,YAAY,CAAC;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,WAAOD;AAAA,EACT;AAGA,QAAM,gBAAgB,kBAAkB,WAAW;AACnD,QAAM,aAAa,cAAc,SAAS,IACtC,gBACA,kBAAkB,0BAA0B;AAChD,QAAM,UAAU,WAAW,KAAK,CAAC,MAAM,UAAU;AAC/C,UAAM,oBAAqB,MAAM,QAAQ,SAAS,MAAM,cACnD,KAAK,QAAQ,SAAS,KAAK;AAChC,WAAO,qBAAqB,MAAM,QAAQ,SAAS,KAAK,QAAQ;AAAA,EAClE,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAInB,QAAM,mBAAmB,QAAQ,IAAI,CAAC,UAAU,MAAM,MAAM,KAAK,EAAE,YAAY,CAAC;AAChF,MAAI,QAAQ,SAAS,MAAM,IAAI,IAAI,gBAAgB,EAAE,SAAS,iBAAiB,OAAQ,QAAO,CAAC;AAC/F,SAAO;AACT;AAEA,SAAS,oBACP,QACA,kBAC+B;AAC/B,MAAI,CAAC,oBAAoB,qBAAqB,eAAgB,QAAO;AACrE,QAAM,aAAa,CACjB,UAC6C,MAAM,IAAI,CAAC,SAAS,OAAO,SAAS,WAC/E,SAAS,mBAAmB,iBAAiB,OAC7C,EAAE,GAAG,MAAM,OAAO,WAAW,KAAK,KAAK,EAAE,CAAC;AAC9C,QAAM,cAAc,CAAC,WAA6E,OAAO,IAAI,CAAC,WAAW;AAAA,IACvH,GAAG;AAAA,IACH,OAAO,WAAW,MAAM,KAAK;AAAA,EAC/B,EAAE;AACF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,OAAO,KAAK,IAAI,CAAC,SAAS;AAAA,MAC9B,GAAG;AAAA,MACH,GAAI,IAAI,SAAS,IAAI,gBAAgB,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;AAAA,MAC3D,GAAI,IAAI,QAAQ,EAAE,OAAO,WAAW,IAAI,KAAK,EAAE,IAAI,CAAC;AAAA,MACpD,GAAI,IAAI,SAAS,EAAE,QAAQ,YAAY,IAAI,MAAM,EAAE,IAAI,CAAC;AAAA,IAC1D,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,cAAc,MAA6B;AAClD,SAAO,CAAC,GAAG,KAAK,SAAS,gDAAgD,CAAC,EACvE,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC;AAC5B;AAEA,SAAS,aAAa,MAA6B;AACjD,QAAM,IAAI,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC;AACtC,SAAO,EAAE,0BAA0B,EAAE,IAAI,CAAC,QAAQ,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,OAAO;AAC9G;AAEA,SAAS,eAAe,MAA6B;AACnD,SAAO,KAAK,MAAM,IAAI,EACnB,IAAI,CAAC,SAAS,KAAK,MAAM,uBAAuB,IAAI,CAAC,CAAC,EACtD,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC;AACtD;AAEA,SAAS,YAAY,UAAiD;AACpE,QAAM,QAAuB,CAAC;AAC9B,QAAM,OAAO,SAAS,UAAU,YAAY;AAC5C,MAAI,KAAM,OAAM,KAAK,IAAI;AACzB,QAAM,aAAa,SAAS,SAAS,QAAQ;AAC7C,aAAW,SAAS,WAAW,SAAS,oGAAoG,GAAG;AAC7I,UAAM,KAAK,MAAM,CAAC,CAAC;AAAA,EACrB;AACA,SAAO;AACT;AAEA,eAAe,UACb,SACA,KACA,QACwC;AACxC,MAAI;AACF,WAAO,MAAM,QAAQ,KAAK,EAAE,OAAO,CAAC;AAAA,EACtC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,WAAW,SAAwD;AACvF,QAAM,SAAS,qBAAqB,QAAQ,SAAS;AACrD,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,YAAY,mBAAmB,GAAK,CAAC;AACnF,QAAM,cAAc,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,eAAe,GAAG,EAAE,CAAC;AACtE,QAAM,gBAAgB,KAAK,IAAI,KAAW,KAAK,IAAI,QAAQ,iBAAiB,yBAAyB,GAAW,CAAC;AACjH,QAAM,qBAAqB,cAAc,MAAM;AAC/C,QAAM,UAAU,MAAM,QAAQ,QAAQ,EAAE,QAAQ,sDAAsD,CAAC;AACvG,MAAI,CAAC,UAAU,QAAQ,UAAU,QAAQ,kBAAkB,GAAG;AAC5D,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AACA,QAAM,YAAY,QAAQ,KAAK,QAAQ,WAAW,IAC9C,UACA,MAAM,UAAU,SAAS,QAAQ,iCAAiC;AAGtE,QAAM,kBAAkB,aAAa,UAAU,UAAU,UAAU,QAAQ,kBAAkB,IACzF,YACA;AACJ,QAAM,WAAW,QAAQ,YAAY,kBAAkB,mBAAmB,OAAO;AACjF,MAAI,sBAAsB,aAAa,eAAe,kBAAkB;AACxE,MAAI,uBAAuB,CAAC,sBAAsB,mBAAmB,GAAG;AACtE,UAAM,IAAI,KAAK,oBAAoB,IAAI;AACvC,UAAM,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa;AAAA,MAC5D,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM;AAAA,MAC5B,OAAO,oBAAoB,EAAE,OAAO,EAAE,KAAK,CAAC;AAAA,IAC9C,EAAE,EAAE,KAAK,CAAC,SAAS,yBAAyB,KAAK,KAAK,KAAK,CAAC,GAAG;AAC/D,QAAI,UAAU;AACZ,UAAI;AACF,cAAM,UAAU,IAAI,IAAI,UAAU,oBAAoB,QAAQ;AAC9D,YAAI,QAAQ,WAAW,OAAO,UAAU,UAAU,SAAS,QAAQ,kBAAkB,GAAG;AACtF,gBAAM,QAAQ,MAAM,UAAU,SAAS,SAAS,iCAAiC;AACjF,cAAI,SAAS,MAAM,SAAS,WAAW,OAAO,UAAU,QAAQ,KAAK,MAAM,WAAW,GAAG;AACvF,kCAAsB;AAAA,UACxB;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,QAAM,sBAAsB,aAAa,gBAAgB,sBACrD,sBAAsB,QAAQ,qBAAqB,kBAAkB,IACrE;AAGJ,QAAM,YAAY,aAAa,aAC3B,sBAAsB,QAAQ,CAAC,SAAS,eAAe,CAAC,KAAK,qBAC7D,qBAAqB,aAAa;AACtC,QAAM,uBAAuB,aAAa,cAAc,mBAAmB,QAAQ,KAAK,gBAAgB,WAAW,IAC/G,uBAAuB,gBAAgB,IAAI,IAC3C;AACJ,QAAM,2BAA2B,uBAC7B,0BAA0B,sBAAsB,EAAE,YAAY,UAAU,CAAC,IACzE;AACJ,QAAM,kCAAkC;AAAA,IACtC,0BAA0B,WAAW,KAAK,UACrC,yBAAyB,eAAe;AAAA,EAC/C;AACA,QAAM,2BAA2B,aAAa,cAAc,CAAC,mCACxD,mBAAmB,QAAQ,KAAK,gBAAgB,WAAW,IAC5D,uBAAuB,iBAAiB,QAAQ,SAAS,IACzD;AAKJ,QAAM,mBAAmB,0BAA0B,eAAe,CAAC,GAAG,gBACjE,2BAA2B,CAAC,GAAG,WAC9B,aAAa,cAAc,cAAc,MACzC,yBAAyB,aAAa,QAAQ,SAAS,KAAK,EAAE,KAAK,SACnE;AACN,QAAM,QAAQ,oBAAI,IAAI,CAAC,CAAC,OAAO,SAAS,GAAG,OAAO,CAAC,CAAC;AACpD,MAAI,oBAAqB,OAAM,IAAI,oBAAoB,SAAS,SAAS,GAAG,mBAAmB;AAC/F,QAAM,QAAoB,CAAC,MAAM;AACjC,QAAM,SAAS,oBAAI,IAAI,CAAC,kBAAkB,MAAM,CAAC,CAAC;AAClD,QAAM,WAAoC,CAAC;AAC3C,QAAM,kBAAkB,oBAAI,IAAY;AACxC,QAAM,qBAAuD,qBAAqB,UAC9E,CAAC,oBAAoB,OAAO,IAC5B,CAAC;AACL,QAAM,sBAAsE,CAAC;AAE7E,WAAS,QAAQ,OAAe,MAAiB;AAC/C,QAAI,OAAO,QAAQ,oBAAqB;AACxC,UAAM,MAAM,mBAAmB,OAAO,MAAM,QAAQ,SAAS;AAC7D,QAAI,CAAC,OAAO,OAAO,IAAI,kBAAkB,GAAG,CAAC,EAAG;AAChD,QAAI,aAAa,gBAAgB,IAAI,SAAS,QAAQ,QAAQ,EAAE,MAAM,GAAG,SAAS,UAAW;AAC7F,QAAI,qBAAqB,wBAAwB,KAAK,CAAC,WAAW;AAChE,YAAM,OAAO,IAAI,SAAS,QAAQ,QAAQ,EAAE;AAC5C,aAAO,SAAS,UAAU,KAAK,WAAW,GAAG,MAAM,GAAG;AAAA,IACxD,CAAC,EAAG;AACJ,WAAO,IAAI,kBAAkB,GAAG,CAAC;AACjC,UAAM,KAAK,GAAG;AAAA,EAChB;AAEA,aAAW,aAAa,0BAA0B,kBAAkB,CAAC,GAAG;AACtE,QAAI,OAAO,UAAU;AACrB,QAAI,cAAc,OAAO,KAAK,WAAW,GAAG,KACvC,SAAS,aAAa,CAAC,KAAK,WAAW,GAAG,SAAS,GAAG,GAAG;AAC5D,aAAO,GAAG,SAAS,GAAG,IAAI;AAAA,IAC5B;AACA,YAAQ,MAAM,MAAM;AAAA,EACtB;AAIA,QAAM,kBAAkB,uBAAuB;AAC/C,MAAI,mBAAmB,QAAQ,KAAK,gBAAgB,WAAW,GAAG;AAChE,eAAW,QAAQ,oBAAoB,eAAe,EAAG,SAAQ,MAAM,gBAAgB,QAAQ;AAAA,EACjG;AAEA,iBAAe,sBAAsB,UAAkC,QAAQ,GAAkB;AAC/F,UAAM,QAAQ,aAAa,SAAS,IAAI;AACxC,eAAW,QAAQ,OAAO;AACxB,UAAI;AACJ,UAAI;AACF,cAAM,IAAI,IAAI,MAAM,SAAS,QAAQ;AAAA,MACvC,QAAQ;AACN;AAAA,MACF;AACA,UAAI,QAAQ,KAAK,iBAAiB,KAAK,IAAI,QAAQ,GAAG;AACpD,YAAI,IAAI,WAAW,OAAO,UAAU,gBAAgB,QAAQ,yBACvD,gBAAgB,IAAI,IAAI,SAAS,CAAC,EAAG;AAC1C,wBAAgB,IAAI,IAAI,SAAS,CAAC;AAClC,cAAM,SAAS,MAAM,UAAU,SAAS,KAAK,0BAA0B;AACvE,YAAI,UAAU,OAAO,SAAS,WAAW,OAAO,OAAQ,OAAM,sBAAsB,QAAQ,QAAQ,CAAC;AAAA,MACvG,OAAO;AACL,gBAAQ,MAAM,SAAS,QAAQ;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,aAAW,QAAQ,YAAY,OAAO,GAAG;AACvC,QAAI;AACJ,QAAI;AACF,YAAM,IAAI,IAAI,MAAM,QAAQ,QAAQ;AAAA,IACtC,QAAQ;AACN;AAAA,IACF;AACA,QAAI,IAAI,WAAW,OAAO,OAAQ;AAClC,UAAM,WAAW,MAAM,UAAU,SAAS,KAAK,0BAA0B;AACzE,QAAI,CAAC,YAAY,SAAS,SAAS,WAAW,OAAO,OAAQ;AAC7D,eAAW,aAAa,cAAc,SAAS,IAAI,EAAG,SAAQ,WAAW,SAAS,QAAQ;AAAA,EAC5F;AAEA,QAAM,WAAW,cAAc,MAAM,OAAO,SAAS,GAAG,OAAO,MAAM,GAAG,SAAS;AACjF,QAAM,gBAAgB;AAAA,IACpB,IAAI,IAAI,aAAa,OAAO,MAAM;AAAA,IAClC,IAAI,IAAI,GAAG,SAAS,QAAQ,OAAO,QAAQ,EAAE,CAAC,aAAa,OAAO,MAAM;AAAA,IACxE,IAAI,IAAI,eAAe,OAAO,MAAM;AAAA,IACpC,IAAI,IAAI,gBAAgB,OAAO,MAAM;AAAA,IACrC,IAAI,IAAI,GAAG,SAAS,QAAQ,OAAO,QAAQ,EAAE,CAAC,gBAAgB,OAAO,MAAM;AAAA,EAC7E;AACA,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,cAAc,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/F,aAAW,OAAO,iBAAiB;AACjC,UAAM,WAAW,MAAM,UAAU,SAAS,KAAK,2CAA2C;AAC1F,QAAI,CAAC,YAAY,SAAS,SAAS,WAAW,OAAO,OAAQ;AAC7D,UAAM,WAAW,IAAI,SAAS,SAAS,YAAY;AACnD,UAAM,YAAY,IAAI,SAAS,SAAS,aAAa,KAAK,SAAS,YAAY,SAAS,KAAK;AAC7F,QAAI,UAAU;AACZ,iBAAW,QAAQ,eAAe,SAAS,IAAI,GAAG;AAChD,YAAI;AACJ,YAAI;AACF,uBAAa,IAAI,IAAI,MAAM,SAAS,QAAQ;AAAA,QAC9C,QAAQ;AACN;AAAA,QACF;AACA,YAAI,WAAW,WAAW,OAAO,UAAU,gBAAgB,QAAQ,yBAC9D,gBAAgB,IAAI,WAAW,SAAS,CAAC,EAAG;AACjD,wBAAgB,IAAI,WAAW,SAAS,CAAC;AACzC,cAAM,UAAU,MAAM,UAAU,SAAS,YAAY,0BAA0B;AAC/E,YAAI,WAAW,QAAQ,SAAS,WAAW,OAAO,OAAQ,OAAM,sBAAsB,OAAO;AAAA,MAC/F;AAAA,IACF,WAAW,WAAW;AACpB,YAAM,sBAAsB,QAAQ;AAAA,IACtC,OAAO;AACL,iBAAW,QAAQ,cAAc,SAAS,IAAI,EAAG,SAAQ,MAAM,SAAS,QAAQ;AAAA,IAClF;AAAA,EACF;AAEA,QAAM,QAA8B,CAAC;AACrC,QAAM,mBAAmD,CAAC;AAC1D,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,MAAI,gBAAgB;AACpB,MAAI,wBAAwB;AAC5B,SAAO,MAAM,SAAS,KAAK,MAAM,SAAS,YAAY,CAAC,uBAAuB;AAC5E,UAAM,QAAoB,CAAC;AAC3B,WAAO,MAAM,SAAS,KAAK,MAAM,SAAS,KAAK,IAAI,aAAa,WAAW,MAAM,MAAM,GAAG;AACxF,YAAM,YAAY,MAAM,MAAM;AAC9B,UAAI,CAAC,aAAa,QAAQ,IAAI,UAAU,SAAS,CAAC,EAAG;AACrD,cAAQ,IAAI,UAAU,SAAS,CAAC;AAChC,YAAM,KAAK,SAAS;AAAA,IACtB;AACA,QAAI,MAAM,WAAW,EAAG;AACxB,UAAM,UAAU,MAAM,QAAQ,IAAI,MAAM,IAAI,OAAO,cAAc;AAC/D,UAAI,WAAW,MAAM,IAAI,UAAU,SAAS,CAAC,KACxC,MAAM,UAAU,SAAS,WAAW,qDAAqD;AAC9F,UAAI,CAAC,UAAU;AACb,eAAO,EAAE,WAAW,MAAM,MAAM,OAAO,CAAC,GAAoB,SAAS,KAAK;AAAA,MAC5E;AACA,UAAI,CAAC,UAAU,SAAS,UAAU,QAAQ,SAAS,GAAG;AACpD,eAAO,EAAE,WAAW,MAAM,MAAM,OAAO,CAAC,GAAoB,SAAS,MAAM;AAAA,MAC7E;AACA,YAAM,aAAa,4BAA4B,KAAK,SAAS,WAAW,KACnE,WAAW,KAAK,SAAS,SAAS,QAAQ;AAC/C,UAAI,CAAC,cAAc,CAAC,WAAW,KAAK,UAAU,QAAQ,GAAG;AACvD,cAAM,cAAc,IAAI,IAAI,SAAS;AACrC,oBAAY,WAAW,GAAG,YAAY,SAAS,QAAQ,OAAO,EAAE,CAAC;AACjE,cAAM,mBAAmB,MAAM,UAAU,SAAS,aAAa,0BAA0B;AACzF,YAAI,oBAAoB,UAAU,iBAAiB,UAAU,QAAQ,SAAS,KACzE,4BAA4B,KAAK,iBAAiB,WAAW,GAAG;AACnE,qBAAW;AAAA,QACb;AAAA,MACF;AACA,YAAM,qBAAqB,4BAA4B,KAAK,SAAS,WAAW,KAC3E,WAAW,KAAK,SAAS,SAAS,QAAQ;AAC/C,YAAM,oBAAoB,qBAAqB,uBAAuB,SAAS,IAAI,IAAI;AACvF,UAAI,sBAAsB,sBAAsB,MAAM;AACpD,cAAM,UAAU,IAAI,IAAI,SAAS;AACjC,gBAAQ,WAAW,QAAQ,SAAS,QAAQ,YAAY,EAAE,KAAK;AAC/D,cAAM,eAAe,MAAM,UAAU,SAAS,SAAS,iCAAiC;AACxF,YAAI,gBAAgB,UAAU,aAAa,UAAU,QAAQ,SAAS,KACjE,QAAQ,KAAK,aAAa,WAAW,GAAG;AAC3C,qBAAW;AAAA,QACb,OAAO;AAGL,iBAAO,EAAE,WAAW,MAAM,MAAM,OAAO,CAAC,GAAoB,SAAS,MAAM;AAAA,QAC7E;AAAA,MACF,WAAW,sBAAsB,MAAM;AACrC,mBAAW,EAAE,GAAG,UAAU,MAAM,kBAAkB;AAAA,MACpD;AACA,YAAM,gBAAgB,OAAO,WAAW,SAAS,MAAM,MAAM;AAC7D,UAAI,gBAAgB,gBAAgB,eAAe;AACjD,gCAAwB;AACxB,eAAO,EAAE,WAAW,MAAM,MAAM,OAAO,CAAC,GAAoB,SAAS,OAAO,gBAAgB,KAAK;AAAA,MACnG;AACA,uBAAiB;AACjB,YAAM,yBAAyB,aAAa,eACxC,wBAAwB,SAAS,UAAU,SAAS,KACjD,wBAAwB,WAAW,SAAS,IAC/C,aAAa,SAAS,UAAU,SAAS,KACtC,aAAa,WAAW,SAAS;AACxC,YAAM,eAAe,0BAChB,yBAAyB,sBAAsB,MAAM,mBACtD,iBACA;AACJ,UAAI,CAAC,aAAc,QAAO,EAAE,WAAW,MAAM,MAAM,OAAO,CAAC,GAAoB,SAAS,MAAM;AAC9F,YAAM,KAAK,aAAa,eACpB,4BAA4B,YAAY,IACxC;AACJ,UAAI,4BAA4B,KAAK,SAAS,WAAW,KAAK,WAAW,KAAK,SAAS,SAAS,QAAQ,GAAG;AACzG,cAAM,WAAW,aAAa,UAAU,EAAE;AAC1C,YAAI,SAAS,KAAM,UAAS,KAAK,eAAe;AAChD,eAAO;AAAA,UACL;AAAA,UACA,MAAM,SAAS;AAAA,UACf,iBAAiB,SAAS;AAAA,UAC1B,OAAO,cAAc,SAAS,IAAI;AAAA,UAClC,MAAM,SAAS;AAAA,UACf,SAAS;AAAA,QACX;AAAA,MACF;AACA,YAAM,YAAY,SAAS,UAAU,EAAE;AACvC,UAAI,UAAU,KAAM,WAAU,KAAK,eAAe;AAClD,YAAM,UAAU,aAAa,eAAe,sBAAsB,QAAQ,IAAI;AAC9E,aAAO,EAAE,WAAW,MAAM,UAAU,MAAM,OAAO,UAAU,OAAO,MAAM,SAAS,UAAU,SAAS,SAAS,MAAM;AAAA,IACrH,CAAC,CAAC;AACF,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS;AAClB,iBAAS,KAAK,EAAE,MAAM,gBAAgB,SAAS,yDAAyD,QAAQ,OAAO,UAAU,SAAS,EAAE,CAAC;AAC7I;AAAA,MACF;AACA,UAAI,OAAO,eAAgB;AAC3B,UAAI,OAAO,QAAQ,aAAa,cAAc;AAC5C,eAAO,KAAK,KAAK,yBAAyB,OAAO,KAAK,EAAE;AACxD,eAAO,KAAK,eAAe,yBAAyB,OAAO,KAAK,YAAY;AAAA,MAC9E;AACA,YAAM,iBAAiB,OAAO,OAC1B,kBAAkB,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,IAC7C;AACJ,UAAI,OAAO,QAAQ,kBAAkB,CAAC,YAAY,IAAI,cAAc,KAC/D,CAAC,QAAQ,IAAI,OAAO,KAAK,EAAE,KAAK,MAAM,SAAS,UAAU;AAC5D,cAAM,KAAK,OAAO,IAAI;AACtB,YAAI,qBAAqB,UAAU,OAAO,iBAAiB;AACzD,2BAAiB,KAAK,OAAO,eAAe;AAAA,QAC9C;AACA,gBAAQ,IAAI,OAAO,KAAK,EAAE;AAC1B,oBAAY,IAAI,cAAc;AAAA,MAChC;AACA,UAAI,aAAa,gBAAgB,OAAO,MAAM;AAC5C,cAAM,iBAAiB,wBAAwB,OAAO,WAAW,SAAS;AAC1E,YAAI,kBAAkB,mBAAmB,OAAO,KAAK,cAAc;AACjE,8BAAoB,KAAK;AAAA,YACvB,QAAQ,mBAAmB,iBAAiB,MAAM,IAAI,cAAc;AAAA,YACpE,aAAa,OAAO,KAAK,iBAAiB,iBAAiB,MAAM,IAAI,OAAO,KAAK,YAAY;AAAA,UAC/F,CAAC;AAAA,QACH;AAAA,MACF;AACA,UAAI,aAAa,UAAU,OAAO,QAAS,oBAAmB,KAAK,OAAO,OAAO;AACjF,iBAAW,QAAQ,OAAO,MAAO,SAAQ,MAAM,OAAO,QAAQ,OAAO,SAAS;AAAA,IAChF;AAAA,EACF;AAEA,MAAI,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,yDAAyD;AACjG,aAAW,QAAQ,OAAO;AACxB,UAAM,CAAC,QAAQ,GAAG,kBAAkB,IAAI,KAAK,GAAG,MAAM,GAAG;AACzD,QAAI,aAAa,IAAI,MAAM,GAAG;AAC5B,UAAI,mBAAmB,WAAW,EAAG,MAAK,KAAK,GAAG,MAAM;AACxD,WAAK,SAAS;AACd,WAAK,eAAe,mBAAmB,KAAK,GAAG,KAAK;AAAA,IACtD;AAAA,EACF;AACA,QAAM,cAAc,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AAClE,aAAW,QAAQ,OAAO;AACxB,SAAK,OAAO;AAAA,MACV,KAAK;AAAA,MACL,IAAI,IAAI,KAAK,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,uBAAuB;AACzB,aAAS,KAAK,EAAE,MAAM,iBAAiB,SAAS,qCAAqC,KAAK,MAAM,gBAAgB,GAAS,CAAC,sBAAsB,CAAC;AAAA,EACnJ,WAAW,MAAM,SAAS,KAAK,OAAO,QAAQ,qBAAqB;AACjE,aAAS,KAAK,EAAE,MAAM,iBAAiB,SAAS,wBAAwB,MAAM,MAAM,mEAAmE,CAAC;AAAA,EAC1J;AACA,QAAM,qBAAqB,0BAA0B,IAAI,CAAC,WAAW;AAAA,IACnE,GAAG;AAAA,IACH,QAAQ,MAAM,WAAW,mBAAmB,iBAAiB,MAAM;AAAA,EACrE,EAAE;AACF,MAAI,aAAa,aAAa,eAC1B,kCAAkC,oBAAoB,OAAO,SAAS,IACtE,mCAAmC,2BACjC,oBAAoB,yBAAyB,YAAY,gBAAgB,IACzE,yBAAyB,OAAO;AAAA,IAC9B,cAAc,aAAa;AAAA,IAC3B;AAAA,EACF,CAAC;AACP,MAAI,yBAA0B,UAAS,KAAK,GAAG,yBAAyB,QAAQ;AAChF,MAAI,oBAAoB,SAAS,GAAG;AAClC,eAAW,YAAY,CAAC,GAAG,IAAI,IAAI,oBAAoB,IAAI,CAAC,aAAa;AAAA,MACvE,GAAG,SAAS,MAAM,IAAI,SAAS,WAAW;AAAA,MAC1C;AAAA,IACF,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA,EACd;AACA,QAAM,eAAe,qBAAqB,gBAAgB;AAC1D,MAAI,cAAc;AAChB,UAAM,mBAAmB,IAAI,IAAI,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;AACtG,UAAM,oBAAoB,CACxB,kBAA4D,CAAC,MACjD,gBAAgB,KAAK,CAAC,SAAS,OAAO,SAAS,WACzD,iBAAiB,IAAI,IAAI,IACzB,kBAAkB,KAAK,KAAK,CAAC;AACjC,UAAM,SAAS,WAAW,KAAK,KAAK,CAAC,QACnC,kBAAkB,IAAI,KAAK,KAAK,kBAAkB,IAAI,MAAM,CAC7D,KAAK,WAAW,KAAK,CAAC;AACvB,QAAI,QAAQ;AAIV,aAAO,MAAM,EAAE,QAAQ,iBAAiB,YAAY,MAAM;AAAA,IAC5D;AAAA,EACF;AACA,QAAM,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,CAAC,CAAC;AAChH,MAAI,QAAQ,SAAS,GAAG;AACtB,eAAW,OAAO;AAAA,MAChB,eAAe;AAAA,MACf,SAAS;AAAA,QACP,EAAE,MAAM,MAAM,OAAO,UAAU;AAAA,QAC/B,GAAG,QAAQ,OAAO,CAAC,WAAW,WAAW,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,QAAQ,OAAO,OAAO,YAAY,EAAE,EAAE;AAAA,MAChH;AAAA,IACF;AAAA,EACF;AACA,MAAI,aAAa,WAAY,cAAa,8BAA8B,YAAY,KAAK;AACzF,SAAO;AAAA,IACL,WAAW,OAAO,SAAS;AAAA,IAC3B,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,eAAe,CAAC,EAAE,MAAM,gBAAgB,SAAS,aAAa,CAAC,IAAI,CAAC;AAAA,IAC5E;AAAA,IACA,GAAI,uBAAuB;AAAA,MACzB,MAAM;AAAA,QACJ,GAAI,OAAO,qBAAqB,SAAS,WAAW,EAAE,MAAM,qBAAqB,KAAK,IAAI,CAAC;AAAA,QAC3F,GAAI,OAAO,qBAAqB,gBAAgB,WAAW,EAAE,aAAa,qBAAqB,YAAY,IAAI,CAAC;AAAA,MAClH;AAAA,IACF,IAAI,CAAC;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL,YAAY,QAAQ;AAAA,MACpB,UAAU,MAAM;AAAA,MAChB,SAAS,KAAK,IAAI,GAAG,QAAQ,OAAO,MAAM,MAAM;AAAA,IAClD;AAAA,EACF;AACF;","names":["existsSync","lstatSync","readFileSync","dirname","extname","relative","relative","resolve","resolve","relative","inspect","node","bind","existsSync","lstatSync","readFileSync","extname","parseYaml","lstatSync","readFileSync","existsSync","extname","parseYaml","remarkMdx","remarkParse","unified","unified","remarkParse","remarkMdx","existsSync","lstatSync","readFileSync","dirname","extname","relative","objectValue","existsSync","lstatSync","relative","readFileSync","dirname","value","titleCase","extname","existsSync","lstatSync","readFileSync","dirname","relative","resolve","extname","parseYaml","value","payload","parseYaml","title","converted","candidates","entries"]}
|
|
1
|
+
{"version":3,"sources":["../src/repository.ts","../src/components.ts","../src/frontmatter.ts","../src/path.ts","../src/docusaurus.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 { createComponentMigrator } from './components.js'\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 addMintlifyHomepageRedirects,\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport {\n normalizeAssetPath,\n mintlifyLocalizedReference,\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/** Identify component ownership independently of checkout paths and URL syntax. */\nfunction componentSourceIdentity(sourceUrl: string, repositoryDir: string, siteRoot: string): string {\n const url = new URL(sourceUrl)\n // A GitHub tree URL and the repository root identify the same source. Branch\n // changes should update its components, while separate monorepo sites must\n // retain independent namespaces even if their snippet filenames coincide.\n // Credentials, queries and fragments are not source identity and never feed\n // generated names; only the canonical origin/path and docs root participate.\n const repository = url.hostname.toLowerCase() === 'github.com'\n ? `https://github.com/${url.pathname.split('/').filter(Boolean).slice(0, 2).join('/').replace(/\\.git$/i, '').toLowerCase()}`\n : `${url.origin}${trimTrailingSlashes(url.pathname)}`\n return JSON.stringify([repository, relative(repositoryDir, siteRoot).replace(/\\\\/g, '/')])\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 const componentRoot = mintlifyProjectRoot ?? repositoryDir\n const componentMigrator = platform === 'mintlify'\n ? createComponentMigrator(componentRoot, warnings, componentSourceIdentity(options.sourceUrl, repositoryDir, componentRoot))\n : undefined\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 // Shared source pages may appear in several language menus. The\n // projector visits the default language first; retain that primary\n // file so other locales can use the runtime's content fallback.\n if (!referenceMap.has(key)) referenceMap.set(key, reference)\n const exactKey = exactReferenceKey(reference.ref)\n if (!exactReferenceMap.has(exactKey)) exactReferenceMap.set(exactKey, reference)\n if (!referenceOrder.has(key)) 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 defaultPageIds = new Set([...referenceMap.values()]\n .filter((reference) => !reference.locale || reference.locale === localeConfig?.defaultLocale)\n .map((reference) => reference.navigationId))\n const routeAliases: NonNullable<MigrationDocsConfig['redirects']> = []\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 for (const entry of localeConfig.locales) {\n const localized = mintlifyLocalizedReference(file.relativePath, entry.code, defaultPageIds)\n if (localized === file.relativePath) continue\n locale = entry.code\n navigationId = pageIdFromReference(localized, platform === 'mintlify')\n break\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 let raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n mintlifyProjectRoot ?? docusaurusProjectRoot ?? repositoryDir,\n snippetAliases,\n )\n if (componentMigrator) raw = componentMigrator.transform(raw, file.absolutePath)\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 (platform === 'mintlify') {\n const sourcePath = exactReferenceKey(file.relativePath)\n // Only literal portable paths become Next redirects: source filenames\n // must never introduce route patterns such as `:param` or wildcards.\n if (sourcePath !== page.id && /^[A-Za-z0-9_./-]+$/.test(sourcePath)) {\n routeAliases.push({ source: `/${sourcePath}`, destination: `/${page.id}`, permanent: false })\n }\n }\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') {\n const sources = new Set((docsConfig.redirects ?? []).map((redirect) => redirect.source))\n const aliases = routeAliases.filter((redirect) => !sources.has(redirect.source))\n if (aliases.length > 0) docsConfig = { ...docsConfig, redirects: [...(docsConfig.redirects ?? []), ...aliases] }\n docsConfig = addMintlifyHomepageRedirects(addMintlifyDirectoryRedirects(docsConfig, pages), pages)\n }\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 ...(componentMigrator ? { componentFiles: componentMigrator.files() } : {}),\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 * Move repository-owned MDX components into the customer component registry.\n * Source is parsed, never evaluated. Every dependency must remain inside the\n * documentation root and traverse only ordinary files (including its parents).\n */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { dirname, extname, relative, resolve } from 'node:path'\nimport remarkMdx from 'remark-mdx'\nimport remarkParse from 'remark-parse'\nimport ts from 'typescript'\nimport { unified } from 'unified'\n\nimport { parseFrontmatter } from './frontmatter.js'\nimport { resolveWithin } from './path.js'\nimport type { MigrationWarning, RenderedMigrationFile } from './types.js'\n\ninterface MdxNode {\n type: string\n name?: string | null\n value?: string\n attributes?: Array<{ name?: string; type: string; value?: string | { value?: string } | null }>\n children?: Array<MdxNode>\n position?: { start: { offset?: number }; end: { offset?: number } }\n}\n\ninterface Replacement { start: number; end: number; value: string }\ninterface Binding { local: string; imported: string; source: string }\n\nconst parser = unified().use(remarkParse).use(remarkMdx)\nconst CODE_EXTENSIONS = new Set(['.js', '.jsx', '.ts', '.tsx', '.mjs'])\nconst DATA_EXTENSIONS = new Set(['.json', '.css', '.svg', '.png', '.jpg', '.jpeg', '.webp', '.gif', '.avif', '.woff', '.woff2'])\nconst SHARED_IMPORTS = new Set(['react', 'react/jsx-runtime', 'react/jsx-dev-runtime'])\nconst REACT_GLOBALS = new Set([\n 'useState', 'useEffect', 'useLayoutEffect', 'useMemo', 'useCallback', 'useRef',\n 'useReducer', 'useContext', 'useId', 'useTransition', 'useDeferredValue',\n 'useImperativeHandle', 'useSyncExternalStore', 'useInsertionEffect',\n 'useOptimistic', 'useActionState', 'use', 'createContext', 'forwardRef', 'memo',\n])\nconst MAX_COMPONENT_FILES = 300\nconst MAX_COMPONENT_BYTES = 20_000_000\nconst MAX_FILE_BYTES = 2_000_000\n\nfunction applyReplacements(source: string, replacements: Array<Replacement>): string {\n return replacements.sort((a, b) => b.start - a.start).reduce(\n (text, edit) => text.slice(0, edit.start) + edit.value + text.slice(edit.end), source,\n )\n}\n\nfunction hash(value: string): string {\n return createHash('sha256').update(value).digest('hex').slice(0, 12)\n}\n\nfunction portableSpecifier(path: string): string {\n // Customer tsconfigs do not opt into allowImportingTsExtensions. Next's\n // bundler resolves these extensionless source imports without that flag.\n return path.replace(/\\.tsx?$/, '')\n}\n\nfunction sourceFile(source: string, filename: string): ts.SourceFile {\n return ts.createSourceFile(filename, source, ts.ScriptTarget.Latest, true,\n /\\.[cm]?ts$/.test(filename) ? ts.ScriptKind.TS : ts.ScriptKind.TSX)\n}\n\nfunction walk(node: MdxNode, visitor: (node: MdxNode) => void): void {\n visitor(node)\n for (const child of node.children ?? []) walk(child, visitor)\n}\n\nfunction implicitReactImports(source: ts.SourceFile): string {\n const bindings = new Set<string>()\n const references = new Set<string>()\n function bind(name: ts.BindingName): void {\n if (ts.isIdentifier(name)) bindings.add(name.text)\n else for (const element of name.elements) if (ts.isBindingElement(element)) bind(element.name)\n }\n for (const statement of source.statements) {\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const clause = statement.importClause\n if (clause.name) bindings.add(clause.name.text)\n if (clause.namedBindings) {\n if (ts.isNamespaceImport(clause.namedBindings)) bindings.add(clause.namedBindings.name.text)\n else for (const element of clause.namedBindings.elements) bindings.add(element.name.text)\n }\n }\n if (ts.isVariableStatement(statement)) for (const declaration of statement.declarationList.declarations) bind(declaration.name)\n if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && statement.name) bindings.add(statement.name.text)\n }\n function visit(node: ts.Node): void {\n if (ts.isIdentifier(node) && !(ts.isPropertyAccessExpression(node.parent) && node.parent.name === node)\n && !(ts.isPropertyAssignment(node.parent) && node.parent.name === node)) references.add(node.text)\n ts.forEachChild(node, visit)\n }\n visit(source)\n const hooks = [...REACT_GLOBALS].filter((name) => references.has(name) && !bindings.has(name)).sort()\n return [\n references.has('React') && !bindings.has('React') ? \"import * as React from 'react';\" : '',\n hooks.length ? `import { ${hooks.join(', ')} } from 'react';` : '',\n ].filter(Boolean).join('\\n')\n}\n\nfunction imports(statement: ts.ImportDeclaration): Array<Binding> {\n if (!ts.isStringLiteral(statement.moduleSpecifier) || !statement.importClause) return []\n const clause = statement.importClause\n if (clause.isTypeOnly) return []\n const source = statement.moduleSpecifier.text\n const bindings: Array<Binding> = clause.name ? [{ local: clause.name.text, imported: 'default', source }] : []\n if (clause.namedBindings && ts.isNamedImports(clause.namedBindings)) {\n for (const element of clause.namedBindings.elements) {\n if (!element.isTypeOnly) bindings.push({ local: element.name.text, imported: element.propertyName?.text ?? element.name.text, source })\n }\n }\n return bindings\n}\n\n/** Create one bounded component graph and registry for a repository migration. */\nexport function createComponentMigrator(siteRoot: string, warnings: Array<MigrationWarning>, sourceIdentity: string): {\n transform: (raw: string, currentFile: string) => string\n files: () => Array<RenderedMigrationFile>\n} {\n const root = resolve(siteRoot)\n // A destination can contain imports from several repositories with identical\n // snippet names. Stable source identity isolates their graphs without tying\n // registry names to a temporary checkout path or changing repeat imports.\n const destinationRoot = `src/mdx/migrated/${hash(sourceIdentity)}`\n const copied = new Map<string, RenderedMigrationFile>()\n const registrations = new Map<string, { path: string; imported: string }>()\n let copiedBytes = 0\n\n function warn(message: string, source: string): void {\n warnings.push({ code: 'unsupported-config', message, source: relative(root, source).replace(/\\\\/g, '/') })\n }\n\n function checkedFile(path: string): string {\n const local = relative(root, path)\n resolveWithin(root, local)\n let current = root\n if (lstatSync(current).isSymbolicLink()) throw new Error('symbolic links are not imported')\n for (const segment of local.split(/[\\\\/]/)) {\n current = resolveWithin(current, segment)\n if (lstatSync(current).isSymbolicLink()) throw new Error('symbolic links are not imported')\n }\n if (!lstatSync(path).isFile()) throw new Error('dependency is not a regular file')\n return path\n }\n\n function resolveDependency(specifier: string, importer: string): string {\n if (specifier.includes('\\\\') || specifier.includes('\\0') || /[?#]/.test(specifier)) throw new Error('unsupported component dependency path')\n const candidate = specifier.startsWith('/')\n ? resolveWithin(root, specifier.slice(1))\n : resolveWithin(root, relative(root, resolve(dirname(importer), specifier)))\n const candidates = [candidate]\n if (!extname(candidate)) {\n candidates.push(...['.tsx', '.jsx', '.ts', '.js', '.mjs', '.json'].map((extension) => candidate + extension))\n candidates.push(...['index.tsx', 'index.jsx', 'index.ts', 'index.js'].map((name) => resolve(candidate, name)))\n } else if (extname(candidate) === '.js') {\n candidates.push(candidate.slice(0, -3) + '.ts', candidate.slice(0, -3) + '.tsx')\n }\n for (const path of candidates) {\n if (existsSync(path) && lstatSync(path).isFile()) return checkedFile(path)\n }\n throw new Error(`component dependency ${specifier} was not found`)\n }\n\n function outputPath(path: string): string {\n return `${destinationRoot}/source/${relative(root, path).replace(/\\\\/g, '/')}`\n }\n\n function copyGraph(entry: string): string {\n // Stage the entire graph in memory. A missing leaf must not leave a partly\n // registered component or consume the successful-copy budget.\n const staged = new Map<string, RenderedMigrationFile>()\n let stagedBytes = 0\n function visit(path: string): void {\n const destination = outputPath(path)\n if (copied.has(destination) || staged.has(destination)) return\n checkedFile(path)\n const size = lstatSync(path).size\n if (size > MAX_FILE_BYTES || copiedBytes + stagedBytes + size > MAX_COMPONENT_BYTES\n || copied.size + staged.size >= MAX_COMPONENT_FILES) throw new Error('component migration budget exceeded')\n const extension = extname(path).toLowerCase()\n if (!CODE_EXTENSIONS.has(extension) && !DATA_EXTENSIONS.has(extension)) throw new Error(`unsupported dependency file type ${extension}`)\n stagedBytes += size\n const content = readFileSync(path)\n staged.set(destination, { path: destination, content })\n if (!CODE_EXTENSIONS.has(extension)) {\n if (extension === '.css' && /@import\\b|url\\s*\\(/i.test(content.toString('utf8'))) throw new Error('CSS resource dependencies require manual migration')\n return\n }\n const text = content.toString('utf8')\n const syntax = ts.transpileModule(text, { fileName: path, reportDiagnostics: true,\n compilerOptions: { jsx: ts.JsxEmit.Preserve, target: ts.ScriptTarget.ESNext, module: ts.ModuleKind.ESNext } })\n if (syntax.diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error)) throw new Error('component source contains unsupported JavaScript or TypeScript syntax')\n const ast = sourceFile(text, path)\n if (ast.statements.some((statement) => ts.isExpressionStatement(statement)\n && ts.isStringLiteral(statement.expression) && statement.expression.text === 'use server')) throw new Error('server-only component modules require manual migration')\n const edits: Array<Replacement> = []\n function dependency(literal: ts.StringLiteralLike): void {\n const specifier = literal.text\n if (SHARED_IMPORTS.has(specifier)) return\n if (!specifier.startsWith('.') && !specifier.startsWith('/')) {\n throw new Error(`external package ${specifier} requires manual installation and review`)\n }\n const target = resolveDependency(specifier, path)\n visit(target)\n const nextPath = relative(dirname(destination), outputPath(target)).replace(/\\\\/g, '/')\n edits.push({ start: literal.getStart(ast), end: literal.end, value: JSON.stringify(portableSpecifier(nextPath.startsWith('.') ? nextPath : `./${nextPath}`)) })\n }\n function inspect(node: ts.Node): void {\n if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) dependency(node.moduleSpecifier)\n if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword\n || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) {\n const argument = node.arguments[0]\n if (node.arguments.length !== 1 || !argument || !ts.isStringLiteralLike(argument)) throw new Error('computed component imports require manual migration')\n dependency(argument)\n }\n ts.forEachChild(node, inspect)\n }\n inspect(ast)\n // Mark copied code as client-owned even when the source platform inferred\n // its client boundary. Browser hooks must never run in MDX's server scope.\n staged.set(destination, { path: destination, content: `'use client';\\n\\n${implicitReactImports(ast)}\\n${applyReplacements(text, edits)}` })\n }\n visit(entry)\n for (const [path, file] of staged) copied.set(path, file)\n copiedBytes += stagedBytes\n return outputPath(entry)\n }\n\n function register(path: string, imported: string): string {\n const name = `Migrated${hash(`${path}:${imported}`)}`\n registrations.set(name, { path, imported })\n return name\n }\n\n function transform(raw: string, currentFile: string): string {\n const content = parseFrontmatter(raw).content\n const frontmatter = raw.slice(0, raw.length - content.length)\n let tree: MdxNode\n try {\n tree = parser.parse(content) as MdxNode\n } catch {\n warn('Custom component analysis could not parse this MDX; its source was preserved for manual migration.', currentFile)\n return raw\n }\n const aliases = new Map<string, string>()\n const edits: Array<Replacement> = []\n const declarations: Array<{ start: number; end: number; source: string }> = []\n const moduleImports: Array<string> = []\n const sharedImportEdits: Array<Replacement> = []\n let hasUnsupportedImports = false\n function hasExpressionReference(names: Set<string>, options: {\n excludedNodes?: Array<MdxNode>\n includeDeclarations?: boolean\n includeDirectTags?: boolean\n } = {}): boolean {\n let found = false\n function inspect(node: ts.Node): void {\n if (ts.isIdentifier(node) && names.has(node.text)) found = true\n ts.forEachChild(node, inspect)\n }\n walk(tree, (node) => {\n if (options.excludedNodes?.some((excluded) => node.position?.start.offset !== undefined\n && node.position.end.offset !== undefined\n && node.position.start.offset >= excluded.position!.start.offset!\n && node.position.end.offset <= excluded.position!.end.offset!)) return\n if (node.name && [...names].some((name) => node.name!.startsWith(`${name}.`)\n || (options.includeDirectTags && node.name === name))) found = true\n if (options.includeDeclarations !== false && node.type === 'mdxjsEsm' && node.value) {\n for (const statement of sourceFile(node.value, 'expression.tsx').statements) {\n if (!ts.isImportDeclaration(statement)) inspect(statement)\n }\n }\n const expressions = [\n ...(['mdxFlowExpression', 'mdxTextExpression'].includes(node.type) ? [node.value ?? ''] : []),\n ...(node.attributes ?? []).flatMap((attribute) => {\n if (attribute.type === 'mdxJsxExpressionAttribute' && typeof attribute.value === 'string') return [attribute.value]\n return attribute.value && typeof attribute.value === 'object' ? [attribute.value.value ?? ''] : []\n }),\n ]\n for (const expression of expressions) inspect(sourceFile(expression, 'expression.tsx'))\n })\n return found\n }\n for (const node of tree.children ?? []) {\n if (node.type !== 'mdxjsEsm' || node.value === undefined || node.position?.start.offset === undefined) continue\n const ast = sourceFile(node.value, 'inline.tsx')\n for (const statement of ast.statements) {\n if (!ts.isImportDeclaration(statement)) {\n let unsupportedDependency = ts.isExportDeclaration(statement) && !!statement.moduleSpecifier\n function inspect(node: ts.Node): void {\n if (ts.isCallExpression(node) && (node.expression.kind === ts.SyntaxKind.ImportKeyword\n || (ts.isIdentifier(node.expression) && node.expression.text === 'require'))) unsupportedDependency = true\n ts.forEachChild(node, inspect)\n }\n inspect(statement)\n if (unsupportedDependency) {\n hasUnsupportedImports = true\n warn('Inline MDX module dependencies require manual extraction; source was preserved.', currentFile)\n }\n declarations.push({\n start: node.position.start.offset + statement.getStart(ast),\n end: node.position.start.offset + statement.end,\n source: statement.getText(ast),\n })\n continue\n }\n const bindings = imports(statement)\n const specifier = ts.isStringLiteral(statement.moduleSpecifier) ? statement.moduleSpecifier.text : ''\n if (!specifier.startsWith('.') && !specifier.startsWith('/')) {\n if (SHARED_IMPORTS.has(specifier)) {\n moduleImports.push(statement.getText(ast))\n sharedImportEdits.push({ start: node.position.start.offset + statement.getStart(ast), end: node.position.start.offset + statement.end, value: '' })\n } else {\n hasUnsupportedImports = true\n warn(`MDX import ${specifier} requires manual package installation or registration; the import was preserved.`, currentFile)\n }\n continue\n }\n if (/\\.mdx?$/.test(specifier)) continue\n if (!bindings.length || (statement.importClause?.namedBindings && ts.isNamespaceImport(statement.importClause.namedBindings))) {\n warn('Namespace or side-effect MDX imports require manual registration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n if (bindings.some((binding) => !/^[A-Z]/.test(binding.local))) {\n warn('MDX imports containing non-component values require manual migration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n if (hasExpressionReference(new Set(bindings.map((binding) => binding.local)))) {\n warn('Imported components used in MDX expressions, component props, or member tags require manual migration; the import was preserved.', currentFile)\n hasUnsupportedImports = true\n continue\n }\n try {\n const path = copyGraph(resolveDependency(specifier, currentFile))\n for (const binding of bindings) {\n const name = register(path, binding.imported)\n aliases.set(binding.local, name)\n moduleImports.push(`import { ${binding.imported} as ${binding.local} } from ${JSON.stringify(portableSpecifier(`./${relative(destinationRoot, path).replace(/\\\\/g, '/')}`))};`)\n }\n edits.push({ start: node.position.start.offset + statement.getStart(ast), end: node.position.start.offset + statement.end, value: '' })\n } catch (error) {\n hasUnsupportedImports = true\n warn(`Custom component was preserved for manual migration: ${error instanceof Error ? error.message : 'unsupported dependency'}.`, currentFile)\n }\n }\n }\n\n // Extract whole HTML JSX roots with event handlers. Markdown and global\n // built-ins remain server-rendered; React functions stay inside the client\n // module, so no function is serialized across a server/client boundary.\n const extracted: Array<{ node: MdxNode; name: string; jsx: string }> = []\n for (const candidate of tree.children ?? []) {\n const node = candidate.type === 'paragraph' && candidate.children?.length === 1 ? candidate.children[0] : candidate\n if (!['mdxJsxFlowElement', 'mdxJsxTextElement'].includes(node.type) || node.position?.start.offset === undefined || node.position.end.offset === undefined) continue\n let interactive = false\n let supported = true\n walk(node, (child) => {\n if (child.attributes?.some((attribute) => /^on[A-Z]/.test(attribute.name ?? ''))) interactive = true\n if (child.name && /^[A-Z]/.test(child.name) && !aliases.has(child.name)) supported = false\n if (!['mdxJsxFlowElement', 'mdxJsxTextElement', 'mdxFlowExpression', 'mdxTextExpression', 'text', 'paragraph'].includes(child.type)) supported = false\n })\n if (!interactive) continue\n if (!supported || hasUnsupportedImports) {\n warn('Interactive MDX containing Markdown or unregistered components requires manual extraction; source was preserved.', currentFile)\n continue\n }\n const jsx = content.slice(node.position.start.offset, node.position.end.offset)\n // The JSX compiler is the final syntax gate: Markdown embedded in JSX\n // must not accidentally become JavaScript in the generated module.\n const result = ts.transpileModule(`export default function Inline() { return (${jsx}); }`, {\n fileName: 'inline.jsx', compilerOptions: { jsx: ts.JsxEmit.Preserve }, reportDiagnostics: true,\n })\n if (result.diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error)) {\n warn('Interactive MDX could not be safely extracted as JSX; source was preserved.', currentFile)\n continue\n }\n extracted.push({ node, name: `Inline${extracted.length}`, jsx })\n }\n if (extracted.length && declarations.length) {\n const declared = new Set<string>()\n function bind(name: ts.BindingName): void {\n if (ts.isIdentifier(name)) declared.add(name.text)\n else for (const element of name.elements) if (ts.isBindingElement(element)) bind(element.name)\n }\n for (const declaration of declarations) {\n for (const statement of sourceFile(declaration.source, 'declaration.tsx').statements) {\n if ((ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement)) && statement.name) declared.add(statement.name.text)\n if (ts.isVariableStatement(statement)) for (const variable of statement.declarationList.declarations) bind(variable.name)\n }\n }\n const hasSharedDeclarations = hasExpressionReference(declared, {\n excludedNodes: extracted.map((entry) => entry.node),\n includeDeclarations: false,\n includeDirectTags: true,\n })\n if (hasSharedDeclarations) {\n warn('Interactive MDX shares declarations with remaining page content; source was preserved for manual extraction.', currentFile)\n extracted.length = 0\n }\n }\n if (extracted.length && (copied.size >= MAX_COMPONENT_FILES\n || Buffer.byteLength(content) > MAX_FILE_BYTES\n || copiedBytes + Buffer.byteLength(content) > MAX_COMPONENT_BYTES)) {\n warn('Interactive MDX exceeded the component migration budget; source was preserved.', currentFile)\n extracted.length = 0\n }\n if (extracted.length) {\n const path = `${destinationRoot}/inline-${hash(relative(root, currentFile))}.jsx`\n let declarationSource = [...new Set(declarations.map((entry) => entry.source))].join('\\n\\n')\n // Mintlify exposes this DOM id as its documented search trigger. Thally\n // opens search through the same keyboard event handled by CommandSearch.\n declarationSource = declarationSource.replace(/document\\.getElementById\\(\\s*(['\"])search-bar-entry\\1\\s*\\)\\.click\\(\\s*\\)/g,\n `document.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', ctrlKey: true, bubbles: true }))`)\n const inlineSource = [\n \"'use client';\", '', ...moduleImports, '', declarationSource, '',\n ...extracted.map(({ name, jsx }) => `export function ${name}() {\\n return (${jsx});\\n}`), '',\n ].join('\\n')\n copied.set(path, { path, content: `'use client';\\n${implicitReactImports(sourceFile(inlineSource, 'inline.jsx'))}\\n${inlineSource}` })\n copiedBytes += Buffer.byteLength(inlineSource)\n for (const { node, name } of extracted) {\n edits.push({ start: node.position!.start.offset!, end: node.position!.end.offset!, value: `<${register(path, name)} />` })\n }\n edits.push(...declarations.map(({ start, end }) => ({ start, end, value: '' })), ...sharedImportEdits)\n }\n walk(tree, (node) => {\n const replacement = node.name ? aliases.get(node.name) : undefined\n if (!replacement || node.position?.start.offset === undefined || node.position.end.offset === undefined) return\n const start = node.position.start.offset\n const end = node.position.end.offset\n if (extracted.some((item) => start >= item.node.position!.start.offset! && end <= item.node.position!.end.offset!)) return\n const text = content.slice(start, end)\n const opening = text.indexOf(`<${node.name}`)\n if (opening >= 0) edits.push({ start: start + opening + 1, end: start + opening + 1 + node.name!.length, value: replacement })\n const closing = text.lastIndexOf(`</${node.name}`)\n if (closing >= 0) edits.push({ start: start + closing + 2, end: start + closing + 2 + node.name!.length, value: replacement })\n })\n return frontmatter + applyReplacements(content, edits)\n }\n\n function files(): Array<RenderedMigrationFile> {\n if (!registrations.size) return []\n const entries = [...registrations.entries()].sort(([a], [b]) => a.localeCompare(b))\n return [...copied.values(), {\n path: 'src/mdx/custom-components.tsx',\n content: [\n '/** Repository components preserved by migration; this registry is customer-owned. */',\n \"import type { MDXComponents } from 'mdx/types'\", ...entries.map(([name, binding]) => {\n const path = portableSpecifier(`./${relative('src/mdx', binding.path).replace(/\\\\/g, '/')}`)\n return `import { ${binding.imported} as ${name} } from ${JSON.stringify(path)}`\n }), '', 'export const customComponents: MDXComponents = {',\n ...entries.map(([name]) => ` ${name},`), '}', '',\n ].join('\\n'),\n }]\n }\n return { transform, files }\n}\n\n/** Preserve an authored component registry while adding an isolated import map. */\nexport function mergeComponentRegistry(existing: string, incoming: string): Array<RenderedMigrationFile> {\n const fingerprint = hash(incoming)\n const name = `MigratedRegistry${fingerprint}`\n const registryPath = `./migrated-components-${fingerprint}`\n const source = sourceFile(existing, 'custom-components.tsx')\n const alreadyImported = source.statements.some((statement) => ts.isImportDeclaration(statement)\n && ts.isStringLiteral(statement.moduleSpecifier) && statement.moduleSpecifier.text === registryPath)\n let initializer: ts.Expression | undefined\n for (const statement of source.statements) {\n if (!ts.isVariableStatement(statement) || !statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) continue\n for (const declaration of statement.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name) && declaration.name.text === 'customComponents') initializer = declaration.initializer\n }\n }\n while (initializer && (ts.isAsExpression(initializer) || ts.isSatisfiesExpression(initializer) || ts.isParenthesizedExpression(initializer))) initializer = initializer.expression\n if (!initializer || !ts.isObjectLiteralExpression(initializer)) {\n throw new Error('Cannot safely merge src/mdx/custom-components.tsx: export customComponents as an object literal before importing components. The existing registry was preserved.')\n }\n const content = alreadyImported ? existing : applyReplacements(existing, [\n { start: source.statements.filter((statement) => ts.isExpressionStatement(statement) && ts.isStringLiteral(statement.expression)).at(-1)?.end ?? 0,\n end: source.statements.filter((statement) => ts.isExpressionStatement(statement) && ts.isStringLiteral(statement.expression)).at(-1)?.end ?? 0,\n value: `\\nimport { customComponents as ${name} } from ${JSON.stringify(registryPath)}\\n` },\n { start: initializer.getStart(source) + 1, end: initializer.getStart(source) + 1, value: `\\n ...${name},` },\n ])\n return [\n { path: `src/mdx/migrated-components-${fingerprint}.tsx`, content: incoming },\n { path: 'src/mdx/custom-components.tsx', content },\n ]\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","/** 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/**\n * Resolve language directories and legacy language-prefixed sections to the\n * same content identity used by default-language navigation. A hyphenated\n * section is only an alias when its unprefixed counterpart actually exists.\n */\nexport function mintlifyLocalizedReference(\n value: string,\n locale: string,\n defaultPageIds: ReadonlySet<string> = new Set(),\n): string {\n const reference = value.replace(/^\\/+/, '')\n const localePrefix = `${locale.toLowerCase()}/`\n if (reference.toLowerCase().startsWith(localePrefix)) return reference.slice(localePrefix.length)\n const sectionPrefix = `${locale.toLowerCase()}-`\n if (reference.toLowerCase().startsWith(sectionPrefix)) {\n const candidate = reference.slice(sectionPrefix.length)\n const candidateId = pageIdFromReference(candidate, true)\n if (candidateId && defaultPageIds.has(candidateId)) return candidate\n }\n return value\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 * 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: Array<[string, unknown]> = 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","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport remarkMdx from 'remark-mdx'\nimport remarkParse from 'remark-parse'\nimport { unified } from 'unified'\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\ninterface DescriptionNode {\n type: string\n value?: string\n alt?: string | null\n children?: Array<DescriptionNode>\n}\n\nconst descriptionParser = unified().use(remarkParse).use(remarkMdx)\n\nfunction firstParagraph(content: string): string {\n function plainText(node: DescriptionNode): string {\n if (node.type === 'text' || node.type === 'inlineCode') return node.value ?? ''\n if (node.type === 'image') return node.alt ?? ''\n if (node.type === 'break') return ' '\n return (node.children ?? []).map(plainText).join('')\n }\n function findParagraph(node: DescriptionNode): string {\n if (node.type === 'paragraph') {\n const value = plainText(node).replace(/\\s+/g, ' ').trim()\n if (value) return value.slice(0, 240)\n }\n for (const child of node.children ?? []) {\n const value = findParagraph(child)\n if (value) return value\n }\n return ''\n }\n // Component wrappers, imports, expressions, and code fences are syntax, not\n // description copy. Reading paragraph nodes also finds prose nested inside\n // accordions without leaking their closing tags into page metadata.\n try {\n return findParagraph(descriptionParser.parse(content) as DescriptionNode)\n } catch {\n // Unparseable source is already retained for the migration validator. An\n // empty generated description is safer than exposing source-code fragments.\n return ''\n }\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\nconst GLOBAL_DOCUSARUS_COMPONENTS = new Set([\n 'Tabs',\n 'TabItem',\n 'Link',\n 'DocCardList',\n 'TOCInline',\n])\n\n/** Match the one simple import form Docusaurus injects without backtracking. */\nfunction isGlobalDocusaurusImport(line: string): boolean {\n const trimmed = line.trim().replace(/;$/, '').trimEnd()\n if (!trimmed.startsWith('import ')) return false\n const separator = trimmed.indexOf(' from ', 'import '.length)\n if (separator < 0) return false\n const component = trimmed.slice('import '.length, separator).trim()\n if (!GLOBAL_DOCUSARUS_COMPONENTS.has(component)) return false\n const source = trimmed.slice(separator + ' from '.length)\n if (source.length < 3) return false\n const quote = source[0]\n if ((quote !== \"'\" && quote !== '\"') || source.at(-1) !== quote) return false\n const moduleName = source.slice(1, -1)\n return moduleName.startsWith('@theme/') || moduleName.startsWith('@docusaurus/')\n}\n\n/** Normalize only syntax Thally cannot render; supported source JSX stays intact. */\nexport function normalizeMdx(body: string): string {\n // Docusaurus injects these theme components globally. Thally also exposes\n // its equivalents globally, so source-only imports must not survive.\n const withoutGlobalImports = body\n .split('\\n')\n .filter((line) => !isGlobalDocusaurusImport(line))\n .join('\\n')\n return normalizeDocusaurusAdmonitions(withoutGlobalImports)\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 { mintlifyLocalizedReference, 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.map((page) => page.id))\n const redirects = [...(config.redirects ?? [])]\n const redirectSources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n function hasAuthoredRedirect(source: string): boolean {\n if (redirectSources.has(source)) return true\n return (config.redirects ?? []).some((redirect) => {\n // A trailing catch-all also owns its empty suffix. Do not insert an\n // exact alias that competes with that authored directory behavior.\n const match = redirect.source.match(/^(.*)\\/:[A-Za-z_][A-Za-z0-9_]*\\*\\/?$/)\n return match ? source === match[1] || source.startsWith(`${match[1]}/`) : false\n })\n }\n for (const page of pages) {\n if (!/\\/(?:overview|introduction)$/.test(page.navigationId)) continue\n const parent = page.id.replace(/\\/(?:overview|introduction)$/, '')\n if (!parent || pageIds.has(parent)) continue\n const source = `/${parent}`\n if (hasAuthoredRedirect(source)) continue\n redirects.push({ source, destination: `/${page.id}`, permanent: false })\n redirectSources.add(source)\n }\n\n const navigationOrder: Array<string> = []\n function collectPages(nodes: Array<string | MigrationNavigationGroup>): void {\n for (const node of nodes) {\n if (typeof node === 'string') navigationOrder.push(node)\n else if (!node.hidden) collectPages(node.pages)\n }\n }\n for (const tab of config.tabs) {\n if (!tab.hidden) collectPages([...(tab.pages ?? []), ...(tab.groups ?? [])])\n }\n const pagesByNavigationId = new Map<string, Array<MigrationPage>>()\n for (const page of pages) {\n if (page.hidden) continue\n const variants = pagesByNavigationId.get(page.navigationId) ?? []\n variants.push(page)\n pagesByNavigationId.set(page.navigationId, variants)\n }\n const firstDescendantByDirectory = new Map<string, MigrationPage>()\n for (const navigationId of navigationOrder) {\n for (const page of pagesByNavigationId.get(navigationId) ?? []) {\n const segments = page.id.split('/')\n for (let length = 1; length < segments.length; length++) {\n const directory = segments.slice(0, length).join('/')\n if (!firstDescendantByDirectory.has(directory)) firstDescendantByDirectory.set(directory, page)\n }\n }\n }\n for (const redirect of config.redirects ?? []) {\n // An authored redirect is evidence that a directory itself was a public\n // route, even when its landing page has no overview/introduction filename.\n // Resolve only that destination, using source navigation order rather than\n // filesystem order. Required parameters and arbitrary patterns stay intact.\n const destination = redirect.destination.split(/[?#]/, 1)[0]\n .replace(/\\/:[A-Za-z_][A-Za-z0-9_]*\\*\\/?$/, '')\n if (!destination.startsWith('/') || destination.startsWith('//') || /[:*()[\\]{}]/.test(destination)) continue\n const directory = trimEdgeSlashes(destination)\n if (!directory || pageIds.has(directory)) continue\n const source = `/${directory}`\n if (hasAuthoredRedirect(source)) continue\n const landing = firstDescendantByDirectory.get(directory)\n if (!landing) continue\n // Match full stored ids, not locale-independent navigation ids: a French\n // directory must never be redirected to an English descendant.\n redirects.push({ source, destination: `/${landing.id}`, permanent: false })\n redirectSources.add(source)\n }\n return redirects.length > 0 ? { ...config, redirects } : config\n}\n\n/**\n * Keep authored page URLs while resolving bare documentation roots to the\n * first visible navigation page. An unrelated `home.mdx` is not evidence that\n * Mintlify served it at `/`; explicit source redirects always take priority.\n */\nexport function addMintlifyHomepageRedirects(\n config: MigrationDocsConfig,\n pages: Array<MigrationPage>,\n): MigrationDocsConfig {\n const defaultPages = new Set(pages\n .filter((page) => !page.locale || page.locale === config.i18n?.defaultLocale)\n .map((page) => page.navigationId))\n function firstPage(nodes: Array<string | MigrationNavigationGroup>): string | undefined {\n for (const node of nodes) {\n if (typeof node === 'string') {\n if (defaultPages.has(node)) return node\n } else if (!node.hidden) {\n const page = firstPage(node.pages)\n if (page) return page\n }\n }\n }\n const homepage = config.tabs.filter((tab) => !tab.hidden)\n .map((tab) => firstPage([...(tab.pages ?? []), ...(tab.groups ?? [])]))\n .find(Boolean)\n if (!homepage || homepage === 'introduction') return config\n const redirects = [...(config.redirects ?? [])]\n const sources = new Set(redirects.map((redirect) => redirect.source.replace(/\\/$/, '') || '/'))\n const roots = ['', ...(config.i18n?.locales ?? [])\n .filter((locale) => locale.code !== config.i18n?.defaultLocale)\n .map((locale) => locale.code)]\n for (const locale of roots) {\n const source = locale ? `/${locale}` : '/'\n if (sources.has(source)) continue\n redirects.push({ source, destination: `${locale ? `/${locale}` : ''}/${homepage}`, permanent: false })\n }\n return { ...config, redirects }\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 defaultPageIds?: ReadonlySet<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 localizedValue = context.locale\n ? mintlifyLocalizedReference(value, context.locale, context.defaultPageIds)\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 iconLibrary = objectValue(config.icons)?.library\n const projectedIconLibrary = ['lucide', 'fontawesome', 'tabler'].includes(String(iconLibrary))\n ? String(iconLibrary) as 'lucide' | 'fontawesome' | 'tabler'\n : undefined\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 ...(projectedIconLibrary ? { icons: { library: projectedIconLibrary } } : {}),\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.flatMap((value): Array<Record<string, unknown>> => {\n const language = objectValue(value)\n if (!language) return []\n try {\n const code = Intl.getCanonicalLocales(String(language.language ?? language.locale ?? 'en'))[0]\n return [{ ...language, language: code }]\n } catch {\n warnings.push({ code: 'unsupported-config', message: 'A navigation language with an invalid locale code was skipped.' })\n return []\n }\n })\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)\n const locales = languages.map((entry) => {\n const code = String(entry.language)\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 const defaultPageIds = new Set<string>()\n // The default language supplies canonical page identities even when it\n // appears after translations in the authored language picker.\n for (const language of [defaultLanguage, ...languages.filter((entry) => entry !== defaultLanguage)]) {\n const locale = String(language.language)\n const context: ProjectionContext = {\n locale,\n defaultPageIds,\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) {\n tabs = languageTabs\n for (const reference of references) defaultPageIds.add(reference.navigationId)\n }\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 { mergeComponentRegistry } from './components.js'\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; existingComponentRegistry?: string } = {},\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 ...(bundle.componentFiles ?? []).flatMap((file) => file.path === 'src/mdx/custom-components.tsx'\n && options.existingComponentRegistry !== undefined && typeof file.content === 'string'\n ? mergeComponentRegistry(options.existingComponentRegistry, file.content)\n : [file]),\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 remarkMdx from 'remark-mdx'\nimport remarkParse from 'remark-parse'\nimport TurndownService from 'turndown'\nimport { unified } from 'unified'\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'\nconst PORTABLE_URL_PROP_NAMES = new Set(PORTABLE_URL_PROPS.split('|'))\nconst remoteMarkdownParser = unified().use(remarkParse).use(remarkMdx)\n\ninterface RemoteMarkdownAttributeValue {\n type: string\n value: string\n}\n\ninterface RemoteMarkdownAttribute {\n type: string\n name?: string\n value?: string | null | RemoteMarkdownAttributeValue\n}\n\ninterface RemoteMarkdownNode {\n type: string\n alt?: string | null\n attributes?: Array<RemoteMarkdownAttribute>\n identifier?: string\n url?: string\n value?: string\n children?: Array<RemoteMarkdownNode>\n position?: {\n start: { offset?: number }\n end: { offset?: number }\n }\n}\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')) 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 isSafePortableUrl(value: string): boolean {\n try {\n const parsed = new URL(value, 'https://relative.thally.invalid')\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol)\n } catch {\n return false\n }\n}\n\nfunction decodeHtmlAttribute(value: string): string {\n const document = load(`<i data-thally-value=\"${value.replace(/\"/g, '"')}\"></i>`)\n return document('i').attr('data-thally-value') ?? ''\n}\n\n/** Escape imported copy for Markdown text and MDX's additional delimiters. */\nfunction escapeMarkdownText(value: string, escapeTableSeparator = false): string {\n let escaped = ''\n for (const character of value) {\n if (character === '\\\\') escaped += '\\\\\\\\'\n else if (character === '[' || character === ']') escaped += `\\\\${character}`\n else if (character === '<') escaped += '<'\n else if (character === '>') escaped += '>'\n else if (character === '{') escaped += '{'\n else if (character === '}') escaped += '}'\n else if (character === '|' && escapeTableSeparator) escaped += '\\\\|'\n else escaped += character\n }\n return escaped\n}\n\nfunction markdownLinkDestination(value: string): string | null {\n try {\n return encodeURI(value)\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/&/g, '&')\n } catch {\n return null\n }\n}\n\nfunction htmlOpeningTagEnd(value: string, start: number): number | null {\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) quote = ''\n continue\n }\n if (character === '\"' || character === \"'\") {\n quote = character\n continue\n }\n if (character === '>') return index + 1\n }\n return null\n}\n\nfunction replacePortableHtmlImages(value: string): string {\n const matcher = /<img\\b/gi\n let cursor = 0\n let output = ''\n for (const match of value.matchAll(matcher)) {\n const start = match.index\n if (start < cursor) continue\n const end = htmlOpeningTagEnd(value, start + match[0].length)\n if (end === null) continue\n const fragment = load(value.slice(start, end))\n const image = fragment('img').first()\n const source = image.attr('src')\n const destination = source && isSafePortableUrl(source) ? markdownLinkDestination(source) : null\n const alternative = escapeMarkdownText(image.attr('alt') ?? '')\n output += value.slice(cursor, start)\n output += destination ? `` : alternative\n cursor = end\n }\n return cursor === 0 ? value : `${output}${value.slice(cursor)}`\n}\n\nfunction replacePortableHtmlAnchors(value: string): string {\n const matcher = /<a\\b/gi\n let cursor = 0\n let output = ''\n for (const match of value.matchAll(matcher)) {\n const start = match.index\n if (start < cursor) continue\n const openingEnd = htmlOpeningTagEnd(value, start + match[0].length)\n if (openingEnd === null) continue\n const closingMatch = /<\\/a\\s*>/gi\n closingMatch.lastIndex = openingEnd\n const closing = closingMatch.exec(value)\n if (!closing) continue\n const end = closing.index + closing[0].length\n const fragment = load(value.slice(start, end))\n const anchor = fragment('a').first()\n const href = anchor.attr('href')\n const label = escapeMarkdownText(anchor.text().replace(/\\s+/g, ' ').trim())\n const destination = href && isSafePortableUrl(href) ? markdownLinkDestination(href) : null\n output += value.slice(cursor, start)\n output += destination ? `[${label}](${destination})` : label\n cursor = end\n }\n return cursor === 0 ? value : `${output}${value.slice(cursor)}`\n}\n\nfunction markdownNodeText(node: RemoteMarkdownNode): string {\n if (node.type === 'text' || node.type === 'inlineCode') return node.value ?? ''\n if (node.type === 'image' || node.type === 'imageReference') return node.alt ?? ''\n return (node.children ?? []).map(markdownNodeText).join('')\n}\n\n/**\n * Remove unsafe Markdown links using the actual Markdown/MDX parse tree. This\n * catches entity-encoded schemes and balanced destinations that regexes cannot\n * classify reliably, while leaving code fences and ordinary prose untouched.\n */\nfunction sanitizeMarkdownUrls(value: string): string | null {\n let root: RemoteMarkdownNode\n try {\n root = remoteMarkdownParser.parse(value) as RemoteMarkdownNode\n } catch {\n return null\n }\n\n let hasUnsafeMdxSyntax = false\n const validateMdxSyntax = (node: RemoteMarkdownNode) => {\n if (node.type === 'mdxTextExpression'\n || node.type === 'mdxFlowExpression'\n || node.type === 'mdxjsEsm') {\n hasUnsafeMdxSyntax = true\n return\n }\n if (node.type === 'mdxJsxTextElement' || node.type === 'mdxJsxFlowElement') {\n for (const attribute of node.attributes ?? []) {\n if (attribute.type !== 'mdxJsxAttribute' || !attribute.name\n || /^on[A-Z]/.test(attribute.name)) {\n hasUnsafeMdxSyntax = true\n return\n }\n let staticValue: unknown = attribute.value\n if (attribute.value && typeof attribute.value === 'object') {\n if (attribute.value.type !== 'mdxJsxAttributeValueExpression') {\n hasUnsafeMdxSyntax = true\n return\n }\n try {\n staticValue = JSON.parse(attribute.value.value)\n } catch {\n hasUnsafeMdxSyntax = true\n return\n }\n }\n if (PORTABLE_URL_PROP_NAMES.has(attribute.name)\n && (typeof staticValue !== 'string'\n || !isSafePortableUrl(decodeHtmlAttribute(staticValue)))) {\n hasUnsafeMdxSyntax = true\n return\n }\n }\n }\n for (const child of node.children ?? []) validateMdxSyntax(child)\n }\n validateMdxSyntax(root)\n if (hasUnsafeMdxSyntax) return null\n\n const unsafeDefinitions = new Set<string>()\n const visitDefinitions = (node: RemoteMarkdownNode) => {\n if (node.type === 'definition' && node.identifier && node.url\n && !isSafePortableUrl(node.url)) unsafeDefinitions.add(node.identifier.toLowerCase())\n for (const child of node.children ?? []) visitDefinitions(child)\n }\n visitDefinitions(root)\n\n const replacements: Array<{ start: number; end: number; value: string }> = []\n const replaceNode = (node: RemoteMarkdownNode, replacement: string): boolean => {\n const start = node.position?.start.offset\n const end = node.position?.end.offset\n if (start === undefined || end === undefined) return false\n replacements.push({ start, end, value: replacement })\n return true\n }\n const visitUrls = (node: RemoteMarkdownNode) => {\n const hasUnsafeDirectUrl = (node.type === 'link' || node.type === 'image')\n && typeof node.url === 'string'\n && !isSafePortableUrl(node.url)\n const hasUnsafeReference = (node.type === 'linkReference' || node.type === 'imageReference')\n && typeof node.identifier === 'string'\n && unsafeDefinitions.has(node.identifier.toLowerCase())\n if (hasUnsafeDirectUrl || hasUnsafeReference) {\n if (replaceNode(node, escapeMarkdownText(markdownNodeText(node)))) return\n }\n if (node.type === 'definition' && node.identifier\n && unsafeDefinitions.has(node.identifier.toLowerCase())) {\n if (replaceNode(node, '')) return\n }\n for (const child of node.children ?? []) visitUrls(child)\n }\n visitUrls(root)\n\n return replacements\n .sort((left, right) => right.start - left.start)\n .reduce((result, replacement) => (\n `${result.slice(0, replacement.start)}${replacement.value}${result.slice(replacement.end)}`\n ), value)\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 (!isSafePortableUrl(decodeHtmlAttribute(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 (!isSafePortableUrl(decodeHtmlAttribute(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 replacePortableHtmlAnchors(replacePortableHtmlImages(value))\n .replace(/<span\\b[^>]*>|<\\/span>/gi, '')\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 // Remove obviously unsafe image destinations before MDX parsing. A data\n // URL can itself contain raw `<svg ...>` syntax that makes an otherwise\n // removable Markdown image fail the MDX grammar before the AST exists.\n .replace(/!\\[([^\\]]*)\\]\\(\\s*([^)]+)\\)/g, (original, alternative: string, destination: string) => (\n isSafePortableUrl(decodeHtmlAttribute(destination.replace(/^<|>$/g, '')))\n ? original\n : escapeMarkdownText(alternative)\n ))))\n }).join('\\n')\n const urlSafeMarkdown = sanitizeMarkdownUrls(sanitized)\n if (urlSafeMarkdown === null) return null\n const executable = withoutFencedCode(urlSafeMarkdown)\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 urlSafeMarkdown\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) => escapeMarkdownText(\n fragment(cell).text().replace(/\\s+/g, ' ').trim(),\n true,\n ))\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","relative","resolve","resolve","relative","inspect","node","bind","existsSync","lstatSync","readFileSync","extname","parseYaml","lstatSync","readFileSync","existsSync","extname","parseYaml","remarkMdx","remarkParse","unified","unified","remarkParse","remarkMdx","existsSync","lstatSync","readFileSync","dirname","extname","relative","objectValue","existsSync","lstatSync","relative","readFileSync","dirname","value","titleCase","extname","existsSync","lstatSync","readFileSync","dirname","relative","resolve","extname","remarkMdx","remarkParse","unified","parseYaml","unified","remarkParse","remarkMdx","value","payload","parseYaml","title","converted","candidates","entries"]}
|