@thallylabs/migrate 0.2.0 → 0.2.1

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/repository.ts","../src/docusaurus.ts","../src/path.ts","../src/mdx.ts","../src/navigation.ts","../src/render.ts","../src/url.ts"],"sourcesContent":["/**\n * Repository adapter for the shared migration engine. Traversal is bounded,\n * symbolic links are ignored, and Git is always invoked with an argument array\n * so source-controlled branch names can never become shell commands.\n */\n\nimport { spawn } from 'node:child_process'\nimport {\n existsSync,\n lstatSync,\n readFileSync,\n readdirSync,\n} from 'node:fs'\nimport { basename, dirname, extname, relative, resolve as resolvePath } from 'node:path'\n\nimport {\n projectDocusaurusNavigation,\n readDocusaurusSidebars,\n rewriteDocusaurusLinks,\n resolveDocusaurusPageIdentity,\n type DocusaurusPageDescriptor,\n type DocusaurusSidebars,\n} from './docusaurus.js'\nimport { parseMarkdownPage } from './mdx.js'\nimport {\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport { normalizeAssetPath, pageIdFromReference, resolveWithin } 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 findDocusaurusProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = docsDir.replace(/\\/+$/, '')\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 configured?.replace(/^\\.\\//, '').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 = match[2].replace(/^\\.\\//, '').replace(/\\/+$/, '')\n const routePrefix = match[4].replace(/^\\/+|\\/+$/g, '')\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): MigrationPlatform {\n if (existsSync(resolveWithin(repositoryDir, 'mint.json'))) return 'mintlify'\n const docsJson = resolveWithin(repositoryDir, 'docs.json')\n if (existsSync(docsJson)) {\n try {\n const config = JSON.parse(readFileSync(docsJson, 'utf8')) as Record<string, unknown>\n if (String(config.$schema ?? '').includes('mintlify') || 'navigation' in config) return 'mintlify'\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 findOpenApi(files: Array<ScannedFile>): ScannedFile | null {\n return files.find((file) => OPENAPI_FILENAMES.has(basename(file.relativePath).toLowerCase())) ?? null\n}\n\nfunction withoutFrontmatter(value: string): string {\n return value.replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, '').trim()\n}\n\nfunction inlineMdxSnippets(\n raw: string,\n currentFile: string,\n repositoryRoot: string,\n warnings: Array<MigrationWarning>,\n depth = 0,\n siteRoot = repositoryRoot,\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 repositoryRelative = sourcePath.startsWith('@site/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.slice('@site/'.length))).replace(/\\\\/g, '/')\n : sourcePath.startsWith('/')\n ? sourcePath.replace(/^\\/+/, '')\n : relative(repositoryRoot, resolvePath(dirname(currentFile), sourcePath)).replace(/\\\\/g, '/')\n const candidate = resolveWithin(repositoryRoot, repositoryRelative)\n // Prove a relative import resolved under the repository, not merely\n // under the current directory's parent chain.\n resolveWithin(repositoryRoot, relative(repositoryRoot, candidate))\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 )\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 let result = withoutImports\n for (const [componentName, snippet] of snippets) {\n result = result\n .replace(new RegExp(`<${componentName}(?:\\\\s[^>]*)?\\\\s*/>`, 'g'), snippet)\n .replace(new RegExp(`<${componentName}(?:\\\\s[^>]*)?>(?:[\\\\s\\\\S]*?)<\\\\/${componentName}>`, 'g'), snippet)\n }\n return result\n}\n\nfunction injectOpenApi(config: MigrationDocsConfig, filename: string): MigrationDocsConfig {\n const tabs = config.tabs.filter((tab) => !tab.tab.toLowerCase().includes('api'))\n const apiTab: MigrationDocsConfig['tabs'][number] = {\n tab: 'API Reference',\n api: { source: `/${filename}` },\n }\n const changelog = tabs.findIndex((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog >= 0) tabs.splice(changelog, 0, apiTab)\n else tabs.push(apiTab)\n return { ...config, tabs }\n}\n\n/** Import an already-available repository directory into a canonical bundle. */\nexport function migrateRepository(options: RepositoryMigrationOptions): MigrationBundle {\n const repositoryDir = options.repositoryDir\n const platform = options.platform ?? detectRepositoryPlatform(repositoryDir)\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 return platform === 'mintlify' ? '' : detectRepositoryDocsDir(repositoryDir)\n })()\n const warnings: Array<MigrationWarning> = []\n let docsConfig: MigrationDocsConfig = { tabs: [] }\n const referenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const referenceOrder = new Map<string, number>()\n let docusaurusSidebars: DocusaurusSidebars | null = null\n\n if (platform === 'mintlify') {\n try {\n const config = readMintlifyConfig(repositoryDir)\n if (config) {\n const projected = projectMintlifyNavigation(config)\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const [index, reference] of projected.pageReferences.entries()) {\n const key = normalizedReferenceKey(reference.ref)\n referenceMap.set(key, reference)\n referenceOrder.set(key, index)\n }\n }\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Mintlify config could not be read: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (platform === 'docusaurus') {\n try {\n docusaurusSidebars = options.docusaurusSkipSidebar || !docusaurusProjectRoot\n ? null\n : readDocusaurusSidebars(docusaurusProjectRoot)\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Docusaurus sidebar could not be read safely: ${error instanceof Error ? error.message : String(error)} Generated navigation will be used.`,\n })\n }\n }\n\n const contentRoot = resolveWithin(repositoryDir, configuredDocsDir)\n if (!existsSync(contentRoot) || !lstatSync(contentRoot).isDirectory()) {\n throw new Error(`Documentation directory does not exist: ${configuredDocsDir || '.'}`)\n }\n const files = scanFiles(contentRoot)\n const pages: Array<MigrationPage> = []\n const assets: Array<MigrationAsset> = []\n const docusaurusDescriptors: Array<DocusaurusPageDescriptor> = []\n const seenPageIds = new Set<string>()\n let skipped = 0\n let discovered = files.length\n\n const localeConfig = docsConfig.i18n\n const pageFiles = [...files].sort((left, right) => {\n const leftOrder = referenceOrder.get(normalizedReferenceKey(left.relativePath)) ?? Number.MAX_SAFE_INTEGER\n const rightOrder = referenceOrder.get(normalizedReferenceKey(right.relativePath)) ?? Number.MAX_SAFE_INTEGER\n return leftOrder - rightOrder || left.relativePath.localeCompare(right.relativePath)\n })\n 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 (!configuredDocsDir && REPOSITORY_ONLY_DOCUMENTS.has(rootFilename)) {\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 = referenceMap.get(key)\n let locale = referenced?.locale\n let navigationId = referenced?.navigationId ?? pageIdFromReference(file.relativePath)\n if (!referenced && localeConfig) {\n const prefix = file.relativePath.split('/', 1)[0]\n if (localeConfig.locales.some((entry) => entry.code === prefix)) {\n locale = prefix\n navigationId = pageIdFromReference(file.relativePath.slice(prefix.length + 1))\n }\n }\n if (!navigationId) {\n skipped++\n warnings.push({ code: 'invalid-page', message: 'Page path could not be normalized safely.', source: file.relativePath })\n continue\n }\n const isDefaultLocale = !locale || locale === localeConfig?.defaultLocale\n const id = isDefaultLocale ? navigationId : `${locale}/${navigationId}`\n const raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n docusaurusProjectRoot ?? repositoryDir,\n )\n let docusaurusDescriptor: Omit<DocusaurusPageDescriptor, 'title'> | undefined\n const page = parseMarkdownPage({\n id,\n navigationId,\n ...(locale ? { locale } : {}),\n raw,\n source: `${options.sourceUrl}#${file.relativePath}`,\n ...(platform === 'docusaurus' ? {\n resolveIdentity: (frontmatter, fallback) => {\n const resolved = resolveDocusaurusPageIdentity(file.relativePath, frontmatter, fallback)\n const routePrefix = options.docusaurusRoutePrefix?.replace(/^\\/+|\\/+$/g, '')\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 (seenPageIds.has(page.id)) {\n skipped++\n warnings.push({ code: 'collision', message: `Multiple source files map to ${page.id}; the first file was kept.`, source: file.relativePath })\n continue\n }\n seenPageIds.add(page.id)\n pages.push(page)\n if (docusaurusDescriptor) {\n docusaurusDescriptors.push({ ...docusaurusDescriptor, title: page.title })\n }\n }\n\n const discoveredReferenceKeys = new Set(files.map((file) => normalizedReferenceKey(file.relativePath)))\n for (const [key] of referenceMap) {\n if (!discoveredReferenceKeys.has(key)) {\n warnings.push({ code: 'missing-page', message: 'A navigation entry did not resolve to a source page.', source: key })\n }\n }\n\n const docusaurusAssetRoot = docusaurusProjectRoot ?? repositoryDir\n const repositoryAssets = platform === 'docusaurus' && configuredDocsDir && !options.docusaurusSkipAssets\n ? ['static', 'public'].flatMap((directory) => {\n const root = resolveWithin(docusaurusAssetRoot, directory)\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return []\n return scanFiles(root).map((file) => ({\n ...file,\n relativePath: `${directory}/${file.relativePath}`,\n }))\n })\n : []\n let totalAssetBytes = 0\n for (const file of [...files, ...repositoryAssets]) {\n const firstSegment = file.relativePath.split('/', 1)[0].toLowerCase()\n if (!ASSET_DIRECTORIES.has(firstSegment) || !ASSET_EXTENSIONS.has(extname(file.relativePath).toLowerCase())) 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 = 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\n if (platform === 'docusaurus' && docusaurusProjectRoot && !options.docusaurusSkipPlugins) {\n for (const plugin of additionalDocusaurusPluginRoots(repositoryDir, docusaurusProjectRoot)) {\n if (plugin.docsDir === configuredDocsDir) continue\n const pluginBundle = migrateRepository({\n ...options,\n docsDir: plugin.docsDir,\n platform: 'docusaurus',\n docusaurusRoutePrefix: plugin.routePrefix,\n docusaurusSkipPlugins: true,\n docusaurusSkipSidebar: true,\n docusaurusSkipAssets: true,\n })\n for (const page of pluginBundle.pages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const assetPaths = new Set(assets.map((asset) => asset.path))\n for (const asset of pluginBundle.assets) {\n if (assetPaths.has(asset.path)) continue\n assetPaths.add(asset.path)\n assets.push(asset)\n }\n const pluginLabel = plugin.routePrefix\n .split(/[-_/]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n docsConfig.tabs.push(...pluginBundle.docsConfig.tabs.map((tab, index) => ({\n ...tab,\n tab: index === 0 ? pluginLabel : `${pluginLabel}: ${tab.tab}`,\n })))\n warnings.push(...pluginBundle.warnings)\n discovered += pluginBundle.stats.discovered\n skipped += pluginBundle.stats.skipped\n }\n }\n\n if (pages.length === 0) throw new Error('No importable Markdown or MDX pages were found in the repository.')\n return {\n sourceUrl: options.sourceUrl,\n sourceKind: 'repository',\n platform,\n pages,\n assets,\n docsConfig,\n warnings,\n stats: { discovered, imported: pages.length, skipped },\n }\n}\n","/**\n * Static Docusaurus repository projection. Sidebar modules are attacker-owned\n * source files, so this adapter reads only JSON5-compatible object literals and\n * never imports, evaluates, or executes JavaScript/TypeScript configuration.\n */\n\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { extname, posix } from 'node:path'\n\nimport JSON5 from 'json5'\nimport { parse as parseYaml } from 'yaml'\n\nimport type { MarkdownPageIdentity } from './mdx.js'\nimport { pageIdFromReference, resolveWithin, slugifySegment } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_CONFIG_BYTES = 1_000_000\nconst CATEGORY_FILENAMES = ['_category_.json', '_category_.yml', '_category_.yaml']\nconst SIDEBAR_FILENAMES = [\n 'sidebars.json',\n 'sidebars.js',\n 'sidebars.cjs',\n 'sidebars.mjs',\n 'sidebars.ts',\n]\n\nexport interface DocusaurusPageDescriptor {\n sourcePath: string\n docId: string\n navigationId: string\n sidebarPosition?: number\n title: string\n}\n\nexport interface DocusaurusSidebars {\n config: Record<string, unknown>\n sourcePath: string\n}\n\nexport interface DocusaurusNavigationResult {\n docsConfig: MigrationDocsConfig\n generatedPages: Array<MigrationPage>\n referencedNavigationIds: Set<string>\n warnings: Array<MigrationWarning>\n}\n\ninterface ProjectionContext {\n contentRoot: string\n descriptors: Array<DocusaurusPageDescriptor>\n descriptorByDocId: Map<string, DocusaurusPageDescriptor>\n generatedPages: Array<MigrationPage>\n generatedIds: Set<string>\n referencedNavigationIds: Set<string>\n sourceUrl: string\n routePrefix: string\n sidebarSource: string\n warnings: Array<MigrationWarning>\n}\n\ninterface CategoryMetadata {\n label?: string\n position?: number\n link?: unknown\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction stripNumberPrefix(value: string): string {\n return value.replace(/^\\d+[-_]+/, '')\n}\n\nfunction normalizeDocId(value: string): string {\n return value\n .split(/[?#]/, 1)[0]\n .replace(/\\\\/g, '/')\n .replace(/^\\/+/, '')\n .replace(/\\.(?:mdx?)$/i, '')\n .split('/')\n .filter(Boolean)\n .map(stripNumberPrefix)\n .join('/')\n}\n\nfunction docusaurusSlugifySegment(value: string): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed escapes remain literal input and are normalized safely below.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\nfunction docusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value)\n .split('/')\n .map(docusaurusSlugifySegment)\n .filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction defaultDocusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value).split('/').filter(Boolean)\n if (/^(?:index|readme)$/i.test(segments.at(-1) ?? '')) segments.pop()\n const normalized = segments.map(docusaurusSlugifySegment).filter(Boolean)\n return normalized.join('/') || 'introduction'\n}\n\nfunction storageIdForRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction titleCase(value: string): string {\n return stripNumberPrefix(value)\n .replace(/sidebar$/i, '')\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction routeFromSlug(slug: string, fallback: string, sourceDirectory?: string): string | null {\n if (slug === '/') return 'introduction'\n if (slug.startsWith('/')) return docusaurusRouteId(slug)\n const fallbackDirectory = sourceDirectory ?? (fallback === 'introduction' ? '' : posix.dirname(fallback))\n const resolved = posix.normalize(posix.join(fallbackDirectory, slug))\n if (resolved === '..' || resolved.startsWith('../')) return null\n return docusaurusRouteId(resolved)\n}\n\n/** Resolve Docusaurus `id`, `slug`, and numeric-prefix semantics once. */\nexport function resolveDocusaurusPageIdentity(\n sourcePath: string,\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n): { identity: MarkdownPageIdentity; descriptor: Omit<DocusaurusPageDescriptor, 'title'> } {\n const sourceDocId = normalizeDocId(sourcePath)\n const sourceDirectory = posix.dirname(sourceDocId)\n const configuredId = typeof frontmatter.id === 'string' && frontmatter.id.trim()\n ? stripNumberPrefix(frontmatter.id.trim())\n : null\n const docId = configuredId\n ? normalizeDocId(sourceDirectory === '.' ? configuredId : posix.join(sourceDirectory, configuredId))\n : sourceDocId\n // Docusaurus collapses a source `index` document by default, but an explicit\n // `slug: index` remains a literal route. Keep those two cases distinct.\n const defaultNavigationId = defaultDocusaurusRouteId(docId) ?? fallback.navigationId\n const configuredSlug = typeof frontmatter.slug === 'string' ? frontmatter.slug.trim() : ''\n const navigationId = configuredSlug\n ? routeFromSlug(\n configuredSlug,\n defaultNavigationId,\n sourceDirectory === '.' ? '' : sourceDirectory,\n ) ?? defaultNavigationId\n : defaultNavigationId\n const position = typeof frontmatter.sidebar_position === 'number'\n && Number.isFinite(frontmatter.sidebar_position)\n ? frontmatter.sidebar_position\n : undefined\n return {\n identity: { id: storageIdForRoute(navigationId), navigationId },\n descriptor: {\n sourcePath: sourcePath.replace(/\\\\/g, '/'),\n docId,\n navigationId,\n ...(position === undefined ? {} : { sidebarPosition: position }),\n },\n }\n}\n\nfunction sourceReferenceKey(value: string): string {\n return value.replace(/\\\\/g, '/').replace(/^\\/+/, '').replace(/\\.(?:mdx?)$/i, '').replace(/\\/$/, '')\n}\n\n/**\n * Rewrite Docusaurus file/doc-id links after every final slug is known. This is\n * deliberately line based so examples inside fenced code remain byte-for-byte\n * source content.\n */\nexport function rewriteDocusaurusLinks(\n body: string,\n current: DocusaurusPageDescriptor,\n descriptors: Array<DocusaurusPageDescriptor>,\n): string {\n const routes = new Map<string, string>()\n for (const descriptor of descriptors) {\n const sourceKey = sourceReferenceKey(descriptor.sourcePath)\n routes.set(sourceKey, descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.docId), descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.navigationId), descriptor.navigationId)\n const sourceRoute = pageIdFromReference(sourceKey)\n if (sourceRoute) routes.set(sourceRoute, descriptor.navigationId)\n }\n const currentDirectory = posix.dirname(sourceReferenceKey(current.sourcePath))\n\n function rewriteTarget(target: string): string {\n if (!target || target.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(target)) return target\n const suffixIndex = target.search(/[?#]/)\n const path = suffixIndex >= 0 ? target.slice(0, suffixIndex) : target\n const suffix = suffixIndex >= 0 ? target.slice(suffixIndex) : ''\n const candidates = path.startsWith('/')\n ? [sourceReferenceKey(path), sourceReferenceKey(path).replace(/^docs\\//, '')]\n : [\n sourceReferenceKey(posix.normalize(posix.join(currentDirectory, path))),\n sourceReferenceKey(path),\n ]\n const route = candidates.map((candidate) => routes.get(candidate)).find(Boolean)\n if (!route) return target\n return `${route === 'introduction' ? '/' : `/${route}`}${suffix}`\n }\n\n let codeFence: string | null = null\n return body.split('\\n').map((line) => {\n const fence = line.match(/^\\s*(`{3,}|~{3,})/)\n if (fence) {\n if (!codeFence) codeFence = fence[1][0]\n else if (fence[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n return line\n .replace(/(\\]\\()([^\\s)]+)(?=[\\s)]|$)/g, (_match, prefix: string, target: string) => `${prefix}${rewriteTarget(target)}`)\n .replace(/(\\bhref=\")([^\"]+)(\")/g, (_match, prefix: string, target: string, suffix: string) => `${prefix}${rewriteTarget(target)}${suffix}`)\n }).join('\\n')\n}\n\nfunction readBoundedText(path: string): string {\n if (lstatSync(path).size > MAX_CONFIG_BYTES) {\n throw new Error('Docusaurus sidebar config exceeded the 1 MB static-parser limit.')\n }\n return readFileSync(path, 'utf8')\n}\n\nfunction matchingObjectLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote: string | null = null\n let isEscaped = false\n let lineComment = false\n let blockComment = false\n let objectStart = -1\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n if (lineComment) {\n if (char === '\\n') lineComment = false\n continue\n }\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (char === '\\\\') isEscaped = true\n else if (char === quote) quote = null\n continue\n }\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n if (char === '{') {\n if (objectStart < 0) objectStart = index\n depth++\n } else if (char === '}' && objectStart >= 0) {\n depth--\n if (depth === 0) return source.slice(objectStart, index + 1)\n } else if (objectStart < 0 && !/\\s/.test(char)) {\n return null\n }\n }\n return null\n}\n\nfunction parseStaticSidebarModule(source: string): Record<string, unknown> {\n const bindings = new Map<string, Record<string, unknown>>()\n const normalizedSource = replaceExternalFbContent(source)\n const parseFailures: Array<string> = []\n const assignmentPatterns = [\n /\\bmodule\\.exports\\s*=\\s*/g,\n /\\bexport\\s+default\\s*/g,\n /\\b(?:const|let|var)\\s+[A-Za-z_$][\\w$]*(?:\\s*:\\s*[^=;]+)?\\s*=\\s*/g,\n ]\n const candidates = assignmentPatterns.flatMap((pattern) => [...normalizedSource.matchAll(pattern)])\n .sort((left, right) => (left.index ?? 0) - (right.index ?? 0))\n\n for (const candidate of candidates) {\n const literal = matchingObjectLiteral(normalizedSource, (candidate.index ?? 0) + candidate[0].length)\n if (!literal) continue\n try {\n const substituted = [...bindings].reduce(\n (value, [name, binding]) => value.replace(\n new RegExp(`(:\\\\s*)${name}\\\\b`, 'g'),\n (_match, prefix: string) => `${prefix}${JSON.stringify(binding)}`,\n ),\n literal,\n )\n const parsed = JSON5.parse(substituted) as unknown\n const object = objectValue(parsed)\n if (!object) continue\n const bindingName = candidate[0].match(/\\b(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)/)?.[1]\n if (bindingName) {\n bindings.set(bindingName, object)\n continue\n }\n return object\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const line = Number(message.match(/at (\\d+):/)?.[1] ?? 0)\n const context = line > 0 ? literal.split('\\n').slice(Math.max(0, line - 2), line + 1).join(' ') : ''\n parseFailures.push(`${message}${context ? ` near ${context}` : ''}`)\n // Try the next assignment. Expressions and function calls are rejected.\n }\n }\n const exportedBinding = normalizedSource.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\b/)?.[1]\n ?? normalizedSource.match(/\\bmodule\\.exports\\s*=\\s*([A-Za-z_$][\\w$]*)\\b/)?.[1]\n if (exportedBinding && bindings.has(exportedBinding)) return bindings.get(exportedBinding)!\n throw new Error(`Sidebar config is executable or outside the supported data-only syntax.${parseFailures[0] ? ` ${parseFailures[0]}` : ''}`)\n}\n\nfunction replaceExternalFbContent(source: string): string {\n const marker = '...fbContent('\n let result = source\n let searchFrom = 0\n while (true) {\n const start = result.indexOf(marker, searchFrom)\n if (start < 0) return result.replace(/,\\s*,/g, ',')\n const objectStart = result.indexOf('{', start + marker.length)\n if (objectStart < 0) return result\n const objectLiteral = matchingObjectLiteral(result, objectStart)\n if (!objectLiteral) {\n searchFrom = start + marker.length\n continue\n }\n const objectEnd = objectStart + objectLiteral.length\n const close = result.indexOf(')', objectEnd)\n if (close < 0) return result\n const externalMatch = /\\bexternal\\s*:\\s*/g.exec(objectLiteral)\n let replacement = ''\n if (externalMatch) {\n const arrayStart = objectLiteral.indexOf('[', externalMatch.index + externalMatch[0].length)\n if (arrayStart >= 0) {\n const array = matchingArrayLiteral(objectLiteral, arrayStart)\n if (array) replacement = array.slice(1, -1)\n }\n }\n let replaceEnd = close + 1\n if (!replacement) {\n const trailingComma = result.slice(replaceEnd).match(/^\\s*,/)\n if (trailingComma) replaceEnd += trailingComma[0].length\n }\n result = `${result.slice(0, start)}${replacement}${result.slice(replaceEnd)}`\n searchFrom = start + replacement.length\n }\n}\n\nfunction matchingArrayLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote = ''\n let isEscaped = false\n for (let index = start; index < source.length; index++) {\n const character = source[index]\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === quote) quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '[') depth++\n if (character === ']' && --depth === 0) return source.slice(start, index + 1)\n }\n return null\n}\n\nfunction configuredSidebarPath(repositoryRoot: string): string | null {\n for (const filename of ['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']) {\n const path = resolveWithin(repositoryRoot, filename)\n if (!existsSync(path)) continue\n const source = readBoundedText(path)\n const match = source.match(/\\bsidebarPath\\s*:\\s*(?:require\\.resolve\\(\\s*)?(['\"])([^'\"]+)\\1/)\n if (!match) continue\n const candidate = match[2].replace(/^\\.\\//, '')\n const resolved = resolveWithin(repositoryRoot, candidate)\n if (existsSync(resolved) && lstatSync(resolved).isFile()) return candidate\n }\n return null\n}\n\n/** Read the configured/default sidebar without running the source module. */\nexport function readDocusaurusSidebars(repositoryRoot: string): DocusaurusSidebars | null {\n const configured = configuredSidebarPath(repositoryRoot)\n const sourcePath = [configured, ...SIDEBAR_FILENAMES]\n .filter((value): value is string => Boolean(value))\n .find((candidate) => existsSync(resolveWithin(repositoryRoot, candidate)))\n if (!sourcePath) return null\n const absolutePath = resolveWithin(repositoryRoot, sourcePath)\n const source = readBoundedText(absolutePath)\n const parsed = extname(sourcePath).toLowerCase() === '.json'\n ? objectValue(JSON5.parse(source))\n : parseStaticSidebarModule(source)\n if (!parsed) throw new Error('Docusaurus sidebar config must export an object.')\n return { config: parsed, sourcePath }\n}\n\nfunction readCategoryMetadata(contentRoot: string, directory: string): CategoryMetadata {\n for (const filename of CATEGORY_FILENAMES) {\n const path = resolveWithin(contentRoot, posix.join(directory, filename))\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n try {\n const raw = readBoundedText(path)\n const parsed = filename.endsWith('.json') ? JSON5.parse(raw) : parseYaml(raw)\n const object = objectValue(parsed)\n if (!object) return {}\n return {\n ...(typeof object.label === 'string' ? { label: object.label } : {}),\n ...(typeof object.position === 'number' ? { position: object.position } : {}),\n ...('link' in object ? { link: object.link } : {}),\n }\n } catch {\n return {}\n }\n }\n return {}\n}\n\nfunction descriptorSort(left: DocusaurusPageDescriptor, right: DocusaurusPageDescriptor): number {\n const leftPosition = left.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n const rightPosition = right.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n if (leftPosition !== rightPosition) return leftPosition - rightPosition\n return left.sourcePath.localeCompare(right.sourcePath, undefined, { numeric: true })\n}\n\nfunction registerDoc(docId: string, context: ProjectionContext): string | null {\n const key = normalizeDocId(docId)\n const descriptor = context.descriptorByDocId.get(key)\n ?? context.descriptors.find((page) => page.navigationId === docusaurusRouteId(key))\n if (!descriptor) {\n context.warnings.push({\n code: 'missing-page',\n message: 'A Docusaurus sidebar document did not resolve to an imported page.',\n source: docId,\n })\n return null\n }\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n}\n\nfunction generatedIndexPage(\n label: string,\n linkValue: unknown,\n context: ProjectionContext,\n): string | null {\n const link = objectValue(linkValue)\n if (!link) return null\n if (link.type === 'doc' && typeof link.id === 'string') return registerDoc(link.id, context)\n if (link.type !== 'generated-index') return null\n const fallback = `category/${slugifySegment(label)}`\n const unprefixedNavigationId = typeof link.slug === 'string'\n ? routeFromSlug(link.slug, fallback) ?? fallback\n : fallback\n const navigationId = context.routePrefix\n && unprefixedNavigationId !== context.routePrefix\n && !unprefixedNavigationId.startsWith(`${context.routePrefix}/`)\n ? posix.join(context.routePrefix, unprefixedNavigationId)\n : unprefixedNavigationId\n if (!context.generatedIds.has(navigationId)\n && !context.descriptors.some((page) => page.navigationId === navigationId)) {\n const description = typeof link.description === 'string'\n ? link.description\n : `Browse the ${label} documentation.`\n context.generatedPages.push({\n id: storageIdForRoute(navigationId),\n navigationId,\n title: typeof link.title === 'string' ? link.title : label,\n description,\n keywords: Array.isArray(link.keywords)\n ? link.keywords.filter((value): value is string => typeof value === 'string')\n : [],\n body: description,\n source: `${context.sourceUrl}#${context.sidebarSource}`,\n })\n context.generatedIds.add(navigationId)\n }\n context.referencedNavigationIds.add(navigationId)\n return navigationId\n}\n\nfunction autogeneratedItems(dirName: string, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n const normalizedDir = dirName === '.' ? '' : normalizeDocId(dirName)\n const inDirectory = context.descriptors.filter((descriptor) => {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n return !normalizedDir || source === normalizedDir || source.startsWith(`${normalizedDir}/`)\n })\n const directPages: Array<DocusaurusPageDescriptor> = []\n const childDirectories = new Set<string>()\n for (const descriptor of inDirectory) {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n const relativePath = normalizedDir ? posix.relative(normalizedDir, source) : source\n const segments = relativePath.split('/').filter(Boolean)\n if (segments.length <= 1) directPages.push(descriptor)\n else childDirectories.add(segments[0])\n }\n\n const items: Array<string | MigrationNavigationGroup> = directPages\n .sort(descriptorSort)\n .map((descriptor) => {\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n })\n const groups = [...childDirectories].map((segment) => {\n const directory = normalizedDir ? posix.join(normalizedDir, segment) : segment\n const metadata = readCategoryMetadata(context.contentRoot, directory)\n const pages = autogeneratedItems(directory, context)\n const landing = generatedIndexPage(metadata.label ?? titleCase(segment), metadata.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return {\n position: metadata.position ?? Number.MAX_SAFE_INTEGER,\n segment,\n group: {\n group: metadata.label ?? titleCase(segment),\n pages,\n } satisfies MigrationNavigationGroup,\n }\n }).sort((left, right) => left.position - right.position\n || left.segment.localeCompare(right.segment, undefined, { numeric: true }))\n items.push(...groups.map((entry) => entry.group))\n return items\n}\n\nfunction convertItems(value: unknown, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n if (typeof value === 'string') {\n const page = registerDoc(value, context)\n return page ? [page] : []\n }\n if (Array.isArray(value)) return value.flatMap((entry) => convertItems(entry, context))\n const object = objectValue(value)\n if (!object) return []\n\n if (object.type === 'doc' || object.type === 'ref') {\n const page = typeof object.id === 'string' ? registerDoc(object.id, context) : null\n return page ? [page] : []\n }\n if (object.type === 'autogenerated') {\n return autogeneratedItems(typeof object.dirName === 'string' ? object.dirName : '.', context)\n }\n if (object.type === 'category') {\n const label = typeof object.label === 'string' ? object.label : 'Documentation'\n const pages = convertItems(object.items, context)\n const landing = generatedIndexPage(label, object.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return pages.length > 0 ? [{ group: label, pages }] : []\n }\n if (object.type === 'link' || object.type === 'html') return []\n\n // Docusaurus category shorthand and sidebar slices are ordinary objects.\n return Object.entries(object).flatMap(([label, items]) => {\n const pages = convertItems(items, context)\n return pages.length > 0 ? [{ group: label, pages }] : []\n })\n}\n\n/** Project explicit and autogenerated Docusaurus sidebars into Thally tabs. */\nexport function projectDocusaurusNavigation(input: {\n sidebars: DocusaurusSidebars | null\n descriptors: Array<DocusaurusPageDescriptor>\n contentRoot: string\n sourceUrl: string\n routePrefix?: string\n}): DocusaurusNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const descriptorByDocId = new Map(input.descriptors.map((page) => [page.docId, page]))\n const context: ProjectionContext = {\n contentRoot: input.contentRoot,\n descriptors: input.descriptors,\n descriptorByDocId,\n generatedPages: [],\n generatedIds: new Set(),\n referencedNavigationIds: new Set(),\n sourceUrl: input.sourceUrl,\n routePrefix: input.routePrefix ?? '',\n sidebarSource: input.sidebars?.sourcePath ?? 'autogenerated sidebar',\n warnings,\n }\n const sidebarEntries = input.sidebars ? Object.entries(input.sidebars.config) : [['docs', [\n { type: 'autogenerated', dirName: '.' },\n ]]]\n const tabs = sidebarEntries.flatMap(([sidebarId, value]) => {\n const converted = convertItems(value, context)\n const loosePages = converted.filter((entry): entry is string => typeof entry === 'string')\n const groups = converted.filter((entry): entry is MigrationNavigationGroup => typeof entry !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n return [{\n tab: sidebarEntries.length === 1 ? 'Documentation' : titleCase(sidebarId),\n groups,\n }]\n })\n\n const unreferenced = input.descriptors\n .filter((page) => !context.referencedNavigationIds.has(page.navigationId))\n .sort(descriptorSort)\n .map((page) => page.navigationId)\n if (unreferenced.length > 0) {\n if (tabs.length === 0) tabs.push({ tab: 'Documentation', groups: [] })\n tabs[0].groups?.push({ group: 'Additional', pages: unreferenced })\n }\n return {\n docsConfig: { tabs },\n generatedPages: context.generatedPages,\n referencedNavigationIds: context.referencedNavigationIds,\n warnings,\n }\n}\n","/** Safe path normalization used before reading or writing migrated content. */\n\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nconst SAFE_SEGMENT = /[^a-z0-9._-]+/g\n\n/** Turn a source path segment into a stable URL/file-system slug. */\nexport function slugifySegment(value: string): 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 return decoded\n .toLowerCase()\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): 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(slugifySegment).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\n/** Resolve an untrusted relative path and prove it remains below `root`. */\nexport function resolveWithin(root: string, candidate: string): string {\n if (isAbsolute(candidate) || candidate.includes('\\0')) {\n throw new Error(`Unsafe migration path: ${candidate}`)\n }\n const target = resolve(root, candidate)\n const fromRoot = relative(resolve(root), target)\n if (fromRoot === '..' || fromRoot.startsWith(`..${sep}`) || isAbsolute(fromRoot)) {\n throw new Error(`Migration path escapes its root: ${candidate}`)\n }\n return target\n}\n\n/** Return a slash-separated, traversal-free asset path. */\nexport function normalizeAssetPath(value: string): string | null {\n const normalized = value.replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!normalized || normalized.includes('\\0')) return null\n const segments = normalized.split('/').filter(Boolean)\n if (segments.some((segment) => segment === '.' || segment === '..')) return null\n return segments.join('/')\n}\n","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport matter from 'gray-matter'\n\nimport type { MigrationPage } from './types.js'\n\nexport interface MarkdownPageIdentity {\n id: string\n navigationId: string\n locale?: string\n}\n\nfunction titleFromId(id: string): string {\n const value = id.split('/').at(-1) ?? id\n if (value === 'introduction') return 'Introduction'\n return value\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction firstParagraph(content: string): string {\n for (const block of content.split(/\\n\\s*\\n/)) {\n const value = block.replace(/\\s+/g, ' ').trim()\n if (!value || /^(?:#|```|:::|<|import\\s|export\\s)/.test(value)) continue\n return value.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1').slice(0, 240)\n }\n return ''\n}\n\nfunction docusaurusAdmonitionTag(kind: string): 'Error' | 'Info' | 'Note' | 'Warning' {\n if (kind === 'danger') return 'Error'\n if (kind === 'info') return 'Info'\n if (kind === 'caution' || kind === 'warning') return 'Warning'\n return 'Note'\n}\n\n/**\n * Convert Docusaurus' colon-fence admonitions without interpreting code-fence\n * contents. Longer delimiters support nested admonitions in the same way as\n * the source renderer.\n */\nfunction normalizeDocusaurusAdmonitions(body: string): string {\n const lines = body.split('\\n')\n const openAdmonitions: Array<{ delimiter: string; tag: string }> = []\n let codeFence: string | null = null\n\n return lines.map((line) => {\n const codeMatch = line.match(/^\\s*(`{3,}|~{3,})/)\n if (codeMatch) {\n if (!codeFence) codeFence = codeMatch[1][0]\n else if (codeMatch[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n\n const opening = line.match(/^\\s*(:{3,})(note|tip|info|warning|caution|danger)(?:\\[([^\\]]+)\\]|\\s+(.+))?\\s*$/i)\n if (opening) {\n const tag = docusaurusAdmonitionTag(opening[2].toLowerCase())\n openAdmonitions.push({ delimiter: opening[1], tag })\n const title = (opening[3] ?? opening[4])?.trim()\n return title ? `<${tag}>\\n**${title}**` : `<${tag}>`\n }\n\n const closing = line.match(/^\\s*(:{3,})\\s*$/)\n const current = openAdmonitions.at(-1)\n if (closing && current?.delimiter === closing[1]) {\n openAdmonitions.pop()\n return `</${current.tag}>`\n }\n return line\n }).join('\\n')\n}\n\n/** Normalize only syntax Thally cannot render; supported source JSX stays intact. */\nexport function normalizeMdx(body: string): string {\n return normalizeDocusaurusAdmonitions(body)\n // Docusaurus injects these theme components globally. Thally also exposes\n // its equivalents globally, so source-only imports must not survive.\n .replace(/^import\\s+(?:Tabs|TabItem|Link|DocCardList|TOCInline)\\s+from\\s+['\"]@(?:theme|docusaurus)\\/[^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/<TabItem\\b([^>]*)>/g, (_match, attributes: string) => {\n const title = attributes.match(/\\blabel=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? attributes.match(/\\bvalue=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? 'Tab'\n return `<Tab title=\"${title.replace(/\"/g, '&quot;')}\">`\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(/<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 = matter(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 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 description,\n keywords,\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, readFileSync } from 'node:fs'\nimport { dirname, extname, relative } from 'node:path'\n\nimport { pageIdFromReference, resolveWithin } 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\nexport interface MintlifyNavigationResult {\n docsConfig: MigrationDocsConfig\n pageReferences: Array<MintlifyPageReference>\n warnings: Array<MigrationWarning>\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 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 const object = objectValue(current)\n if (!object) return undefined\n return object[token.replace(/~1/g, '/').replace(/~0/g, '~')]\n }, root)\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 = JSON.parse(readFileSync(referencedFile, 'utf8')) as unknown\n const referenced = jsonPointer(referencedRoot, pointer ? `#${pointer}` : '')\n const resolved = resolveJsonReferences(referenced, referencedFile, repositoryRoot, stack)\n stack.delete(stackKey)\n return 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 = JSON.parse(readFileSync(configPath, 'utf8')) as unknown\n return resolveJsonReferences(raw, configPath, repositoryRoot, new Set()) as Record<string, unknown>\n}\n\nfunction normalizePageRef(value: string): string | null {\n if (/^(?:https?:)?\\/\\//i.test(value) || value.startsWith('#')) return null\n const ref = localReference(value).replace(/^\\/+/, '').replace(/\\.(?:mdx?|rst|txt)$/i, '')\n return pageIdFromReference(ref)\n}\n\ninterface ProjectionContext {\n locale?: string\n references: Array<MintlifyPageReference>\n seenReferences: Set<string>\n}\n\nfunction registerReference(value: string, context: ProjectionContext): string | null {\n const localePrefix = context.locale ? `${context.locale}/` : ''\n const localizedValue = localePrefix && value.replace(/^\\/+/, '').startsWith(localePrefix)\n ? value.replace(/^\\/+/, '').slice(localePrefix.length)\n : value\n const navigationId = normalizePageRef(localizedValue)\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 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 ...(typeof object.icon === 'string' ? { icon: object.icon } : {}),\n pages: children,\n }\n }\n return null\n}\n\nfunction convertGroups(\n values: Array<unknown>,\n context: ProjectionContext,\n fallbackGroup: string,\n): Array<MigrationNavigationGroup> {\n const groups: Array<MigrationNavigationGroup> = []\n const loosePages: Array<string | MigrationNavigationGroup> = []\n for (const value of values) {\n const converted = convertPage(value, context)\n if (!converted) continue\n if (typeof converted === 'string') loosePages.push(converted)\n else groups.push(converted)\n }\n if (loosePages.length > 0) groups.unshift({ group: fallbackGroup, pages: loosePages })\n return groups\n}\n\nfunction convertContainerToTabs(\n containerValue: unknown,\n context: ProjectionContext,\n fallbackTab: string,\n): Array<MigrationNavigationTab> {\n const container = objectValue(containerValue)\n if (!container) return []\n for (const key of ['tabs', 'anchors', 'products', 'dropdowns', 'versions', 'menus']) {\n if (!Array.isArray(container[key])) continue\n const tabs = (container[key] as Array<unknown>).flatMap((value, index) => {\n const object = objectValue(value)\n if (!object) return []\n const tab = labelFor(object, `${fallbackTab} ${index + 1}`)\n if (typeof object.href === 'string' && !object.pages && !object.groups) {\n return [{ tab, href: object.href }]\n }\n const nested = convertContainerToTabs(object, context, tab)\n if (nested.length > 0) {\n if (nested.length === 1) return [{ ...nested[0], tab }]\n return nested.map((item) => ({ ...item, tab: `${tab}: ${item.tab}` }))\n }\n return []\n })\n if (tabs.length > 0) return tabs\n }\n const rawPages = [\n ...(Array.isArray(container.groups) ? container.groups : []),\n ...(Array.isArray(container.pages) ? container.pages : []),\n ]\n if (typeof container.root === 'string') rawPages.unshift(container.root)\n const groups = convertGroups(rawPages, context, 'Overview')\n return groups.length > 0 ? [{ tab: fallbackTab, groups }] : []\n}\n\n/** Convert current and legacy Mintlify navigation into Thally's schema. */\nexport function projectMintlifyNavigation(config: Record<string, unknown>): MintlifyNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const references: Array<MintlifyPageReference> = []\n const seenReferences = new Set<string>()\n const navigation = objectValue(config.navigation) ?? config\n const languages = Array.isArray(navigation.languages)\n ? navigation.languages.map(objectValue).filter((value): value is Record<string, unknown> => Boolean(value))\n : []\n let tabs: Array<MigrationNavigationTab> = []\n let i18n: MigrationDocsConfig['i18n']\n\n if (languages.length > 0) {\n const defaultLanguage = languages.find((entry) => entry.language === 'en') ?? languages[0]\n const defaultLocale = String(defaultLanguage.language ?? 'en')\n const locales = languages.map((entry) => {\n const code = String(entry.language ?? entry.locale ?? 'en')\n return { code, label: LANGUAGE_LABELS[code] ?? code.toUpperCase() }\n })\n i18n = { defaultLocale, locales }\n for (const language of languages) {\n const locale = String(language.language ?? language.locale ?? defaultLocale)\n const context: ProjectionContext = {\n locale,\n references,\n seenReferences,\n }\n const languageTabs = convertContainerToTabs(language, context, 'Documentation')\n if (language === defaultLanguage) tabs = languageTabs\n }\n } else {\n tabs = convertContainerToTabs(navigation, { references, seenReferences }, 'Documentation')\n if (tabs.length === 0 && Array.isArray(config.navigation)) {\n const groups = convertGroups(config.navigation, { references, seenReferences }, 'Overview')\n if (groups.length > 0) tabs = [{ tab: 'Documentation', groups }]\n }\n }\n\n if (tabs.length === 0) {\n warnings.push({\n code: 'unsupported-config',\n message: 'Mintlify navigation could not be projected; generated navigation will be used.',\n })\n }\n if (!tabs.some((tab) => tab.tab.toLowerCase() === 'changelog')) {\n tabs.push({ tab: 'Changelog', href: '/changelog' })\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 return [{\n source: redirect.source,\n destination: redirect.destination,\n ...(typeof redirect.permanent === 'boolean' ? { permanent: redirect.permanent } : {}),\n }]\n })\n : []\n return {\n docsConfig: { tabs, ...(i18n ? { i18n } : {}), ...(redirects.length > 0 ? { redirects } : {}) },\n pageReferences: references,\n warnings,\n }\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_]/)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\ninterface GeneratedNavigationOptions {\n /** Dedicated docs platforms expose their primary sections as top-level tabs. */\n topLevelTabs?: boolean\n /** Ordered tabs recovered from the source site's rendered navigation. */\n topLevelNavigation?: ReadonlyArray<{\n section: string\n label: string\n pageId: string\n }>\n}\n\nconst TOP_LEVEL_LABELS: Record<string, string> = {\n 'api-reference': 'API Reference',\n cli: 'CLI',\n faqs: 'FAQs',\n introduction: 'Overview',\n 'mcp-server': 'MCP Server',\n sdk: 'SDK',\n}\n\nfunction topLevelLabel(segment: string): string {\n return TOP_LEVEL_LABELS[segment] ?? titleCase(segment)\n}\n\nfunction groupsWithinSection(\n section: string,\n pageIds: Array<string>,\n sectionLabel = topLevelLabel(section),\n): Array<MigrationNavigationGroup> {\n const groups = new Map<string, Array<string>>()\n for (const id of pageIds) {\n const relative = id === 'introduction'\n ? ''\n : id.startsWith(`${section}/`)\n ? id.slice(section.length + 1)\n : id\n const nestedSegment = relative.includes('/') ? relative.split('/', 1)[0] : 'overview'\n const group = groups.get(nestedSegment) ?? []\n group.push(id)\n groups.set(nestedSegment, group)\n }\n return [...groups].map(([segment, pages]) => ({\n group: segment === 'overview' ? sectionLabel : titleCase(segment),\n pages,\n }))\n}\n\nfunction preferredLandingPage(\n section: string,\n pageIds: Array<string>,\n): string | undefined {\n const candidates = [\n section === 'introduction' ? 'introduction' : undefined,\n `${section}/overview`,\n `${section}/introduction`,\n section,\n ]\n return candidates.find((candidate): candidate is string => Boolean(candidate && pageIds.includes(candidate)))\n}\n\n/** Build deterministic fallback navigation from imported default-locale pages. */\nexport function buildNavigationFromPages(\n pages: Array<MigrationPage>,\n options: GeneratedNavigationOptions = {},\n): MigrationDocsConfig {\n const ids = pages.filter((page) => !page.locale || page.locale === 'en').map((page) => page.navigationId)\n const ordered = [...new Set(ids)]\n if (options.topLevelTabs) {\n const sourceNavigation = (options.topLevelNavigation ?? []).flatMap((entry) => {\n const sectionPages = ordered.filter((id) => id === entry.section || id.startsWith(`${entry.section}/`))\n const pageId = ordered.includes(entry.pageId)\n ? entry.pageId\n : preferredLandingPage(entry.section, sectionPages) ?? sectionPages[0]\n return pageId ? [{ ...entry, pageId }] : []\n })\n if (sourceNavigation.length > 1) {\n const claimedIds = new Set<string>()\n const tabs = sourceNavigation.map((entry) => {\n const pageIds = ordered.filter((id) => {\n const matches = id === entry.pageId\n || id === entry.section\n || id.startsWith(`${entry.section}/`)\n if (matches) claimedIds.add(id)\n return matches\n })\n return { entry, pageIds }\n })\n // Mintlify's first tab is the documentation home and owns pages that do\n // not belong to another product tab (for example /create and /deploy).\n tabs[0].pageIds.push(...ordered.filter((id) => !claimedIds.has(id)))\n return {\n tabs: tabs.map(({ entry, pageIds }) => ({\n tab: entry.label,\n href: entry.pageId === 'introduction' ? '/' : `/${entry.pageId}`,\n groups: groupsWithinSection(entry.section, [...new Set(pageIds)], entry.label),\n })),\n }\n }\n const sectionNames = [...new Set(ordered\n .filter((id) => id.includes('/'))\n .map((id) => id.split('/', 1)[0]))]\n if (sectionNames.length > 1) {\n const defaultSection = sectionNames.includes('introduction')\n ? 'introduction'\n : sectionNames[0]\n const sections = new Map<string, Array<string>>()\n for (const id of ordered) {\n const section = id.includes('/') ? id.split('/', 1)[0] : defaultSection\n const bucket = sections.get(section) ?? []\n bucket.push(id)\n sections.set(section, bucket)\n }\n return {\n tabs: [...sections].map(([section, pageIds]) => {\n const label = topLevelLabel(section)\n const landingPage = preferredLandingPage(section, pageIds)\n return {\n tab: label,\n ...(landingPage\n ? { href: landingPage === 'introduction' ? '/' : `/${landingPage}` }\n : {}),\n groups: groupsWithinSection(section, pageIds),\n }\n }),\n }\n }\n }\n const buckets = new Map<string, Array<string>>()\n for (const id of ordered) {\n const segment = id.includes('/') ? id.split('/', 1)[0] : 'overview'\n const bucket = buckets.get(segment) ?? []\n bucket.push(id)\n buckets.set(segment, bucket)\n }\n const groups = [...buckets].map(([segment, pageIds]) => ({\n group: segment === 'overview' ? 'Overview' : titleCase(segment),\n pages: pageIds,\n }))\n return { tabs: [{ tab: 'Documentation', groups }] }\n}\n\n/** Exposed for repository discovery and focused unit tests. */\nexport function isDocumentationExtension(filename: string): boolean {\n return ['.md', '.mdx', '.rst', '.txt'].includes(extname(filename).toLowerCase())\n}\n","/** Render canonical migration bundles into a portable Thally repository tree. */\n\nimport type {\n MigrationBundle,\n MigrationDocsConfig,\n MigrationNavigationGroup,\n RenderedMigrationFile,\n} from './types.js'\n\nfunction yamlString(value: string): string {\n return JSON.stringify(value.replace(/\\s+/g, ' ').trim())\n}\n\nfunction renderPage(bundle: MigrationBundle, page: MigrationBundle['pages'][number]): string {\n return [\n '---',\n `title: ${yamlString(page.title)}`,\n `description: ${yamlString(page.description)}`,\n page.keywords.length > 0 ? `keywords: [${page.keywords.map(yamlString).join(', ')}]` : null,\n page.openapi ? `openapi: ${yamlString(page.openapi)}` : null,\n bundle.sourceKind === 'url' ? `source: ${yamlString(page.source)}` : null,\n '---',\n '',\n page.body,\n '',\n ].filter((line) => line !== null).join('\\n')\n}\n\n/** Merge imported tabs into an existing site without duplicating changelog tabs. */\nexport function mergeMigrationConfig(\n existing: MigrationDocsConfig,\n incoming: MigrationDocsConfig,\n): MigrationDocsConfig {\n const tabs = existing.tabs.filter((tab) => tab.tab.toLowerCase() !== 'changelog')\n const names = new Set(tabs.map((tab) => tab.tab.toLowerCase()))\n const seenPages = new Set<string>()\n function recordPages(groups: MigrationDocsConfig['tabs'][number]['groups']): void {\n for (const group of groups ?? []) {\n for (const page of group.pages) {\n if (typeof page === 'string') seenPages.add(page)\n else recordPages([page])\n }\n }\n }\n for (const tab of tabs) recordPages(tab.groups)\n function uniqueGroups(\n groups: Array<MigrationNavigationGroup> | undefined,\n ): Array<MigrationNavigationGroup> {\n return (groups ?? []).flatMap<MigrationNavigationGroup>((group) => {\n const pages = group.pages.flatMap<string | MigrationNavigationGroup>((page) => {\n if (typeof page === 'string') {\n if (seenPages.has(page)) return []\n seenPages.add(page)\n return [page]\n }\n const [nested]: Array<MigrationNavigationGroup> = uniqueGroups([page])\n return nested ? [nested] : []\n })\n return pages.length > 0 ? [{ ...group, pages }] : []\n })\n }\n for (const tab of incoming.tabs) {\n if (tab.tab.toLowerCase() === 'changelog') continue\n const uniqueTab = { ...tab, ...(tab.groups ? { groups: uniqueGroups(tab.groups) } : {}) }\n if (tab.groups && uniqueTab.groups?.length === 0 && !tab.href && !tab.api) continue\n if (!names.has(tab.tab.toLowerCase())) {\n tabs.push(uniqueTab)\n names.add(tab.tab.toLowerCase())\n continue\n }\n const target = tabs.find((item) => item.tab.toLowerCase() === tab.tab.toLowerCase())\n if (!target || !uniqueTab.groups) continue\n target.groups = [...(target.groups ?? []), ...uniqueTab.groups]\n }\n const changelog = existing.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n ?? incoming.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog) tabs.push(changelog)\n const i18n = existing.i18n || incoming.i18n\n ? {\n defaultLocale: existing.i18n?.defaultLocale ?? incoming.i18n?.defaultLocale ?? 'en',\n locales: [...new Map(\n [...(existing.i18n?.locales ?? []), ...(incoming.i18n?.locales ?? [])]\n .map((locale) => [locale.code, locale]),\n ).values()],\n }\n : undefined\n return {\n ...incoming,\n ...existing,\n tabs,\n ...(i18n ? { i18n } : {}),\n }\n}\n\n/** Materialize every canonical page, asset, and config as repository file changes. */\nexport function renderMigrationFiles(\n bundle: MigrationBundle,\n options: { existingConfig?: MigrationDocsConfig } = {},\n): Array<RenderedMigrationFile> {\n const config = options.existingConfig\n ? mergeMigrationConfig(options.existingConfig, bundle.docsConfig)\n : bundle.docsConfig\n return [\n ...bundle.pages.map((page) => ({\n path: `src/content/${page.id}.mdx`,\n content: renderPage(bundle, page),\n })),\n ...bundle.assets.map((asset) => ({ path: `public/${asset.path}`, content: asset.content })),\n { path: 'docs.json', content: `${JSON.stringify(config, null, 2)}\\n` },\n ]\n}\n","/**\n * Public URL adapter for the shared migration engine. Discovery prefers\n * machine-readable Markdown and sitemaps, remains scoped to the submitted docs\n * path, then falls back to bounded navigation crawling and HTML extraction.\n */\n\nimport { load } from 'cheerio'\nimport TurndownService from 'turndown'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport { parseMarkdownPage } from './mdx.js'\nimport { buildNavigationFromPages } 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', 'Danger', 'Error', 'Expandable',\n 'File', 'Folder', 'Frame', 'Hero', 'Icon', 'Info', 'Latex', 'Mermaid',\n 'Note', 'Panel', 'ParamField', 'Prompt', 'PromptAssistant', 'PromptUser',\n 'RequestExample', 'ResponseExample', 'ResponseField', 'Step', 'Steps',\n 'Tab', 'Tabs', 'Tile', 'TileGroup', 'Tip', 'Tooltip', 'Tree', 'Update',\n 'View', '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')\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 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} {\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 }\n}\n\nfunction stripMintlifyDocumentationIndex(body: string): string {\n const lines = body.split(/\\r?\\n/)\n if (!/^>\\s*##\\s+Documentation Index\\s*$/i.test(lines[0] ?? '')\n || !/^>.*\\/llms(?:-full)?\\.txt/i.test(lines[1] ?? '')\n || !/^>.*discover all available pages/i.test(lines[2] ?? '')) return body\n let index = 3\n while (index < lines.length && /^>/.test(lines[index])) index += 1\n while (index < lines.length && lines[index].trim() === '') index += 1\n return lines.slice(index).join('\\n')\n}\n\nfunction extractEmbeddedOpenApi(content: string): {\n content: string\n openapi?: string\n fragment?: EmbeddedOpenApiFragment\n} {\n const fencePattern = /^\\s{0,3}(`{3,}|~{3,})(?:yaml|yml|json)\\s+(\\S+\\.(?:yaml|yml|json))\\s+(delete|get|head|options|patch|post|put|trace)\\s+(\\/\\S+)\\s*\\r?\\n([\\s\\S]*?)^\\s{0,3}\\1\\s*$/im\n const match = fencePattern.exec(content)\n if (!match) return { content }\n try {\n const parsed = parseYaml(match[5], { maxAliasCount: 50 })\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return { content }\n const document = parsed as Record<string, unknown>\n if (typeof document.openapi !== 'string' && typeof document.swagger !== 'string') return { content }\n const method = match[3].toUpperCase()\n const path = match[4]\n const paths = document.paths\n if (!paths || typeof paths !== 'object' || Array.isArray(paths)) return { content }\n const pathItem = (paths as Record<string, unknown>)[path]\n if (!pathItem || typeof pathItem !== 'object' || Array.isArray(pathItem)\n || !(match[3].toLowerCase() in pathItem)) return { content }\n const before = content.slice(0, match.index).replace(/(?:^|\\n)##\\s+OpenAPI\\s*\\n\\s*$/i, '\\n')\n const after = content.slice(match.index + match[0].length)\n return {\n content: `${before}${after}`.trim(),\n openapi: `${method} ${path}`,\n fragment: {\n method,\n path,\n document,\n },\n }\n } catch {\n return { content }\n }\n}\n\nfunction markdownPage(document: MigrationFetchResponse, id: string): {\n page: MigrationPage | null\n openApiFragment?: EmbeddedOpenApiFragment\n} {\n const parsed = remoteMarkdownMetadata(document.body)\n let content = stripMintlifyDocumentationIndex(parsed.content).trimStart()\n const titleMatch = content.match(/^#\\s+(.+)\\r?\\n/)\n const title = parsed.title ?? titleMatch?.[1] ?? id.split('/').at(-1) ?? 'Introduction'\n if (titleMatch) content = content.slice(titleMatch[0].length).trimStart()\n let description = parsed.description\n if (!description) {\n const quoteMatch = content.match(/^(>[^\\r\\n]*(?:\\r?\\n>[^\\r\\n]*)*)\\r?\\n/)\n if (quoteMatch) {\n description = plainDescription(quoteMatch[1].replace(/^>\\s?/gm, ''))\n content = content.slice(quoteMatch[0].length).trimStart()\n }\n }\n // Re-emit only scalar metadata we parsed ourselves. `gray-matter` remains in\n // the shared page parser for trusted repository sources, but never receives\n // attacker-controlled YAML aliases from a public URL.\n const embeddedOpenApi = extractEmbeddedOpenApi(content)\n const raw = [\n '---',\n `title: ${JSON.stringify(title)}`,\n ...(description ? [`description: ${JSON.stringify(description)}`] : []),\n ...(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, '&quot;')\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, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\\{/g, '&#123;')\n .replace(/\\}/g, '&#125;')\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 return 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}\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 sourceTopLevelNavigation = platform === 'mintlify' && 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 = 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 // 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 const docsConfig = platform === 'docusaurus'\n ? docusaurusNavigationFromSnapshots(docusaurusSidebars, pages, scopePath)\n : buildNavigationFromPages(pages, {\n topLevelTabs: platform === 'mintlify',\n topLevelNavigation,\n })\n if (docusaurusRedirects.length > 0) {\n docsConfig.redirects = [...new Map(docusaurusRedirects.map((redirect) => [\n `${redirect.source}:${redirect.destination}`,\n redirect,\n ])).values()]\n }\n const openApiAsset = mergeEmbeddedOpenApi(openApiFragments)\n if (openApiAsset) {\n const operationPageIds = new Set(pages.filter((page) => page.openapi).map((page) => page.navigationId))\n const apiTab = docsConfig.tabs.find((tab) => tab.groups?.some((group) => {\n const containsOperation = (pages: typeof group.pages): boolean => pages.some((page) => {\n return typeof page === 'string' ? operationPageIds.has(page) : containsOperation(page.pages)\n })\n return containsOperation(group.pages)\n })) ?? docsConfig.tabs[0]\n if (apiTab) {\n // Migrated operation pages preserve the source URLs and sidebar order.\n // The spec is still configured for operation rendering, but its derived\n // `/api/*` navigation would duplicate every imported endpoint.\n apiTab.api = { source: '/openapi.yaml', navigation: false }\n }\n }\n const locales = [...new Set(pages.map((page) => page.locale).filter((value): value is string => Boolean(value)))]\n if (locales.length > 0) {\n docsConfig.i18n = {\n defaultLocale: 'en',\n locales: [\n { code: 'en', label: 'English' },\n ...locales.filter((locale) => locale !== 'en').map((locale) => ({ code: locale, label: locale.toUpperCase() })),\n ],\n }\n }\n return {\n sourceUrl: source.toString(),\n sourceKind: 'url',\n platform,\n pages,\n assets: openApiAsset ? [{ path: 'openapi.yaml', content: openApiAsset }] : [],\n docsConfig,\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,YAAY,WAAW,oBAAoB;AACpD,SAAS,SAAS,aAAa;AAE/B,OAAO,WAAW;AAClB,SAAS,SAAS,iBAAiB;;;ACRnC,SAAS,YAAY,UAAU,SAAS,WAAW;AAEnD,IAAM,eAAe;AAGd,SAAS,eAAe,OAAuB;AACpD,MAAI,UAAU;AACd,MAAI;AACF,cAAU,mBAAmB,KAAK;AAAA,EACpC,QAAQ;AAAA,EAGR;AACA,SAAO,QACJ,YAAY,EACZ,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,cAAc,GAAG,EACzB,QAAQ,YAAY,EAAE;AAC3B;AAMO,SAAS,oBAAoB,OAA8B;AAChE,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,EAAE,OAAO,OAAO;AAChE,SAAO,SAAS,KAAK,GAAG,KAAK;AAC/B;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;;;ADvCA,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,MAAI,UAAU,IAAI,EAAE,OAAO,kBAAkB;AAC3C,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,SAAO,aAAa,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,CAAC,WAAW,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,QAAI,WAAW,QAAQ,KAAK,UAAU,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,cAAc,WAAW,cAAc,gBAAgB,SAAS,CAAC,CAAC;AAC3E,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,eAAe,cAAc,gBAAgB,UAAU;AAC7D,QAAM,SAAS,gBAAgB,YAAY;AAC3C,QAAM,SAAS,QAAQ,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,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,OAAO,EAAG;AACpD,QAAI;AACF,YAAM,MAAM,gBAAgB,IAAI;AAChC,YAAM,SAAS,SAAS,SAAS,OAAO,IAAI,MAAM,MAAM,GAAG,IAAI,UAAU,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,iBAAiB,MAAM,WAAW,OAAO,QAAQ,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,QAAQ;AAAA,IACxF,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;;;AEnoBA,OAAO,YAAY;AAUnB,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;AAEA,SAAS,eAAe,SAAyB;AAC/C,aAAW,SAAS,QAAQ,MAAM,SAAS,GAAG;AAC5C,UAAM,QAAQ,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAC9C,QAAI,CAAC,SAAS,qCAAqC,KAAK,KAAK,EAAG;AAChE,WAAO,MAAM,QAAQ,0BAA0B,IAAI,EAAE,MAAM,GAAG,GAAG;AAAA,EACnE;AACA,SAAO;AACT;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,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,OAAO,MAAM,GAAG;AAC/B,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,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,SAAS,OAAO,OAAO,KAAK,YAAY,WAAW,OAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,IAChF;AAAA,IACA,QAAQ,MAAM;AAAA,EAChB;AACF;;;AC3IA,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,SAAS,WAAAC,UAAS,YAAAC,iBAAgB;AAuB3C,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,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,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,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,SAASA,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,cAAc,QAAQ,WAAW,GAAG,QAAQ,IAC5C;AACJ,UAAM,eAAeC,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,KAAK,MAAMC,cAAa,gBAAgB,MAAM,CAAC;AACtE,UAAM,aAAa,YAAY,gBAAgB,UAAU,IAAI,OAAO,KAAK,EAAE;AAC3E,UAAM,WAAW,sBAAsB,YAAY,gBAAgB,gBAAgB,KAAK;AACxF,UAAM,OAAO,QAAQ;AACrB,WAAO;AAAA,EACT;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,KAAK,MAAMD,cAAa,YAAY,MAAM,CAAC;AACvD,SAAO,sBAAsB,KAAK,YAAY,gBAAgB,oBAAI,IAAI,CAAC;AACzE;AAEA,SAAS,iBAAiB,OAA8B;AACtD,MAAI,qBAAqB,KAAK,KAAK,KAAK,MAAM,WAAW,GAAG,EAAG,QAAO;AACtE,QAAM,MAAM,eAAe,KAAK,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,wBAAwB,EAAE;AACxF,SAAO,oBAAoB,GAAG;AAChC;AAQA,SAAS,kBAAkB,OAAe,SAA2C;AACnF,QAAM,eAAe,QAAQ,SAAS,GAAG,QAAQ,MAAM,MAAM;AAC7D,QAAM,iBAAiB,gBAAgB,MAAM,QAAQ,QAAQ,EAAE,EAAE,WAAW,YAAY,IACpF,MAAM,QAAQ,QAAQ,EAAE,EAAE,MAAM,aAAa,MAAM,IACnD;AACJ,QAAM,eAAe,iBAAiB,cAAc;AACpD,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,SAASF,aAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,SAAS,SAAU,QAAO,kBAAkB,OAAO,MAAM,OAAO;AAClF,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,OAAO,OAAO,SAAS,WAAW,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,MAC/D,OAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cACP,QACA,SACA,eACiC;AACjC,QAAM,SAA0C,CAAC;AACjD,QAAM,aAAuD,CAAC;AAC9D,aAAW,SAAS,QAAQ;AAC1B,UAAM,YAAY,YAAY,OAAO,OAAO;AAC5C,QAAI,CAAC,UAAW;AAChB,QAAI,OAAO,cAAc,SAAU,YAAW,KAAK,SAAS;AAAA,QACvD,QAAO,KAAK,SAAS;AAAA,EAC5B;AACA,MAAI,WAAW,SAAS,EAAG,QAAO,QAAQ,EAAE,OAAO,eAAe,OAAO,WAAW,CAAC;AACrF,SAAO;AACT;AAEA,SAAS,uBACP,gBACA,SACA,aAC+B;AAC/B,QAAM,YAAYA,aAAY,cAAc;AAC5C,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,aAAW,OAAO,CAAC,QAAQ,WAAW,YAAY,aAAa,YAAY,OAAO,GAAG;AACnF,QAAI,CAAC,MAAM,QAAQ,UAAU,GAAG,CAAC,EAAG;AACpC,UAAM,OAAQ,UAAU,GAAG,EAAqB,QAAQ,CAAC,OAAO,UAAU;AACxE,YAAM,SAASA,aAAY,KAAK;AAChC,UAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,YAAM,MAAM,SAAS,QAAQ,GAAG,WAAW,IAAI,QAAQ,CAAC,EAAE;AAC1D,UAAI,OAAO,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,CAAC,OAAO,QAAQ;AACtE,eAAO,CAAC,EAAE,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,MACpC;AACA,YAAM,SAAS,uBAAuB,QAAQ,SAAS,GAAG;AAC1D,UAAI,OAAO,SAAS,GAAG;AACrB,YAAI,OAAO,WAAW,EAAG,QAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;AACtD,eAAO,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG,GAAG,EAAE;AAAA,MACvE;AACA,aAAO,CAAC;AAAA,IACV,CAAC;AACD,QAAI,KAAK,SAAS,EAAG,QAAO;AAAA,EAC9B;AACA,QAAM,WAAW;AAAA,IACf,GAAI,MAAM,QAAQ,UAAU,MAAM,IAAI,UAAU,SAAS,CAAC;AAAA,IAC1D,GAAI,MAAM,QAAQ,UAAU,KAAK,IAAI,UAAU,QAAQ,CAAC;AAAA,EAC1D;AACA,MAAI,OAAO,UAAU,SAAS,SAAU,UAAS,QAAQ,UAAU,IAAI;AACvE,QAAM,SAAS,cAAc,UAAU,SAAS,UAAU;AAC1D,SAAO,OAAO,SAAS,IAAI,CAAC,EAAE,KAAK,aAAa,OAAO,CAAC,IAAI,CAAC;AAC/D;AAGO,SAAS,0BAA0B,QAA2D;AACnG,QAAM,WAAoC,CAAC;AAC3C,QAAM,aAA2C,CAAC;AAClD,QAAM,iBAAiB,oBAAI,IAAY;AACvC,QAAM,aAAaA,aAAY,OAAO,UAAU,KAAK;AACrD,QAAM,YAAY,MAAM,QAAQ,WAAW,SAAS,IAChD,WAAW,UAAU,IAAIA,YAAW,EAAE,OAAO,CAAC,UAA4C,QAAQ,KAAK,CAAC,IACxG,CAAC;AACL,MAAI,OAAsC,CAAC;AAC3C,MAAI;AAEJ,MAAI,UAAU,SAAS,GAAG;AACxB,UAAM,kBAAkB,UAAU,KAAK,CAAC,UAAU,MAAM,aAAa,IAAI,KAAK,UAAU,CAAC;AACzF,UAAM,gBAAgB,OAAO,gBAAgB,YAAY,IAAI;AAC7D,UAAM,UAAU,UAAU,IAAI,CAAC,UAAU;AACvC,YAAM,OAAO,OAAO,MAAM,YAAY,MAAM,UAAU,IAAI;AAC1D,aAAO,EAAE,MAAM,OAAO,gBAAgB,IAAI,KAAK,KAAK,YAAY,EAAE;AAAA,IACpE,CAAC;AACD,WAAO,EAAE,eAAe,QAAQ;AAChC,eAAW,YAAY,WAAW;AAChC,YAAM,SAAS,OAAO,SAAS,YAAY,SAAS,UAAU,aAAa;AAC3E,YAAM,UAA6B;AAAA,QACjC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,eAAe,uBAAuB,UAAU,SAAS,eAAe;AAC9E,UAAI,aAAa,gBAAiB,QAAO;AAAA,IAC3C;AAAA,EACF,OAAO;AACL,WAAO,uBAAuB,YAAY,EAAE,YAAY,eAAe,GAAG,eAAe;AACzF,QAAI,KAAK,WAAW,KAAK,MAAM,QAAQ,OAAO,UAAU,GAAG;AACzD,YAAM,SAAS,cAAc,OAAO,YAAY,EAAE,YAAY,eAAe,GAAG,UAAU;AAC1F,UAAI,OAAO,SAAS,EAAG,QAAO,CAAC,EAAE,KAAK,iBAAiB,OAAO,CAAC;AAAA,IACjE;AAAA,EACF;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,aAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,WAAW,GAAG;AAC9D,SAAK,KAAK,EAAE,KAAK,aAAa,MAAM,aAAa,CAAC;AAAA,EACpD;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,WAAO,CAAC;AAAA,MACN,QAAQ,SAAS;AAAA,MACjB,aAAa,SAAS;AAAA,MACtB,GAAI,OAAO,SAAS,cAAc,YAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;AAAA,IACrF,CAAC;AAAA,EACH,CAAC,IACD,CAAC;AACL,SAAO;AAAA,IACL,YAAY,EAAE,MAAM,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC,GAAI,GAAI,UAAU,SAAS,IAAI,EAAE,UAAU,IAAI,CAAC,EAAG;AAAA,IAC9F,gBAAgB;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAASI,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,UAAMH,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,eAAeG,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;;;AJtZA,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,0BAA0B,eAAuB,SAAiC;AACzF,MAAI,YAAY,QAAW;AACzB,QAAI,YAAY,QAAQ,QAAQ,QAAQ,EAAE;AAC1C,WAAO,MAAM;AACX,YAAM,OAAO,cAAc,eAAe,aAAa,GAAG;AAC1D,UAAI,oBAAoB,IAAI,EAAG,QAAO;AACtC,UAAI,CAAC,UAAW;AAChB,YAAM,SAASC,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,cAAcF,YAAW,SAAS,KAAKC,WAAU,SAAS,EAAE,OAAO,CAAC;AAC7E,MAAI,CAAC,QAAQA,WAAU,IAAI,EAAE,OAAO,IAAW,QAAO;AACtD,SAAOE,cAAa,MAAM,MAAM;AAClC;AAEA,SAAS,+BAA+B,aAA6B;AACnE,QAAM,SAAS,2BAA2B,WAAW;AACrD,QAAM,aAAa,OAAO,MAAM,6DAA6D,IAAI,CAAC;AAClG,SAAO,YAAY,QAAQ,SAAS,EAAE,EAAE,QAAQ,QAAQ,EAAE,KAAK;AACjE;AAEA,SAAS,gCACP,eACA,aAC6B;AAC7B,QAAM,SAAS,2BAA2B,WAAW;AACrD,QAAM,kBAAkBC,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,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,QAAQ,EAAE;AAClE,UAAM,cAAc,MAAM,CAAC,EAAE,QAAQ,cAAc,EAAE;AACrD,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,eAA0C;AACjF,MAAIL,YAAW,cAAc,eAAe,WAAW,CAAC,EAAG,QAAO;AAClE,QAAM,WAAW,cAAc,eAAe,WAAW;AACzD,MAAIA,YAAW,QAAQ,GAAG;AACxB,QAAI;AACF,YAAM,SAAS,KAAK,MAAMG,cAAa,UAAU,MAAM,CAAC;AACxD,UAAI,OAAO,OAAO,WAAW,EAAE,EAAE,SAAS,UAAU,KAAK,gBAAgB,OAAQ,QAAO;AACxF,UAAI,MAAM,QAAQ,OAAO,IAAI,EAAG,QAAO;AAAA,IACzC,QAAQ;AAAA,IAER;AAAA,EACF;AACA,MAAI,CAAC,wBAAwB,wBAAwB,uBAAuB,EACzE,KAAK,CAAC,SAASH,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,YAAY,OAA+C;AAClE,SAAO,MAAM,KAAK,CAAC,SAAS,kBAAkB,IAAI,SAAS,KAAK,YAAY,EAAE,YAAY,CAAC,CAAC,KAAK;AACnG;AAEA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,QAAQ,mCAAmC,EAAE,EAAE,KAAK;AACnE;AAEA,SAAS,kBACP,KACA,aACA,gBACA,UACA,QAAQ,GACR,WAAW,gBACH;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,qBAAqB,WAAW,WAAW,QAAQ,IACrDA,UAAS,gBAAgB,cAAc,UAAU,WAAW,MAAM,SAAS,MAAM,CAAC,CAAC,EAAE,QAAQ,OAAO,GAAG,IACvG,WAAW,WAAW,GAAG,IACvB,WAAW,QAAQ,QAAQ,EAAE,IAC7BA,UAAS,gBAAgB,YAAYF,SAAQ,WAAW,GAAG,UAAU,CAAC,EAAE,QAAQ,OAAO,GAAG;AAChG,cAAM,YAAY,cAAc,gBAAgB,kBAAkB;AAGlE,sBAAc,gBAAgBE,UAAS,gBAAgB,SAAS,CAAC;AACjE,YAAI,CAACJ,YAAW,SAAS,KAAK,CAACC,WAAU,SAAS,EAAE,OAAO,EAAG,OAAM,IAAI,MAAM,gBAAgB;AAC9F,cAAM,SAAS;AAAA,UACb,mBAAmBE,cAAa,WAAW,MAAM,CAAC;AAAA,UAClD;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR;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,QAAQC,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;AACA,MAAI,SAAS;AACb,aAAW,CAAC,eAAe,OAAO,KAAK,UAAU;AAC/C,aAAS,OACN,QAAQ,IAAI,OAAO,IAAI,aAAa,uBAAuB,GAAG,GAAG,OAAO,EACxE,QAAQ,IAAI,OAAO,IAAI,aAAa,mCAAmC,aAAa,KAAK,GAAG,GAAG,OAAO;AAAA,EAC3G;AACA,SAAO;AACT;AAEA,SAAS,cAAc,QAA6B,UAAuC;AACzF,QAAM,OAAO,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY,EAAE,SAAS,KAAK,CAAC;AAC/E,QAAM,SAA8C;AAAA,IAClD,KAAK;AAAA,IACL,KAAK,EAAE,QAAQ,IAAI,QAAQ,GAAG;AAAA,EAChC;AACA,QAAM,YAAY,KAAK,UAAU,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,WAAW;AAC/E,MAAI,aAAa,EAAG,MAAK,OAAO,WAAW,GAAG,MAAM;AAAA,MAC/C,MAAK,KAAK,MAAM;AACrB,SAAO,EAAE,GAAG,QAAQ,KAAK;AAC3B;AAGO,SAAS,kBAAkB,SAAsD;AACtF,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,WAAW,QAAQ,YAAY,yBAAyB,aAAa;AAC3E,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,WAAO,aAAa,aAAa,KAAK,wBAAwB,aAAa;AAAA,EAC7E,GAAG;AACH,QAAM,WAAoC,CAAC;AAC3C,MAAI,aAAkC,EAAE,MAAM,CAAC,EAAE;AACjD,QAAM,eAAe,oBAAI,IAAuD;AAChF,QAAM,iBAAiB,oBAAI,IAAoB;AAC/C,MAAI,qBAAgD;AAEpD,MAAI,aAAa,YAAY;AAC3B,QAAI;AACF,YAAM,SAAS,mBAAmB,aAAa;AAC/C,UAAI,QAAQ;AACV,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;AAChD,uBAAa,IAAI,KAAK,SAAS;AAC/B,yBAAe,IAAI,KAAK,KAAK;AAAA,QAC/B;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,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,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,CAAC,qBAAqB,0BAA0B,IAAI,YAAY,GAAG;AACrE;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,aAAa,IAAI,GAAG;AACvC,QAAI,SAAS,YAAY;AACzB,QAAI,eAAe,YAAY,gBAAgB,oBAAoB,KAAK,YAAY;AACpF,QAAI,CAAC,cAAc,cAAc;AAC/B,YAAM,SAAS,KAAK,aAAa,MAAM,KAAK,CAAC,EAAE,CAAC;AAChD,UAAI,aAAa,QAAQ,KAAK,CAAC,UAAU,MAAM,SAAS,MAAM,GAAG;AAC/D,iBAAS;AACT,uBAAe,oBAAoB,KAAK,aAAa,MAAM,OAAO,SAAS,CAAC,CAAC;AAAA,MAC/E;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,UAAM,MAAM;AAAA,MACVE,cAAa,KAAK,cAAc,MAAM;AAAA,MACtC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB;AAAA,IAC3B;AACA,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,IAAI,KAAK,YAAY;AAAA,MACjD,GAAI,aAAa,eAAe;AAAA,QAC9B,iBAAiB,CAAC,aAAa,aAAa;AAC1C,gBAAM,WAAW,8BAA8B,KAAK,cAAc,aAAa,QAAQ;AACvF,gBAAM,cAAc,QAAQ,uBAAuB,QAAQ,cAAc,EAAE;AAC3E,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,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,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,CAACH,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,kBAAkB,IAAI,YAAY,KAAK,CAAC,iBAAiB,IAAIK,SAAQ,KAAK,YAAY,EAAE,YAAY,CAAC,EAAG;AAC7G,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,SAASE,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,YAAY,KAAK;AACjC,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;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;AAAA,IACA;AAAA,IACA,OAAO,EAAE,YAAY,UAAU,MAAM,QAAQ,QAAQ;AAAA,EACvD;AACF;;;AK7pBA,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,gBAAgB,WAAW,KAAK,WAAW,CAAC;AAAA,IAC5C,KAAK,SAAS,SAAS,IAAI,cAAc,KAAK,SAAS,IAAI,UAAU,EAAE,KAAK,IAAI,CAAC,MAAM;AAAA,IACvF,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,QAA6D;AAChF,eAAW,SAAS,UAAU,CAAC,GAAG;AAChC,iBAAW,QAAQ,MAAM,OAAO;AAC9B,YAAI,OAAO,SAAS,SAAU,WAAU,IAAI,IAAI;AAAA,YAC3C,aAAY,CAAC,IAAI,CAAC;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACA,aAAW,OAAO,KAAM,aAAY,IAAI,MAAM;AAC9C,WAAS,aACP,QACiC;AACjC,YAAQ,UAAU,CAAC,GAAG,QAAkC,CAAC,UAAU;AACjE,YAAM,QAAQ,MAAM,MAAM,QAA2C,CAAC,SAAS;AAC7E,YAAI,OAAO,SAAS,UAAU;AAC5B,cAAI,UAAU,IAAI,IAAI,EAAG,QAAO,CAAC;AACjC,oBAAU,IAAI,IAAI;AAClB,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,cAAM,CAAC,MAAM,IAAqC,aAAa,CAAC,IAAI,CAAC;AACrE,eAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,MAC9B,CAAC;AACD,aAAO,MAAM,SAAS,IAAI,CAAC,EAAE,GAAG,OAAO,MAAM,CAAC,IAAI,CAAC;AAAA,IACrD,CAAC;AAAA,EACH;AACA,aAAW,OAAO,SAAS,MAAM;AAC/B,QAAI,IAAI,IAAI,YAAY,MAAM,YAAa;AAC3C,UAAM,YAAY,EAAE,GAAG,KAAK,GAAI,IAAI,SAAS,EAAE,QAAQ,aAAa,IAAI,MAAM,EAAE,IAAI,CAAC,EAAG;AACxF,QAAI,IAAI,UAAU,UAAU,QAAQ,WAAW,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAK;AAC3E,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,UAAU,CAAC,UAAU,OAAQ;AAClC,WAAO,SAAS,CAAC,GAAI,OAAO,UAAU,CAAC,GAAI,GAAG,UAAU,MAAM;AAAA,EAChE;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,IACA,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AACF;AAGO,SAAS,qBACd,QACA,UAAoD,CAAC,GACvB;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,EAAE,MAAM,aAAa,SAAS,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,EAAK;AAAA,EACvE;AACF;;;ACxGA,SAAS,YAAY;AACrB,OAAO,qBAAqB;AAC5B,SAAS,SAASI,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,EAAU;AAAA,EAAS;AAAA,EACvE;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAC5D;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAc;AAAA,EAAU;AAAA,EAAmB;AAAA,EAC5D;AAAA,EAAkB;AAAA,EAAmB;AAAA,EAAiB;AAAA,EAAQ;AAAA,EAC9D;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAa;AAAA,EAAO;AAAA,EAAW;AAAA,EAAQ;AAAA,EAC9D;AAAA,EAAQ;AACV,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,cAAc;AACvE;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,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,MAI9B;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,EACnC;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,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,YAAM,UAAsC,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,kBAAQ,KAAK,EAAE,SAAS,OAAO,OAAO,CAAC;AAAA,QACzC,QAAQ;AAAA,QAER;AAAA,MACF,CAAC;AACD,UAAI,QAAQ,SAAS,GAAG;AACtB,QAAAA,YAAW,KAAK,EAAE,SAAS,YAAY,CAAC;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,WAAOA;AAAA,EACT;AAGA,QAAM,gBAAgB,kBAAkB,WAAW;AACnD,QAAM,aAAa,cAAc,SAAS,IACtC,gBACA,kBAAkB,0BAA0B;AAChD,SAAO,WAAW,KAAK,CAAC,MAAM,UAAU;AACtC,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;AACrB;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,2BAA2B,aAAa,cAAc,mBAAmB,QAAQ,KAAK,gBAAgB,WAAW,IACnH,uBAAuB,iBAAiB,QAAQ,SAAS,IACzD;AAKJ,QAAM,mBAAmB,2BAA2B,CAAC,GAAG,WAClD,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;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,QAAM,aAAa,aAAa,eAC5B,kCAAkC,oBAAoB,OAAO,SAAS,IACtE,yBAAyB,OAAO;AAAA,IAC9B,cAAc,aAAa;AAAA,IAC3B;AAAA,EACF,CAAC;AACL,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,SAAS,WAAW,KAAK,KAAK,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC,UAAU;AACvE,YAAM,oBAAoB,CAACC,WAAuCA,OAAM,KAAK,CAAC,SAAS;AACrF,eAAO,OAAO,SAAS,WAAW,iBAAiB,IAAI,IAAI,IAAI,kBAAkB,KAAK,KAAK;AAAA,MAC7F,CAAC;AACD,aAAO,kBAAkB,MAAM,KAAK;AAAA,IACtC,CAAC,CAAC,KAAK,WAAW,KAAK,CAAC;AACxB,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,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;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","existsSync","readFileSync","extname","relative","objectValue","relative","readFileSync","existsSync","titleCase","extname","existsSync","lstatSync","dirname","readFileSync","relative","resolve","extname","parseYaml","value","parseYaml","title","converted","candidates","pages"]}
1
+ {"version":3,"sources":["../src/repository.ts","../src/docusaurus.ts","../src/path.ts","../src/frontmatter.ts","../src/mdx.ts","../src/navigation.ts","../src/render.ts","../src/url.ts"],"sourcesContent":["/**\n * Repository adapter for the shared migration engine. Traversal is bounded,\n * symbolic links are ignored, and Git is always invoked with an argument array\n * so source-controlled branch names can never become shell commands.\n */\n\nimport { spawn } from 'node:child_process'\nimport {\n existsSync,\n lstatSync,\n readFileSync,\n readdirSync,\n} from 'node:fs'\nimport { basename, dirname, extname, relative, resolve as resolvePath } from 'node:path'\n\nimport {\n projectDocusaurusNavigation,\n readDocusaurusSidebars,\n rewriteDocusaurusLinks,\n resolveDocusaurusPageIdentity,\n type DocusaurusPageDescriptor,\n type DocusaurusSidebars,\n} from './docusaurus.js'\nimport { parseMarkdownPage } from './mdx.js'\nimport {\n buildNavigationFromPages,\n isDocumentationExtension,\n projectMintlifyNavigation,\n readMintlifyConfig,\n} from './navigation.js'\nimport { normalizeAssetPath, pageIdFromReference, resolveWithin } 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 findDocusaurusProjectRoot(repositoryDir: string, docsDir?: string): string | null {\n if (docsDir !== undefined) {\n let candidate = docsDir.replace(/\\/+$/, '')\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 configured?.replace(/^\\.\\//, '').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 = match[2].replace(/^\\.\\//, '').replace(/\\/+$/, '')\n const routePrefix = match[4].replace(/^\\/+|\\/+$/g, '')\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): MigrationPlatform {\n if (existsSync(resolveWithin(repositoryDir, 'mint.json'))) return 'mintlify'\n const docsJson = resolveWithin(repositoryDir, 'docs.json')\n if (existsSync(docsJson)) {\n try {\n const config = JSON.parse(readFileSync(docsJson, 'utf8')) as Record<string, unknown>\n if (String(config.$schema ?? '').includes('mintlify') || 'navigation' in config) return 'mintlify'\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 findOpenApi(files: Array<ScannedFile>): ScannedFile | null {\n return files.find((file) => OPENAPI_FILENAMES.has(basename(file.relativePath).toLowerCase())) ?? null\n}\n\nfunction withoutFrontmatter(value: string): string {\n return value.replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, '').trim()\n}\n\nfunction inlineMdxSnippets(\n raw: string,\n currentFile: string,\n repositoryRoot: string,\n warnings: Array<MigrationWarning>,\n depth = 0,\n siteRoot = repositoryRoot,\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 repositoryRelative = sourcePath.startsWith('@site/')\n ? relative(repositoryRoot, resolveWithin(siteRoot, sourcePath.slice('@site/'.length))).replace(/\\\\/g, '/')\n : sourcePath.startsWith('/')\n ? sourcePath.replace(/^\\/+/, '')\n : relative(repositoryRoot, resolvePath(dirname(currentFile), sourcePath)).replace(/\\\\/g, '/')\n const candidate = resolveWithin(repositoryRoot, repositoryRelative)\n // Prove a relative import resolved under the repository, not merely\n // under the current directory's parent chain.\n resolveWithin(repositoryRoot, relative(repositoryRoot, candidate))\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 )\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 let result = withoutImports\n for (const [componentName, snippet] of snippets) {\n result = result\n .replace(new RegExp(`<${componentName}(?:\\\\s[^>]*)?\\\\s*/>`, 'g'), snippet)\n .replace(new RegExp(`<${componentName}(?:\\\\s[^>]*)?>(?:[\\\\s\\\\S]*?)<\\\\/${componentName}>`, 'g'), snippet)\n }\n return result\n}\n\nfunction injectOpenApi(config: MigrationDocsConfig, filename: string): MigrationDocsConfig {\n const tabs = config.tabs.filter((tab) => !tab.tab.toLowerCase().includes('api'))\n const apiTab: MigrationDocsConfig['tabs'][number] = {\n tab: 'API Reference',\n api: { source: `/${filename}` },\n }\n const changelog = tabs.findIndex((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog >= 0) tabs.splice(changelog, 0, apiTab)\n else tabs.push(apiTab)\n return { ...config, tabs }\n}\n\n/** Import an already-available repository directory into a canonical bundle. */\nexport function migrateRepository(options: RepositoryMigrationOptions): MigrationBundle {\n const repositoryDir = options.repositoryDir\n const platform = options.platform ?? detectRepositoryPlatform(repositoryDir)\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 return platform === 'mintlify' ? '' : detectRepositoryDocsDir(repositoryDir)\n })()\n const warnings: Array<MigrationWarning> = []\n let docsConfig: MigrationDocsConfig = { tabs: [] }\n const referenceMap = new Map<string, { navigationId: string; locale?: string }>()\n const referenceOrder = new Map<string, number>()\n let docusaurusSidebars: DocusaurusSidebars | null = null\n\n if (platform === 'mintlify') {\n try {\n const config = readMintlifyConfig(repositoryDir)\n if (config) {\n const projected = projectMintlifyNavigation(config)\n docsConfig = projected.docsConfig\n warnings.push(...projected.warnings)\n for (const [index, reference] of projected.pageReferences.entries()) {\n const key = normalizedReferenceKey(reference.ref)\n referenceMap.set(key, reference)\n referenceOrder.set(key, index)\n }\n }\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Mintlify config could not be read: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }\n\n if (platform === 'docusaurus') {\n try {\n docusaurusSidebars = options.docusaurusSkipSidebar || !docusaurusProjectRoot\n ? null\n : readDocusaurusSidebars(docusaurusProjectRoot)\n } catch (error) {\n warnings.push({\n code: 'unsupported-config',\n message: `Docusaurus sidebar could not be read safely: ${error instanceof Error ? error.message : String(error)} Generated navigation will be used.`,\n })\n }\n }\n\n const contentRoot = resolveWithin(repositoryDir, configuredDocsDir)\n if (!existsSync(contentRoot) || !lstatSync(contentRoot).isDirectory()) {\n throw new Error(`Documentation directory does not exist: ${configuredDocsDir || '.'}`)\n }\n const files = scanFiles(contentRoot)\n const pages: Array<MigrationPage> = []\n const assets: Array<MigrationAsset> = []\n const docusaurusDescriptors: Array<DocusaurusPageDescriptor> = []\n const seenPageIds = new Set<string>()\n let skipped = 0\n let discovered = files.length\n\n const localeConfig = docsConfig.i18n\n const pageFiles = [...files].sort((left, right) => {\n const leftOrder = referenceOrder.get(normalizedReferenceKey(left.relativePath)) ?? Number.MAX_SAFE_INTEGER\n const rightOrder = referenceOrder.get(normalizedReferenceKey(right.relativePath)) ?? Number.MAX_SAFE_INTEGER\n return leftOrder - rightOrder || left.relativePath.localeCompare(right.relativePath)\n })\n 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 (!configuredDocsDir && REPOSITORY_ONLY_DOCUMENTS.has(rootFilename)) {\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 = referenceMap.get(key)\n let locale = referenced?.locale\n let navigationId = referenced?.navigationId ?? pageIdFromReference(file.relativePath)\n if (!referenced && localeConfig) {\n const prefix = file.relativePath.split('/', 1)[0]\n if (localeConfig.locales.some((entry) => entry.code === prefix)) {\n locale = prefix\n navigationId = pageIdFromReference(file.relativePath.slice(prefix.length + 1))\n }\n }\n if (!navigationId) {\n skipped++\n warnings.push({ code: 'invalid-page', message: 'Page path could not be normalized safely.', source: file.relativePath })\n continue\n }\n const isDefaultLocale = !locale || locale === localeConfig?.defaultLocale\n const id = isDefaultLocale ? navigationId : `${locale}/${navigationId}`\n const raw = inlineMdxSnippets(\n readFileSync(file.absolutePath, 'utf8'),\n file.absolutePath,\n repositoryDir,\n warnings,\n 0,\n docusaurusProjectRoot ?? repositoryDir,\n )\n let docusaurusDescriptor: Omit<DocusaurusPageDescriptor, 'title'> | undefined\n const page = parseMarkdownPage({\n id,\n navigationId,\n ...(locale ? { locale } : {}),\n raw,\n source: `${options.sourceUrl}#${file.relativePath}`,\n ...(platform === 'docusaurus' ? {\n resolveIdentity: (frontmatter, fallback) => {\n const resolved = resolveDocusaurusPageIdentity(file.relativePath, frontmatter, fallback)\n const routePrefix = options.docusaurusRoutePrefix?.replace(/^\\/+|\\/+$/g, '')\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 (seenPageIds.has(page.id)) {\n skipped++\n warnings.push({ code: 'collision', message: `Multiple source files map to ${page.id}; the first file was kept.`, source: file.relativePath })\n continue\n }\n seenPageIds.add(page.id)\n pages.push(page)\n if (docusaurusDescriptor) {\n docusaurusDescriptors.push({ ...docusaurusDescriptor, title: page.title })\n }\n }\n\n const discoveredReferenceKeys = new Set(files.map((file) => normalizedReferenceKey(file.relativePath)))\n for (const [key] of referenceMap) {\n if (!discoveredReferenceKeys.has(key)) {\n warnings.push({ code: 'missing-page', message: 'A navigation entry did not resolve to a source page.', source: key })\n }\n }\n\n const docusaurusAssetRoot = docusaurusProjectRoot ?? repositoryDir\n const repositoryAssets = platform === 'docusaurus' && configuredDocsDir && !options.docusaurusSkipAssets\n ? ['static', 'public'].flatMap((directory) => {\n const root = resolveWithin(docusaurusAssetRoot, directory)\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return []\n return scanFiles(root).map((file) => ({\n ...file,\n relativePath: `${directory}/${file.relativePath}`,\n }))\n })\n : []\n let totalAssetBytes = 0\n for (const file of [...files, ...repositoryAssets]) {\n const firstSegment = file.relativePath.split('/', 1)[0].toLowerCase()\n if (!ASSET_DIRECTORIES.has(firstSegment) || !ASSET_EXTENSIONS.has(extname(file.relativePath).toLowerCase())) 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 = 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\n if (platform === 'docusaurus' && docusaurusProjectRoot && !options.docusaurusSkipPlugins) {\n for (const plugin of additionalDocusaurusPluginRoots(repositoryDir, docusaurusProjectRoot)) {\n if (plugin.docsDir === configuredDocsDir) continue\n const pluginBundle = migrateRepository({\n ...options,\n docsDir: plugin.docsDir,\n platform: 'docusaurus',\n docusaurusRoutePrefix: plugin.routePrefix,\n docusaurusSkipPlugins: true,\n docusaurusSkipSidebar: true,\n docusaurusSkipAssets: true,\n })\n for (const page of pluginBundle.pages) {\n if (seenPageIds.has(page.id)) continue\n seenPageIds.add(page.id)\n pages.push(page)\n }\n const assetPaths = new Set(assets.map((asset) => asset.path))\n for (const asset of pluginBundle.assets) {\n if (assetPaths.has(asset.path)) continue\n assetPaths.add(asset.path)\n assets.push(asset)\n }\n const pluginLabel = plugin.routePrefix\n .split(/[-_/]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n docsConfig.tabs.push(...pluginBundle.docsConfig.tabs.map((tab, index) => ({\n ...tab,\n tab: index === 0 ? pluginLabel : `${pluginLabel}: ${tab.tab}`,\n })))\n warnings.push(...pluginBundle.warnings)\n discovered += pluginBundle.stats.discovered\n skipped += pluginBundle.stats.skipped\n }\n }\n\n if (pages.length === 0) throw new Error('No importable Markdown or MDX pages were found in the repository.')\n return {\n sourceUrl: options.sourceUrl,\n sourceKind: 'repository',\n platform,\n pages,\n assets,\n docsConfig,\n warnings,\n stats: { discovered, imported: pages.length, skipped },\n }\n}\n","/**\n * Static Docusaurus repository projection. Sidebar modules are attacker-owned\n * source files, so this adapter reads only JSON5-compatible object literals and\n * never imports, evaluates, or executes JavaScript/TypeScript configuration.\n */\n\nimport { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { extname, posix } from 'node:path'\n\nimport JSON5 from 'json5'\nimport { parse as parseYaml } from 'yaml'\n\nimport type { MarkdownPageIdentity } from './mdx.js'\nimport { pageIdFromReference, resolveWithin, slugifySegment } from './path.js'\nimport type {\n MigrationDocsConfig,\n MigrationNavigationGroup,\n MigrationPage,\n MigrationWarning,\n} from './types.js'\n\nconst MAX_CONFIG_BYTES = 1_000_000\nconst CATEGORY_FILENAMES = ['_category_.json', '_category_.yml', '_category_.yaml']\nconst SIDEBAR_FILENAMES = [\n 'sidebars.json',\n 'sidebars.js',\n 'sidebars.cjs',\n 'sidebars.mjs',\n 'sidebars.ts',\n]\n\nexport interface DocusaurusPageDescriptor {\n sourcePath: string\n docId: string\n navigationId: string\n sidebarPosition?: number\n title: string\n}\n\nexport interface DocusaurusSidebars {\n config: Record<string, unknown>\n sourcePath: string\n}\n\nexport interface DocusaurusNavigationResult {\n docsConfig: MigrationDocsConfig\n generatedPages: Array<MigrationPage>\n referencedNavigationIds: Set<string>\n warnings: Array<MigrationWarning>\n}\n\ninterface ProjectionContext {\n contentRoot: string\n descriptors: Array<DocusaurusPageDescriptor>\n descriptorByDocId: Map<string, DocusaurusPageDescriptor>\n generatedPages: Array<MigrationPage>\n generatedIds: Set<string>\n referencedNavigationIds: Set<string>\n sourceUrl: string\n routePrefix: string\n sidebarSource: string\n warnings: Array<MigrationWarning>\n}\n\ninterface CategoryMetadata {\n label?: string\n position?: number\n link?: unknown\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n}\n\nfunction stripNumberPrefix(value: string): string {\n return value.replace(/^\\d+[-_]+/, '')\n}\n\nfunction normalizeDocId(value: string): string {\n return value\n .split(/[?#]/, 1)[0]\n .replace(/\\\\/g, '/')\n .replace(/^\\/+/, '')\n .replace(/\\.(?:mdx?)$/i, '')\n .split('/')\n .filter(Boolean)\n .map(stripNumberPrefix)\n .join('/')\n}\n\nfunction docusaurusSlugifySegment(value: string): string {\n let decoded = value\n try {\n decoded = decodeURIComponent(value)\n } catch {\n // Malformed escapes remain literal input and are normalized safely below.\n }\n return decoded\n .replace(/\\.(?:html?|mdx?)$/i, '')\n .replace(/[^A-Za-z0-9._-]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\nfunction docusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value)\n .split('/')\n .map(docusaurusSlugifySegment)\n .filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\nfunction defaultDocusaurusRouteId(value: string): string | null {\n const segments = normalizeDocId(value).split('/').filter(Boolean)\n if (/^(?:index|readme)$/i.test(segments.at(-1) ?? '')) segments.pop()\n const normalized = segments.map(docusaurusSlugifySegment).filter(Boolean)\n return normalized.join('/') || 'introduction'\n}\n\nfunction storageIdForRoute(routeId: string): string {\n return /(?:^|\\/)(?:index|readme)$/i.test(routeId) ? `${routeId}/index` : routeId\n}\n\nfunction titleCase(value: string): string {\n return stripNumberPrefix(value)\n .replace(/sidebar$/i, '')\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction routeFromSlug(slug: string, fallback: string, sourceDirectory?: string): string | null {\n if (slug === '/') return 'introduction'\n if (slug.startsWith('/')) return docusaurusRouteId(slug)\n const fallbackDirectory = sourceDirectory ?? (fallback === 'introduction' ? '' : posix.dirname(fallback))\n const resolved = posix.normalize(posix.join(fallbackDirectory, slug))\n if (resolved === '..' || resolved.startsWith('../')) return null\n return docusaurusRouteId(resolved)\n}\n\n/** Resolve Docusaurus `id`, `slug`, and numeric-prefix semantics once. */\nexport function resolveDocusaurusPageIdentity(\n sourcePath: string,\n frontmatter: Record<string, unknown>,\n fallback: MarkdownPageIdentity,\n): { identity: MarkdownPageIdentity; descriptor: Omit<DocusaurusPageDescriptor, 'title'> } {\n const sourceDocId = normalizeDocId(sourcePath)\n const sourceDirectory = posix.dirname(sourceDocId)\n const configuredId = typeof frontmatter.id === 'string' && frontmatter.id.trim()\n ? stripNumberPrefix(frontmatter.id.trim())\n : null\n const docId = configuredId\n ? normalizeDocId(sourceDirectory === '.' ? configuredId : posix.join(sourceDirectory, configuredId))\n : sourceDocId\n // Docusaurus collapses a source `index` document by default, but an explicit\n // `slug: index` remains a literal route. Keep those two cases distinct.\n const defaultNavigationId = defaultDocusaurusRouteId(docId) ?? fallback.navigationId\n const configuredSlug = typeof frontmatter.slug === 'string' ? frontmatter.slug.trim() : ''\n const navigationId = configuredSlug\n ? routeFromSlug(\n configuredSlug,\n defaultNavigationId,\n sourceDirectory === '.' ? '' : sourceDirectory,\n ) ?? defaultNavigationId\n : defaultNavigationId\n const position = typeof frontmatter.sidebar_position === 'number'\n && Number.isFinite(frontmatter.sidebar_position)\n ? frontmatter.sidebar_position\n : undefined\n return {\n identity: { id: storageIdForRoute(navigationId), navigationId },\n descriptor: {\n sourcePath: sourcePath.replace(/\\\\/g, '/'),\n docId,\n navigationId,\n ...(position === undefined ? {} : { sidebarPosition: position }),\n },\n }\n}\n\nfunction sourceReferenceKey(value: string): string {\n return value.replace(/\\\\/g, '/').replace(/^\\/+/, '').replace(/\\.(?:mdx?)$/i, '').replace(/\\/$/, '')\n}\n\n/**\n * Rewrite Docusaurus file/doc-id links after every final slug is known. This is\n * deliberately line based so examples inside fenced code remain byte-for-byte\n * source content.\n */\nexport function rewriteDocusaurusLinks(\n body: string,\n current: DocusaurusPageDescriptor,\n descriptors: Array<DocusaurusPageDescriptor>,\n): string {\n const routes = new Map<string, string>()\n for (const descriptor of descriptors) {\n const sourceKey = sourceReferenceKey(descriptor.sourcePath)\n routes.set(sourceKey, descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.docId), descriptor.navigationId)\n routes.set(sourceReferenceKey(descriptor.navigationId), descriptor.navigationId)\n const sourceRoute = pageIdFromReference(sourceKey)\n if (sourceRoute) routes.set(sourceRoute, descriptor.navigationId)\n }\n const currentDirectory = posix.dirname(sourceReferenceKey(current.sourcePath))\n\n function rewriteTarget(target: string): string {\n if (!target || target.startsWith('#') || /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(target)) return target\n const suffixIndex = target.search(/[?#]/)\n const path = suffixIndex >= 0 ? target.slice(0, suffixIndex) : target\n const suffix = suffixIndex >= 0 ? target.slice(suffixIndex) : ''\n const candidates = path.startsWith('/')\n ? [sourceReferenceKey(path), sourceReferenceKey(path).replace(/^docs\\//, '')]\n : [\n sourceReferenceKey(posix.normalize(posix.join(currentDirectory, path))),\n sourceReferenceKey(path),\n ]\n const route = candidates.map((candidate) => routes.get(candidate)).find(Boolean)\n if (!route) return target\n return `${route === 'introduction' ? '/' : `/${route}`}${suffix}`\n }\n\n let codeFence: string | null = null\n return body.split('\\n').map((line) => {\n const fence = line.match(/^\\s*(`{3,}|~{3,})/)\n if (fence) {\n if (!codeFence) codeFence = fence[1][0]\n else if (fence[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n return line\n .replace(/(\\]\\()([^\\s)]+)(?=[\\s)]|$)/g, (_match, prefix: string, target: string) => `${prefix}${rewriteTarget(target)}`)\n .replace(/(\\bhref=\")([^\"]+)(\")/g, (_match, prefix: string, target: string, suffix: string) => `${prefix}${rewriteTarget(target)}${suffix}`)\n }).join('\\n')\n}\n\nfunction readBoundedText(path: string): string {\n if (lstatSync(path).size > MAX_CONFIG_BYTES) {\n throw new Error('Docusaurus sidebar config exceeded the 1 MB static-parser limit.')\n }\n return readFileSync(path, 'utf8')\n}\n\nfunction matchingObjectLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote: string | null = null\n let isEscaped = false\n let lineComment = false\n let blockComment = false\n let objectStart = -1\n\n for (let index = start; index < source.length; index++) {\n const char = source[index]\n const next = source[index + 1]\n if (lineComment) {\n if (char === '\\n') lineComment = false\n continue\n }\n if (blockComment) {\n if (char === '*' && next === '/') {\n blockComment = false\n index++\n }\n continue\n }\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (char === '\\\\') isEscaped = true\n else if (char === quote) quote = null\n continue\n }\n if (char === '/' && next === '/') {\n lineComment = true\n index++\n continue\n }\n if (char === '/' && next === '*') {\n blockComment = true\n index++\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n continue\n }\n if (char === '{') {\n if (objectStart < 0) objectStart = index\n depth++\n } else if (char === '}' && objectStart >= 0) {\n depth--\n if (depth === 0) return source.slice(objectStart, index + 1)\n } else if (objectStart < 0 && !/\\s/.test(char)) {\n return null\n }\n }\n return null\n}\n\nfunction parseStaticSidebarModule(source: string): Record<string, unknown> {\n const bindings = new Map<string, Record<string, unknown>>()\n const normalizedSource = replaceExternalFbContent(source)\n const parseFailures: Array<string> = []\n const assignmentPatterns = [\n /\\bmodule\\.exports\\s*=\\s*/g,\n /\\bexport\\s+default\\s*/g,\n /\\b(?:const|let|var)\\s+[A-Za-z_$][\\w$]*(?:\\s*:\\s*[^=;]+)?\\s*=\\s*/g,\n ]\n const candidates = assignmentPatterns.flatMap((pattern) => [...normalizedSource.matchAll(pattern)])\n .sort((left, right) => (left.index ?? 0) - (right.index ?? 0))\n\n for (const candidate of candidates) {\n const literal = matchingObjectLiteral(normalizedSource, (candidate.index ?? 0) + candidate[0].length)\n if (!literal) continue\n try {\n const substituted = [...bindings].reduce(\n (value, [name, binding]) => value.replace(\n new RegExp(`(:\\\\s*)${name}\\\\b`, 'g'),\n (_match, prefix: string) => `${prefix}${JSON.stringify(binding)}`,\n ),\n literal,\n )\n const parsed = JSON5.parse(substituted) as unknown\n const object = objectValue(parsed)\n if (!object) continue\n const bindingName = candidate[0].match(/\\b(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)/)?.[1]\n if (bindingName) {\n bindings.set(bindingName, object)\n continue\n }\n return object\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const line = Number(message.match(/at (\\d+):/)?.[1] ?? 0)\n const context = line > 0 ? literal.split('\\n').slice(Math.max(0, line - 2), line + 1).join(' ') : ''\n parseFailures.push(`${message}${context ? ` near ${context}` : ''}`)\n // Try the next assignment. Expressions and function calls are rejected.\n }\n }\n const exportedBinding = normalizedSource.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\b/)?.[1]\n ?? normalizedSource.match(/\\bmodule\\.exports\\s*=\\s*([A-Za-z_$][\\w$]*)\\b/)?.[1]\n if (exportedBinding && bindings.has(exportedBinding)) return bindings.get(exportedBinding)!\n throw new Error(`Sidebar config is executable or outside the supported data-only syntax.${parseFailures[0] ? ` ${parseFailures[0]}` : ''}`)\n}\n\nfunction replaceExternalFbContent(source: string): string {\n const marker = '...fbContent('\n let result = source\n let searchFrom = 0\n while (true) {\n const start = result.indexOf(marker, searchFrom)\n if (start < 0) return result.replace(/,\\s*,/g, ',')\n const objectStart = result.indexOf('{', start + marker.length)\n if (objectStart < 0) return result\n const objectLiteral = matchingObjectLiteral(result, objectStart)\n if (!objectLiteral) {\n searchFrom = start + marker.length\n continue\n }\n const objectEnd = objectStart + objectLiteral.length\n const close = result.indexOf(')', objectEnd)\n if (close < 0) return result\n const externalMatch = /\\bexternal\\s*:\\s*/g.exec(objectLiteral)\n let replacement = ''\n if (externalMatch) {\n const arrayStart = objectLiteral.indexOf('[', externalMatch.index + externalMatch[0].length)\n if (arrayStart >= 0) {\n const array = matchingArrayLiteral(objectLiteral, arrayStart)\n if (array) replacement = array.slice(1, -1)\n }\n }\n let replaceEnd = close + 1\n if (!replacement) {\n const trailingComma = result.slice(replaceEnd).match(/^\\s*,/)\n if (trailingComma) replaceEnd += trailingComma[0].length\n }\n result = `${result.slice(0, start)}${replacement}${result.slice(replaceEnd)}`\n searchFrom = start + replacement.length\n }\n}\n\nfunction matchingArrayLiteral(source: string, start: number): string | null {\n let depth = 0\n let quote = ''\n let isEscaped = false\n for (let index = start; index < source.length; index++) {\n const character = source[index]\n if (quote) {\n if (isEscaped) isEscaped = false\n else if (character === '\\\\') isEscaped = true\n else if (character === quote) quote = ''\n continue\n }\n if (character === '\"' || character === \"'\" || character === '`') {\n quote = character\n continue\n }\n if (character === '[') depth++\n if (character === ']' && --depth === 0) return source.slice(start, index + 1)\n }\n return null\n}\n\nfunction configuredSidebarPath(repositoryRoot: string): string | null {\n for (const filename of ['docusaurus.config.js', 'docusaurus.config.ts', 'docusaurus.config.mjs']) {\n const path = resolveWithin(repositoryRoot, filename)\n if (!existsSync(path)) continue\n const source = readBoundedText(path)\n const match = source.match(/\\bsidebarPath\\s*:\\s*(?:require\\.resolve\\(\\s*)?(['\"])([^'\"]+)\\1/)\n if (!match) continue\n const candidate = match[2].replace(/^\\.\\//, '')\n const resolved = resolveWithin(repositoryRoot, candidate)\n if (existsSync(resolved) && lstatSync(resolved).isFile()) return candidate\n }\n return null\n}\n\n/** Read the configured/default sidebar without running the source module. */\nexport function readDocusaurusSidebars(repositoryRoot: string): DocusaurusSidebars | null {\n const configured = configuredSidebarPath(repositoryRoot)\n const sourcePath = [configured, ...SIDEBAR_FILENAMES]\n .filter((value): value is string => Boolean(value))\n .find((candidate) => existsSync(resolveWithin(repositoryRoot, candidate)))\n if (!sourcePath) return null\n const absolutePath = resolveWithin(repositoryRoot, sourcePath)\n const source = readBoundedText(absolutePath)\n const parsed = extname(sourcePath).toLowerCase() === '.json'\n ? objectValue(JSON5.parse(source))\n : parseStaticSidebarModule(source)\n if (!parsed) throw new Error('Docusaurus sidebar config must export an object.')\n return { config: parsed, sourcePath }\n}\n\nfunction readCategoryMetadata(contentRoot: string, directory: string): CategoryMetadata {\n for (const filename of CATEGORY_FILENAMES) {\n const path = resolveWithin(contentRoot, posix.join(directory, filename))\n if (!existsSync(path) || !lstatSync(path).isFile()) continue\n try {\n const raw = readBoundedText(path)\n const parsed = filename.endsWith('.json') ? JSON5.parse(raw) : parseYaml(raw)\n const object = objectValue(parsed)\n if (!object) return {}\n return {\n ...(typeof object.label === 'string' ? { label: object.label } : {}),\n ...(typeof object.position === 'number' ? { position: object.position } : {}),\n ...('link' in object ? { link: object.link } : {}),\n }\n } catch {\n return {}\n }\n }\n return {}\n}\n\nfunction descriptorSort(left: DocusaurusPageDescriptor, right: DocusaurusPageDescriptor): number {\n const leftPosition = left.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n const rightPosition = right.sidebarPosition ?? Number.MAX_SAFE_INTEGER\n if (leftPosition !== rightPosition) return leftPosition - rightPosition\n return left.sourcePath.localeCompare(right.sourcePath, undefined, { numeric: true })\n}\n\nfunction registerDoc(docId: string, context: ProjectionContext): string | null {\n const key = normalizeDocId(docId)\n const descriptor = context.descriptorByDocId.get(key)\n ?? context.descriptors.find((page) => page.navigationId === docusaurusRouteId(key))\n if (!descriptor) {\n context.warnings.push({\n code: 'missing-page',\n message: 'A Docusaurus sidebar document did not resolve to an imported page.',\n source: docId,\n })\n return null\n }\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n}\n\nfunction generatedIndexPage(\n label: string,\n linkValue: unknown,\n context: ProjectionContext,\n): string | null {\n const link = objectValue(linkValue)\n if (!link) return null\n if (link.type === 'doc' && typeof link.id === 'string') return registerDoc(link.id, context)\n if (link.type !== 'generated-index') return null\n const fallback = `category/${slugifySegment(label)}`\n const unprefixedNavigationId = typeof link.slug === 'string'\n ? routeFromSlug(link.slug, fallback) ?? fallback\n : fallback\n const navigationId = context.routePrefix\n && unprefixedNavigationId !== context.routePrefix\n && !unprefixedNavigationId.startsWith(`${context.routePrefix}/`)\n ? posix.join(context.routePrefix, unprefixedNavigationId)\n : unprefixedNavigationId\n if (!context.generatedIds.has(navigationId)\n && !context.descriptors.some((page) => page.navigationId === navigationId)) {\n const description = typeof link.description === 'string'\n ? link.description\n : `Browse the ${label} documentation.`\n context.generatedPages.push({\n id: storageIdForRoute(navigationId),\n navigationId,\n title: typeof link.title === 'string' ? link.title : label,\n description,\n keywords: Array.isArray(link.keywords)\n ? link.keywords.filter((value): value is string => typeof value === 'string')\n : [],\n body: description,\n source: `${context.sourceUrl}#${context.sidebarSource}`,\n })\n context.generatedIds.add(navigationId)\n }\n context.referencedNavigationIds.add(navigationId)\n return navigationId\n}\n\nfunction autogeneratedItems(dirName: string, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n const normalizedDir = dirName === '.' ? '' : normalizeDocId(dirName)\n const inDirectory = context.descriptors.filter((descriptor) => {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n return !normalizedDir || source === normalizedDir || source.startsWith(`${normalizedDir}/`)\n })\n const directPages: Array<DocusaurusPageDescriptor> = []\n const childDirectories = new Set<string>()\n for (const descriptor of inDirectory) {\n const source = descriptor.sourcePath.replace(/\\.(?:mdx?)$/i, '')\n const relativePath = normalizedDir ? posix.relative(normalizedDir, source) : source\n const segments = relativePath.split('/').filter(Boolean)\n if (segments.length <= 1) directPages.push(descriptor)\n else childDirectories.add(segments[0])\n }\n\n const items: Array<string | MigrationNavigationGroup> = directPages\n .sort(descriptorSort)\n .map((descriptor) => {\n context.referencedNavigationIds.add(descriptor.navigationId)\n return descriptor.navigationId\n })\n const groups = [...childDirectories].map((segment) => {\n const directory = normalizedDir ? posix.join(normalizedDir, segment) : segment\n const metadata = readCategoryMetadata(context.contentRoot, directory)\n const pages = autogeneratedItems(directory, context)\n const landing = generatedIndexPage(metadata.label ?? titleCase(segment), metadata.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return {\n position: metadata.position ?? Number.MAX_SAFE_INTEGER,\n segment,\n group: {\n group: metadata.label ?? titleCase(segment),\n pages,\n } satisfies MigrationNavigationGroup,\n }\n }).sort((left, right) => left.position - right.position\n || left.segment.localeCompare(right.segment, undefined, { numeric: true }))\n items.push(...groups.map((entry) => entry.group))\n return items\n}\n\nfunction convertItems(value: unknown, context: ProjectionContext): Array<string | MigrationNavigationGroup> {\n if (typeof value === 'string') {\n const page = registerDoc(value, context)\n return page ? [page] : []\n }\n if (Array.isArray(value)) return value.flatMap((entry) => convertItems(entry, context))\n const object = objectValue(value)\n if (!object) return []\n\n if (object.type === 'doc' || object.type === 'ref') {\n const page = typeof object.id === 'string' ? registerDoc(object.id, context) : null\n return page ? [page] : []\n }\n if (object.type === 'autogenerated') {\n return autogeneratedItems(typeof object.dirName === 'string' ? object.dirName : '.', context)\n }\n if (object.type === 'category') {\n const label = typeof object.label === 'string' ? object.label : 'Documentation'\n const pages = convertItems(object.items, context)\n const landing = generatedIndexPage(label, object.link, context)\n if (landing && !pages.includes(landing)) pages.unshift(landing)\n return pages.length > 0 ? [{ group: label, pages }] : []\n }\n if (object.type === 'link' || object.type === 'html') return []\n\n // Docusaurus category shorthand and sidebar slices are ordinary objects.\n return Object.entries(object).flatMap(([label, items]) => {\n const pages = convertItems(items, context)\n return pages.length > 0 ? [{ group: label, pages }] : []\n })\n}\n\n/** Project explicit and autogenerated Docusaurus sidebars into Thally tabs. */\nexport function projectDocusaurusNavigation(input: {\n sidebars: DocusaurusSidebars | null\n descriptors: Array<DocusaurusPageDescriptor>\n contentRoot: string\n sourceUrl: string\n routePrefix?: string\n}): DocusaurusNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const descriptorByDocId = new Map(input.descriptors.map((page) => [page.docId, page]))\n const context: ProjectionContext = {\n contentRoot: input.contentRoot,\n descriptors: input.descriptors,\n descriptorByDocId,\n generatedPages: [],\n generatedIds: new Set(),\n referencedNavigationIds: new Set(),\n sourceUrl: input.sourceUrl,\n routePrefix: input.routePrefix ?? '',\n sidebarSource: input.sidebars?.sourcePath ?? 'autogenerated sidebar',\n warnings,\n }\n const sidebarEntries = input.sidebars ? Object.entries(input.sidebars.config) : [['docs', [\n { type: 'autogenerated', dirName: '.' },\n ]]]\n const tabs = sidebarEntries.flatMap(([sidebarId, value]) => {\n const converted = convertItems(value, context)\n const loosePages = converted.filter((entry): entry is string => typeof entry === 'string')\n const groups = converted.filter((entry): entry is MigrationNavigationGroup => typeof entry !== 'string')\n if (loosePages.length > 0) groups.unshift({ group: 'Overview', pages: loosePages })\n if (groups.length === 0) return []\n return [{\n tab: sidebarEntries.length === 1 ? 'Documentation' : titleCase(sidebarId),\n groups,\n }]\n })\n\n const unreferenced = input.descriptors\n .filter((page) => !context.referencedNavigationIds.has(page.navigationId))\n .sort(descriptorSort)\n .map((page) => page.navigationId)\n if (unreferenced.length > 0) {\n if (tabs.length === 0) tabs.push({ tab: 'Documentation', groups: [] })\n tabs[0].groups?.push({ group: 'Additional', pages: unreferenced })\n }\n return {\n docsConfig: { tabs },\n generatedPages: context.generatedPages,\n referencedNavigationIds: context.referencedNavigationIds,\n warnings,\n }\n}\n","/** Safe path normalization used before reading or writing migrated content. */\n\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nconst SAFE_SEGMENT = /[^a-z0-9._-]+/g\n\n/** Turn a source path segment into a stable URL/file-system slug. */\nexport function slugifySegment(value: string): 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 return decoded\n .toLowerCase()\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): 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(slugifySegment).filter(Boolean)\n return segments.join('/') || 'introduction'\n}\n\n/** Resolve an untrusted relative path and prove it remains below `root`. */\nexport function resolveWithin(root: string, candidate: string): string {\n if (isAbsolute(candidate) || candidate.includes('\\0')) {\n throw new Error(`Unsafe migration path: ${candidate}`)\n }\n const target = resolve(root, candidate)\n const fromRoot = relative(resolve(root), target)\n if (fromRoot === '..' || fromRoot.startsWith(`..${sep}`) || isAbsolute(fromRoot)) {\n throw new Error(`Migration path escapes its root: ${candidate}`)\n }\n return target\n}\n\n/** Return a slash-separated, traversal-free asset path. */\nexport function normalizeAssetPath(value: string): string | null {\n const normalized = value.replace(/\\\\/g, '/').replace(/^\\/+/, '')\n if (!normalized || normalized.includes('\\0')) return null\n const segments = normalized.split('/').filter(Boolean)\n if (segments.some((segment) => segment === '.' || segment === '..')) return null\n return segments.join('/')\n}\n","/**\n * The one frontmatter parser for authored content in this package.\n *\n * `gray-matter` dispatches on the language token of the opening delimiter, so\n * `---js` frontmatter reaches an engine whose parser is literally `eval`:\n * arbitrary code execution inside whatever process reads the file. Migration\n * input is scraped from third-party sites and repositories, so every parse\n * must route through this helper rather than calling `matter()` directly.\n *\n * `{ language: 'yaml' }` does NOT close the hole: the language declared by the\n * content wins over the option. Only replacing the JavaScript engines does.\n *\n * Internal module — deliberately not part of the package's public API. The\n * app-side original is `src/lib/frontmatter.ts`; the packages keep their own\n * copies because they cannot import from the app.\n */\n\nimport matter from 'gray-matter'\n\nconst FRONTMATTER_OPTIONS = {\n engines: {\n javascript: () => ({}),\n js: () => ({}),\n },\n} as const\n\n/** Parse frontmatter without any path that can execute the content. */\nexport function parseFrontmatter(raw: string): matter.GrayMatterFile<string> {\n return matter(raw, FRONTMATTER_OPTIONS)\n}\n","/** Markdown/MDX normalization that preserves every component Thally supports. */\n\nimport { parseFrontmatter } from './frontmatter.js'\nimport type { MigrationPage } from './types.js'\n\nexport interface MarkdownPageIdentity {\n id: string\n navigationId: string\n locale?: string\n}\n\nfunction titleFromId(id: string): string {\n const value = id.split('/').at(-1) ?? id\n if (value === 'introduction') return 'Introduction'\n return value\n .split(/[-_]/)\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\nfunction firstParagraph(content: string): string {\n for (const block of content.split(/\\n\\s*\\n/)) {\n const value = block.replace(/\\s+/g, ' ').trim()\n if (!value || /^(?:#|```|:::|<|import\\s|export\\s)/.test(value)) continue\n return value.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1').slice(0, 240)\n }\n return ''\n}\n\nfunction docusaurusAdmonitionTag(kind: string): 'Error' | 'Info' | 'Note' | 'Warning' {\n if (kind === 'danger') return 'Error'\n if (kind === 'info') return 'Info'\n if (kind === 'caution' || kind === 'warning') return 'Warning'\n return 'Note'\n}\n\n/**\n * Convert Docusaurus' colon-fence admonitions without interpreting code-fence\n * contents. Longer delimiters support nested admonitions in the same way as\n * the source renderer.\n */\nfunction normalizeDocusaurusAdmonitions(body: string): string {\n const lines = body.split('\\n')\n const openAdmonitions: Array<{ delimiter: string; tag: string }> = []\n let codeFence: string | null = null\n\n return lines.map((line) => {\n const codeMatch = line.match(/^\\s*(`{3,}|~{3,})/)\n if (codeMatch) {\n if (!codeFence) codeFence = codeMatch[1][0]\n else if (codeMatch[1][0] === codeFence) codeFence = null\n return line\n }\n if (codeFence) return line\n\n const opening = line.match(/^\\s*(:{3,})(note|tip|info|warning|caution|danger)(?:\\[([^\\]]+)\\]|\\s+(.+))?\\s*$/i)\n if (opening) {\n const tag = docusaurusAdmonitionTag(opening[2].toLowerCase())\n openAdmonitions.push({ delimiter: opening[1], tag })\n const title = (opening[3] ?? opening[4])?.trim()\n return title ? `<${tag}>\\n**${title}**` : `<${tag}>`\n }\n\n const closing = line.match(/^\\s*(:{3,})\\s*$/)\n const current = openAdmonitions.at(-1)\n if (closing && current?.delimiter === closing[1]) {\n openAdmonitions.pop()\n return `</${current.tag}>`\n }\n return line\n }).join('\\n')\n}\n\n/** Normalize only syntax Thally cannot render; supported source JSX stays intact. */\nexport function normalizeMdx(body: string): string {\n return normalizeDocusaurusAdmonitions(body)\n // Docusaurus injects these theme components globally. Thally also exposes\n // its equivalents globally, so source-only imports must not survive.\n .replace(/^import\\s+(?:Tabs|TabItem|Link|DocCardList|TOCInline)\\s+from\\s+['\"]@(?:theme|docusaurus)\\/[^'\"]+['\"]\\s*;?\\s*$/gm, '')\n .replace(/<TabItem\\b([^>]*)>/g, (_match, attributes: string) => {\n const title = attributes.match(/\\blabel=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? attributes.match(/\\bvalue=(?:\"([^\"]*)\"|'([^']*)')/)?.slice(1).find(Boolean)\n ?? 'Tab'\n return `<Tab title=\"${title.replace(/\"/g, '&quot;')}\">`\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(/<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 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 description,\n keywords,\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, readFileSync } from 'node:fs'\nimport { dirname, extname, relative } from 'node:path'\n\nimport { pageIdFromReference, resolveWithin } 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\nexport interface MintlifyNavigationResult {\n docsConfig: MigrationDocsConfig\n pageReferences: Array<MintlifyPageReference>\n warnings: Array<MigrationWarning>\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 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 const object = objectValue(current)\n if (!object) return undefined\n return object[token.replace(/~1/g, '/').replace(/~0/g, '~')]\n }, root)\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 = JSON.parse(readFileSync(referencedFile, 'utf8')) as unknown\n const referenced = jsonPointer(referencedRoot, pointer ? `#${pointer}` : '')\n const resolved = resolveJsonReferences(referenced, referencedFile, repositoryRoot, stack)\n stack.delete(stackKey)\n return 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 = JSON.parse(readFileSync(configPath, 'utf8')) as unknown\n return resolveJsonReferences(raw, configPath, repositoryRoot, new Set()) as Record<string, unknown>\n}\n\nfunction normalizePageRef(value: string): string | null {\n if (/^(?:https?:)?\\/\\//i.test(value) || value.startsWith('#')) return null\n const ref = localReference(value).replace(/^\\/+/, '').replace(/\\.(?:mdx?|rst|txt)$/i, '')\n return pageIdFromReference(ref)\n}\n\ninterface ProjectionContext {\n locale?: string\n references: Array<MintlifyPageReference>\n seenReferences: Set<string>\n}\n\nfunction registerReference(value: string, context: ProjectionContext): string | null {\n const localePrefix = context.locale ? `${context.locale}/` : ''\n const localizedValue = localePrefix && value.replace(/^\\/+/, '').startsWith(localePrefix)\n ? value.replace(/^\\/+/, '').slice(localePrefix.length)\n : value\n const navigationId = normalizePageRef(localizedValue)\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 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 ...(typeof object.icon === 'string' ? { icon: object.icon } : {}),\n pages: children,\n }\n }\n return null\n}\n\nfunction convertGroups(\n values: Array<unknown>,\n context: ProjectionContext,\n fallbackGroup: string,\n): Array<MigrationNavigationGroup> {\n const groups: Array<MigrationNavigationGroup> = []\n const loosePages: Array<string | MigrationNavigationGroup> = []\n for (const value of values) {\n const converted = convertPage(value, context)\n if (!converted) continue\n if (typeof converted === 'string') loosePages.push(converted)\n else groups.push(converted)\n }\n if (loosePages.length > 0) groups.unshift({ group: fallbackGroup, pages: loosePages })\n return groups\n}\n\nfunction convertContainerToTabs(\n containerValue: unknown,\n context: ProjectionContext,\n fallbackTab: string,\n): Array<MigrationNavigationTab> {\n const container = objectValue(containerValue)\n if (!container) return []\n for (const key of ['tabs', 'anchors', 'products', 'dropdowns', 'versions', 'menus']) {\n if (!Array.isArray(container[key])) continue\n const tabs = (container[key] as Array<unknown>).flatMap((value, index) => {\n const object = objectValue(value)\n if (!object) return []\n const tab = labelFor(object, `${fallbackTab} ${index + 1}`)\n if (typeof object.href === 'string' && !object.pages && !object.groups) {\n return [{ tab, href: object.href }]\n }\n const nested = convertContainerToTabs(object, context, tab)\n if (nested.length > 0) {\n if (nested.length === 1) return [{ ...nested[0], tab }]\n return nested.map((item) => ({ ...item, tab: `${tab}: ${item.tab}` }))\n }\n return []\n })\n if (tabs.length > 0) return tabs\n }\n const rawPages = [\n ...(Array.isArray(container.groups) ? container.groups : []),\n ...(Array.isArray(container.pages) ? container.pages : []),\n ]\n if (typeof container.root === 'string') rawPages.unshift(container.root)\n const groups = convertGroups(rawPages, context, 'Overview')\n return groups.length > 0 ? [{ tab: fallbackTab, groups }] : []\n}\n\n/** Convert current and legacy Mintlify navigation into Thally's schema. */\nexport function projectMintlifyNavigation(config: Record<string, unknown>): MintlifyNavigationResult {\n const warnings: Array<MigrationWarning> = []\n const references: Array<MintlifyPageReference> = []\n const seenReferences = new Set<string>()\n const navigation = objectValue(config.navigation) ?? config\n const languages = Array.isArray(navigation.languages)\n ? navigation.languages.map(objectValue).filter((value): value is Record<string, unknown> => Boolean(value))\n : []\n let tabs: Array<MigrationNavigationTab> = []\n let i18n: MigrationDocsConfig['i18n']\n\n if (languages.length > 0) {\n const defaultLanguage = languages.find((entry) => entry.language === 'en') ?? languages[0]\n const defaultLocale = String(defaultLanguage.language ?? 'en')\n const locales = languages.map((entry) => {\n const code = String(entry.language ?? entry.locale ?? 'en')\n return { code, label: LANGUAGE_LABELS[code] ?? code.toUpperCase() }\n })\n i18n = { defaultLocale, locales }\n for (const language of languages) {\n const locale = String(language.language ?? language.locale ?? defaultLocale)\n const context: ProjectionContext = {\n locale,\n references,\n seenReferences,\n }\n const languageTabs = convertContainerToTabs(language, context, 'Documentation')\n if (language === defaultLanguage) tabs = languageTabs\n }\n } else {\n tabs = convertContainerToTabs(navigation, { references, seenReferences }, 'Documentation')\n if (tabs.length === 0 && Array.isArray(config.navigation)) {\n const groups = convertGroups(config.navigation, { references, seenReferences }, 'Overview')\n if (groups.length > 0) tabs = [{ tab: 'Documentation', groups }]\n }\n }\n\n if (tabs.length === 0) {\n warnings.push({\n code: 'unsupported-config',\n message: 'Mintlify navigation could not be projected; generated navigation will be used.',\n })\n }\n if (!tabs.some((tab) => tab.tab.toLowerCase() === 'changelog')) {\n tabs.push({ tab: 'Changelog', href: '/changelog' })\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 return [{\n source: redirect.source,\n destination: redirect.destination,\n ...(typeof redirect.permanent === 'boolean' ? { permanent: redirect.permanent } : {}),\n }]\n })\n : []\n return {\n docsConfig: { tabs, ...(i18n ? { i18n } : {}), ...(redirects.length > 0 ? { redirects } : {}) },\n pageReferences: references,\n warnings,\n }\n}\n\nfunction titleCase(value: string): string {\n return value\n .split(/[-_]/)\n .map((word) => ['api', 'cli', 'sdk', 'ui'].includes(word.toLowerCase())\n ? word.toUpperCase()\n : word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n}\n\ninterface GeneratedNavigationOptions {\n /** Dedicated docs platforms expose their primary sections as top-level tabs. */\n topLevelTabs?: boolean\n /** Ordered tabs recovered from the source site's rendered navigation. */\n topLevelNavigation?: ReadonlyArray<{\n section: string\n label: string\n pageId: string\n }>\n}\n\nconst TOP_LEVEL_LABELS: Record<string, string> = {\n 'api-reference': 'API Reference',\n cli: 'CLI',\n faqs: 'FAQs',\n introduction: 'Overview',\n 'mcp-server': 'MCP Server',\n sdk: 'SDK',\n}\n\nfunction topLevelLabel(segment: string): string {\n return TOP_LEVEL_LABELS[segment] ?? titleCase(segment)\n}\n\nfunction groupsWithinSection(\n section: string,\n pageIds: Array<string>,\n sectionLabel = topLevelLabel(section),\n): Array<MigrationNavigationGroup> {\n const groups = new Map<string, Array<string>>()\n for (const id of pageIds) {\n const relative = id === 'introduction'\n ? ''\n : id.startsWith(`${section}/`)\n ? id.slice(section.length + 1)\n : id\n const nestedSegment = relative.includes('/') ? relative.split('/', 1)[0] : 'overview'\n const group = groups.get(nestedSegment) ?? []\n group.push(id)\n groups.set(nestedSegment, group)\n }\n return [...groups].map(([segment, pages]) => ({\n group: segment === 'overview' ? sectionLabel : titleCase(segment),\n pages,\n }))\n}\n\nfunction preferredLandingPage(\n section: string,\n pageIds: Array<string>,\n): string | undefined {\n const candidates = [\n section === 'introduction' ? 'introduction' : undefined,\n `${section}/overview`,\n `${section}/introduction`,\n section,\n ]\n return candidates.find((candidate): candidate is string => Boolean(candidate && pageIds.includes(candidate)))\n}\n\n/** Build deterministic fallback navigation from imported default-locale pages. */\nexport function buildNavigationFromPages(\n pages: Array<MigrationPage>,\n options: GeneratedNavigationOptions = {},\n): MigrationDocsConfig {\n const ids = pages.filter((page) => !page.locale || page.locale === 'en').map((page) => page.navigationId)\n const ordered = [...new Set(ids)]\n if (options.topLevelTabs) {\n const sourceNavigation = (options.topLevelNavigation ?? []).flatMap((entry) => {\n const sectionPages = ordered.filter((id) => id === entry.section || id.startsWith(`${entry.section}/`))\n const pageId = ordered.includes(entry.pageId)\n ? entry.pageId\n : preferredLandingPage(entry.section, sectionPages) ?? sectionPages[0]\n return pageId ? [{ ...entry, pageId }] : []\n })\n if (sourceNavigation.length > 1) {\n const claimedIds = new Set<string>()\n const tabs = sourceNavigation.map((entry) => {\n const pageIds = ordered.filter((id) => {\n const matches = id === entry.pageId\n || id === entry.section\n || id.startsWith(`${entry.section}/`)\n if (matches) claimedIds.add(id)\n return matches\n })\n return { entry, pageIds }\n })\n // Mintlify's first tab is the documentation home and owns pages that do\n // not belong to another product tab (for example /create and /deploy).\n tabs[0].pageIds.push(...ordered.filter((id) => !claimedIds.has(id)))\n return {\n tabs: tabs.map(({ entry, pageIds }) => ({\n tab: entry.label,\n href: entry.pageId === 'introduction' ? '/' : `/${entry.pageId}`,\n groups: groupsWithinSection(entry.section, [...new Set(pageIds)], entry.label),\n })),\n }\n }\n const sectionNames = [...new Set(ordered\n .filter((id) => id.includes('/'))\n .map((id) => id.split('/', 1)[0]))]\n if (sectionNames.length > 1) {\n const defaultSection = sectionNames.includes('introduction')\n ? 'introduction'\n : sectionNames[0]\n const sections = new Map<string, Array<string>>()\n for (const id of ordered) {\n const section = id.includes('/') ? id.split('/', 1)[0] : defaultSection\n const bucket = sections.get(section) ?? []\n bucket.push(id)\n sections.set(section, bucket)\n }\n return {\n tabs: [...sections].map(([section, pageIds]) => {\n const label = topLevelLabel(section)\n const landingPage = preferredLandingPage(section, pageIds)\n return {\n tab: label,\n ...(landingPage\n ? { href: landingPage === 'introduction' ? '/' : `/${landingPage}` }\n : {}),\n groups: groupsWithinSection(section, pageIds),\n }\n }),\n }\n }\n }\n const buckets = new Map<string, Array<string>>()\n for (const id of ordered) {\n const segment = id.includes('/') ? id.split('/', 1)[0] : 'overview'\n const bucket = buckets.get(segment) ?? []\n bucket.push(id)\n buckets.set(segment, bucket)\n }\n const groups = [...buckets].map(([segment, pageIds]) => ({\n group: segment === 'overview' ? 'Overview' : titleCase(segment),\n pages: pageIds,\n }))\n return { tabs: [{ tab: 'Documentation', groups }] }\n}\n\n/** Exposed for repository discovery and focused unit tests. */\nexport function isDocumentationExtension(filename: string): boolean {\n return ['.md', '.mdx', '.rst', '.txt'].includes(extname(filename).toLowerCase())\n}\n","/** Render canonical migration bundles into a portable Thally repository tree. */\n\nimport type {\n MigrationBundle,\n MigrationDocsConfig,\n MigrationNavigationGroup,\n RenderedMigrationFile,\n} from './types.js'\n\nfunction yamlString(value: string): string {\n return JSON.stringify(value.replace(/\\s+/g, ' ').trim())\n}\n\nfunction renderPage(bundle: MigrationBundle, page: MigrationBundle['pages'][number]): string {\n return [\n '---',\n `title: ${yamlString(page.title)}`,\n `description: ${yamlString(page.description)}`,\n page.keywords.length > 0 ? `keywords: [${page.keywords.map(yamlString).join(', ')}]` : null,\n page.openapi ? `openapi: ${yamlString(page.openapi)}` : null,\n bundle.sourceKind === 'url' ? `source: ${yamlString(page.source)}` : null,\n '---',\n '',\n page.body,\n '',\n ].filter((line) => line !== null).join('\\n')\n}\n\n/** Merge imported tabs into an existing site without duplicating changelog tabs. */\nexport function mergeMigrationConfig(\n existing: MigrationDocsConfig,\n incoming: MigrationDocsConfig,\n): MigrationDocsConfig {\n const tabs = existing.tabs.filter((tab) => tab.tab.toLowerCase() !== 'changelog')\n const names = new Set(tabs.map((tab) => tab.tab.toLowerCase()))\n const seenPages = new Set<string>()\n function recordPages(groups: MigrationDocsConfig['tabs'][number]['groups']): void {\n for (const group of groups ?? []) {\n for (const page of group.pages) {\n if (typeof page === 'string') seenPages.add(page)\n else recordPages([page])\n }\n }\n }\n for (const tab of tabs) recordPages(tab.groups)\n function uniqueGroups(\n groups: Array<MigrationNavigationGroup> | undefined,\n ): Array<MigrationNavigationGroup> {\n return (groups ?? []).flatMap<MigrationNavigationGroup>((group) => {\n const pages = group.pages.flatMap<string | MigrationNavigationGroup>((page) => {\n if (typeof page === 'string') {\n if (seenPages.has(page)) return []\n seenPages.add(page)\n return [page]\n }\n const [nested]: Array<MigrationNavigationGroup> = uniqueGroups([page])\n return nested ? [nested] : []\n })\n return pages.length > 0 ? [{ ...group, pages }] : []\n })\n }\n for (const tab of incoming.tabs) {\n if (tab.tab.toLowerCase() === 'changelog') continue\n const uniqueTab = { ...tab, ...(tab.groups ? { groups: uniqueGroups(tab.groups) } : {}) }\n if (tab.groups && uniqueTab.groups?.length === 0 && !tab.href && !tab.api) continue\n if (!names.has(tab.tab.toLowerCase())) {\n tabs.push(uniqueTab)\n names.add(tab.tab.toLowerCase())\n continue\n }\n const target = tabs.find((item) => item.tab.toLowerCase() === tab.tab.toLowerCase())\n if (!target || !uniqueTab.groups) continue\n target.groups = [...(target.groups ?? []), ...uniqueTab.groups]\n }\n const changelog = existing.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n ?? incoming.tabs.find((tab) => tab.tab.toLowerCase() === 'changelog')\n if (changelog) tabs.push(changelog)\n const i18n = existing.i18n || incoming.i18n\n ? {\n defaultLocale: existing.i18n?.defaultLocale ?? incoming.i18n?.defaultLocale ?? 'en',\n locales: [...new Map(\n [...(existing.i18n?.locales ?? []), ...(incoming.i18n?.locales ?? [])]\n .map((locale) => [locale.code, locale]),\n ).values()],\n }\n : undefined\n return {\n ...incoming,\n ...existing,\n tabs,\n ...(i18n ? { i18n } : {}),\n }\n}\n\n/** Materialize every canonical page, asset, and config as repository file changes. */\nexport function renderMigrationFiles(\n bundle: MigrationBundle,\n options: { existingConfig?: MigrationDocsConfig } = {},\n): Array<RenderedMigrationFile> {\n const config = options.existingConfig\n ? mergeMigrationConfig(options.existingConfig, bundle.docsConfig)\n : bundle.docsConfig\n return [\n ...bundle.pages.map((page) => ({\n path: `src/content/${page.id}.mdx`,\n content: renderPage(bundle, page),\n })),\n ...bundle.assets.map((asset) => ({ path: `public/${asset.path}`, content: asset.content })),\n { path: 'docs.json', content: `${JSON.stringify(config, null, 2)}\\n` },\n ]\n}\n","/**\n * Public URL adapter for the shared migration engine. Discovery prefers\n * machine-readable Markdown and sitemaps, remains scoped to the submitted docs\n * path, then falls back to bounded navigation crawling and HTML extraction.\n */\n\nimport { load } from 'cheerio'\nimport TurndownService from 'turndown'\nimport { parse as parseYaml, stringify as stringifyYaml } from 'yaml'\n\nimport { parseMarkdownPage } from './mdx.js'\nimport { buildNavigationFromPages } 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', 'Danger', 'Error', 'Expandable',\n 'Agent', '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')\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 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} {\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 }\n}\n\nfunction stripMintlifyDocumentationIndex(body: string): string {\n const lines = body.split(/\\r?\\n/)\n if (!/^>\\s*##\\s+Documentation Index\\s*$/i.test(lines[0] ?? '')\n || !/^>.*\\/llms(?:-full)?\\.txt/i.test(lines[1] ?? '')\n || !/^>.*discover all available pages/i.test(lines[2] ?? '')) return body\n let index = 3\n while (index < lines.length && /^>/.test(lines[index])) index += 1\n while (index < lines.length && lines[index].trim() === '') index += 1\n return lines.slice(index).join('\\n')\n}\n\nfunction extractEmbeddedOpenApi(content: string): {\n content: string\n openapi?: string\n fragment?: EmbeddedOpenApiFragment\n} {\n const fencePattern = /^\\s{0,3}(`{3,}|~{3,})(?:yaml|yml|json)\\s+(\\S+\\.(?:yaml|yml|json))\\s+(delete|get|head|options|patch|post|put|trace)\\s+(\\/\\S+)\\s*\\r?\\n([\\s\\S]*?)^\\s{0,3}\\1\\s*$/im\n const match = fencePattern.exec(content)\n if (!match) return { content }\n try {\n const parsed = parseYaml(match[5], { maxAliasCount: 50 })\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return { content }\n const document = parsed as Record<string, unknown>\n if (typeof document.openapi !== 'string' && typeof document.swagger !== 'string') return { content }\n const method = match[3].toUpperCase()\n const path = match[4]\n const paths = document.paths\n if (!paths || typeof paths !== 'object' || Array.isArray(paths)) return { content }\n const pathItem = (paths as Record<string, unknown>)[path]\n if (!pathItem || typeof pathItem !== 'object' || Array.isArray(pathItem)\n || !(match[3].toLowerCase() in pathItem)) return { content }\n const before = content.slice(0, match.index).replace(/(?:^|\\n)##\\s+OpenAPI\\s*\\n\\s*$/i, '\\n')\n const after = content.slice(match.index + match[0].length)\n return {\n content: `${before}${after}`.trim(),\n openapi: `${method} ${path}`,\n fragment: {\n method,\n path,\n document,\n },\n }\n } catch {\n return { content }\n }\n}\n\nfunction markdownPage(document: MigrationFetchResponse, id: string): {\n page: MigrationPage | null\n openApiFragment?: EmbeddedOpenApiFragment\n} {\n const parsed = remoteMarkdownMetadata(document.body)\n let content = stripMintlifyDocumentationIndex(parsed.content).trimStart()\n const titleMatch = content.match(/^#\\s+(.+)\\r?\\n/)\n const title = parsed.title ?? titleMatch?.[1] ?? id.split('/').at(-1) ?? 'Introduction'\n if (titleMatch) content = content.slice(titleMatch[0].length).trimStart()\n let description = parsed.description\n if (!description) {\n const quoteMatch = content.match(/^(>[^\\r\\n]*(?:\\r?\\n>[^\\r\\n]*)*)\\r?\\n/)\n if (quoteMatch) {\n description = plainDescription(quoteMatch[1].replace(/^>\\s?/gm, ''))\n content = content.slice(quoteMatch[0].length).trimStart()\n }\n }\n // Re-emit only scalar metadata we parsed ourselves. `gray-matter` remains in\n // the shared page parser for trusted repository sources, but never receives\n // attacker-controlled YAML aliases from a public URL.\n const embeddedOpenApi = extractEmbeddedOpenApi(content)\n const raw = [\n '---',\n `title: ${JSON.stringify(title)}`,\n ...(description ? [`description: ${JSON.stringify(description)}`] : []),\n ...(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, '&quot;')\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, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\\{/g, '&#123;')\n .replace(/\\}/g, '&#125;')\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 return 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}\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 sourceTopLevelNavigation = platform === 'mintlify' && 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 = 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 // 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 const docsConfig = platform === 'docusaurus'\n ? docusaurusNavigationFromSnapshots(docusaurusSidebars, pages, scopePath)\n : buildNavigationFromPages(pages, {\n topLevelTabs: platform === 'mintlify',\n topLevelNavigation,\n })\n if (docusaurusRedirects.length > 0) {\n docsConfig.redirects = [...new Map(docusaurusRedirects.map((redirect) => [\n `${redirect.source}:${redirect.destination}`,\n redirect,\n ])).values()]\n }\n const openApiAsset = mergeEmbeddedOpenApi(openApiFragments)\n if (openApiAsset) {\n const operationPageIds = new Set(pages.filter((page) => page.openapi).map((page) => page.navigationId))\n const apiTab = docsConfig.tabs.find((tab) => tab.groups?.some((group) => {\n const containsOperation = (pages: typeof group.pages): boolean => pages.some((page) => {\n return typeof page === 'string' ? operationPageIds.has(page) : containsOperation(page.pages)\n })\n return containsOperation(group.pages)\n })) ?? docsConfig.tabs[0]\n if (apiTab) {\n // Migrated operation pages preserve the source URLs and sidebar order.\n // The spec is still configured for operation rendering, but its derived\n // `/api/*` navigation would duplicate every imported endpoint.\n apiTab.api = { source: '/openapi.yaml', navigation: false }\n }\n }\n const locales = [...new Set(pages.map((page) => page.locale).filter((value): value is string => Boolean(value)))]\n if (locales.length > 0) {\n docsConfig.i18n = {\n defaultLocale: 'en',\n locales: [\n { code: 'en', label: 'English' },\n ...locales.filter((locale) => locale !== 'en').map((locale) => ({ code: locale, label: locale.toUpperCase() })),\n ],\n }\n }\n return {\n sourceUrl: source.toString(),\n sourceKind: 'url',\n platform,\n pages,\n assets: openApiAsset ? [{ path: 'openapi.yaml', content: openApiAsset }] : [],\n docsConfig,\n warnings,\n stats: {\n discovered: visited.size,\n imported: pages.length,\n skipped: Math.max(0, visited.size - pages.length),\n },\n }\n}\n"],"mappings":"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","names":["existsSync","lstatSync","readFileSync","dirname","extname","relative","existsSync","readFileSync","extname","relative","objectValue","relative","readFileSync","existsSync","titleCase","extname","existsSync","lstatSync","dirname","readFileSync","relative","resolve","extname","parseYaml","value","parseYaml","title","converted","candidates","pages"]}