{"version":3,"file":"create-project-DoGtMe9J.cjs","sources":["../src/workflows/CreateProjectWorkflow.ts","../src/create-project.ts"],"sourcesContent":["import { join, dirname } from 'path'\nimport { fileURLToPath } from 'url'\nimport chalk from 'chalk'\nimport ora from 'ora'\n// import prompts from 'prompts' // TODO: 未来可能需要用于交互式提示\nimport type { ArchitectureType, FrameworkType } from '../types.ts'\nimport { updateConfig } from '../update-config.ts'\nimport { installProjectDependencies } from '../utils/install.ts'\nimport { initializeGit, initializeHusky } from '../utils/git.ts'\nimport { formatProject } from '../utils/format.ts'\nimport { createDependencyManager } from '../utils/dependency.ts'\nimport { FileOperations } from '../core/FileOperations.ts'\n\n// ES模块兼容的__dirname\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\n/**\n * 项目创建选项\n */\nexport interface CreateProjectOptions {\n  projectName: string\n  architectureType: ArchitectureType\n  targetPath: string\n  framework?: FrameworkType\n}\n\n/**\n * 项目创建工作流\n */\nexport class CreateProjectWorkflow {\n  private options: CreateProjectOptions\n\n  constructor(options: CreateProjectOptions) {\n    this.options = options\n  }\n\n  /**\n   * 执行完整的项目创建流程\n   */\n  async execute(): Promise<void> {\n    const totalSteps = 6\n    let currentStep = 0\n\n    const logProgress = (stepName: string) => {\n      currentStep++\n      console.log(chalk.gray(`[${currentStep}/${totalSteps}] ${stepName}`))\n    }\n\n    console.log(chalk.blue('🚀 开始创建项目...'))\n    console.log()\n\n    try {\n      logProgress('创建项目结构')\n      await this.createProjectFolder()\n\n      logProgress('复制模板文件')\n      await this.copyFrameworkFiles()\n\n      logProgress('更新项目配置')\n      await this.updatePackageJsonDependencies()\n      await this.updateConfigFiles()\n\n      logProgress('安装项目依赖')\n      await this.installDependencies()\n\n      logProgress('初始化版本控制')\n      await this.initializeGitRepository()\n      await this.initializeHuskyHooks()\n      await this.copyGitHooksFiles()\n\n      logProgress('格式化代码')\n      await this.formatProjectCode()\n\n      this.displayCompletionMessage()\n    } catch (error) {\n      console.error(chalk.red('❌ 项目创建失败:'), error)\n      throw error\n    }\n  }\n\n  /**\n   * 创建项目文件夹\n   */\n  private async createProjectFolder(): Promise<void> {\n    const spinner = ora('创建项目文件夹...').start()\n\n    try {\n      const projectPath = join(this.options.targetPath, this.options.projectName)\n\n      // 创建项目目录（如果已存在则直接使用）\n      await FileOperations.ensureDir(projectPath)\n\n      spinner.succeed(chalk.green('项目文件夹创建完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('项目文件夹创建失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 拷贝框架文件\n   */\n  private async copyFrameworkFiles(): Promise<void> {\n    const spinner = ora('复制模板文件...').start()\n\n    try {\n      const projectPath = join(this.options.targetPath, this.options.projectName)\n      // 使用绝对路径定位模板目录 - 从dist目录回到quality-helper包根目录\n      const templatesDir = join(dirname(__dirname), 'templates', 'project-templates')\n\n      // 根据架构类型选择模板目录\n      const templateDir =\n        this.options.architectureType === 'single'\n          ? join(templatesDir, 'base')\n          : join(templatesDir, 'monorepo')\n\n      // 检查模板目录是否存在\n      if (!(await FileOperations.exists(templateDir))) {\n        throw new Error(`模板目录不存在: ${templateDir}`)\n      }\n\n      // 递归复制模板文件\n      await this.copyDirectory(templateDir, projectPath)\n\n      spinner.succeed(chalk.green('模板文件复制完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('模板文件复制失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 更新配置文件\n   */\n  private async updateConfigFiles(): Promise<void> {\n    const spinner = ora('更新项目配置...').start()\n\n    try {\n      const projectPath = join(this.options.targetPath, this.options.projectName)\n\n      if (this.options.architectureType === 'single') {\n        await updateConfig({\n          projectPath,\n          rootPath: projectPath,\n          architectureType: 'single',\n          projectType: 'app',\n          excludeGitHooks: true,\n          excludeNpmrc: true,\n          excludeScripts: true,\n          silent: true,\n        })\n      } else {\n        await this.updateMonorepoConfigs(projectPath)\n      }\n\n      spinner.succeed(chalk.green('项目配置更新完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('项目配置更新失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 更新Monorepo配置\n   */\n  private async updateMonorepoConfigs(projectPath: string): Promise<void> {\n    // 更新根目录配置\n    await updateConfig({\n      projectPath,\n      rootPath: projectPath,\n      architectureType: 'monorepo',\n      projectType: 'root',\n      excludeGitHooks: true,\n      excludeStaticFiles: true,\n      excludeNpmrc: true,\n      excludeScripts: true,\n      silent: true,\n    })\n\n    // 更新apps目录下的子应用配置\n    await this.updateAppsConfigs(projectPath)\n\n    // 更新tools目录下的子项目配置\n    await this.updatePackagesConfigs(projectPath)\n  }\n\n  /**\n   * 更新apps目录配置\n   */\n  private async updateAppsConfigs(projectPath: string): Promise<void> {\n    const appsDir = join(projectPath, 'apps')\n    try {\n      const appDirs = await FileOperations.readDirWithFileTypes(appsDir)\n\n      for (const appDir of appDirs) {\n        if (appDir.isDirectory()) {\n          const appPath = join(appsDir, appDir.name)\n          await updateConfig({\n            projectPath: appPath,\n            rootPath: projectPath,\n            architectureType: 'monorepo',\n            projectType: 'app',\n            includeOnly: ['build-tools', 'static-files', 'types'],\n            silent: true,\n          })\n        }\n      }\n    } catch (error) {\n      console.warn('无法读取apps目录:', error)\n    }\n  }\n\n  /**\n   * 更新packages目录配置\n   */\n  private async updatePackagesConfigs(projectPath: string): Promise<void> {\n    const packagesDir = join(projectPath, 'tools')\n    try {\n      const packageDirs = await FileOperations.readDirWithFileTypes(packagesDir)\n\n      for (const packageDir of packageDirs) {\n        if (packageDir.isDirectory()) {\n          const packagePath = join(packagesDir, packageDir.name)\n          await updateConfig({\n            projectPath: packagePath,\n            rootPath: projectPath,\n            architectureType: 'monorepo',\n            projectType: 'lib',\n            includeOnly: ['build-tools', 'types'],\n            silent: true,\n          })\n        }\n      }\n    } catch (error) {\n      console.warn('无法读取packages目录:', error)\n    }\n  }\n\n  /**\n   * 更新package.json依赖\n   */\n  private async updatePackageJsonDependencies(): Promise<void> {\n    const spinner = ora('更新项目依赖配置...').start()\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n    try {\n      await createDependencyManager().updateToRecommendedVersions(projectPath)\n    } catch (error) {\n      spinner.fail(chalk.red(`依赖配置更新失败:${String(error)}`))\n      throw error\n    }\n    spinner.succeed(chalk.green('依赖配置更新完成'))\n  }\n\n  /**\n   * 安装依赖\n   */\n  private async installDependencies(): Promise<void> {\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n    const spinner = ora('安装项目依赖...').start()\n\n    try {\n      await installProjectDependencies(projectPath)\n      spinner.succeed(chalk.green('项目依赖安装完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('依赖安装失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 初始化Git仓库\n   */\n  private async initializeGitRepository(): Promise<void> {\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n    const spinner = ora('初始化Git仓库...').start()\n    try {\n      await initializeGit(projectPath)\n      spinner.succeed(chalk.green('Git仓库初始化完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('Git仓库初始化失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 初始化Husky钩子\n   */\n  private async initializeHuskyHooks(): Promise<void> {\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n    const spinner = ora('配置Git钩子...').start()\n    try {\n      await initializeHusky(projectPath)\n      spinner.succeed(chalk.green('Git钩子配置完成'))\n    } catch {\n      spinner.warn(chalk.yellow('Git钩子配置失败，已跳过'))\n    }\n  }\n\n  /**\n   * 复制git-hooks\n   */\n  private async copyGitHooksFiles(): Promise<void> {\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n    // 使用绝对路径定位模板目录 - 从dist目录回到quality-helper包根目录\n    const templatesDir = join(dirname(__dirname), 'templates')\n\n    const spinner = ora('复制Git钩子文件...').start()\n    try {\n      const gitHooksDir = join(templatesDir, 'configs', 'git-hooks')\n      const targetHuskyDir = join(projectPath, '.husky')\n\n      try {\n        // 确保 .husky 目录存在\n        await FileOperations.ensureDir(targetHuskyDir)\n        // 复制 git-hooks 目录下的所有文件\n        const files = await FileOperations.readDir(gitHooksDir)\n        for (const file of files) {\n          const sourcePath = join(gitHooksDir, file)\n          const targetPath = join(targetHuskyDir, file)\n          const isFile = await FileOperations.isFile(sourcePath)\n          if (isFile) {\n            await FileOperations.copyFile(sourcePath, targetPath)\n            // 设置执行权限（在Unix系统上）\n            await FileOperations.setExecutable(targetPath, 0o755)\n          }\n        }\n        // Git钩子文件复制完成\n      } catch (error) {\n        // Git钩子复制失败不影响项目创建\n        console.warn('⚠️ Git钩子复制失败，请手动配置:', error)\n      }\n      spinner.succeed(chalk.green('Git钩子文件复制完成'))\n    } catch (error) {\n      spinner.fail(chalk.red('Git钩子文件复制失败'))\n      throw error\n    }\n  }\n\n  /**\n   * 格式化项目代码\n   */\n  private async formatProjectCode(): Promise<void> {\n    const projectPath = join(this.options.targetPath, this.options.projectName)\n\n    const formatSpinner = ora('格式化代码...').start()\n    try {\n      await formatProject(projectPath, false)\n      formatSpinner.succeed(chalk.green('代码格式化完成'))\n    } catch {\n      formatSpinner.warn(chalk.yellow('代码格式化失败，可稍后手动执行'))\n    }\n  }\n\n  /**\n   * 显示完成信息\n   */\n  private displayCompletionMessage(): void {\n    console.log()\n    console.log(chalk.green('🎉 项目创建成功!'))\n    console.log(chalk.cyan(`🚀 下一步: cd ${this.options.projectName} && npm run dev`))\n    console.log()\n    const architectureText = this.options.architectureType === 'single' ? '单体应用' : 'Monorepo'\n    const frameworkText =\n      this.options.framework === 'vue3' ? 'Vue 3' : (this.options.framework ?? 'Vue 3')\n    console.log(\n      chalk.blue(`📦 项目: ${this.options.projectName} (${architectureText} - ${frameworkText})`)\n    )\n  }\n\n  /**\n   * 递归复制目录\n   */\n  private async copyDirectory(source: string, target: string): Promise<void> {\n    await FileOperations.ensureDir(target)\n\n    const entries = await FileOperations.readDirWithFileTypes(source)\n\n    for (const entry of entries) {\n      const sourcePath = join(source, entry.name)\n      const targetPath = join(target, entry.name)\n\n      if (entry.isDirectory()) {\n        await this.copyDirectory(sourcePath, targetPath)\n      } else {\n        await this.copyFileWithTemplateReplacement(sourcePath, targetPath)\n      }\n    }\n  }\n\n  /**\n   * 复制文件并替换模板变量\n   */\n  private async copyFileWithTemplateReplacement(\n    sourcePath: string,\n    targetPath: string\n  ): Promise<void> {\n    const content = await FileOperations.readFile(sourcePath)\n\n    // 替换模板变量\n    const replacedContent = content.replace(/\\{\\{projectName\\}\\}/g, this.options.projectName)\n\n    await FileOperations.writeFile(targetPath, replacedContent)\n  }\n}\n","import { CreateProjectWorkflow } from './workflows/CreateProjectWorkflow.ts'\nimport { ProjectOptionsService } from './services/ProjectOptionsService.ts'\nimport type { ProjectOptions } from './types.ts'\n\n// 重新导出类型和接口\nexport type { CreateProjectOptions } from './workflows/CreateProjectWorkflow.ts'\n\n/**\n * 创建项目的主函数\n */\nexport async function createProject(\n  projectName?: string,\n  options: ProjectOptions = {}\n): Promise<void> {\n  const optionsService = new ProjectOptionsService()\n  const projectOptions = await optionsService.getProjectOptions(projectName, options)\n\n  const workflow = new CreateProjectWorkflow(projectOptions)\n  await workflow.execute()\n}\n"],"names":["__filename","fileURLToPath","__dirname","dirname","CreateProjectWorkflow","options","constructor","this","execute","currentStep","logProgress","stepName","console","log","chalk","gray","blue","createProjectFolder","copyFrameworkFiles","updatePackageJsonDependencies","updateConfigFiles","installDependencies","initializeGitRepository","initializeHuskyHooks","copyGitHooksFiles","formatProjectCode","displayCompletionMessage","error","red","spinner","ora","start","projectPath","join","targetPath","projectName","FileOperations","ensureDir","succeed","green","fail","templatesDir","templateDir","architectureType","exists","Error","copyDirectory","updateConfig","rootPath","projectType","excludeGitHooks","excludeNpmrc","excludeScripts","silent","updateMonorepoConfigs","excludeStaticFiles","updateAppsConfigs","updatePackagesConfigs","appsDir","appDirs","readDirWithFileTypes","appDir","isDirectory","appPath","name","includeOnly","warn","packagesDir","packageDirs","packageDir","packagePath","createDependencyManager","updateToRecommendedVersions","String","installProjectDependencies","initializeGit","initializeHusky","yellow","gitHooksDir","targetHuskyDir","files","readDir","file","sourcePath","isFile","copyFile","setExecutable","formatSpinner","formatProject","cyan","architectureText","frameworkText","framework","source","target","entries","entry","copyFileWithTemplateReplacement","replacedContent","readFile","replace","writeFile","async","optionsService","ProjectOptionsService","projectOptions","getProjectOptions","workflow"],"mappings":"oTAcA,MAAMA,EAAaC,EAAAA,qMACbC,EAAYC,EAAAA,QAAQH,GAenB,MAAMI,EACHC,QAER,WAAAC,CAAYD,GACVE,KAAKF,QAAUA,CACjB,CAKA,aAAMG,GAEJ,IAAIC,EAAc,EAElB,MAAMC,EAAeC,IACnBF,IACAG,QAAQC,IAAIC,EAAMC,KAAK,IAAIN,QAA8BE,OAG3DC,QAAQC,IAAIC,EAAME,KAAK,iBACvBJ,QAAQC,MAER,IACEH,EAAY,gBACNH,KAAKU,sBAEXP,EAAY,gBACNH,KAAKW,qBAEXR,EAAY,gBACNH,KAAKY,sCACLZ,KAAKa,oBAEXV,EAAY,gBACNH,KAAKc,sBAEXX,EAAY,iBACNH,KAAKe,gCACLf,KAAKgB,6BACLhB,KAAKiB,oBAEXd,EAAY,eACNH,KAAKkB,oBAEXlB,KAAKmB,0BACP,OAASC,GAEP,MADAf,QAAQe,MAAMb,EAAMc,IAAI,aAAcD,GAChCA,CACR,CACF,CAKA,yBAAcV,GACZ,MAAMY,EAAUC,EAAI,cAAcC,QAElC,IACE,MAAMC,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,mBAGzDC,EAAAA,eAAeC,UAAUL,GAE/BH,EAAQS,QAAQxB,EAAMyB,MAAM,aAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,cACjBD,CACR,CACF,CAKA,wBAAcT,GACZ,MAAMW,EAAUC,EAAI,aAAaC,QAEjC,IACE,MAAMC,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aAEzDM,EAAeR,EAAAA,KAAK9B,EAAAA,QAAQD,GAAY,YAAa,qBAGrDwC,EAC8B,WAAlCnC,KAAKF,QAAQsC,iBACTV,OAAKQ,EAAc,QACnBR,OAAKQ,EAAc,YAGzB,WAAYL,EAAAA,eAAeQ,OAAOF,IAChC,MAAM,IAAIG,MAAM,YAAYH,WAIxBnC,KAAKuC,cAAcJ,EAAaV,GAEtCH,EAAQS,QAAQxB,EAAMyB,MAAM,YAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,aACjBD,CACR,CACF,CAKA,uBAAcP,GACZ,MAAMS,EAAUC,EAAI,aAAaC,QAEjC,IACE,MAAMC,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aAEzB,WAAlC5B,KAAKF,QAAQsC,uBACTI,eAAa,CACjBf,cACAgB,SAAUhB,EACVW,iBAAkB,SAClBM,YAAa,MACbC,iBAAiB,EACjBC,cAAc,EACdC,gBAAgB,EAChBC,QAAQ,UAGJ9C,KAAK+C,sBAAsBtB,GAGnCH,EAAQS,QAAQxB,EAAMyB,MAAM,YAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,aACjBD,CACR,CACF,CAKA,2BAAc2B,CAAsBtB,SAE5Be,eAAa,CACjBf,cACAgB,SAAUhB,EACVW,iBAAkB,WAClBM,YAAa,OACbC,iBAAiB,EACjBK,oBAAoB,EACpBJ,cAAc,EACdC,gBAAgB,EAChBC,QAAQ,UAIJ9C,KAAKiD,kBAAkBxB,SAGvBzB,KAAKkD,sBAAsBzB,EACnC,CAKA,uBAAcwB,CAAkBxB,GAC9B,MAAM0B,EAAUzB,EAAAA,KAAKD,EAAa,QAClC,IACE,MAAM2B,QAAgBvB,iBAAewB,qBAAqBF,GAE1D,IAAA,MAAWG,KAAUF,EACnB,GAAIE,EAAOC,cAAe,CACxB,MAAMC,EAAU9B,EAAAA,KAAKyB,EAASG,EAAOG,YAC/BjB,eAAa,CACjBf,YAAa+B,EACbf,SAAUhB,EACVW,iBAAkB,WAClBM,YAAa,MACbgB,YAAa,CAAC,cAAe,eAAgB,SAC7CZ,QAAQ,GAEZ,CAEJ,OAAS1B,GACPf,QAAQsD,KAAK,cAAevC,EAC9B,CACF,CAKA,2BAAc8B,CAAsBzB,GAClC,MAAMmC,EAAclC,EAAAA,KAAKD,EAAa,SACtC,IACE,MAAMoC,QAAoBhC,iBAAewB,qBAAqBO,GAE9D,IAAA,MAAWE,KAAcD,EACvB,GAAIC,EAAWP,cAAe,CAC5B,MAAMQ,EAAcrC,EAAAA,KAAKkC,EAAaE,EAAWL,YAC3CjB,eAAa,CACjBf,YAAasC,EACbtB,SAAUhB,EACVW,iBAAkB,WAClBM,YAAa,MACbgB,YAAa,CAAC,cAAe,SAC7BZ,QAAQ,GAEZ,CAEJ,OAAS1B,GACPf,QAAQsD,KAAK,kBAAmBvC,EAClC,CACF,CAKA,mCAAcR,GACZ,MAAMU,EAAUC,EAAI,eAAeC,QAC7BC,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aAC/D,UACQoC,EAAAA,0BAA0BC,4BAA4BxC,EAC9D,OAASL,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,YAAY6C,OAAO9C,OACpCA,CACR,CACAE,EAAQS,QAAQxB,EAAMyB,MAAM,YAC9B,CAKA,yBAAclB,GACZ,MAAMW,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aACzDN,EAAUC,EAAI,aAAaC,QAEjC,UACQ2C,EAAAA,2BAA2B1C,GACjCH,EAAQS,QAAQxB,EAAMyB,MAAM,YAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,WACjBD,CACR,CACF,CAKA,6BAAcL,GACZ,MAAMU,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aACzDN,EAAUC,EAAI,eAAeC,QACnC,UACQ4C,EAAAA,cAAc3C,GACpBH,EAAQS,QAAQxB,EAAMyB,MAAM,cAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,eACjBD,CACR,CACF,CAKA,0BAAcJ,GACZ,MAAMS,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aACzDN,EAAUC,EAAI,cAAcC,QAClC,UACQ6C,EAAAA,gBAAgB5C,GACtBH,EAAQS,QAAQxB,EAAMyB,MAAM,aAC9B,CAAA,MACEV,EAAQqC,KAAKpD,EAAM+D,OAAO,iBAC5B,CACF,CAKA,uBAAcrD,GACZ,MAAMQ,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aAEzDM,EAAeR,EAAAA,KAAK9B,EAAAA,QAAQD,GAAY,aAExC2B,EAAUC,EAAI,gBAAgBC,QACpC,IACE,MAAM+C,EAAc7C,EAAAA,KAAKQ,EAAc,UAAW,aAC5CsC,EAAiB9C,EAAAA,KAAKD,EAAa,UAEzC,UAEQI,EAAAA,eAAeC,UAAU0C,GAE/B,MAAMC,QAAc5C,iBAAe6C,QAAQH,GAC3C,IAAA,MAAWI,KAAQF,EAAO,CACxB,MAAMG,EAAalD,EAAAA,KAAK6C,EAAaI,GAC/BhD,EAAaD,EAAAA,KAAK8C,EAAgBG,SACnB9C,iBAAegD,OAAOD,WAEnC/C,iBAAeiD,SAASF,EAAYjD,SAEpCE,iBAAekD,cAAcpD,EAAY,KAEnD,CAEF,OAASP,GAEPf,QAAQsD,KAAK,sBAAuBvC,EACtC,CACAE,EAAQS,QAAQxB,EAAMyB,MAAM,eAC9B,OAASZ,GAEP,MADAE,EAAQW,KAAK1B,EAAMc,IAAI,gBACjBD,CACR,CACF,CAKA,uBAAcF,GACZ,MAAMO,EAAcC,EAAAA,KAAK1B,KAAKF,QAAQ6B,WAAY3B,KAAKF,QAAQ8B,aAEzDoD,EAAgBzD,EAAI,YAAYC,QACtC,UACQyD,EAAAA,cAAcxD,GAAa,GACjCuD,EAAcjD,QAAQxB,EAAMyB,MAAM,WACpC,CAAA,MACEgD,EAAcrB,KAAKpD,EAAM+D,OAAO,mBAClC,CACF,CAKQ,wBAAAnD,GACNd,QAAQC,MACRD,QAAQC,IAAIC,EAAMyB,MAAM,eACxB3B,QAAQC,IAAIC,EAAM2E,KAAK,cAAclF,KAAKF,QAAQ8B,+BAClDvB,QAAQC,MACR,MAAM6E,EAAqD,WAAlCnF,KAAKF,QAAQsC,iBAAgC,OAAS,WACzEgD,EACuB,SAA3BpF,KAAKF,QAAQuF,UAAuB,QAAWrF,KAAKF,QAAQuF,WAAa,QAC3EhF,QAAQC,IACNC,EAAME,KAAK,UAAUT,KAAKF,QAAQ8B,gBAAgBuD,OAAsBC,MAE5E,CAKA,mBAAc7C,CAAc+C,EAAgBC,SACpC1D,EAAAA,eAAeC,UAAUyD,GAE/B,MAAMC,QAAgB3D,iBAAewB,qBAAqBiC,GAE1D,IAAA,MAAWG,KAASD,EAAS,CAC3B,MAAMZ,EAAalD,EAAAA,KAAK4D,EAAQG,EAAMhC,MAChC9B,EAAaD,EAAAA,KAAK6D,EAAQE,EAAMhC,MAElCgC,EAAMlC,oBACFvD,KAAKuC,cAAcqC,EAAYjD,SAE/B3B,KAAK0F,gCAAgCd,EAAYjD,EAE3D,CACF,CAKA,qCAAc+D,CACZd,EACAjD,GAEA,MAGMgE,SAHgB9D,iBAAe+D,SAAShB,IAGdiB,QAAQ,uBAAwB7F,KAAKF,QAAQ8B,mBAEvEC,iBAAeiE,UAAUnE,EAAYgE,EAC7C,wBCzYFI,eACEnE,EACA9B,EAA0B,IAE1B,MAAMkG,EAAiB,IAAIC,wBACrBC,QAAuBF,EAAeG,kBAAkBvE,EAAa9B,GAErEsG,EAAW,IAAIvG,EAAsBqG,SACrCE,EAASnG,SACjB"}