prime-dev-cli 1.0.21 → 1.0.23

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.
Files changed (94) hide show
  1. package/dist/server/.next/BUILD_ID +1 -1
  2. package/dist/server/.next/app-build-manifest.json +1 -1
  3. package/dist/server/.next/app-path-routes-manifest.json +3 -0
  4. package/dist/server/.next/build-manifest.json +6 -6
  5. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  6. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  7. package/dist/server/.next/fallback-build-manifest.json +6 -6
  8. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  9. package/dist/server/.next/next-server.js.nft.json +1 -1
  10. package/dist/server/.next/prerender-manifest.json +9 -9
  11. package/dist/server/.next/server/app/_not-found.html +1 -1
  12. package/dist/server/.next/server/app/_not-found.rsc +1 -1
  13. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/app-build-manifest.json +10 -0
  14. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/app-paths-manifest.json +3 -0
  15. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/build-manifest.json +16 -0
  16. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/next-font-manifest.json +6 -0
  17. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/react-loadable-manifest.json +1 -0
  18. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route/server-reference-manifest.json +4 -0
  19. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js +8 -0
  20. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.map +5 -0
  21. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route.js.nft.json +1 -0
  22. package/dist/server/.next/server/app/api/admin-git-batch-delete-branch/route_client-reference-manifest.js +2 -0
  23. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/app-build-manifest.json +10 -0
  24. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/app-paths-manifest.json +3 -0
  25. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/build-manifest.json +16 -0
  26. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/next-font-manifest.json +6 -0
  27. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/react-loadable-manifest.json +1 -0
  28. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route/server-reference-manifest.json +4 -0
  29. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js +8 -0
  30. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js.map +5 -0
  31. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route.js.nft.json +1 -0
  32. package/dist/server/.next/server/app/api/gwh-git-flow/abort/route_client-reference-manifest.js +2 -0
  33. package/dist/server/.next/server/app/api/gwh-git-flow/route/app-build-manifest.json +10 -0
  34. package/dist/server/.next/server/app/api/gwh-git-flow/route/app-paths-manifest.json +3 -0
  35. package/dist/server/.next/server/app/api/gwh-git-flow/route/build-manifest.json +16 -0
  36. package/dist/server/.next/server/app/api/gwh-git-flow/route/next-font-manifest.json +6 -0
  37. package/dist/server/.next/server/app/api/gwh-git-flow/route/react-loadable-manifest.json +1 -0
  38. package/dist/server/.next/server/app/api/gwh-git-flow/route/server-reference-manifest.json +4 -0
  39. package/dist/server/.next/server/app/api/gwh-git-flow/route.js +9 -0
  40. package/dist/server/.next/server/app/api/gwh-git-flow/route.js.map +5 -0
  41. package/dist/server/.next/server/app/api/gwh-git-flow/route.js.nft.json +1 -0
  42. package/dist/server/.next/server/app/api/gwh-git-flow/route_client-reference-manifest.js +2 -0
  43. package/dist/server/.next/server/app/api/uat-git-flow/route.js +2 -2
  44. package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -1
  45. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +2 -2
  46. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -1
  47. package/dist/server/.next/server/app/configuration.html +1 -1
  48. package/dist/server/.next/server/app/configuration.rsc +1 -1
  49. package/dist/server/.next/server/app/index.html +1 -1
  50. package/dist/server/.next/server/app/index.rsc +1 -1
  51. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +1 -1
  52. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  53. package/dist/server/.next/server/app/initialization.html +1 -1
  54. package/dist/server/.next/server/app/initialization.rsc +2 -2
  55. package/dist/server/.next/server/app-paths-manifest.json +3 -0
  56. package/dist/server/.next/server/chunks/[root-of-the-server]__0f9a35fc._.js +3 -0
  57. package/dist/server/.next/server/chunks/[root-of-the-server]__0f9a35fc._.js.map +1 -0
  58. package/dist/server/.next/server/chunks/[root-of-the-server]__37bfbf6b._.js +16 -0
  59. package/dist/server/.next/server/chunks/[root-of-the-server]__37bfbf6b._.js.map +1 -0
  60. package/dist/server/.next/server/chunks/[root-of-the-server]__66dc5e6b._.js +16 -0
  61. package/dist/server/.next/server/chunks/[root-of-the-server]__66dc5e6b._.js.map +1 -0
  62. package/dist/server/.next/server/chunks/[root-of-the-server]__98088bea._.js.map +1 -1
  63. package/dist/server/.next/server/chunks/{[root-of-the-server]__bc84f5d7._.js → [root-of-the-server]__9f7a6c58._.js} +2 -2
  64. package/dist/server/.next/server/chunks/{[root-of-the-server]__978c4dda._.js.map → [root-of-the-server]__9f7a6c58._.js.map} +1 -1
  65. package/dist/server/.next/server/chunks/{[root-of-the-server]__978c4dda._.js → [root-of-the-server]__ac6efee1._.js} +2 -2
  66. package/dist/server/.next/server/chunks/{[root-of-the-server]__bc84f5d7._.js.map → [root-of-the-server]__ac6efee1._.js.map} +1 -1
  67. package/dist/server/.next/server/chunks/_24087f66._.js +1 -1
  68. package/dist/server/.next/server/chunks/_24087f66._.js.map +1 -1
  69. package/dist/server/.next/server/chunks/_61c263b3._.js +1 -1
  70. package/dist/server/.next/server/chunks/_61c263b3._.js.map +1 -1
  71. package/dist/server/.next/server/chunks/_f35a5421._.js +3 -0
  72. package/dist/server/.next/server/chunks/_f35a5421._.js.map +1 -0
  73. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js +1 -1
  74. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js.map +1 -1
  75. package/dist/server/.next/server/middleware-build-manifest.js +4 -4
  76. package/dist/server/.next/server/pages/404.html +1 -1
  77. package/dist/server/.next/server/pages/500.html +1 -1
  78. package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
  79. package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
  80. package/dist/server/.next/static/chunks/{2693a47bbc4fc75c.js → 0a55e0a2ff3b09e0.js} +1 -1
  81. package/dist/server/.next/static/chunks/13acbe5989647429.js +3 -0
  82. package/dist/server/.next/static/chunks/{352f266165580042.js → 6803a56f8e33c487.js} +2 -2
  83. package/dist/server/.next/static/chunks/{ac48e758a0b74c2b.js → 8f80ca1e88635b12.js} +1 -1
  84. package/dist/server/.next/static/chunks/{263bfd9c535a6eda.js.map → acb330991f8ec5eb.js.map} +1 -1
  85. package/dist/server/.next/static/chunks/f5014a46b22ea191.js.map +1 -0
  86. package/dist/server/.next/static/chunks/pages/_app.js +2 -2
  87. package/dist/server/.next/static/chunks/pages/_error.js +2 -2
  88. package/dist/server/.next/trace +2 -1
  89. package/package.json +1 -1
  90. package/dist/server/.next/static/chunks/67cde2756fdf3a91.js +0 -3
  91. package/dist/server/.next/static/chunks/c198f02ea70fda25.js.map +0 -1
  92. /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_buildManifest.js +0 -0
  93. /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_clientMiddlewareManifest.json +0 -0
  94. /package/dist/server/.next/static/{TxLJ_6S5QAvwM1pkwjUrZ → FFQIKXlgcLTQYLDJOFtvJ}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["turbopack:///[project]/packages/server/src/app/api/uat-git-flow/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\nimport { getProjectsConfig } from '@/lib/workspace-config';\nimport { sanitizeProjectName } from '@/lib/git-operations';\nimport { createUatGitFlowState, clearUatGitFlowState, isUatGitFlowAborted } from './state';\nimport {\n appendIgnoredPathsFromCheckoutWarning,\n hasBlockingWorkspaceChanges,\n} from './git-status-utils';\nimport { cleanupTempExecutionRepo, createTempExecutionRepo } from './temp-repo';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nconst invalidBranchChars = /\\\\s/;\n\nfunction isValidBranchName(name: string) {\n if (!name) return false;\n if (invalidBranchChars.test(name)) return false;\n if (name.startsWith('-')) return false;\n return true;\n}\n\nfunction runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe']\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\nfunction formatCommand(args: string[]) {\n return `git ${args.join(' ')}`;\n}\n\ntype GitProjectInfo = {\n originalBranch: string;\n createdLocalBranch: boolean;\n hadLocalBranch: boolean;\n ignoredUntrackedPaths: Set<string>;\n};\n\nfunction sanitizeLogValue(value: string) {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction logCommandResult(operationLogs: string[], projectName: string, step: string, result: GitResult) {\n if (result.code === 0) {\n operationLogs.push(`[${projectName}] 完成: ${step}`);\n } else {\n operationLogs.push(`[${projectName}] 失败: ${step} ${result.stderr || result.stdout}`);\n }\n}\n\nfunction trackCheckoutWarnings(\n operationLogs: string[],\n projectName: string,\n projectInfo: GitProjectInfo,\n result: GitResult,\n) {\n const addedPaths = appendIgnoredPathsFromCheckoutWarning(result.stderr, projectInfo.ignoredUntrackedPaths);\n if (addedPaths.length > 0) {\n operationLogs.push(`[${projectName}] 提示: 检测到子模块残留目录 ${addedPaths.join(', ')},状态检查将忽略对应未跟踪路径`);\n }\n}\n\nexport async function POST(request: NextRequest) {\n let activeRunId = '';\n const tempRootPaths = new Set<string>();\n try {\n const body = await request.json();\n const projects = Array.isArray(body.projects) ? body.projects : [];\n const createBranch = typeof body.createBranch === 'string' ? body.createBranch.trim() : '';\n const baseBranch = typeof body.baseBranch === 'string' ? body.baseBranch.trim() : '';\n const mergeBranch = typeof body.mergeBranch === 'string' ? body.mergeBranch.trim() : '';\n const dryRun = Boolean(body.dryRun);\n const runId = typeof body.runId === 'string' ? body.runId : '';\n\n const operationLogs: string[] = [];\n const feedbacks: string[] = [];\n const projectResults: Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }> = [];\n const resultMap = new Map<string, { success: boolean; reason?: string; rollbackActions?: string[] }>();\n const setProjectResult = (\n projectName: string,\n success: boolean,\n reason?: string,\n rollbackActions?: string[]\n ) => {\n if (resultMap.has(projectName)) {\n return;\n }\n resultMap.set(projectName, { success, reason, rollbackActions });\n projectResults.push({ projectName, success, reason, rollbackActions });\n };\n const rollbackProject = async (projectName: string, projectPath: string, info: GitProjectInfo) => {\n const actions: string[] = [];\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n const command = formatCommand(['checkout', info.originalBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, projectName, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n actions.push(command);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n const command = formatCommand(['branch', '-D', createBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, projectName, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n actions.push(command);\n }\n\n return actions;\n };\n\n if (projects.length === 0 || !createBranch || !baseBranch || !mergeBranch) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少必要参数,请填写完整后重试。'],\n }, { status: 400 });\n }\n\n if (!isValidBranchName(createBranch) || !isValidBranchName(baseBranch) || !isValidBranchName(mergeBranch)) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['分支名称不合法,请避免空格或以 - 开头。'],\n }, { status: 400 });\n }\n\n if (!runId) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少 runId,请刷新页面后重试。'],\n }, { status: 400 });\n }\n\n createUatGitFlowState(runId);\n activeRunId = runId;\n\n const projectsConfig = await getProjectsConfig();\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n const touchedProjects: Array<{ name: string; path: string; info: GitProjectInfo }> = [];\n\n const checkAbort = () => isUatGitFlowAborted(runId);\n\n for (const rawProjectName of projects) {\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n const originalName = String(rawProjectName);\n const projectName = sanitizeProjectName(originalName);\n\n if (!projectName || projectName !== originalName) {\n operationLogs.push(`[${originalName}] 失败: 项目名称包含无效字符`);\n feedbacks.push(`[${originalName}] 项目名称包含无效字符,已跳过。`);\n setProjectResult(originalName, false, '项目名称包含无效字符');\n continue;\n }\n\n if (!projectsConfig[projectName]) {\n operationLogs.push(`[${projectName}] 失败: 未在项目配置中找到`);\n feedbacks.push(`[${projectName}] 未在项目配置中找到,已跳过。`);\n setProjectResult(projectName, false, '未在项目配置中找到');\n continue;\n }\n\n const projectPath = join(workspacePath, projectName);\n if (!existsSync(projectPath)) {\n operationLogs.push(`[${projectName}] 失败: 项目目录不存在`);\n feedbacks.push(`[${projectName}] 项目目录不存在,已跳过。`);\n setProjectResult(projectName, false, '项目目录不存在');\n continue;\n }\n\n if (!existsSync(join(projectPath, '.git'))) {\n operationLogs.push(`[${projectName}] 失败: 非 Git 仓库`);\n feedbacks.push(`[${projectName}] 不是有效的 Git 仓库,已跳过。`);\n setProjectResult(projectName, false, '不是有效的 Git 仓库');\n continue;\n }\n\n if (dryRun) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', 'main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', 'main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', 'main'])}`);\n continue;\n }\n\n const tempRepoResult = await createTempExecutionRepo(projectPath, projectName);\n if (!tempRepoResult.success) {\n operationLogs.push(`[${projectName}] 失败: 创建临时执行仓库失败 ${tempRepoResult.error}`);\n feedbacks.push(`[${projectName}] 创建临时执行仓库失败: ${tempRepoResult.error}`);\n setProjectResult(projectName, false, '创建临时执行仓库失败');\n continue;\n }\n\n const executionPath = tempRepoResult.value.projectPath;\n tempRootPaths.add(tempRepoResult.value.tempRootPath);\n operationLogs.push(`[${projectName}] 使用临时目录执行: ${executionPath}`);\n\n operationLogs.push(`[${projectName}] 检查当前分支`);\n const currentBranchResult = await runGitCommand(executionPath, ['branch', '--show-current']);\n logCommandResult(operationLogs, projectName, '当前分支检查', currentBranchResult);\n const originalBranch = sanitizeLogValue(currentBranchResult.stdout) || 'HEAD';\n const projectInfo: GitProjectInfo = {\n originalBranch,\n createdLocalBranch: false,\n hadLocalBranch: true,\n ignoredUntrackedPaths: new Set<string>(),\n };\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchResult = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchResult);\n if (fetchResult.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchResult.stderr || fetchResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n const baseExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', baseBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${baseBranch}`, baseExists);\n if (!baseExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${baseBranch} 不存在,无法创建分支。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${baseBranch} 不存在`, rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n const remoteCreateExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `检查远端分支 ${createBranch}`, remoteCreateExists);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n const localCreateExists = await runGitCommand(executionPath, ['show-ref', '--verify', `refs/heads/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `检查本地分支 ${createBranch}`, localCreateExists);\n\n if (localCreateExists.code === 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const checkoutLocal = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到本地分支 ${createBranch}`, checkoutLocal);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutLocal);\n if (checkoutLocal.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到本地分支失败: ${checkoutLocal.stderr || checkoutLocal.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到本地分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchLocalBranch = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchLocalBranch);\n if (fetchLocalBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchLocalBranch.stderr || fetchLocalBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n } else {\n projectInfo.hadLocalBranch = false;\n if (remoteCreateExists.stdout.trim()) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${createBranch}`])}`);\n const checkoutRemote = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `切换到远端分支 ${createBranch}`, checkoutRemote);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutRemote);\n if (checkoutRemote.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到已有远端分支失败: ${checkoutRemote.stderr || checkoutRemote.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到已有远端分支失败', rollbackActions);\n continue;\n }\n } else {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n const createResult = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${baseBranch}`]);\n logCommandResult(operationLogs, projectName, `创建分支 ${createBranch}`, createResult);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, createResult);\n if (createResult.code !== 0) {\n feedbacks.push(`[${projectName}] 创建分支失败: ${createResult.stderr || createResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '创建分支失败', rollbackActions);\n continue;\n }\n projectInfo.createdLocalBranch = true;\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n const pushResult = await runGitCommand(executionPath, ['push', '-u', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送分支 ${createBranch}`, pushResult);\n if (pushResult.code !== 0) {\n feedbacks.push(`[${projectName}] 推送新分支失败: ${pushResult.stderr || pushResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送新分支失败', rollbackActions);\n continue;\n }\n }\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n const mergeExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', mergeBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${mergeBranch}`, mergeExists);\n if (!mergeExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${mergeBranch} 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${mergeBranch} 不存在`, rollbackActions);\n continue;\n }\n\n touchedProjects.push({ name: projectName, path: executionPath, info: projectInfo });\n\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusResult = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusResult);\n if (hasBlockingWorkspaceChanges(statusResult.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再执行合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const ensureBranch = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到分支 ${createBranch}`, ensureBranch);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, ensureBranch);\n if (ensureBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到分支失败: ${ensureBranch.stderr || ensureBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n const mergeResult = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${mergeBranch}`, mergeResult);\n if (mergeResult.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortResult = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, '终止合并', abortResult);\n feedbacks.push(`[${projectName}] 合并冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '合并冲突', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n const pushMerge = await runGitCommand(executionPath, ['push', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送合并结果 ${createBranch}`, pushMerge);\n if (pushMerge.code !== 0) {\n feedbacks.push(`[${projectName}] 推送合并结果失败: ${pushMerge.stderr || pushMerge.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送合并结果失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchMain = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchMain);\n if (fetchMain.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchMain.stderr || fetchMain.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', 'main'])}`);\n const mainExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', 'main']);\n logCommandResult(operationLogs, projectName, '检查 origin/main', mainExists);\n if (!mainExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/main 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, 'origin/main 不存在', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusMain = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusMain);\n if (hasBlockingWorkspaceChanges(statusMain.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再合并 main。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', 'main'])}`);\n const checkoutMain = await runGitCommand(executionPath, ['checkout', 'main']);\n logCommandResult(operationLogs, projectName, '切换到 main', checkoutMain);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutMain);\n if (checkoutMain.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到 main 失败: ${checkoutMain.stderr || checkoutMain.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到 main 失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n const mergeIntoMain = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${createBranch} 到 main`, mergeIntoMain);\n if (mergeIntoMain.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortMain = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, '终止合并到 main', abortMain);\n feedbacks.push(`[${projectName}] 合并到 main 冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '合并到 main 冲突', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', 'main'])}`);\n const pushMain = await runGitCommand(executionPath, ['push', 'origin', 'main']);\n logCommandResult(operationLogs, projectName, '推送 main', pushMain);\n if (pushMain.code !== 0) {\n feedbacks.push(`[${projectName}] 推送 main 失败: ${pushMain.stderr || pushMain.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送 main 失败', rollbackActions);\n continue;\n }\n\n setProjectResult(projectName, true);\n }\n\n if (isUatGitFlowAborted(runId)) {\n for (const touched of touchedProjects.reverse()) {\n const { name, path, info } = touched;\n const projectPath = path;\n\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['checkout', info.originalBranch])}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, name, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['branch', '-D', createBranch])}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, name, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n }\n }\n }\n\n return NextResponse.json({\n success: feedbacks.length === 0,\n operationLogs,\n feedbacks,\n projectResults,\n });\n } catch (error) {\n console.error('UAT git 操作流执行失败:', error);\n return NextResponse.json({\n success: false,\n operationLogs: [],\n feedbacks: [error instanceof Error ? error.message : '执行失败'],\n }, { status: 500 });\n } finally {\n for (const tempRootPath of tempRootPaths) {\n try {\n await cleanupTempExecutionRepo(tempRootPath);\n } catch (cleanupError) {\n console.error(`清理临时目录失败: ${tempRootPath}`, cleanupError);\n }\n }\n\n if (activeRunId) {\n clearUatGitFlowState(activeRunId);\n }\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"iFAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAIA,EAAA,EAAA,CAAA,CAAA,OAQA,IAAM,EAAqB,MAE3B,SAAS,EAAkB,CAAY,UACjC,CAAC,GACD,EAAmB,CADZ,GACgB,CAAC,GADV,CAEd,EAAK,CAD0B,OAAO,EACvB,CAAC,KAEtB,CAF4B,AAI5B,OAJmC,EAI1B,EAAc,CAAW,CAAE,CAAc,EAChD,OAAO,IAAI,QAAQ,CAAC,EAAS,KAC3B,IAAM,EAAQ,CAAA,EAAA,EAAA,KAAI,AAAJ,EAAM,MAAO,EAAM,KAC/B,EACA,MAAO,CAAC,OAFI,EAEM,OAAQ,OAC5B,AADmC,GAG/B,EAAS,GACT,EAAS,GAEb,EAAM,MAAM,EAAE,GAAG,OAAQ,AAAC,IACxB,GAAU,EAAK,QAAQ,EACzB,GAEA,EAAM,MAAM,EAAE,GAAG,OAAQ,AAAC,IACxB,GAAU,EAAK,QAAQ,EACzB,GAEA,EAAM,EAAE,CAAC,QAAS,AAAC,IACjB,EAAQ,MAAE,SAAM,EAAQ,QAAO,EACjC,GAEA,EAAM,EAAE,CAAC,QAAS,AAAC,IACjB,EAAO,EACT,EACF,EACF,CAEA,SAAS,EAAc,CAAc,EACnC,MAAO,CAAC,IAAI,EAAE,EAAK,IAAI,CAAC,KAAA,CAAM,AAChC,CAaA,SAAS,EAAiB,CAAuB,CAAE,CAAmB,CAAE,CAAY,CAAE,CAAiB,EACjG,AAAgB,GAAG,GAAZ,IAAI,CACb,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAM,EAEjD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAK,CAAC,EAAE,EAAO,MAAM,EAAI,EAAO,MAAM,CAAA,CAAE,CAEvF,CAEA,SAAS,EACP,CAAuB,CACvB,CAAmB,CACnB,CAA2B,CAC3B,CAAiB,EAEjB,IAAM,EAAa,GAAA,EAAA,oCAAA,CAAA,AAAoC,EAAE,EAAO,MAAM,CAAE,EAAY,qBAAqB,EACrG,EAAW,MAAM,CAAG,GAAG,AACzB,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,iBAAiB,EAAE,EAAW,IAAI,CAAC,MAAM,eAAe,CAAC,CAEhG,CAEO,eAAe,EAAK,CAAoB,EAC7C,IAAI,EAAc,GACZ,EAAgB,IAAI,IAC1B,GAAI,CACF,IAAM,EAAO,MAAM,EAAQ,IAAI,GACzB,EAAW,MAAM,OAAO,CAAC,EAAK,QAAQ,EAAI,EAAK,QAAQ,CAAG,EAAE,CAC5D,EAAe,AAA6B,iBAAtB,EAAK,YAAY,CAAgB,EAAK,YAAY,CAAC,IAAI,GAAK,GAClF,EAAwC,UAA3B,OAAO,EAAK,UAAU,CAAgB,EAAK,UAAU,CAAC,IAAI,GAAK,GAC5E,EAA0C,UAA5B,OAAO,EAAK,WAAW,CAAgB,EAAK,WAAW,CAAC,IAAI,GAAK,GAC/E,GAAS,CAAQ,EAAK,MAAM,CAC5B,EAA8B,UAAtB,OAAO,EAAK,KAAK,CAAgB,EAAK,KAAK,CAAG,GAEtD,EAA0B,EAAE,CAC5B,EAAsB,EAAE,CACxB,EAKD,EAAE,CACD,EAAY,IAAI,IAChB,EAAmB,CACvB,EACA,EACA,EACA,KAEI,EAAU,GAAG,CAAC,KAGlB,EAAU,GAAG,CAAC,EAAa,CAHK,AAGH,iBAAS,EAAQ,iBAAgB,GAC9D,EAAe,IAAI,CAAC,aAAE,UAAa,EAAS,yBAAQ,CAAgB,GACtE,EACM,EAAkB,MAAO,EAAqB,EAAqB,KACvE,IAAM,EAAoB,EAAE,CAC5B,GAAI,EAAK,cAAc,EAA4B,SAAxB,EAAK,cAAc,CAAa,CACzD,IAAM,EAAU,EAAc,CAAC,WAAY,EAAK,cAAc,CAAC,EAC/D,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAS,EACpD,IAAM,EAAmB,MAAM,EAAc,EAAa,CAAC,WAAY,EAAK,cAAc,CAAC,EAC3F,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAK,cAAc,CAAA,CAAE,CAAE,GAC9E,EAAQ,IAAI,CAAC,EACf,CAEA,GAAI,EAAK,kBAAkB,EAAI,CAAC,EAAK,cAAc,CAAE,CACnD,IAAM,EAAU,EAAc,CAAC,SAAU,KAAM,EAAa,EAC5D,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAS,EACpD,IAAM,EAAiB,MAAM,EAAc,EAAa,CAAC,SAAU,KAAM,EAAa,EACtF,EAAiB,EAAe,EAAa,CAAC,SAAS,EAAE,EAAA,CAAc,CAAE,GACzE,EAAQ,IAAI,CAAC,EACf,CAEA,OAAO,CACT,EAEA,GAAwB,IAApB,EAAS,MAAM,EAAU,CAAC,GAAgB,CAAC,GAAc,CAAC,EAC5D,OAAO,EAAA,EADkE,UACtD,CAAC,IAAI,CAAC,CACvB,SAAS,QADJ,QAEL,EACA,UAAW,CAAC,mBACd,AADiC,EAC9B,CAAE,OAAQ,GAAI,GAGnB,GAAI,CAAC,EAAkB,IAAiB,CAAC,EAAkB,IAAe,CAAC,EAAkB,GAC3F,OAAO,EAAA,EADkG,UACtF,CAAC,IAAI,CAAC,CACvB,SAAS,QADJ,QAEL,EACA,UAAW,CAAC,wBAAwB,AACtC,EAAG,CAAE,OAAQ,GAAI,GAGnB,GAAI,CAAC,EACH,KADU,EACH,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,SAAS,EACT,MAFK,UAGL,UAAW,CAAC,qBACd,AADmC,EAChC,CAAE,OAAQ,GAAI,GAGnB,CAAA,EAAA,EAAA,qBAAA,AAAoB,EAAE,GACtB,EAAc,EAEd,IAAM,EAHN,AAGuB,MAAM,CAAA,EAAA,EAAA,iBAAA,AAAgB,IACvC,EAAgB,EAAA,WADO,KACS,CAAC,cAAc,CAC/C,EAA+E,EAD/D,AACiE,CAEjF,EAAa,IAAM,CAAA,EAAA,EAAA,mBAAA,AAAkB,EAAE,GAE7C,IAAK,IAAM,IAFc,CAEI,EAAU,CACrC,GAAI,IAAc,CAChB,EAAU,IAAI,CAAC,yBACf,KACF,CAEA,IAAM,EAAe,OAAO,GACtB,EAAc,CAAA,EAAA,EAAA,mBAAA,AAAkB,EAAE,GAExC,GAAI,CAAC,GAAe,IAAgB,CAFhB,CAE8B,CAChD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAa,gBAAgB,CAAC,EACrD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAa,iBAAiB,CAAC,EAClD,EAAiB,GAAc,EAAO,cACtC,QACF,CAEA,GAAI,CAAC,CAAc,CAAC,EAAY,CAAE,CAChC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,eAAe,CAAC,EACnD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,gBAAgB,CAAC,EAChD,EAAiB,GAAa,EAAO,aACrC,QACF,CAEA,IAAM,EAAc,CAAA,EAAA,EAAA,IAAA,AAAG,EAAE,EAAe,GACxC,GAAI,CAAC,GAAA,EAAA,UAAA,AAAS,EAAE,GAAc,CADV,AAElB,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,OADhC,MAC6C,CAAC,EACjD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,cAAc,CAAC,EAC9C,EAAiB,GAAa,EAAO,WACrC,QACF,CAEA,GAAI,CAAC,GAAA,EAAA,UAAA,AAAS,EAAE,CAAA,EAAA,EAAA,IAAA,AAAG,EAAE,EAAa,SAAU,CAC1C,CADG,CACW,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,KADrB,SACmC,CAAC,EAClD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,mBAAmB,CAAC,EACnD,EAAiB,EAAa,GAAO,gBACrC,QACF,CAEA,GAAI,EAAQ,CACV,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAW,EAAA,CAAG,EACtG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAC9G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAAA,CAAG,EAChH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,KAAM,SAAU,EAAa,EAAA,CAAG,EAC9F,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAY,EAAA,CAAG,EACvG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAAA,CAAG,EAClH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EACxF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,OAAO,EAAA,CAAG,EAC5E,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,OAAO,EAAA,CAAG,EAClG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EACnH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,OAAO,EAAA,CAAG,EAClF,QACF,CAEA,IAAM,EAAiB,MAAM,CAAA,EAAA,EAAA,uBAAA,AAAsB,EAAE,EAAa,GAClE,GAAI,CAAC,EADwB,AACT,OAAO,CAAE,CAC3B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,iBAAiB,EAAE,EAAe,KAAK,CAAA,CAAE,EAC5E,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,cAAc,EAAE,EAAe,KAAK,CAAA,CAAE,EACrE,EAAiB,GAAa,EAAO,cACrC,QACF,CAEA,IAAM,EAAgB,EAAe,KAAK,CAAC,WAAW,CACtD,EAAc,GAAG,CAAC,EAAe,KAAK,CAAC,YAAY,EACnD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,YAAY,EAAE,EAAA,CAAe,EAEhE,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,QAAQ,CAAC,EAC5C,IAAM,EAAsB,MAAM,EAAc,EAAe,CAAC,SAAU,iBAAiB,EAC3F,EAAiB,EAAe,EAAa,SAAU,GAEvD,IAAM,EAA8B,CAClC,eAFqB,AAAiB,AAxLrC,EAwLyD,MAAM,CAxLzD,OAAO,CAAC,OAAQ,KAAK,IAAI,IAwLqC,OAGrE,oBAAoB,EACpB,gBAAgB,EAChB,sBAAuB,IAAI,GAC7B,EAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAE1E,GADA,EAAiB,EAAe,EAAa,OAAQ,GAC5B,IAArB,EAAY,IAAI,CAAQ,CAC1B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAY,MAAM,EAAI,EAAY,MAAM,CAAA,CAAE,EACrF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAW,EAAA,CAAG,EACtG,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAW,EAEpG,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAY,CAAE,GACpE,CAAC,EAAW,MAAM,CAAC,IAAI,GAAI,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,SAAS,EAAE,EAAW,YAAY,CAAC,EAClE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,OAAO,EAAE,EAAW,IAAI,CAAC,CAAE,GACjE,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,IAAM,EAAqB,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAa,EAC9G,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GACvE,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAC9G,IAAM,EAAoB,MAAM,EAAc,EAAe,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAGnH,GAFA,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GAExC,IAA3B,EAAkB,IAAI,CAAQ,CAChC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,IAAM,EAAgB,MAAM,EAAc,EAAe,CAAC,WAAY,EAAa,EAGnF,GAFA,EAAiB,EAAe,EAAa,CAAC,QAAQ,EAAE,EAAA,CAAc,CAAE,GACxE,EAAsB,EAAe,EAAa,EAAa,GACpC,IAAvB,EAAc,IAAI,CAAQ,CAC5B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,aAAa,EAAE,EAAc,MAAM,EAAI,EAAc,MAAM,CAAA,CAAE,EAC5F,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAmB,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAE/E,GADA,EAAiB,EAAe,EAAa,OAAQ,GACvB,IAA1B,EAAiB,IAAI,CAAQ,CAC/B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAiB,MAAM,EAAI,EAAiB,MAAM,CAAA,CAAE,EAC/F,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CACF,MAEE,CAFK,EACL,EAAY,cAAc,EAAG,EACzB,EAAmB,MAAM,CAAC,IAAI,GAAI,CACpC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAClH,IAAM,EAAiB,MAAM,EAAc,EAAe,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAGpH,GAFA,EAAiB,EAAe,EAAa,CAAC,QAAQ,EAAE,EAAA,CAAc,CAAE,GACxE,EAAsB,EAAe,EAAa,EAAa,GACnC,IAAxB,EAAe,IAAI,CAAQ,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,eAAe,EAAE,EAAe,MAAM,EAAI,EAAe,MAAM,CAAA,CAAE,EAChG,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,cAAe,GACpD,QACF,CACF,KAAO,CACL,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAAA,CAAG,EAChH,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAGhH,GAFA,EAAiB,EAAe,EAAa,CAAC,KAAK,EAAE,EAAA,CAAc,CAAE,GACrE,EAAsB,EAAe,EAAa,EAAa,GACrC,IAAtB,EAAa,IAAI,CAAQ,CAC3B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAa,MAAM,EAAI,EAAa,MAAM,CAAA,CAAE,EACvF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CACA,EAAY,kBAAkB,EAAG,EAEjC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,KAAM,SAAU,EAAa,EAAA,CAAG,EAC9F,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,OAAQ,KAAM,SAAU,EAAa,EAE5F,GADA,EAAiB,EAAe,EAAa,CAAC,KAAK,EAAE,EAAA,CAAc,CAAE,GAC7C,IAApB,EAAW,IAAI,CAAQ,CACzB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,WAAW,EAAE,EAAW,MAAM,EAAI,EAAW,MAAM,CAAA,CAAE,EACpF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,EAAa,GAAO,UAAW,GAChD,QACF,CACF,CAGF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAY,EAAA,CAAG,EACvG,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAY,EAEtG,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAa,CAAE,GACrE,CAAC,EAAY,MAAM,CAAC,IAAI,GAAI,CAC9B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,SAAS,EAAE,EAAY,UAAU,CAAC,EACjE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,OAAO,EAAE,EAAY,IAAI,CAAC,CAAE,GAClE,QACF,CAIA,GAFA,EAAgB,IAAI,CAAC,CAAE,KAAM,EAAa,KAAM,EAAe,KAAM,CAAY,GAE7E,IAAc,CAChB,EAAU,IAAI,CAAC,yBACf,KACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,SAAU,cAAe,wBAAwB,EAE1G,GADA,EAAiB,EAAe,EAAa,QAAS,GAClD,CAAA,EAAA,EAAA,2BAAA,AAA0B,EAAE,EAAa,KAAzC,CAA+C,CAAE,EAAY,qBAAqB,EAAG,CACvF,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,uBAAuB,CAAC,EACvD,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,WAAY,EAAa,EAGlF,GAFA,EAAiB,EAAe,EAAa,CAAC,MAAM,EAAE,EAAA,CAAc,CAAE,GACtE,EAAsB,EAAe,EAAa,EAAa,GACrC,AAAtB,MAAa,IAAI,CAAQ,CAC3B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,WAAW,EAAE,EAAa,MAAM,EAAI,EAAa,MAAM,CAAA,CAAE,EACxF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,UAAW,GAChD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAAA,CAAG,EAClH,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAEjH,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAa,CAAE,GAChD,AAArB,MAAY,IAAI,CAAQ,CAC1B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAU,EAAA,CAAG,EAC5E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,UAAU,EAC3E,EAAiB,EAAe,EAAa,OAAQ,GACrD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,mBAAmB,CAAC,EACnD,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,OAAQ,GAC7C,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EACxF,IAAM,EAAY,MAAM,EAAc,EAAe,CAAC,OAAQ,SAAU,EAAa,EAErF,GADA,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GAChD,IAAnB,EAAU,IAAI,CAAQ,CACxB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,YAAY,EAAE,EAAU,MAAM,EAAI,EAAU,MAAM,CAAA,CAAE,EACnF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,WAAY,GACjD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAY,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAExE,GADA,EAAiB,EAAe,EAAa,OAAQ,GAC9B,IAAnB,EAAU,IAAI,CAAQ,CACxB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAU,MAAM,EAAI,EAAU,MAAM,CAAA,CAAE,EACjF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,OAAO,EAAA,CAAG,EAClG,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,OAAO,EAEhG,GADA,EAAiB,EAAe,EAAa,iBAAkB,GAC3D,CAAC,EAAW,MAAM,CAAC,IAAI,GAAI,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,uBAAuB,CAAC,EACvD,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,kBAAmB,GACxD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,SAAU,cAAe,wBAAwB,EAExG,GADA,EAAiB,EAAe,EAAa,QAAS,GAClD,CAAA,EAAA,EAAA,2BAAA,AAA0B,EAAE,EAAW,KAAvC,CAA6C,CAAE,EAAY,qBAAqB,EAAG,CACrF,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,0BAA0B,CAAC,EAC1D,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,OAAO,EAAA,CAAG,EAC5E,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,WAAY,OAAO,EAG5E,GAFA,EAAiB,EAAe,EAAa,WAAY,GACzD,EAAsB,EAAe,EAAa,EAAa,GAC3D,AAAsB,MAAT,IAAI,CAAQ,CAC3B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,eAAe,EAAE,EAAa,MAAM,EAAI,EAAa,MAAM,CAAA,CAAE,EAC5F,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,cAAe,GACpD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EACnH,IAAM,EAAgB,MAAM,EAAc,EAAe,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAEpH,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAa,OAAO,CAAC,CAAE,GACtD,IAAvB,EAAc,IAAI,CAAQ,CAC5B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAU,EAAA,CAAG,EAC5E,IAAM,EAAY,MAAM,EAAc,EAAe,CAAC,QAAS,UAAU,EACzE,EAAiB,EAAe,EAAa,aAAc,GAC3D,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,0BAA0B,CAAC,EAC1D,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,cAAe,GACpD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,OAAO,EAAA,CAAG,EAClF,IAAM,EAAW,MAAM,EAAc,EAAe,CAAC,OAAQ,SAAU,OAAO,EAE9E,GADA,EAAiB,EAAe,EAAa,UAAW,GACpD,AAAkB,MAAT,IAAI,CAAQ,CACvB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,cAAc,EAAE,EAAS,MAAM,EAAI,EAAS,MAAM,CAAA,CAAE,EACnF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,aAAc,GACnD,QACF,CAEA,EAAiB,EAAa,GAChC,CAEA,GAAI,CAAA,EAAA,EAAA,mBAAA,AAAkB,EAAE,GACtB,IAAK,CADyB,GACnB,IADT,CACoB,EAAgB,OAAO,GAAI,CAC/C,GAAM,MAAE,CAAI,MAAE,CAAI,MAAE,CAAI,CAAE,CAAG,EAG7B,GAAI,EAAK,cAAc,EAA4B,SAAxB,EAAK,cAAc,CAAa,CACzD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAK,MAAM,EAAE,EAAc,CAAC,WAAY,EAAK,cAAc,CAAC,EAAA,CAAG,EACtF,IAAM,EAAmB,MAAM,IAA2B,CAAC,SAAd,EAA0B,EAAK,cAAc,CAAC,EAC3F,EAAiB,EAAe,EAAM,CAAC,OAAO,EAAE,EAAK,cAAc,CAAA,CAAE,CAAE,EACzE,CAEA,GAAI,EAAK,kBAAkB,EAAI,CAAC,EAAK,cAAc,CAAE,CACnD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAK,MAAM,EAAE,EAAc,CAAC,SAAU,KAAM,EAAa,EAAA,CAAG,EACnF,IAAM,EAAiB,MAAM,EAVX,EAUsC,CAAC,SAAd,AAAwB,KAAM,EAAa,EACtF,EAAiB,EAAe,EAAM,CAAC,SAAS,EAAE,EAAA,CAAc,CAAE,EACpE,CACF,CAGF,OAAO,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,QAA8B,IAArB,EAAU,GADd,GACoB,eACzB,YACA,iBACA,CACF,EACF,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,mBAAoB,GAC3B,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,SAAS,EACT,MAFK,QAEU,EAAE,CACjB,UAAW,CAAC,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAO,AAC9D,EAAG,CAAE,OAAQ,GAAI,EACnB,QAAU,CACR,IAAK,IAAM,KAAgB,EACzB,GAAI,CACF,MAAM,CAAA,CAFgC,CAEhC,EAAA,wBAAA,AAAuB,EAAE,EACjC,CAAE,MAAO,CADD,CACe,CACrB,QAAQ,KAAK,CAAC,CAAC,UAAU,EAAE,EAAA,CAAc,CAAE,EAC7C,CAGE,GACF,CAAA,EAAA,EAAA,KADe,eACf,AAAmB,EAAE,EAEzB,CACF,WAHM,qJCrgBN,IAAA,EAGO,EAAA,CAFLA,AAEK,CAAA,OACP,EAA0B,EAAyB,CAA1CC,AAA0C,CAAA,GAAA,EAH9B,EAIrB,CADkB,CAD2C,AAEnB,EAAA,CAAjCC,AAAiC,CAFnC,AAEmC,GADhB,CAC8C,GAExE,EAAwC,EAAA,CAAA,CAFjBC,AAEiB,EAA5BC,KAWZ,IAAMC,AAb4B,EAad,GAXM,CAWN,EAAIL,AAbkB,YAEF,OAWhBA,CAAoB,CAC1CM,WAAY,CACVC,KAAMN,EAAAA,SAAAA,CAAUO,SAAS,CACzBC,KAAM,0BACNC,SAAU,oBACVC,SAAU,QACVC,WAAY,EACd,EACAC,iBAAkB,8DAClBC,iBAXF,CAA0B,WAYxBV,CACF,GAKM,kBAAEW,CAAgB,sBAAEC,CAAoB,aAAEC,CAAW,CAAE,CAAGZ,EAEhE,SAASH,IACP,MAAA,CAAA,EAAA,EAAOC,UAAAA,EAAY,kBACjBY,uBACAC,CACF,EACF","ignoreList":[1]}
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/app/api/uat-git-flow/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\nimport { getProjectsConfig } from '@/lib/workspace-config';\nimport { sanitizeProjectName } from '@/lib/git-operations';\nimport { createUatGitFlowState, clearUatGitFlowState, isUatGitFlowAborted } from './state';\nimport {\n appendIgnoredPathsFromCheckoutWarning,\n hasBlockingWorkspaceChanges,\n} from './git-status-utils';\nimport { cleanupTempExecutionRepo, createTempExecutionRepo } from './temp-repo';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nconst invalidBranchChars = /\\\\s/;\nconst FIXED_BASE_BRANCH = 'main';\nconst FINAL_MERGE_TARGET_BRANCHES = ['main', 'fix/main'] as const;\n\nfunction isValidBranchName(name: string) {\n if (!name) return false;\n if (invalidBranchChars.test(name)) return false;\n if (name.startsWith('-')) return false;\n return true;\n}\n\nfunction runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe']\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\nfunction formatCommand(args: string[]) {\n return `git ${args.join(' ')}`;\n}\n\ntype GitProjectInfo = {\n originalBranch: string;\n createdLocalBranch: boolean;\n hadLocalBranch: boolean;\n ignoredUntrackedPaths: Set<string>;\n};\n\nfunction sanitizeLogValue(value: string) {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction logCommandResult(operationLogs: string[], projectName: string, step: string, result: GitResult) {\n if (result.code === 0) {\n operationLogs.push(`[${projectName}] 完成: ${step}`);\n } else {\n operationLogs.push(`[${projectName}] 失败: ${step} ${result.stderr || result.stdout}`);\n }\n}\n\nfunction trackCheckoutWarnings(\n operationLogs: string[],\n projectName: string,\n projectInfo: GitProjectInfo,\n result: GitResult,\n) {\n const addedPaths = appendIgnoredPathsFromCheckoutWarning(result.stderr, projectInfo.ignoredUntrackedPaths);\n if (addedPaths.length > 0) {\n operationLogs.push(`[${projectName}] 提示: 检测到子模块残留目录 ${addedPaths.join(', ')},状态检查将忽略对应未跟踪路径`);\n }\n}\n\nexport async function POST(request: NextRequest) {\n let activeRunId = '';\n const tempRootPaths = new Set<string>();\n try {\n const body = await request.json();\n const projects = Array.isArray(body.projects) ? body.projects : [];\n const createBranch = typeof body.createBranch === 'string' ? body.createBranch.trim() : '';\n const baseBranch = typeof body.baseBranch === 'string' ? body.baseBranch.trim() : '';\n const mergeBranch = typeof body.mergeBranch === 'string' ? body.mergeBranch.trim() : '';\n const dryRun = Boolean(body.dryRun);\n const runId = typeof body.runId === 'string' ? body.runId : '';\n\n const operationLogs: string[] = [];\n const feedbacks: string[] = [];\n const projectResults: Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }> = [];\n const resultMap = new Map<string, { success: boolean; reason?: string; rollbackActions?: string[] }>();\n const setProjectResult = (\n projectName: string,\n success: boolean,\n reason?: string,\n rollbackActions?: string[]\n ) => {\n if (resultMap.has(projectName)) {\n return;\n }\n resultMap.set(projectName, { success, reason, rollbackActions });\n projectResults.push({ projectName, success, reason, rollbackActions });\n };\n const rollbackProject = async (projectName: string, projectPath: string, info: GitProjectInfo) => {\n const actions: string[] = [];\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n const command = formatCommand(['checkout', info.originalBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, projectName, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n actions.push(command);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n const command = formatCommand(['branch', '-D', createBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, projectName, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n actions.push(command);\n }\n\n return actions;\n };\n\n if (projects.length === 0 || !createBranch || !baseBranch || !mergeBranch) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少必要参数,请填写完整后重试。'],\n }, { status: 400 });\n }\n\n if (baseBranch !== FIXED_BASE_BRANCH) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: [`UAT 操作流从 origin 分支创建固定为 ${FIXED_BASE_BRANCH}。`],\n }, { status: 400 });\n }\n\n if (!isValidBranchName(createBranch) || !isValidBranchName(baseBranch) || !isValidBranchName(mergeBranch)) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['分支名称不合法,请避免空格或以 - 开头。'],\n }, { status: 400 });\n }\n\n if (!runId) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少 runId,请刷新页面后重试。'],\n }, { status: 400 });\n }\n\n createUatGitFlowState(runId);\n activeRunId = runId;\n\n const projectsConfig = await getProjectsConfig();\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n const touchedProjects: Array<{ name: string; path: string; info: GitProjectInfo }> = [];\n\n const checkAbort = () => isUatGitFlowAborted(runId);\n\n projectLoop: for (const rawProjectName of projects) {\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n const originalName = String(rawProjectName);\n const projectName = sanitizeProjectName(originalName);\n\n if (!projectName || projectName !== originalName) {\n operationLogs.push(`[${originalName}] 失败: 项目名称包含无效字符`);\n feedbacks.push(`[${originalName}] 项目名称包含无效字符,已跳过。`);\n setProjectResult(originalName, false, '项目名称包含无效字符');\n continue;\n }\n\n if (!projectsConfig[projectName]) {\n operationLogs.push(`[${projectName}] 失败: 未在项目配置中找到`);\n feedbacks.push(`[${projectName}] 未在项目配置中找到,已跳过。`);\n setProjectResult(projectName, false, '未在项目配置中找到');\n continue;\n }\n\n const projectPath = join(workspacePath, projectName);\n if (!existsSync(projectPath)) {\n operationLogs.push(`[${projectName}] 失败: 项目目录不存在`);\n feedbacks.push(`[${projectName}] 项目目录不存在,已跳过。`);\n setProjectResult(projectName, false, '项目目录不存在');\n continue;\n }\n\n if (!existsSync(join(projectPath, '.git'))) {\n operationLogs.push(`[${projectName}] 失败: 非 Git 仓库`);\n feedbacks.push(`[${projectName}] 不是有效的 Git 仓库,已跳过。`);\n setProjectResult(projectName, false, '不是有效的 Git 仓库');\n continue;\n }\n\n if (dryRun) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', 'main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', 'main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', 'main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', 'fix/main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', 'fix/main'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', 'fix/main'])}`);\n continue;\n }\n\n const tempRepoResult = await createTempExecutionRepo(projectPath, projectName);\n if (!tempRepoResult.success) {\n operationLogs.push(`[${projectName}] 失败: 创建临时执行仓库失败 ${tempRepoResult.error}`);\n feedbacks.push(`[${projectName}] 创建临时执行仓库失败: ${tempRepoResult.error}`);\n setProjectResult(projectName, false, '创建临时执行仓库失败');\n continue;\n }\n\n const executionPath = tempRepoResult.value.projectPath;\n tempRootPaths.add(tempRepoResult.value.tempRootPath);\n operationLogs.push(`[${projectName}] 使用临时目录执行: ${executionPath}`);\n\n operationLogs.push(`[${projectName}] 检查当前分支`);\n const currentBranchResult = await runGitCommand(executionPath, ['branch', '--show-current']);\n logCommandResult(operationLogs, projectName, '当前分支检查', currentBranchResult);\n const originalBranch = sanitizeLogValue(currentBranchResult.stdout) || 'HEAD';\n const projectInfo: GitProjectInfo = {\n originalBranch,\n createdLocalBranch: false,\n hadLocalBranch: true,\n ignoredUntrackedPaths: new Set<string>(),\n };\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchResult = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchResult);\n if (fetchResult.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchResult.stderr || fetchResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n const baseExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', baseBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${baseBranch}`, baseExists);\n if (!baseExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${baseBranch} 不存在,无法创建分支。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${baseBranch} 不存在`, rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n const remoteCreateExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `检查远端分支 ${createBranch}`, remoteCreateExists);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n const localCreateExists = await runGitCommand(executionPath, ['show-ref', '--verify', `refs/heads/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `检查本地分支 ${createBranch}`, localCreateExists);\n\n if (localCreateExists.code === 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const checkoutLocal = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到本地分支 ${createBranch}`, checkoutLocal);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutLocal);\n if (checkoutLocal.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到本地分支失败: ${checkoutLocal.stderr || checkoutLocal.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到本地分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchLocalBranch = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchLocalBranch);\n if (fetchLocalBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchLocalBranch.stderr || fetchLocalBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n } else {\n projectInfo.hadLocalBranch = false;\n if (remoteCreateExists.stdout.trim()) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${createBranch}`])}`);\n const checkoutRemote = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `切换到远端分支 ${createBranch}`, checkoutRemote);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutRemote);\n if (checkoutRemote.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到已有远端分支失败: ${checkoutRemote.stderr || checkoutRemote.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到已有远端分支失败', rollbackActions);\n continue;\n }\n } else {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n const createResult = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${baseBranch}`]);\n logCommandResult(operationLogs, projectName, `创建分支 ${createBranch}`, createResult);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, createResult);\n if (createResult.code !== 0) {\n feedbacks.push(`[${projectName}] 创建分支失败: ${createResult.stderr || createResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '创建分支失败', rollbackActions);\n continue;\n }\n projectInfo.createdLocalBranch = true;\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n const pushResult = await runGitCommand(executionPath, ['push', '-u', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送分支 ${createBranch}`, pushResult);\n if (pushResult.code !== 0) {\n feedbacks.push(`[${projectName}] 推送新分支失败: ${pushResult.stderr || pushResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送新分支失败', rollbackActions);\n continue;\n }\n }\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n const mergeExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', mergeBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${mergeBranch}`, mergeExists);\n if (!mergeExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${mergeBranch} 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${mergeBranch} 不存在`, rollbackActions);\n continue;\n }\n\n touchedProjects.push({ name: projectName, path: executionPath, info: projectInfo });\n\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusResult = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusResult);\n if (hasBlockingWorkspaceChanges(statusResult.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再执行合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const ensureBranch = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到分支 ${createBranch}`, ensureBranch);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, ensureBranch);\n if (ensureBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到分支失败: ${ensureBranch.stderr || ensureBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n const mergeResult = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${mergeBranch}`, mergeResult);\n if (mergeResult.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortResult = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, '终止合并', abortResult);\n feedbacks.push(`[${projectName}] 合并冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '合并冲突', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n const pushMerge = await runGitCommand(executionPath, ['push', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送合并结果 ${createBranch}`, pushMerge);\n if (pushMerge.code !== 0) {\n feedbacks.push(`[${projectName}] 推送合并结果失败: ${pushMerge.stderr || pushMerge.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送合并结果失败', rollbackActions);\n continue;\n }\n\n for (const targetBranch of FINAL_MERGE_TARGET_BRANCHES) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchTarget = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchTarget);\n if (fetchTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchTarget.stderr || fetchTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', targetBranch])}`);\n const targetExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', targetBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${targetBranch}`, targetExists);\n if (!targetExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${targetBranch} 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${targetBranch} 不存在`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusTarget = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusTarget);\n if (hasBlockingWorkspaceChanges(statusTarget.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再合并 ${targetBranch}。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', targetBranch])}`);\n const checkoutTarget = await runGitCommand(executionPath, ['checkout', targetBranch]);\n logCommandResult(operationLogs, projectName, `切换到 ${targetBranch}`, checkoutTarget);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutTarget);\n if (checkoutTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到 ${targetBranch} 失败: ${checkoutTarget.stderr || checkoutTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `切换到 ${targetBranch} 失败`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n const mergeIntoTarget = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${createBranch} 到 ${targetBranch}`, mergeIntoTarget);\n if (mergeIntoTarget.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortTarget = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, `终止合并到 ${targetBranch}`, abortTarget);\n feedbacks.push(`[${projectName}] 合并到 ${targetBranch} 冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `合并到 ${targetBranch} 冲突`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', targetBranch])}`);\n const pushTarget = await runGitCommand(executionPath, ['push', 'origin', targetBranch]);\n logCommandResult(operationLogs, projectName, `推送 ${targetBranch}`, pushTarget);\n if (pushTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 推送 ${targetBranch} 失败: ${pushTarget.stderr || pushTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `推送 ${targetBranch} 失败`, rollbackActions);\n continue projectLoop;\n }\n }\n\n setProjectResult(projectName, true);\n }\n\n if (isUatGitFlowAborted(runId)) {\n for (const touched of touchedProjects.reverse()) {\n const { name, path, info } = touched;\n const projectPath = path;\n\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['checkout', info.originalBranch])}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, name, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['branch', '-D', createBranch])}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, name, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n }\n }\n }\n\n return NextResponse.json({\n success: feedbacks.length === 0,\n operationLogs,\n feedbacks,\n projectResults,\n });\n } catch (error) {\n console.error('UAT git 操作流执行失败:', error);\n return NextResponse.json({\n success: false,\n operationLogs: [],\n feedbacks: [error instanceof Error ? error.message : '执行失败'],\n }, { status: 500 });\n } finally {\n for (const tempRootPath of tempRootPaths) {\n try {\n await cleanupTempExecutionRepo(tempRootPath);\n } catch (cleanupError) {\n console.error(`清理临时目录失败: ${tempRootPath}`, cleanupError);\n }\n }\n\n if (activeRunId) {\n clearUatGitFlowState(activeRunId);\n }\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"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","ignoreList":[1]}
@@ -0,0 +1,3 @@
1
+ module.exports={6849:e=>{"use strict";var{g:t,__dirname:i}=e;{e.s({POST:()=>k});var r=e.i(15494),o=e.i(87485),s=e.i(83886),a=e.i(30331),n=e.i(88941),u=e.i(35692),c=e.i(77159),h=e.i(16829),$=e.i(34926),l=e.i(33808);let t=/\\s/,i=["GWH","fix/GWH"];function p(e){return!(!e||t.test(e)||e.startsWith("-"))}function d(e,t){return new Promise((i,r)=>{let s=(0,o.spawn)("git",t,{cwd:e,stdio:["ignore","pipe","pipe"]}),a="",n="";s.stdout?.on("data",e=>{a+=e.toString()}),s.stderr?.on("data",e=>{n+=e.toString()}),s.on("close",e=>{i({code:e,stdout:a,stderr:n})}),s.on("error",e=>{r(e)})})}function g(e){return`git ${e.join(" ")}`}function f(e,t,i,r){0===r.code?e.push(`[${t}] 完成: ${i}`):e.push(`[${t}] 失败: ${i} ${r.stderr||r.stdout}`)}function w(e,t,i,r){let o=(0,$.appendIgnoredPathsFromCheckoutWarning)(r.stderr,i.ignoredUntrackedPaths);o.length>0&&e.push(`[${t}] 提示: 检测到子模块残留目录 ${o.join(", ")},状态检查将忽略对应未跟踪路径`)}async function k(e){let t="",o=new Set;try{let k=await e.json(),m=Array.isArray(k.projects)?k.projects:[],B="string"==typeof k.createBranch?k.createBranch.trim():"",b="string"==typeof k.baseBranch?k.baseBranch.trim():"",y="string"==typeof k.mergeBranch?k.mergeBranch.trim():"",P=!!k.dryRun,j="string"==typeof k.runId?k.runId:"",R=[],G=[],S=[],v=new Map,x=(e,t,i,r)=>{v.has(e)||(v.set(e,{success:t,reason:i,rollbackActions:r}),S.push({projectName:e,success:t,reason:i,rollbackActions:r}))},A=async(e,t,i)=>{let r=[];if(i.originalBranch&&"HEAD"!==i.originalBranch){let o=g(["checkout",i.originalBranch]);R.push(`[${e}] 回滚: ${o}`);let s=await d(t,["checkout",i.originalBranch]);f(R,e,`回滚切换分支 ${i.originalBranch}`,s),r.push(o)}if(i.createdLocalBranch&&!i.hadLocalBranch){let i=g(["branch","-D",B]);R.push(`[${e}] 回滚: ${i}`);let o=await d(t,["branch","-D",B]);f(R,e,`回滚删除本地分支 ${B}`,o),r.push(i)}return r};if(0===m.length||!B||!b||!y)return r.NextResponse.json({success:!1,operationLogs:R,feedbacks:["缺少必要参数,请填写完整后重试。"]},{status:400});if("GWH"!==b)return r.NextResponse.json({success:!1,operationLogs:R,feedbacks:[`武汉协和版本操作流从 origin 分支创建固定为 GWH。`]},{status:400});if(!p(B)||!p(b)||!p(y))return r.NextResponse.json({success:!1,operationLogs:R,feedbacks:["分支名称不合法,请避免空格或以 - 开头。"]},{status:400});if(!j)return r.NextResponse.json({success:!1,operationLogs:R,feedbacks:["缺少 runId,请刷新页面后重试。"]},{status:400});(0,h.createGwhGitFlowState)(j),t=j;let W=await (0,u.getProjectsConfig)(),E=n.WORKSPACE_CONFIG.WORKSPACE_ROOT,L=[],C=()=>(0,h.isGwhGitFlowAborted)(j);e:for(let e of m){if(C()){G.push("已收到中断请求,开始回滚已执行的本地操作。");break}let t=String(e),r=(0,c.sanitizeProjectName)(t);if(!r||r!==t){R.push(`[${t}] 失败: 项目名称包含无效字符`),G.push(`[${t}] 项目名称包含无效字符,已跳过。`),x(t,!1,"项目名称包含无效字符");continue}if(!W[r]){R.push(`[${r}] 失败: 未在项目配置中找到`),G.push(`[${r}] 未在项目配置中找到,已跳过。`),x(r,!1,"未在项目配置中找到");continue}let n=(0,a.join)(E,r);if(!(0,s.existsSync)(n)){R.push(`[${r}] 失败: 项目目录不存在`),G.push(`[${r}] 项目目录不存在,已跳过。`),x(r,!1,"项目目录不存在");continue}if(!(0,s.existsSync)((0,a.join)(n,".git"))){R.push(`[${r}] 失败: 非 Git 仓库`),G.push(`[${r}] 不是有效的 Git 仓库,已跳过。`),x(r,!1,"不是有效的 Git 仓库");continue}if(P){for(let e of(R.push(`[${r}] ${g(["fetch","origin"])}`),R.push(`[${r}] ${g(["ls-remote","--heads","origin",b])}`),R.push(`[${r}] ${g(["ls-remote","--heads","origin",B])}`),R.push(`[${r}] ${g(["show-ref","--verify",`refs/heads/${B}`])}`),R.push(`[${r}] ${g(["checkout","-B",B,`origin/${b}`])}`),R.push(`[${r}] ${g(["push","-u","origin",B])}`),R.push(`[${r}] ${g(["ls-remote","--heads","origin",y])}`),R.push(`[${r}] ${g(["status","--porcelain","--untracked-files=all"])}`),R.push(`[${r}] ${g(["checkout",B])}`),R.push(`[${r}] ${g(["merge","--no-ff","--no-edit",`origin/${y}`])}`),R.push(`[${r}] ${g(["push","origin",B])}`),i))R.push(`[${r}] ${g(["fetch","origin"])}`),R.push(`[${r}] ${g(["ls-remote","--heads","origin",e])}`),R.push(`[${r}] ${g(["status","--porcelain","--untracked-files=all"])}`),R.push(`[${r}] ${g(["checkout",e])}`),R.push(`[${r}] ${g(["merge","--no-ff","--no-edit",`origin/${B}`])}`),R.push(`[${r}] ${g(["push","origin",e])}`);continue}let u=await (0,l.createTempExecutionRepo)(n,r);if(!u.success){R.push(`[${r}] 失败: 创建临时执行仓库失败 ${u.error}`),G.push(`[${r}] 创建临时执行仓库失败: ${u.error}`),x(r,!1,"创建临时执行仓库失败");continue}let h=u.value.projectPath;o.add(u.value.tempRootPath),R.push(`[${r}] 使用临时目录执行: ${h}`),R.push(`[${r}] 检查当前分支`);let p=await d(h,["branch","--show-current"]);f(R,r,"当前分支检查",p);let k={originalBranch:p.stdout.replace(/\s+/g," ").trim()||"HEAD",createdLocalBranch:!1,hadLocalBranch:!0,ignoredUntrackedPaths:new Set};R.push(`[${r}] ${g(["fetch","origin"])}`);let m=await d(h,["fetch","origin"]);if(f(R,r,"拉取远端",m),0!==m.code){G.push(`[${r}] 拉取远端失败: ${m.stderr||m.stdout}`);let e=await A(r,h,k);x(r,!1,"拉取远端失败",e);continue}R.push(`[${r}] ${g(["ls-remote","--heads","origin",b])}`);let j=await d(h,["ls-remote","--heads","origin",b]);if(f(R,r,`检查 origin/${b}`,j),!j.stdout.trim()){G.push(`[${r}] origin/${b} 不存在,无法创建分支。`);let e=await A(r,h,k);x(r,!1,`origin/${b} 不存在`,e);continue}R.push(`[${r}] ${g(["ls-remote","--heads","origin",B])}`);let S=await d(h,["ls-remote","--heads","origin",B]);f(R,r,`检查远端分支 ${B}`,S),R.push(`[${r}] ${g(["show-ref","--verify",`refs/heads/${B}`])}`);let v=await d(h,["show-ref","--verify",`refs/heads/${B}`]);if(f(R,r,`检查本地分支 ${B}`,v),0===v.code){R.push(`[${r}] ${g(["checkout",B])}`);let e=await d(h,["checkout",B]);if(f(R,r,`切换到本地分支 ${B}`,e),w(R,r,k,e),0!==e.code){G.push(`[${r}] 切换到本地分支失败: ${e.stderr||e.stdout}`);let t=await A(r,h,k);x(r,!1,"切换到本地分支失败",t);continue}R.push(`[${r}] ${g(["fetch","origin"])}`);let t=await d(h,["fetch","origin"]);if(f(R,r,"拉取远端",t),0!==t.code){G.push(`[${r}] 拉取远端失败: ${t.stderr||t.stdout}`);let e=await A(r,h,k);x(r,!1,"拉取远端失败",e);continue}}else if(k.hadLocalBranch=!1,S.stdout.trim()){R.push(`[${r}] ${g(["checkout","-B",B,`origin/${B}`])}`);let e=await d(h,["checkout","-B",B,`origin/${B}`]);if(f(R,r,`切换到远端分支 ${B}`,e),w(R,r,k,e),0!==e.code){G.push(`[${r}] 切换到已有远端分支失败: ${e.stderr||e.stdout}`);let t=await A(r,h,k);x(r,!1,"切换到已有远端分支失败",t);continue}}else{R.push(`[${r}] ${g(["checkout","-B",B,`origin/${b}`])}`);let e=await d(h,["checkout","-B",B,`origin/${b}`]);if(f(R,r,`创建分支 ${B}`,e),w(R,r,k,e),0!==e.code){G.push(`[${r}] 创建分支失败: ${e.stderr||e.stdout}`);let t=await A(r,h,k);x(r,!1,"创建分支失败",t);continue}k.createdLocalBranch=!0,R.push(`[${r}] ${g(["push","-u","origin",B])}`);let t=await d(h,["push","-u","origin",B]);if(f(R,r,`推送分支 ${B}`,t),0!==t.code){G.push(`[${r}] 推送新分支失败: ${t.stderr||t.stdout}`);let e=await A(r,h,k);x(r,!1,"推送新分支失败",e);continue}}R.push(`[${r}] ${g(["ls-remote","--heads","origin",y])}`);let F=await d(h,["ls-remote","--heads","origin",y]);if(f(R,r,`检查 origin/${y}`,F),!F.stdout.trim()){G.push(`[${r}] origin/${y} 不存在,无法合并。`);let e=await A(r,h,k);x(r,!1,`origin/${y} 不存在`,e);continue}if(L.push({name:r,path:h,info:k}),C()){G.push("已收到中断请求,开始回滚已执行的本地操作。");break}R.push(`[${r}] ${g(["status","--porcelain","--untracked-files=all"])}`);let H=await d(h,["status","--porcelain","--untracked-files=all"]);if(f(R,r,"检查工作区",H),(0,$.hasBlockingWorkspaceChanges)(H.stdout,k.ignoredUntrackedPaths)){G.push(`[${r}] 工作区有未提交改动,请先处理后再执行合并。`);let e=await A(r,h,k);x(r,!1,"工作区有未提交改动",e);continue}R.push(`[${r}] ${g(["checkout",B])}`);let N=await d(h,["checkout",B]);if(f(R,r,`切换到分支 ${B}`,N),w(R,r,k,N),0!==N.code){G.push(`[${r}] 切换到分支失败: ${N.stderr||N.stdout}`);let e=await A(r,h,k);x(r,!1,"切换到分支失败",e);continue}R.push(`[${r}] ${g(["merge","--no-ff","--no-edit",`origin/${y}`])}`);let O=await d(h,["merge","--no-ff","--no-edit",`origin/${y}`]);if(f(R,r,`合并 origin/${y}`,O),0!==O.code){R.push(`[${r}] ${g(["merge","--abort"])}`);let e=await d(h,["merge","--abort"]);f(R,r,"终止合并",e),G.push(`[${r}] 合并冲突,已终止合并,请手动处理。`);let t=await A(r,h,k);x(r,!1,"合并冲突",t);continue}R.push(`[${r}] ${g(["push","origin",B])}`);let D=await d(h,["push","origin",B]);if(f(R,r,`推送合并结果 ${B}`,D),0!==D.code){G.push(`[${r}] 推送合并结果失败: ${D.stderr||D.stdout}`);let e=await A(r,h,k);x(r,!1,"推送合并结果失败",e);continue}for(let e of i){R.push(`[${r}] ${g(["fetch","origin"])}`);let t=await d(h,["fetch","origin"]);if(f(R,r,"拉取远端",t),0!==t.code){G.push(`[${r}] 拉取远端失败: ${t.stderr||t.stdout}`);let e=await A(r,h,k);x(r,!1,"拉取远端失败",e);continue e}R.push(`[${r}] ${g(["ls-remote","--heads","origin",e])}`);let i=await d(h,["ls-remote","--heads","origin",e]);if(f(R,r,`检查 origin/${e}`,i),!i.stdout.trim()){G.push(`[${r}] origin/${e} 不存在,无法合并。`);let t=await A(r,h,k);x(r,!1,`origin/${e} 不存在`,t);continue e}R.push(`[${r}] ${g(["status","--porcelain","--untracked-files=all"])}`);let o=await d(h,["status","--porcelain","--untracked-files=all"]);if(f(R,r,"检查工作区",o),(0,$.hasBlockingWorkspaceChanges)(o.stdout,k.ignoredUntrackedPaths)){G.push(`[${r}] 工作区有未提交改动,请先处理后再合并 ${e}。`);let t=await A(r,h,k);x(r,!1,"工作区有未提交改动",t);continue e}R.push(`[${r}] ${g(["checkout",e])}`);let s=await d(h,["checkout",e]);if(f(R,r,`切换到 ${e}`,s),w(R,r,k,s),0!==s.code){G.push(`[${r}] 切换到 ${e} 失败: ${s.stderr||s.stdout}`);let t=await A(r,h,k);x(r,!1,`切换到 ${e} 失败`,t);continue e}R.push(`[${r}] ${g(["merge","--no-ff","--no-edit",`origin/${B}`])}`);let a=await d(h,["merge","--no-ff","--no-edit",`origin/${B}`]);if(f(R,r,`合并 origin/${B} 到 ${e}`,a),0!==a.code){R.push(`[${r}] ${g(["merge","--abort"])}`);let t=await d(h,["merge","--abort"]);f(R,r,`终止合并到 ${e}`,t),G.push(`[${r}] 合并到 ${e} 冲突,已终止合并,请手动处理。`);let i=await A(r,h,k);x(r,!1,`合并到 ${e} 冲突`,i);continue e}R.push(`[${r}] ${g(["push","origin",e])}`);let n=await d(h,["push","origin",e]);if(f(R,r,`推送 ${e}`,n),0!==n.code){G.push(`[${r}] 推送 ${e} 失败: ${n.stderr||n.stdout}`);let t=await A(r,h,k);x(r,!1,`推送 ${e} 失败`,t);continue e}}x(r,!0)}if((0,h.isGwhGitFlowAborted)(j))for(let e of L.reverse()){let{name:t,path:i,info:r}=e;if(r.originalBranch&&"HEAD"!==r.originalBranch){R.push(`[${t}] 回滚: ${g(["checkout",r.originalBranch])}`);let e=await d(i,["checkout",r.originalBranch]);f(R,t,`回滚切换分支 ${r.originalBranch}`,e)}if(r.createdLocalBranch&&!r.hadLocalBranch){R.push(`[${t}] 回滚: ${g(["branch","-D",B])}`);let e=await d(i,["branch","-D",B]);f(R,t,`回滚删除本地分支 ${B}`,e)}}return r.NextResponse.json({success:0===G.length,operationLogs:R,feedbacks:G,projectResults:S})}catch(e){return console.error("武汉协和版本 git 操作流执行失败:",e),r.NextResponse.json({success:!1,operationLogs:[],feedbacks:[e instanceof Error?e.message:"执行失败"]},{status:500})}finally{for(let e of o)try{await (0,l.cleanupTempExecutionRepo)(e)}catch(t){console.error(`清理临时目录失败: ${e}`,t)}t&&(0,h.clearGwhGitFlowState)(t)}}}},71834:e=>{"use strict";var{g:t,__dirname:i}=e;{e.s({patchFetch:()=>n,routeModule:()=>t,serverHooks:()=>c,workAsyncStorage:()=>i,workUnitAsyncStorage:()=>u});var r=e.i(45746),o=e.i(93828),s=e.i(18250),a=e.i(6849);let t=new r.AppRouteRouteModule({definition:{kind:o.RouteKind.APP_ROUTE,page:"/api/gwh-git-flow/route",pathname:"/api/gwh-git-flow",filename:"route",bundlePath:""},resolvedPagePath:"[project]/packages/server/src/app/api/gwh-git-flow/route.ts",nextConfigOutput:"",userland:a}),{workAsyncStorage:i,workUnitAsyncStorage:u,serverHooks:c}=t;function n(){return(0,s.patchFetch)({workAsyncStorage:i,workUnitAsyncStorage:u})}}}};
2
+
3
+ //# sourceMappingURL=_f35a5421._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/packages/server/src/app/api/gwh-git-flow/route.ts","turbopack:///[project]/node_modules/.pnpm/next@15.3.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/src/build/templates/app-route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport { spawn } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { WORKSPACE_CONFIG } from '@/lib/workspace-types';\nimport { getProjectsConfig } from '@/lib/workspace-config';\nimport { sanitizeProjectName } from '@/lib/git-operations';\nimport { createGwhGitFlowState, clearGwhGitFlowState, isGwhGitFlowAborted } from './state';\nimport {\n appendIgnoredPathsFromCheckoutWarning,\n hasBlockingWorkspaceChanges,\n} from '@/app/api/uat-git-flow/git-status-utils';\nimport { cleanupTempExecutionRepo, createTempExecutionRepo } from '@/app/api/uat-git-flow/temp-repo';\n\ntype GitResult = {\n code: number | null;\n stdout: string;\n stderr: string;\n};\n\nconst invalidBranchChars = /\\\\s/;\nconst FIXED_BASE_BRANCH = 'GWH';\nconst FINAL_MERGE_TARGET_BRANCHES = ['GWH', 'fix/GWH'] as const;\n\nfunction isValidBranchName(name: string) {\n if (!name) return false;\n if (invalidBranchChars.test(name)) return false;\n if (name.startsWith('-')) return false;\n return true;\n}\n\nfunction runGitCommand(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe']\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n resolve({ code, stdout, stderr });\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n });\n}\n\nfunction formatCommand(args: string[]) {\n return `git ${args.join(' ')}`;\n}\n\ntype GitProjectInfo = {\n originalBranch: string;\n createdLocalBranch: boolean;\n hadLocalBranch: boolean;\n ignoredUntrackedPaths: Set<string>;\n};\n\nfunction sanitizeLogValue(value: string) {\n return value.replace(/\\s+/g, ' ').trim();\n}\n\nfunction logCommandResult(operationLogs: string[], projectName: string, step: string, result: GitResult) {\n if (result.code === 0) {\n operationLogs.push(`[${projectName}] 完成: ${step}`);\n } else {\n operationLogs.push(`[${projectName}] 失败: ${step} ${result.stderr || result.stdout}`);\n }\n}\n\nfunction trackCheckoutWarnings(\n operationLogs: string[],\n projectName: string,\n projectInfo: GitProjectInfo,\n result: GitResult,\n) {\n const addedPaths = appendIgnoredPathsFromCheckoutWarning(result.stderr, projectInfo.ignoredUntrackedPaths);\n if (addedPaths.length > 0) {\n operationLogs.push(`[${projectName}] 提示: 检测到子模块残留目录 ${addedPaths.join(', ')},状态检查将忽略对应未跟踪路径`);\n }\n}\n\nexport async function POST(request: NextRequest) {\n let activeRunId = '';\n const tempRootPaths = new Set<string>();\n try {\n const body = await request.json();\n const projects = Array.isArray(body.projects) ? body.projects : [];\n const createBranch = typeof body.createBranch === 'string' ? body.createBranch.trim() : '';\n const baseBranch = typeof body.baseBranch === 'string' ? body.baseBranch.trim() : '';\n const mergeBranch = typeof body.mergeBranch === 'string' ? body.mergeBranch.trim() : '';\n const dryRun = Boolean(body.dryRun);\n const runId = typeof body.runId === 'string' ? body.runId : '';\n\n const operationLogs: string[] = [];\n const feedbacks: string[] = [];\n const projectResults: Array<{\n projectName: string;\n success: boolean;\n reason?: string;\n rollbackActions?: string[];\n }> = [];\n const resultMap = new Map<string, { success: boolean; reason?: string; rollbackActions?: string[] }>();\n const setProjectResult = (\n projectName: string,\n success: boolean,\n reason?: string,\n rollbackActions?: string[]\n ) => {\n if (resultMap.has(projectName)) {\n return;\n }\n resultMap.set(projectName, { success, reason, rollbackActions });\n projectResults.push({ projectName, success, reason, rollbackActions });\n };\n const rollbackProject = async (projectName: string, projectPath: string, info: GitProjectInfo) => {\n const actions: string[] = [];\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n const command = formatCommand(['checkout', info.originalBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, projectName, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n actions.push(command);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n const command = formatCommand(['branch', '-D', createBranch]);\n operationLogs.push(`[${projectName}] 回滚: ${command}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, projectName, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n actions.push(command);\n }\n\n return actions;\n };\n\n if (projects.length === 0 || !createBranch || !baseBranch || !mergeBranch) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少必要参数,请填写完整后重试。'],\n }, { status: 400 });\n }\n\n if (baseBranch !== FIXED_BASE_BRANCH) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: [`武汉协和版本操作流从 origin 分支创建固定为 ${FIXED_BASE_BRANCH}。`],\n }, { status: 400 });\n }\n\n if (!isValidBranchName(createBranch) || !isValidBranchName(baseBranch) || !isValidBranchName(mergeBranch)) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['分支名称不合法,请避免空格或以 - 开头。'],\n }, { status: 400 });\n }\n\n if (!runId) {\n return NextResponse.json({\n success: false,\n operationLogs,\n feedbacks: ['缺少 runId,请刷新页面后重试。'],\n }, { status: 400 });\n }\n\n createGwhGitFlowState(runId);\n activeRunId = runId;\n\n const projectsConfig = await getProjectsConfig();\n const workspacePath = WORKSPACE_CONFIG.WORKSPACE_ROOT;\n const touchedProjects: Array<{ name: string; path: string; info: GitProjectInfo }> = [];\n\n const checkAbort = () => isGwhGitFlowAborted(runId);\n\n projectLoop: for (const rawProjectName of projects) {\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n const originalName = String(rawProjectName);\n const projectName = sanitizeProjectName(originalName);\n\n if (!projectName || projectName !== originalName) {\n operationLogs.push(`[${originalName}] 失败: 项目名称包含无效字符`);\n feedbacks.push(`[${originalName}] 项目名称包含无效字符,已跳过。`);\n setProjectResult(originalName, false, '项目名称包含无效字符');\n continue;\n }\n\n if (!projectsConfig[projectName]) {\n operationLogs.push(`[${projectName}] 失败: 未在项目配置中找到`);\n feedbacks.push(`[${projectName}] 未在项目配置中找到,已跳过。`);\n setProjectResult(projectName, false, '未在项目配置中找到');\n continue;\n }\n\n const projectPath = join(workspacePath, projectName);\n if (!existsSync(projectPath)) {\n operationLogs.push(`[${projectName}] 失败: 项目目录不存在`);\n feedbacks.push(`[${projectName}] 项目目录不存在,已跳过。`);\n setProjectResult(projectName, false, '项目目录不存在');\n continue;\n }\n\n if (!existsSync(join(projectPath, '.git'))) {\n operationLogs.push(`[${projectName}] 失败: 非 Git 仓库`);\n feedbacks.push(`[${projectName}] 不是有效的 Git 仓库,已跳过。`);\n setProjectResult(projectName, false, '不是有效的 Git 仓库');\n continue;\n }\n\n if (dryRun) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n\n for (const targetBranch of FINAL_MERGE_TARGET_BRANCHES) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', targetBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', targetBranch])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', targetBranch])}`);\n }\n continue;\n }\n\n const tempRepoResult = await createTempExecutionRepo(projectPath, projectName);\n if (!tempRepoResult.success) {\n operationLogs.push(`[${projectName}] 失败: 创建临时执行仓库失败 ${tempRepoResult.error}`);\n feedbacks.push(`[${projectName}] 创建临时执行仓库失败: ${tempRepoResult.error}`);\n setProjectResult(projectName, false, '创建临时执行仓库失败');\n continue;\n }\n\n const executionPath = tempRepoResult.value.projectPath;\n tempRootPaths.add(tempRepoResult.value.tempRootPath);\n operationLogs.push(`[${projectName}] 使用临时目录执行: ${executionPath}`);\n\n operationLogs.push(`[${projectName}] 检查当前分支`);\n const currentBranchResult = await runGitCommand(executionPath, ['branch', '--show-current']);\n logCommandResult(operationLogs, projectName, '当前分支检查', currentBranchResult);\n const originalBranch = sanitizeLogValue(currentBranchResult.stdout) || 'HEAD';\n const projectInfo: GitProjectInfo = {\n originalBranch,\n createdLocalBranch: false,\n hadLocalBranch: true,\n ignoredUntrackedPaths: new Set<string>(),\n };\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchResult = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchResult);\n if (fetchResult.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchResult.stderr || fetchResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', baseBranch])}`);\n const baseExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', baseBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${baseBranch}`, baseExists);\n if (!baseExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${baseBranch} 不存在,无法创建分支。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${baseBranch} 不存在`, rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', createBranch])}`);\n const remoteCreateExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `检查远端分支 ${createBranch}`, remoteCreateExists);\n operationLogs.push(`[${projectName}] ${formatCommand(['show-ref', '--verify', `refs/heads/${createBranch}`])}`);\n const localCreateExists = await runGitCommand(executionPath, ['show-ref', '--verify', `refs/heads/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `检查本地分支 ${createBranch}`, localCreateExists);\n\n if (localCreateExists.code === 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const checkoutLocal = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到本地分支 ${createBranch}`, checkoutLocal);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutLocal);\n if (checkoutLocal.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到本地分支失败: ${checkoutLocal.stderr || checkoutLocal.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到本地分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchLocalBranch = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchLocalBranch);\n if (fetchLocalBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchLocalBranch.stderr || fetchLocalBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue;\n }\n } else {\n projectInfo.hadLocalBranch = false;\n if (remoteCreateExists.stdout.trim()) {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${createBranch}`])}`);\n const checkoutRemote = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `切换到远端分支 ${createBranch}`, checkoutRemote);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutRemote);\n if (checkoutRemote.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到已有远端分支失败: ${checkoutRemote.stderr || checkoutRemote.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到已有远端分支失败', rollbackActions);\n continue;\n }\n } else {\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', '-B', createBranch, `origin/${baseBranch}`])}`);\n const createResult = await runGitCommand(executionPath, ['checkout', '-B', createBranch, `origin/${baseBranch}`]);\n logCommandResult(operationLogs, projectName, `创建分支 ${createBranch}`, createResult);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, createResult);\n if (createResult.code !== 0) {\n feedbacks.push(`[${projectName}] 创建分支失败: ${createResult.stderr || createResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '创建分支失败', rollbackActions);\n continue;\n }\n projectInfo.createdLocalBranch = true;\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', '-u', 'origin', createBranch])}`);\n const pushResult = await runGitCommand(executionPath, ['push', '-u', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送分支 ${createBranch}`, pushResult);\n if (pushResult.code !== 0) {\n feedbacks.push(`[${projectName}] 推送新分支失败: ${pushResult.stderr || pushResult.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送新分支失败', rollbackActions);\n continue;\n }\n }\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', mergeBranch])}`);\n const mergeExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', mergeBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${mergeBranch}`, mergeExists);\n if (!mergeExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${mergeBranch} 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${mergeBranch} 不存在`, rollbackActions);\n continue;\n }\n\n touchedProjects.push({ name: projectName, path: executionPath, info: projectInfo });\n\n if (checkAbort()) {\n feedbacks.push('已收到中断请求,开始回滚已执行的本地操作。');\n break;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusResult = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusResult);\n if (hasBlockingWorkspaceChanges(statusResult.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再执行合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', createBranch])}`);\n const ensureBranch = await runGitCommand(executionPath, ['checkout', createBranch]);\n logCommandResult(operationLogs, projectName, `切换到分支 ${createBranch}`, ensureBranch);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, ensureBranch);\n if (ensureBranch.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到分支失败: ${ensureBranch.stderr || ensureBranch.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '切换到分支失败', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`])}`);\n const mergeResult = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${mergeBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${mergeBranch}`, mergeResult);\n if (mergeResult.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortResult = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, '终止合并', abortResult);\n feedbacks.push(`[${projectName}] 合并冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '合并冲突', rollbackActions);\n continue;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', createBranch])}`);\n const pushMerge = await runGitCommand(executionPath, ['push', 'origin', createBranch]);\n logCommandResult(operationLogs, projectName, `推送合并结果 ${createBranch}`, pushMerge);\n if (pushMerge.code !== 0) {\n feedbacks.push(`[${projectName}] 推送合并结果失败: ${pushMerge.stderr || pushMerge.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '推送合并结果失败', rollbackActions);\n continue;\n }\n\n for (const targetBranch of FINAL_MERGE_TARGET_BRANCHES) {\n operationLogs.push(`[${projectName}] ${formatCommand(['fetch', 'origin'])}`);\n const fetchTarget = await runGitCommand(executionPath, ['fetch', 'origin']);\n logCommandResult(operationLogs, projectName, '拉取远端', fetchTarget);\n if (fetchTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 拉取远端失败: ${fetchTarget.stderr || fetchTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '拉取远端失败', rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['ls-remote', '--heads', 'origin', targetBranch])}`);\n const targetExists = await runGitCommand(executionPath, ['ls-remote', '--heads', 'origin', targetBranch]);\n logCommandResult(operationLogs, projectName, `检查 origin/${targetBranch}`, targetExists);\n if (!targetExists.stdout.trim()) {\n feedbacks.push(`[${projectName}] origin/${targetBranch} 不存在,无法合并。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `origin/${targetBranch} 不存在`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['status', '--porcelain', '--untracked-files=all'])}`);\n const statusTarget = await runGitCommand(executionPath, ['status', '--porcelain', '--untracked-files=all']);\n logCommandResult(operationLogs, projectName, '检查工作区', statusTarget);\n if (hasBlockingWorkspaceChanges(statusTarget.stdout, projectInfo.ignoredUntrackedPaths)) {\n feedbacks.push(`[${projectName}] 工作区有未提交改动,请先处理后再合并 ${targetBranch}。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, '工作区有未提交改动', rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['checkout', targetBranch])}`);\n const checkoutTarget = await runGitCommand(executionPath, ['checkout', targetBranch]);\n logCommandResult(operationLogs, projectName, `切换到 ${targetBranch}`, checkoutTarget);\n trackCheckoutWarnings(operationLogs, projectName, projectInfo, checkoutTarget);\n if (checkoutTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 切换到 ${targetBranch} 失败: ${checkoutTarget.stderr || checkoutTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `切换到 ${targetBranch} 失败`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--no-ff', '--no-edit', `origin/${createBranch}`])}`);\n const mergeIntoTarget = await runGitCommand(executionPath, ['merge', '--no-ff', '--no-edit', `origin/${createBranch}`]);\n logCommandResult(operationLogs, projectName, `合并 origin/${createBranch} 到 ${targetBranch}`, mergeIntoTarget);\n if (mergeIntoTarget.code !== 0) {\n operationLogs.push(`[${projectName}] ${formatCommand(['merge', '--abort'])}`);\n const abortTarget = await runGitCommand(executionPath, ['merge', '--abort']);\n logCommandResult(operationLogs, projectName, `终止合并到 ${targetBranch}`, abortTarget);\n feedbacks.push(`[${projectName}] 合并到 ${targetBranch} 冲突,已终止合并,请手动处理。`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `合并到 ${targetBranch} 冲突`, rollbackActions);\n continue projectLoop;\n }\n\n operationLogs.push(`[${projectName}] ${formatCommand(['push', 'origin', targetBranch])}`);\n const pushTarget = await runGitCommand(executionPath, ['push', 'origin', targetBranch]);\n logCommandResult(operationLogs, projectName, `推送 ${targetBranch}`, pushTarget);\n if (pushTarget.code !== 0) {\n feedbacks.push(`[${projectName}] 推送 ${targetBranch} 失败: ${pushTarget.stderr || pushTarget.stdout}`);\n const rollbackActions = await rollbackProject(projectName, executionPath, projectInfo);\n setProjectResult(projectName, false, `推送 ${targetBranch} 失败`, rollbackActions);\n continue projectLoop;\n }\n }\n\n setProjectResult(projectName, true);\n }\n\n if (isGwhGitFlowAborted(runId)) {\n for (const touched of touchedProjects.reverse()) {\n const { name, path, info } = touched;\n const projectPath = path;\n\n if (info.originalBranch && info.originalBranch !== 'HEAD') {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['checkout', info.originalBranch])}`);\n const rollbackCheckout = await runGitCommand(projectPath, ['checkout', info.originalBranch]);\n logCommandResult(operationLogs, name, `回滚切换分支 ${info.originalBranch}`, rollbackCheckout);\n }\n\n if (info.createdLocalBranch && !info.hadLocalBranch) {\n operationLogs.push(`[${name}] 回滚: ${formatCommand(['branch', '-D', createBranch])}`);\n const rollbackDelete = await runGitCommand(projectPath, ['branch', '-D', createBranch]);\n logCommandResult(operationLogs, name, `回滚删除本地分支 ${createBranch}`, rollbackDelete);\n }\n }\n }\n\n return NextResponse.json({\n success: feedbacks.length === 0,\n operationLogs,\n feedbacks,\n projectResults,\n });\n } catch (error) {\n console.error('武汉协和版本 git 操作流执行失败:', error);\n return NextResponse.json({\n success: false,\n operationLogs: [],\n feedbacks: [error instanceof Error ? error.message : '执行失败'],\n }, { status: 500 });\n } finally {\n for (const tempRootPath of tempRootPaths) {\n try {\n await cleanupTempExecutionRepo(tempRootPath);\n } catch (cleanupError) {\n console.error(`清理临时目录失败: ${tempRootPath}`, cleanupError);\n }\n }\n\n if (activeRunId) {\n clearGwhGitFlowState(activeRunId);\n }\n }\n}\n","import {\n AppRouteRouteModule,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\n\nimport * as userland from 'VAR_USERLAND'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n userland,\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","userland","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","resolvedPagePath","nextConfigOutput","workAsyncStorage","workUnitAsyncStorage","serverHooks"],"mappings":"gFAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAIA,EAAA,EAAA,CAAA,CAAA,OAQA,IAAM,EAAqB,MAErB,EAA8B,CAAC,MAAO,UAAU,CAEtD,SAAS,EAAkB,CAAY,UACjC,CAAC,GACD,EAAmB,CADZ,GACgB,CAAC,GADV,CAEd,EAAK,CAD0B,OAAO,EACvB,CAAC,KAEtB,CAF4B,AAI5B,OAJmC,EAI1B,EAAc,CAAW,CAAE,CAAc,EAChD,OAAO,IAAI,QAAQ,CAAC,EAAS,KAC3B,IAAM,EAAQ,GAAA,EAAA,KAAA,AAAI,EAAE,MAAO,EAAM,KAC/B,EACA,MAAO,CAAC,OAFI,EAEM,OAAQ,OAAO,AACnC,GAEI,EAAS,GACT,EAAS,GAEb,EAAM,MAAM,EAAE,GAAG,OAAQ,AAAC,IACxB,GAAU,EAAK,QAAQ,EACzB,GAEA,EAAM,MAAM,EAAE,GAAG,OAAQ,AAAC,IACxB,GAAU,EAAK,QAAQ,EACzB,GAEA,EAAM,EAAE,CAAC,QAAU,AAAD,IAChB,EAAQ,MAAE,EAAM,gBAAQ,CAAO,EACjC,GAEA,EAAM,EAAE,CAAC,QAAS,AAAC,IACjB,EAAO,EACT,EACF,EACF,CAEA,SAAS,EAAc,CAAc,EACnC,MAAO,CAAC,IAAI,EAAE,EAAK,IAAI,CAAC,KAAA,CAAM,AAChC,CAaA,SAAS,EAAiB,CAAuB,CAAE,CAAmB,CAAE,CAAY,CAAE,CAAiB,EACjF,GAAG,CAAnB,EAAO,IAAI,CACb,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAM,EAEjD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAK,CAAC,EAAE,EAAO,MAAM,EAAI,EAAO,MAAM,CAAA,CAAE,CAEvF,CAEA,SAAS,EACP,CAAuB,CACvB,CAAmB,CACnB,CAA2B,CAC3B,CAAiB,EAEjB,IAAM,EAAa,CAAA,EAAA,EAAA,oCAAA,CAAoC,AAApC,EAAsC,EAAO,MAAM,CAAE,EAAY,qBAAqB,EACrG,EAAW,MAAM,CAAG,GAAG,AACzB,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,iBAAiB,EAAE,EAAW,IAAI,CAAC,MAAM,eAAe,CAAC,CAEhG,CAEO,eAAe,EAAK,CAAoB,EAC7C,IAAI,EAAc,GACZ,EAAgB,IAAI,IAC1B,GAAI,CACF,IAAM,EAAO,MAAM,EAAQ,IAAI,GACzB,EAAW,MAAM,OAAO,CAAC,EAAK,QAAQ,EAAI,EAAK,QAAQ,CAAG,EAAE,CAC5D,EAA4C,UAA7B,OAAO,EAAK,YAAY,CAAgB,EAAK,YAAY,CAAC,IAAI,GAAK,GAClF,EAAwC,UAA3B,OAAO,EAAK,UAAU,CAAgB,EAAK,UAAU,CAAC,IAAI,GAAK,GAC5E,EAA0C,UAA5B,OAAO,EAAK,WAAW,CAAgB,EAAK,WAAW,CAAC,IAAI,GAAK,GAC/E,GAAS,CAAQ,EAAK,MAAM,CAC5B,EAA8B,UAAtB,OAAO,EAAK,KAAK,CAAgB,EAAK,KAAK,CAAG,GAEtD,EAA0B,EAAE,CAC5B,EAAsB,EAAE,CACxB,EAKD,EAAE,CACD,EAAY,IAAI,IAChB,EAAmB,CACvB,EACA,EACA,EACA,KAEI,EAAU,GAAG,CAAC,KAGlB,EAAU,GAAG,CAAC,EAAa,CAHK,QAGH,SAAS,EAAQ,iBAAgB,GAC9D,EAAe,IAAI,CAAC,aAAE,UAAa,EAAS,yBAAQ,CAAgB,GACtE,EACM,EAAkB,MAAO,EAAqB,EAAqB,KACvE,IAAM,EAAoB,EAAE,CAC5B,GAAI,EAAK,cAAc,EAA4B,SAAxB,EAAK,cAAc,CAAa,CACzD,IAAM,EAAU,EAAc,CAAC,WAAY,EAAK,cAAc,CAAC,EAC/D,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAS,EACpD,IAAM,EAAmB,MAAM,EAAc,EAAa,CAAC,WAAY,EAAK,cAAc,CAAC,EAC3F,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAK,cAAc,CAAA,CAAE,CAAE,GAC9E,EAAQ,IAAI,CAAC,EACf,CAEA,GAAI,EAAK,kBAAkB,EAAI,CAAC,EAAK,cAAc,CAAE,CACnD,IAAM,EAAU,EAAc,CAAC,SAAU,KAAM,EAAa,EAC5D,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAA,CAAS,EACpD,IAAM,EAAiB,MAAM,EAAc,EAAa,CAAC,SAAU,KAAM,EAAa,EACtF,EAAiB,EAAe,EAAa,CAAC,SAAS,EAAE,EAAA,CAAc,CAAE,GACzE,EAAQ,IAAI,CAAC,EACf,CAEA,OAAO,CACT,EAEA,GAAwB,IAApB,EAAS,MAAM,EAAU,CAAC,GAAgB,CAAC,GAAc,CAAC,EAC5D,OAAO,EAAA,EADkE,UACtD,CAAC,IAAI,CAAC,CACvB,QAAS,SADJ,QAEL,EACA,UAAW,CAAC,mBACd,AADiC,EAC9B,CAAE,OAAQ,GAAI,GAGnB,GAvIsB,QAuIlB,EACF,OAAO,EAAA,IADU,QACE,CAAC,IAAI,CAAC,CACvB,IAFkC,KAEzB,QADJ,QAEL,EACA,UAAW,CAAC,CAAC,0BAA0B,EAAE,GAAoB,CAAC,AAChE,EAAG,CAAE,OAAQ,GAAI,CAD4C,CAAC,CAIhE,GAAI,CAAC,EAAkB,IAAiB,CAAC,EAAkB,IAAe,CAAC,EAAkB,GAC3F,OAAO,EAAA,EADkG,UACtF,CAAC,IAAI,CAAC,CACvB,SAAS,QADJ,QAEL,EACA,UAAW,CAAC,wBAAwB,AACtC,EAAG,CAAE,OAAQ,GAAI,GAGnB,GAAI,CAAC,EACH,KADU,EACH,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,SAAS,QADJ,QAEL,EACA,UAAW,CAAC,qBAAqB,AACnC,EAAG,CAAE,OAAQ,GAAI,GAGnB,GAAA,EAAA,qBAAA,AAAoB,EAAE,GACtB,EAAc,EAEd,IAAM,EAHN,AAGuB,MAAM,CAAA,EAAA,EAAA,iBAAA,AAAgB,IACvC,EAAgB,EAAA,WADO,KACS,CAAC,cAAc,CAC/C,EAA+E,EAD/D,AACiE,CAEjF,EAAa,IAAM,CAAA,EAAA,EAAA,mBAAA,AAAkB,EAAE,GAE7C,EAAa,IAAK,IAAM,EAFC,GAEiB,EAAU,CAClD,GAAI,IAAc,CAChB,EAAU,IAAI,CAAC,yBACf,KACF,CAEA,IAAM,EAAe,OAAO,GACtB,EAAc,CAAA,EAAA,EAAA,mBAAA,AAAkB,EAAE,GAExC,GAAI,CAAC,GAAe,IAAgB,CAFhB,CAE8B,CAChD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAa,gBAAgB,CAAC,EACrD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAa,iBAAiB,CAAC,EAClD,EAAiB,GAAc,EAAO,cACtC,QACF,CAEA,GAAI,CAAC,CAAc,CAAC,EAAY,CAAE,CAChC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,eAAe,CAAC,EACnD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,gBAAgB,CAAC,EAChD,EAAiB,GAAa,EAAO,aACrC,QACF,CAEA,IAAM,EAAc,CAAA,EAAA,EAAA,IAAA,AAAG,EAAE,EAAe,GACxC,GAAI,CAAC,CAAA,EAAA,EAAA,UAAA,AAAS,EAAE,GAAc,CADV,AAElB,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,OADhC,MAC6C,CAAC,EACjD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,cAAc,CAAC,EAC9C,EAAiB,EAAa,GAAO,WACrC,QACF,CAEA,GAAI,CAAC,CAAA,EAAA,EAAA,UAAA,AAAS,EAAE,GAAA,EAAA,IAAA,AAAG,EAAE,EAAa,SAAU,CAC1C,CADG,CACW,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,KADrB,SACmC,CAAC,EAClD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,mBAAmB,CAAC,EACnD,EAAiB,GAAa,EAAO,gBACrC,QACF,CAEA,GAAI,EAAQ,CAaV,IAAK,IAAM,KAZX,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAW,EAAA,CAAG,EACtG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAC9G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAAA,CAAG,EAChH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,KAAM,SAAU,EAAa,EAAA,CAAG,EAC9F,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAY,EAAA,CAAG,EACvG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAAA,CAAG,EAClH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EAE7D,GACzB,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,KADA,GACS,SAAS,EAAA,CAAG,EAC3E,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EACnH,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EAE1F,QACF,CAEA,IAAM,EAAiB,MAAM,CAAA,EAAA,EAAA,uBAAA,AAAsB,EAAE,EAAa,GAClE,GAAI,CAAC,EADwB,AACT,OAAO,CAAE,CAC3B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,iBAAiB,EAAE,EAAe,KAAK,CAAA,CAAE,EAC5E,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,cAAc,EAAE,EAAe,KAAK,CAAA,CAAE,EACrE,EAAiB,GAAa,EAAO,cACrC,QACF,CAEA,IAAM,EAAgB,EAAe,KAAK,CAAC,WAAW,CACtD,EAAc,GAAG,CAAC,EAAe,KAAK,CAAC,YAAY,EACnD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,YAAY,EAAE,EAAA,CAAe,EAEhE,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,QAAQ,CAAC,EAC5C,IAAM,EAAsB,MAAM,EAAc,EAAe,CAAC,SAAU,iBAAiB,EAC3F,EAAiB,EAAe,EAAa,SAAU,GAEvD,IAAM,EAA8B,CAClC,eAFqB,AAAiB,AAnMrC,EAmMyD,MAAM,CAnMzD,OAAO,CAAC,OAAQ,KAAK,IAAI,IAmMqC,OAGrE,oBAAoB,EACpB,gBAAgB,EAChB,sBAAuB,IAAI,GAC7B,EAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAE1E,GADA,EAAiB,EAAe,EAAa,OAAQ,GAC5B,IAArB,EAAY,IAAI,CAAQ,CAC1B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAY,MAAM,EAAI,EAAY,MAAM,CAAA,CAAE,EACrF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAW,EAAA,CAAG,EACtG,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAW,EAEpG,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAY,CAAE,GACpE,CAAC,EAAW,MAAM,CAAC,IAAI,GAAI,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,SAAS,EAAE,EAAW,YAAY,CAAC,EAClE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,OAAO,EAAE,EAAW,IAAI,CAAC,CAAE,GACjE,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,IAAM,EAAqB,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAa,EAC9G,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GACvE,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAC9G,IAAM,EAAoB,MAAM,EAAc,EAAe,CAAC,WAAY,WAAY,CAAC,WAAW,EAAE,EAAA,CAAc,CAAC,EAGnH,GAFA,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GAExC,IAA3B,EAAkB,IAAI,CAAQ,CAChC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,IAAM,EAAgB,MAAM,EAAc,EAAe,CAAC,WAAY,EAAa,EAGnF,GAFA,EAAiB,EAAe,EAAa,CAAC,QAAQ,EAAE,EAAA,CAAc,CAAE,GACxE,EAAsB,EAAe,EAAa,EAAa,GACpC,IAAvB,EAAc,IAAI,CAAQ,CAC5B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,aAAa,EAAE,EAAc,MAAM,EAAI,EAAc,MAAM,CAAA,CAAE,EAC5F,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAmB,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAE/E,GADA,EAAiB,EAAe,EAAa,OAAQ,GACjD,AAA0B,MAAT,IAAI,CAAQ,CAC/B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAiB,MAAM,EAAI,EAAiB,MAAM,CAAA,CAAE,EAC/F,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CACF,MAEE,CAFK,EACL,EAAY,cAAc,CAAG,GACzB,EAAmB,MAAM,CAAC,IAAI,GAAI,CACpC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EAClH,IAAM,EAAiB,MAAM,EAAc,EAAe,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAGpH,GAFA,EAAiB,EAAe,EAAa,CAAC,QAAQ,EAAE,EAAA,CAAc,CAAE,GACxE,EAAsB,EAAe,EAAa,EAAa,GACnC,IAAxB,EAAe,IAAI,CAAQ,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,eAAe,EAAE,EAAe,MAAM,EAAI,EAAe,MAAM,CAAA,CAAE,EAChG,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,cAAe,GACpD,QACF,CACF,KAAO,CACL,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAAA,CAAG,EAChH,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,WAAY,KAAM,EAAc,CAAC,OAAO,EAAE,EAAA,CAAY,CAAC,EAGhH,GAFA,EAAiB,EAAe,EAAa,CAAC,KAAK,EAAE,EAAA,CAAc,CAAE,GACrE,EAAsB,EAAe,EAAa,EAAa,GACrC,IAAtB,EAAa,IAAI,CAAQ,CAC3B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAa,MAAM,EAAI,EAAa,MAAM,CAAA,CAAE,EACvF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,QACF,CACA,EAAY,kBAAkB,EAAG,EAEjC,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,KAAM,SAAU,EAAa,EAAA,CAAG,EAC9F,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,OAAQ,KAAM,SAAU,EAAa,EAE5F,GADA,EAAiB,EAAe,EAAa,CAAC,KAAK,EAAE,EAAA,CAAc,CAAE,GAC7C,AAApB,MAAW,IAAI,CAAQ,CACzB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,WAAW,EAAE,EAAW,MAAM,EAAI,EAAW,MAAM,CAAA,CAAE,EACpF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,UAAW,GAChD,QACF,CACF,CAGF,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAY,EAAA,CAAG,EACvG,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAY,EAEtG,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAa,CAAE,GACrE,CAAC,EAAY,MAAM,CAAC,IAAI,GAAI,CAC9B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,SAAS,EAAE,EAAY,UAAU,CAAC,EACjE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,OAAO,EAAE,EAAY,IAAI,CAAC,CAAE,GAClE,QACF,CAIA,GAFA,EAAgB,IAAI,CAAC,CAAE,KAAM,EAAa,KAAM,EAAe,KAAM,CAAY,GAE7E,IAAc,CAChB,EAAU,IAAI,CAAC,yBACf,KACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,SAAU,cAAe,wBAAwB,EAE1G,GADA,EAAiB,EAAe,EAAa,QAAS,GAClD,CAAA,EAAA,EAAA,2BAAA,AAA0B,EAAE,EAAa,KAAzC,CAA+C,CAAE,EAAY,qBAAqB,EAAG,CACvF,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,uBAAuB,CAAC,EACvD,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,WAAY,EAAa,EAGlF,GAFA,EAAiB,EAAe,EAAa,CAAC,MAAM,EAAE,EAAA,CAAc,CAAE,GACtE,EAAsB,EAAe,EAAa,EAAa,GACrC,IAAtB,EAAa,IAAI,CAAQ,CAC3B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,WAAW,EAAE,EAAa,MAAM,EAAI,EAAa,MAAM,CAAA,CAAE,EACxF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,UAAW,GAChD,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAAA,CAAG,EAClH,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAa,CAAC,EAEjH,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAa,CAAE,GAChD,IAArB,EAAY,IAAI,CAAQ,CAC1B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAU,EAAA,CAAG,EAC5E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,UAAU,EAC3E,EAAiB,EAAe,EAAa,OAAQ,GACrD,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,mBAAmB,CAAC,EACnD,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,OAAQ,GAC7C,QACF,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EACxF,IAAM,EAAY,MAAM,EAAc,EAAe,CAAC,OAAQ,SAAU,EAAa,EAErF,GADA,EAAiB,EAAe,EAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAE,GACnE,AAAmB,MAAT,IAAI,CAAQ,CACxB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,YAAY,EAAE,EAAU,MAAM,EAAI,EAAU,MAAM,CAAA,CAAE,EACnF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,WAAY,GACjD,QACF,CAEA,IAAK,IAAM,KAAgB,EAA6B,CACtD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,SAAS,EAAA,CAAG,EAC3E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,SAAS,EAE1E,GADA,EAAiB,EAAe,EAAa,OAAQ,GAC5B,IAArB,EAAY,IAAI,CAAQ,CAC1B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,UAAU,EAAE,EAAY,MAAM,EAAI,EAAY,MAAM,CAAA,CAAE,EACrF,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,SAAU,GAC/C,SAAS,CACX,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,YAAa,UAAW,SAAU,EAAa,EAAA,CAAG,EACxG,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,YAAa,UAAW,SAAU,EAAa,EAExG,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAA,CAAc,CAAE,GACtE,CAAC,EAAa,MAAM,CAAC,IAAI,GAAI,CAC/B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,SAAS,EAAE,EAAa,UAAU,CAAC,EAClE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,OAAO,EAAE,EAAa,IAAI,CAAC,CAAE,GACnE,SAAS,CACX,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,SAAU,cAAe,wBAAwB,EAAA,CAAG,EAC1G,IAAM,EAAe,MAAM,EAAc,EAAe,CAAC,SAAU,cAAe,wBAAwB,EAE1G,GADA,EAAiB,EAAe,EAAa,QAAS,GAClD,CAAA,EAAA,EAAA,2BAA0B,AAA1B,EAA4B,EAAa,KAAzC,CAA+C,CAAE,EAAY,qBAAqB,EAAG,CACvF,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,qBAAqB,EAAE,EAAa,CAAC,CAAC,EACrE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,YAAa,GAClD,SAAS,CACX,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,WAAY,EAAa,EAAA,CAAG,EAClF,IAAM,EAAiB,MAAM,EAAc,EAAe,CAAC,WAAY,EAAa,EAGpF,GAFA,EAAiB,EAAe,EAAa,CAAC,IAAI,EAAE,EAAA,CAAc,CAAE,GACpE,EAAsB,EAAe,EAAa,EAAa,GACnC,IAAxB,EAAe,IAAI,CAAQ,CAC7B,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAa,KAAK,EAAE,EAAe,MAAM,EAAI,EAAe,MAAM,CAAA,CAAE,EAC3G,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,IAAI,EAAE,EAAa,GAAG,CAAC,CAAE,GAC/D,SAAS,CACX,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAAA,CAAG,EACnH,IAAM,EAAkB,MAAM,EAAc,EAAe,CAAC,QAAS,UAAW,YAAa,CAAC,OAAO,EAAE,EAAA,CAAc,CAAC,EAEtH,GADA,EAAiB,EAAe,EAAa,CAAC,UAAU,EAAE,EAAa,GAAG,EAAE,EAAA,CAAc,CAAE,GAC/D,AAAzB,MAAgB,IAAI,CAAQ,CAC9B,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,QAAS,UAAU,EAAA,CAAG,EAC5E,IAAM,EAAc,MAAM,EAAc,EAAe,CAAC,QAAS,UAAU,EAC3E,EAAiB,EAAe,EAAa,CAAC,MAAM,EAAE,EAAA,CAAc,CAAE,GACtE,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,MAAM,EAAE,EAAa,gBAAgB,CAAC,EACrE,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,IAAI,EAAE,EAAa,GAAG,CAAC,CAAE,GAC/D,SAAS,CACX,CAEA,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,EAAE,EAAE,EAAc,CAAC,OAAQ,SAAU,EAAa,EAAA,CAAG,EACxF,IAAM,EAAa,MAAM,EAAc,EAAe,CAAC,OAAQ,SAAU,EAAa,EAEtF,GADA,EAAiB,EAAe,EAAa,CAAC,GAAG,EAAE,EAAA,CAAc,CAAE,GAC3C,IAApB,EAAW,IAAI,CAAQ,CACzB,EAAU,IAAI,CAAC,CAAC,CAAC,EAAE,EAAY,KAAK,EAAE,EAAa,KAAK,EAAE,EAAW,MAAM,EAAI,EAAW,MAAM,CAAA,CAAE,EAClG,IAAM,EAAkB,MAAM,EAAgB,EAAa,EAAe,GAC1E,EAAiB,GAAa,EAAO,CAAC,GAAG,EAAE,EAAa,GAAG,CAAC,CAAE,GAC9D,SAAS,CACX,CACF,CAEA,EAAiB,GAAa,EAChC,CAEA,GAAI,GAAA,EAAA,mBAAA,AAAkB,EAAE,GACtB,IAAK,CADyB,GACnB,IADT,CACoB,EAAgB,OAAO,GAAI,CAC/C,GAAM,MAAE,CAAI,MAAE,CAAI,MAAE,CAAI,CAAE,CAAG,EAG7B,GAAI,EAAK,cAAc,EAA4B,SAAxB,EAAK,cAAc,CAAa,CACzD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAK,MAAM,EAAE,EAAc,CAAC,WAAY,EAAK,cAAc,CAAC,EAAA,CAAG,EACtF,IAAM,EAAmB,MAAM,IAA2B,CAAC,SAAd,EAA0B,EAAK,cAAc,CAAC,EAC3F,EAAiB,EAAe,EAAM,CAAC,OAAO,EAAE,EAAK,cAAc,CAAA,CAAE,CAAE,EACzE,CAEA,GAAI,EAAK,kBAAkB,EAAI,CAAC,EAAK,cAAc,CAAE,CACnD,EAAc,IAAI,CAAC,CAAC,CAAC,EAAE,EAAK,MAAM,EAAE,EAAc,CAAC,SAAU,KAAM,EAAa,EAAA,CAAG,EACnF,IAAM,EAAiB,MAAM,EAVX,EAUsC,CAAC,SAAd,AAAwB,KAAM,EAAa,EACtF,EAAiB,EAAe,EAAM,CAAC,SAAS,EAAE,EAAA,CAAc,CAAE,EACpE,CACF,CAGF,OAAO,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,QAAS,AAAqB,MAAX,GADd,GACoB,eACzB,YACA,iBACA,CACF,EACF,CAAE,MAAO,EAAO,CAEd,OADA,QAAQ,KAAK,CAAC,sBAAuB,GAC9B,EAAA,YAAY,CAAC,IAAI,CAAC,CACvB,SAAS,EACT,MAFK,QAEU,EAAE,CACjB,UAAW,CAAC,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAO,AAC9D,EAAG,CAAE,OAAQ,GAAI,EACnB,QAAU,CACR,IAAK,IAAM,KAAgB,EACzB,GAAI,CACF,MAAM,CAAA,CAFgC,CAEhC,EAAA,wBAAA,AAAuB,EAAE,EACjC,CAAE,MAAO,CADD,CACe,CACrB,QAAQ,KAAK,CAAC,CAAC,UAAU,EAAE,EAAA,CAAc,CAAE,EAC7C,CAGE,GACF,CAAA,EAAA,EAAA,KADe,eACf,AAAmB,EAAE,EAEzB,CACF,WAHM,sJCphBN,IAAA,EAGO,EAAA,CAFLA,AAEK,CAAA,OACP,EAA0B,EAAyB,CAA1CC,AAA0C,CAAA,GAAA,EAH9B,EAIrB,CADkB,CAD2C,AAEnB,EAAA,CAAA,AAAjCC,CAFF,AAEmC,GADhB,CAC8C,GAExE,EAAwC,EAAA,CAAA,CAFjBC,AAEiB,EAA5BC,IAWZ,IAAMC,CAb4B,CAad,IAXM,AAWN,EAAIL,CAbkB,YAEF,MAWhBA,CAAoB,CAC1CM,WAAY,CACVC,KAAMN,EAAAA,SAAAA,CAAUO,SAAS,CACzBC,KAAM,0BACNC,SAAU,oBACVC,SAAU,QACVC,WAAY,EACd,EACAC,iBAAkB,8DAClBC,iBAXF,CAA0B,WAYxBV,CACF,GAKM,kBAAEW,CAAgB,sBAAEC,CAAoB,aAAEC,CAAW,CAAE,CAAGZ,EAEhE,SAASH,IACP,MAAA,CAAA,EAAA,EAAOC,UAAAA,EAAY,kBACjBY,uBACAC,CACF,EACF","ignoreList":[1]}