{"version":3,"file":"create-IPokl1f-.mjs","names":[],"sources":["../src/vendor/schemas.ts","../src/vendor/core/virtual-fs.ts","../src/vendor/post-process/processors/package-json.ts","../src/vendor/post-process/processors/env-vars.ts","../src/vendor/post-process/processors/readme.ts","../src/vendor/post-process/index.ts","../src/vendor/generator.ts","../src/utils/template-fetcher.ts","../src/utils/project-writer.ts","../src/utils/package-manager.ts","../src/prompts/index.ts","../src/vendor/flag-parser.ts","../src/commands/create.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ProjectNameSchema = z.string().min(1).max(255);\n\nexport const RuntimeSchema = z.enum([\"bun\", \"node\"] as const);\n\nexport const TemplateSchema = z.string().min(1);\n\nexport const PackageManagerSchema = z.enum([\"npm\", \"pnpm\", \"bun\"] as const);\n\nexport const AddonSchema = z.enum([\"mcp\", \"skills\", \"vite-plus\"] as const);\nexport const AddonsSchema = z.array(AddonSchema);\n\nexport const ProjectConfigSchema = z.object({\n  projectName: ProjectNameSchema,\n  projectDir: z.string(),\n  template: TemplateSchema,\n  runtime: RuntimeSchema,\n  packageManager: PackageManagerSchema,\n  git: z.boolean(),\n  install: z.boolean(),\n  features: z.record(z.string(), z.union([z.string(), z.boolean()])),\n});\n\nexport type ProjectConfig = z.infer<typeof ProjectConfigSchema>;\nexport type Runtime = z.infer<typeof RuntimeSchema>;\nexport type Template = z.infer<typeof TemplateSchema>;\nexport type PackageManager = z.infer<typeof PackageManagerSchema>;\nexport type Addon = z.infer<typeof AddonSchema>;\n","export type VFSNode = {\n  name: string;\n  path: string;\n} & (\n  | { type: \"file\"; content?: string }\n  | { type: \"directory\"; children: VFSNode[] }\n);\n\nexport class VirtualFileSystem {\n  private files: Map<string, string> = new Map();\n\n  writeFile(path: string, content: string): void {\n    this.files.set(path, content);\n  }\n\n  readFile(path: string): string | undefined {\n    return this.files.get(path);\n  }\n\n  getAllFiles(): string[] {\n    return [...this.files.keys()].sort();\n  }\n\n  toTree(rootName: string = \"project\"): VFSNode {\n    const root: VFSNode = {\n      name: rootName,\n      type: \"directory\",\n      path: \"/\",\n      children: [],\n    };\n\n    for (const [filePath, content] of this.files) {\n      const parts = filePath.split(\"/\").filter(Boolean);\n      let current = root;\n\n      for (let i = 0; i < parts.length; i++) {\n        const part = parts[i];\n        const isLast = i === parts.length - 1;\n        const parentPath = parts.slice(0, i).join(\"/\");\n        const fullPath = parentPath ? `${parentPath}/${part}` : part;\n\n        if (isLast) {\n          current.children.push({\n            name: part,\n            type: \"file\",\n            path: fullPath,\n            content,\n          });\n        } else {\n          let dir = current.children.find(\n            (c): c is VFSNode & { type: \"directory\"; children: VFSNode[] } =>\n              c.type === \"directory\" && c.name === part\n          );\n          if (!dir) {\n            dir = {\n              name: part,\n              type: \"directory\",\n              path: fullPath,\n              children: [],\n            };\n            current.children.push(dir);\n          }\n          current = dir;\n        }\n      }\n    }\n\n    return root;\n  }\n}\n","import type { ProjectConfig } from \"../../schemas\";\nimport type { VirtualFileSystem } from \"../../core/virtual-fs\";\n\nexport function processPackageJson(\n  vfs: VirtualFileSystem,\n  config: ProjectConfig\n): void {\n  const content = vfs.readFile(\"package.json\");\n  if (!content) return;\n\n  const pkg = JSON.parse(content);\n  pkg.name = config.projectName;\n\n  vfs.writeFile(\"package.json\", JSON.stringify(pkg, null, 2) + \"\\n\");\n}\n","import type { ProjectConfig } from \"../../schemas\";\nimport type { VirtualFileSystem } from \"../../core/virtual-fs\";\n\nexport function processEnvVars(\n  vfs: VirtualFileSystem,\n  config: ProjectConfig\n): void {\n  const vars: string[] = [\n    `# ${config.projectName}`,\n    `NODE_ENV=development`,\n  ];\n\n  vfs.writeFile(\".env\", vars.join(\"\\n\") + \"\\n\");\n}\n","import type { ProjectConfig } from \"../../schemas\";\nimport type { VirtualFileSystem } from \"../../core/virtual-fs\";\n\nexport function processReadme(\n  vfs: VirtualFileSystem,\n  config: ProjectConfig\n): void {\n  const readme = `# ${config.projectName}\n\nFastify + React SSR + RSC\n\n## Getting Started\n\n\\`\\`\\`bash\nnpm install\nnpm run dev\n\\`\\`\\`\n\nOpen [http://localhost:3000](http://localhost:3000).\n\n## Scripts\n\n| Command           | Description                          |\n| ----------------- | ------------------------------------ |\n| \\`npm run dev\\`     | Start development server with HMR     |\n| \\`npm run build\\`   | Build for production                  |\n| \\`npm run start\\`   | Start production server               |\n\n## Stack\n\n- **Framework:** Fastify 5 + React 19 + Vite 8\n- **SSR:** Reactify (@cyb3rcore/reactify)\n- **RSC:** React Server Components with Fastify context bridge\n- **Routing:** File-system based (reactify/router)\n- **State:** Valtio\n- **Streaming:** React 19 renderToReadableStream\n`;\n\n  vfs.writeFile(\"README.md\", readme);\n}\n","import type { ProjectConfig } from \"../schemas\";\nimport type { VirtualFileSystem } from \"../core/virtual-fs\";\nimport { processPackageJson } from \"./processors/package-json\";\nimport { processEnvVars } from \"./processors/env-vars\";\nimport { processReadme } from \"./processors/readme\";\n\nexport function runPostProcessors(\n  vfs: VirtualFileSystem,\n  config: ProjectConfig\n): void {\n  processPackageJson(vfs, config);\n  processEnvVars(vfs, config);\n  processReadme(vfs, config);\n}\n","// packages/cli/src/vendor/generator.ts\nimport Handlebars from 'handlebars'\nimport type { ProjectConfig } from './schemas'\nimport { VirtualFileSystem } from './core/virtual-fs'\nimport { runPostProcessors } from './post-process'\n\nexport interface TemplateMap {\n  [path: string]: string\n}\n\nexport function registerTemplateHelpers(): void {\n  Handlebars.registerHelper('eq', (a: unknown, b: unknown) => a === b)\n  Handlebars.registerHelper('ne', (a: unknown, b: unknown) => a !== b)\n  Handlebars.registerHelper('and', (...args: unknown[]) => args.slice(0, -1).every(Boolean))\n  Handlebars.registerHelper('or', (...args: unknown[]) => args.slice(0, -1).some(Boolean))\n  Handlebars.registerHelper('includes', (arr: unknown[], val: unknown) => Array.isArray(arr) && arr.includes(val))\n  Handlebars.registerHelper('not', (v: unknown) => !v)\n  Handlebars.registerHelper('raw', function (options) { return options.fn() })\n}\n\nexport function processTemplatesFromPrefix(\n  vfs: VirtualFileSystem,\n  templates: TemplateMap,\n  prefix: string,\n  outputPrefix: string,\n  config: ProjectConfig\n): void {\n  const prefixPath = prefix ? prefix.replace(/\\/$/, '') + '/' : ''\n  for (const [templatePath, rawContent] of Object.entries(templates)) {\n    if (prefixPath && !templatePath.startsWith(prefixPath)) continue\n    const relativePath = prefixPath ? templatePath.slice(prefixPath.length) : templatePath\n    if (!relativePath) continue\n    const outputPath = outputPrefix ? `${outputPrefix.replace(/\\/$/, '')}/${relativePath}` : relativePath\n    let rendered: string\n    try {\n      const template = Handlebars.compile(rawContent)\n      rendered = template({ ...config, ...config.features })\n    } catch (err) {\n      throw new Error(`Failed to render template \"${templatePath}\": ${(err as Error).message}`)\n    }\n    const finalPath = outputPath.replace(/\\.hbs$/, '').replace(/^_/, '.')\n    vfs.writeFile(finalPath, rendered)\n  }\n}\n\n/**\n * Determines whether a feature directory should be processed.\n * Naming convention examples:\n *   auth          → features.auth truthy\n *   cms-shared    → features.cms truthy\n *   cms-erpnext   → features.cms === \"erpnext\"\n *   multi-company  → features.multiCompany truthy\n */\n/**\n * Converts kebab-case to camelCase.\n * \"multi-company\" → \"multiCompany\"\n */\nfunction kebabToCamel(str: string): string {\n  return str.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase())\n}\n\nexport function shouldProcessFeature(\n  dir: string,\n  features: Record<string, string | boolean>,\n): boolean {\n  const lastHyphen = dir.lastIndexOf('-')\n  if (lastHyphen === -1) {\n    // Simple feature name: \"auth\"\n    return !!features[dir]\n  }\n  const prefix = dir.slice(0, lastHyphen)\n  const suffix = dir.slice(lastHyphen + 1)\n  if (suffix === 'shared') {\n    // \"cms-shared\" → features.cms truthy\n    return !!features[prefix]\n  }\n  // \"cms-erpnext\" → features.cms === \"erpnext\"\n  if (features[prefix] === suffix) return true\n  // \"multi-company\" → features.multiCompany truthy\n  return !!features[kebabToCamel(dir)]\n}\n\n/**\n * Discovers feature directory names from the templates map.\n * Returns them sorted for deterministic processing order.\n */\nexport function discoverFeatureDirs(templates: TemplateMap): string[] {\n  const dirs = new Set<string>()\n  const prefix = 'templates/features/'\n  for (const path of Object.keys(templates)) {\n    if (path.startsWith(prefix)) {\n      const rest = path.slice(prefix.length)\n      const dir = rest.split('/')[0]\n      if (dir) dirs.add(dir)\n    }\n  }\n  return [...dirs].sort()\n}\n\nexport function generateProject(\n  vfs: VirtualFileSystem,\n  templates: TemplateMap,\n  config: ProjectConfig\n): void {\n  processTemplatesFromPrefix(vfs, templates, 'templates/core', '', config)\n\n  const featureDirs = discoverFeatureDirs(templates)\n  for (const dir of featureDirs) {\n    if (shouldProcessFeature(dir, config.features)) {\n      processTemplatesFromPrefix(vfs, templates, `templates/features/${dir}`, '', config)\n    }\n  }\n  runPostProcessors(vfs, config)\n}\n","import type { TemplateMap } from \"../vendor/index\";\nimport { readFileSync, readdirSync, mkdtempSync, rmSync } from \"node:fs\";\nimport { join, relative } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { execSync } from \"node:child_process\";\n\nconst MAX_RETRIES = 3;\n\nexport async function fetchTemplates(\n  template?: string\n): Promise<TemplateMap> {\n  const name = template || \"lamsa\";\n  const url = `git@github.com:cyb3rcore/template-${name}.git`;\n\n  let lastError: Error | null = null;\n  for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {\n    try {\n      return await cloneAndLoad(url);\n    } catch (err) {\n      lastError = err instanceof Error ? err : new Error(String(err));\n      if (attempt < MAX_RETRIES) {\n        // Exponential backoff: 1s, 2s, 4s...\n        const delay = Math.pow(2, attempt - 1) * 1000;\n        console.warn(`Template fetch failed (attempt ${attempt}/${MAX_RETRIES}), retrying in ${delay}ms...`);\n        await new Promise((r) => setTimeout(r, delay));\n      }\n    }\n  }\n\n  throw new Error(\n    `Failed to fetch templates after ${MAX_RETRIES} attempts: ${lastError?.message}`\n  );\n}\n\nfunction cloneAndLoad(repoUrl: string): TemplateMap {\n  const tmpDir = mkdtempSync(join(tmpdir(), \"cyber-stack-templates-\"));\n\n  try {\n    execSync(`git clone --depth 1 \"${repoUrl}\" \"${tmpDir}\"`, {\n      stdio: \"pipe\",\n      timeout: 30_000,\n    });\n\n    const templatesDir = join(tmpDir, \"templates\");\n    return loadLocalTemplates(templatesDir);\n  } finally {\n    try {\n      rmSync(tmpDir, { recursive: true, force: true });\n    } catch {\n      // best effort cleanup\n    }\n  }\n}\n\nfunction loadLocalTemplates(dir: string): TemplateMap {\n  const templates: TemplateMap = {};\n\n  function walkDir(currentDir: string) {\n    const entries = readdirSync(currentDir, { withFileTypes: true });\n\n    for (const entry of entries) {\n      const fullPath = join(currentDir, entry.name);\n      if (entry.isDirectory()) {\n        walkDir(fullPath);\n      } else if (entry.isFile()) {\n        const relativePath = relative(dir, fullPath);\n        templates[`templates/${relativePath}`] = readFileSync(fullPath, \"utf-8\");\n      }\n    }\n  }\n\n  walkDir(dir);\n  return templates;\n}\n","import { VirtualFileSystem } from \"../vendor/index\";\nimport { mkdirSync, writeFileSync, rmSync } from \"node:fs\";\nimport { join, dirname } from \"node:path\";\nimport consola from \"consola\";\n\nexport async function writeProject(\n  vfs: VirtualFileSystem,\n  targetDir: string\n): Promise<void> {\n  try {\n    mkdirSync(targetDir, { recursive: true });\n  } catch {\n    throw new Error(`Cannot create directory: ${targetDir}`);\n  }\n\n  const files = vfs.getAllFiles();\n  const written: string[] = [];\n\n  try {\n    for (const filePath of files) {\n      const content = vfs.readFile(filePath)!;\n      const fullPath = join(targetDir, filePath);\n      const dir = dirname(fullPath);\n\n      mkdirSync(dir, { recursive: true });\n      writeFileSync(fullPath, content, \"utf-8\");\n      written.push(fullPath);\n    }\n  } catch (err) {\n    // Roll back partial writes\n    consola.warn(\"Write failed, rolling back...\");\n    for (const path of written) {\n      try {\n        rmSync(path, { force: true });\n      } catch {\n        // best effort cleanup\n      }\n    }\n    // Try to remove empty directories (reverse order)\n    const dirs = new Set(written.map((p) => dirname(p)));\n    for (const dir of [...dirs].reverse()) {\n      try {\n        rmSync(dir, { recursive: true, force: true });\n      } catch {\n        // directory might have pre-existing files\n      }\n    }\n    throw new Error(\n      `Failed to write project: ${err instanceof Error ? err.message : String(err)}`\n    );\n  }\n\n  consola.success(`Wrote ${files.length} files to ${targetDir}`);\n}\n\nexport function getProjectDir(projectName: string): string {\n  return join(process.cwd(), projectName);\n}\n","import { execSync } from \"node:child_process\";\nimport consola from \"consola\";\nimport type { PackageManager } from \"../vendor/schemas\";\n\nexport function installDependencies(\n  projectDir: string,\n  packageManager: PackageManager\n): void {\n  consola.info(`Installing dependencies with ${packageManager}...`);\n\n  const commands: Record<PackageManager, string> = {\n    npm: \"npm install\",\n    pnpm: \"pnpm install\",\n    bun: \"bun install\",\n  };\n\n  try {\n    execSync(commands[packageManager], {\n      cwd: projectDir,\n      stdio: \"inherit\",\n    });\n    consola.success(\"Dependencies installed\");\n  } catch {\n    consola.warn(\"Dependency installation failed. You can run it manually.\");\n  }\n}\n\nexport function initGitRepo(projectDir: string): void {\n  consola.info(\"Initializing git repository...\");\n\n  try {\n    execSync(\"git init\", { cwd: projectDir, stdio: \"ignore\" });\n    execSync(\"git add .\", { cwd: projectDir, stdio: \"ignore\" });\n    execSync('git commit -m \"initial: scaffold from create-reactify-app\"', {\n      cwd: projectDir,\n      stdio: \"ignore\",\n    });\n    consola.success(\"Git repository initialized\");\n  } catch {\n    consola.warn(\"Git initialization failed. You can init it manually.\");\n  }\n}\n","import * as p from '@clack/prompts'\nimport type { ProjectConfig, Runtime, PackageManager } from '../vendor/schemas'\n\nexport async function fillMissingFlags(\n  config: Partial<ProjectConfig>,\n): Promise<ProjectConfig> {\n  const needsProjectName = !config.projectName\n  const needsRuntime = !config.runtime\n  const needsPackageManager = !config.packageManager\n\n  if (!needsProjectName && !needsRuntime && !needsPackageManager) {\n    return {\n      projectName: config.projectName || 'my-app',\n      projectDir: '',\n      template: config.template || 'lamsa',\n      runtime: config.runtime as Runtime,\n      packageManager: config.packageManager as PackageManager,\n      git: config.git ?? true,\n      install: config.install ?? false,\n      features: config.features || {},\n    }\n  }\n\n  p.intro('create-reactify-app')\n\n  const prompter: Record<string, () => Promise<any>> = {}\n\n  if (needsProjectName) {\n    prompter.projectName = () =>\n      p.text({\n        message: 'What is your project named?',\n        initialValue: 'my-app',\n        validate: (value: string | undefined) => {\n          if (!value) return 'Project name is required'\n        },\n      })\n  }\n\n  if (needsRuntime) {\n    prompter.runtime = () =>\n      p.select({\n        message: 'Select runtime',\n        options: [\n          { value: 'bun', label: 'Bun', hint: 'fast, modern' },\n          { value: 'node', label: 'Node.js', hint: 'stable, universal' },\n        ],\n        initialValue: 'bun',\n      })\n  }\n\n  if (needsPackageManager) {\n    prompter.packageManager = () =>\n      p.select({\n        message: 'Select package manager',\n        options: [\n          { value: 'bun', label: 'Bun' },\n          { value: 'pnpm', label: 'pnpm' },\n          { value: 'npm', label: 'npm' },\n        ],\n        initialValue: 'bun',\n      })\n  }\n\n  const prompterGroup = p.group(prompter as Record<string, () => Promise<unknown>>, {\n    onCancel: () => {\n      p.cancel('Operation cancelled.')\n      process.exit(0)\n    },\n  })\n  const result: Record<string, unknown> = await prompterGroup\n\n  p.outro('Scaffolding your project...')\n\n  return {\n    projectName: (result.projectName as string) || config.projectName || 'my-app',\n    projectDir: '',\n    template: config.template || 'lamsa',\n    runtime: (result.runtime as Runtime) || config.runtime || 'bun',\n    packageManager: (result.packageManager as PackageManager) || config.packageManager || 'bun',\n    git: config.git ?? true,\n    install: config.install ?? false,\n    features: config.features || {},\n  }\n}\n","// packages/cli/src/vendor/flag-parser.ts\n\nconst INFRA_FLAGS = new Set([\n  'template',\n  'yes', 'y',\n  'packageManager', 'package-manager',\n  'git', 'noGit', 'no-git',\n  'install',\n  'dryRun', 'dry-run',\n  'runtime',\n])\n\n/**\n * Extracts feature flags from CLI argv.\n * Skips known infra flags. Everything else becomes a feature:\n *   --flag        → { flag: true }\n *   --flag value   → { flag: \"value\" }\n *   --kebab-flag   → { kebabFlag: \"value\" }  (camelCase conversion)\n */\nexport function parseFlags(argv: string[]): Record<string, string | boolean> {\n  const features: Record<string, string | boolean> = {}\n  let i = 0\n  while (i < argv.length) {\n    const arg = argv[i]\n    if (!arg.startsWith('--')) { i++; continue }\n    const raw = arg.slice(2)\n    const key = raw.replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n    if (INFRA_FLAGS.has(key) || INFRA_FLAGS.has(raw)) { i++; continue }\n    const next = argv[i + 1]\n    if (next && !next.startsWith('--')) {\n      features[key] = next\n      i += 2\n    } else {\n      features[key] = true\n      i++\n    }\n  }\n  return features\n}\n","import { Command } from 'commander'\nimport consola from 'consola'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { ProjectConfig, Template, Runtime, PackageManager } from '../vendor/schemas'\nimport { ProjectConfigSchema } from '../vendor/schemas'\nimport { generateProject, VirtualFileSystem, registerTemplateHelpers } from '../vendor/index'\nimport { fetchTemplates } from '../utils/template-fetcher'\nimport { writeProject, getProjectDir } from '../utils/project-writer'\nimport { installDependencies, initGitRepo } from '../utils/package-manager'\nimport { fillMissingFlags } from '../prompts'\nimport { parseFlags } from '../vendor/flag-parser'\n\nexport interface CreateOptions {\n  projectName?: string\n  template?: string\n  runtime?: string\n  packageManager?: string\n  git?: boolean\n  install?: boolean\n  yes?: boolean\n  dryRun?: boolean\n}\n\nexport async function createProject(options: CreateOptions): Promise<void> {\n  registerTemplateHelpers()\n  const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'))\n  consola.info(`create-reactify-app v${version}`)\n\n  // Build partial config from CLI args\n  let config: Partial<ProjectConfig> = {\n    projectName: options.projectName,\n    template: (options.template as Template) || 'lamsa',\n    runtime: (options.runtime as Runtime) || 'bun',\n    packageManager: (options.packageManager as PackageManager) || 'bun',\n    git: options.git !== false,\n    install: options.install || false,\n    features: {},\n  }\n\n  // Extract feature flags from CLI — parse the raw argv\n  config.features = parseFlags(process.argv.slice(2))\n\n  // Fill missing flags with interactive prompts (unless --yes)\n  if (!options.yes) {\n    try {\n      config = await fillMissingFlags(config)\n    } catch (err) {\n      consola.error(err instanceof Error ? err.message : 'Prompt failed')\n      process.exit(1)\n    }\n  }\n\n  // Set defaults for any remaining fields\n  config.projectName = config.projectName || 'my-app'\n  config.projectDir = config.projectDir || ''\n  config.runtime = config.runtime || 'bun'\n  config.packageManager = config.packageManager || 'bun'\n  config.git = config.git !== undefined ? config.git : true\n  config.install = config.install || false\n  config.features = config.features || {}\n\n  // Validate\n  const parsed = ProjectConfigSchema.safeParse(config)\n  if (!parsed.success) {\n    consola.error('Invalid configuration:')\n    for (const issue of parsed.error.issues) {\n      consola.error(`  ${issue.path.join('.')}: ${issue.message}`)\n    }\n    process.exit(1)\n  }\n\n  const finalConfig = parsed.data\n\n  // Handle project directory\n  if (finalConfig.projectName.startsWith('/')) {\n    finalConfig.projectDir = finalConfig.projectName\n    finalConfig.projectName = finalConfig.projectName.split('/').pop() || 'my-app'\n  } else {\n    finalConfig.projectDir = getProjectDir(finalConfig.projectName)\n  }\n\n  if (existsSync(finalConfig.projectDir)) {\n    consola.error(`Directory \"${finalConfig.projectDir}\" already exists.`)\n    process.exit(1)\n  }\n\n  if (options.dryRun) {\n    consola.info('Dry run — validation passed')\n    consola.info(JSON.stringify(finalConfig, null, 2))\n    return\n  }\n\n  // Fetch templates from GitHub\n  consola.info('Fetching templates...')\n  const templates = await fetchTemplates(finalConfig.template)\n\n  // Generate project in VFS\n  const vfs = new VirtualFileSystem()\n  generateProject(vfs, templates, finalConfig)\n\n  // Write to disk\n  await writeProject(vfs, finalConfig.projectDir)\n\n  // Git init\n  if (finalConfig.git !== false) {\n    initGitRepo(finalConfig.projectDir)\n  }\n\n  // Install deps\n  if (finalConfig.install) {\n    installDependencies(finalConfig.projectDir, finalConfig.packageManager)\n  }\n\n  consola.success(`Project \"${finalConfig.projectName}\" created!`)\n  consola.info(`  cd ${finalConfig.projectName}`)\n  if (!finalConfig.install) {\n    const pm = finalConfig.packageManager\n    const installCmd = pm === 'bun' ? 'bun i' : pm === 'pnpm' ? 'pnpm i' : 'npm i'\n    consola.info(`  ${installCmd}`)\n  }\n  consola.info(`  ${finalConfig.packageManager} run dev`)\n}\n\nexport async function runCli(): Promise<void> {\n  const program = new Command()\n    .name('create-reactify-app')\n    .argument('[projectName]', 'Project name or directory')\n    .option('--template <name>', 'Template to use (default: lamsa)')\n    .option('-y, --yes', 'Skip prompts, use defaults')\n    .option('--package-manager <name>', 'Package manager (npm | pnpm | bun)')\n    .option('--no-git', 'Skip git initialization')\n    .option('--install', 'Install dependencies')\n    .option('--dry-run', 'Validate without writing')\n    .option('--runtime <name>', 'Runtime (bun | node)')\n    .allowUnknownOption()\n    .allowExcessArguments(true)\n    .action(async (projectName, opts) => {\n      await createProject({\n        projectName,\n        template: opts.template as string | undefined,\n        yes: !!opts.yes,\n        packageManager: opts.packageManager as string | undefined,\n        git: opts.git as boolean | undefined,\n        install: !!opts.install,\n        dryRun: !!opts.dryRun,\n        runtime: opts.runtime as string | undefined,\n      })\n    })\n\n  await program.parseAsync(process.argv)\n}\n"],"mappings":";;;;;;;;;;AAEA,MAAa,oBAAoB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AAE1D,MAAa,gBAAgB,EAAE,KAAK,CAAC,OAAO,MAAM,CAAU;AAE5D,MAAa,iBAAiB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAE9C,MAAa,uBAAuB,EAAE,KAAK;CAAC;CAAO;CAAQ;AAAK,CAAU;AAE1E,MAAa,cAAc,EAAE,KAAK;CAAC;CAAO;CAAU;AAAW,CAAU;AAC7C,EAAE,MAAM,WAAW;AAE/C,MAAa,sBAAsB,EAAE,OAAO;CAC1C,aAAa;CACb,YAAY,EAAE,OAAO;CACrB,UAAU;CACV,SAAS;CACT,gBAAgB;CAChB,KAAK,EAAE,QAAQ;CACf,SAAS,EAAE,QAAQ;CACnB,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnE,CAAC;;;ACdD,IAAa,oBAAb,MAA+B;CAC7B,wBAAqC,IAAI,IAAI;CAE7C,UAAU,MAAc,SAAuB;EAC7C,KAAK,MAAM,IAAI,MAAM,OAAO;CAC9B;CAEA,SAAS,MAAkC;EACzC,OAAO,KAAK,MAAM,IAAI,IAAI;CAC5B;CAEA,cAAwB;EACtB,OAAO,CAAC,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK;CACrC;CAEA,OAAO,WAAmB,WAAoB;EAC5C,MAAM,OAAgB;GACpB,MAAM;GACN,MAAM;GACN,MAAM;GACN,UAAU,CAAC;EACb;EAEA,KAAK,MAAM,CAAC,UAAU,YAAY,KAAK,OAAO;GAC5C,MAAM,QAAQ,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;GAChD,IAAI,UAAU;GAEd,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,MAAM,OAAO,MAAM;IACnB,MAAM,SAAS,MAAM,MAAM,SAAS;IACpC,MAAM,aAAa,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;IAC7C,MAAM,WAAW,aAAa,GAAG,WAAW,GAAG,SAAS;IAExD,IAAI,QACF,QAAQ,SAAS,KAAK;KACpB,MAAM;KACN,MAAM;KACN,MAAM;KACN;IACF,CAAC;SACI;KACL,IAAI,MAAM,QAAQ,SAAS,MACxB,MACC,EAAE,SAAS,eAAe,EAAE,SAAS,IACzC;KACA,IAAI,CAAC,KAAK;MACR,MAAM;OACJ,MAAM;OACN,MAAM;OACN,MAAM;OACN,UAAU,CAAC;MACb;MACA,QAAQ,SAAS,KAAK,GAAG;KAC3B;KACA,UAAU;IACZ;GACF;EACF;EAEA,OAAO;CACT;AACF;;;AClEA,SAAgB,mBACd,KACA,QACM;CACN,MAAM,UAAU,IAAI,SAAS,cAAc;CAC3C,IAAI,CAAC,SAAS;CAEd,MAAM,MAAM,KAAK,MAAM,OAAO;CAC9B,IAAI,OAAO,OAAO;CAElB,IAAI,UAAU,gBAAgB,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI,IAAI;AACnE;;;ACXA,SAAgB,eACd,KACA,QACM;CACN,MAAM,OAAiB,CACrB,KAAK,OAAO,eACZ,sBACF;CAEA,IAAI,UAAU,QAAQ,KAAK,KAAK,IAAI,IAAI,IAAI;AAC9C;;;ACVA,SAAgB,cACd,KACA,QACM;CACN,MAAM,SAAS,KAAK,OAAO,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BvC,IAAI,UAAU,aAAa,MAAM;AACnC;;;ACjCA,SAAgB,kBACd,KACA,QACM;CACN,mBAAmB,KAAK,MAAM;CAC9B,eAAe,KAAK,MAAM;CAC1B,cAAc,KAAK,MAAM;AAC3B;;;ACHA,SAAgB,0BAAgC;CAC9C,WAAW,eAAe,OAAO,GAAY,MAAe,MAAM,CAAC;CACnE,WAAW,eAAe,OAAO,GAAY,MAAe,MAAM,CAAC;CACnE,WAAW,eAAe,QAAQ,GAAG,SAAoB,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC;CACzF,WAAW,eAAe,OAAO,GAAG,SAAoB,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;CACvF,WAAW,eAAe,aAAa,KAAgB,QAAiB,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,GAAG,CAAC;CAC/G,WAAW,eAAe,QAAQ,MAAe,CAAC,CAAC;CACnD,WAAW,eAAe,OAAO,SAAU,SAAS;EAAE,OAAO,QAAQ,GAAG;CAAE,CAAC;AAC7E;AAEA,SAAgB,2BACd,KACA,WACA,QACA,cACA,QACM;CACN,MAAM,aAAa,SAAS,OAAO,QAAQ,OAAO,EAAE,IAAI,MAAM;CAC9D,KAAK,MAAM,CAAC,cAAc,eAAe,OAAO,QAAQ,SAAS,GAAG;EAClE,IAAI,cAAc,CAAC,aAAa,WAAW,UAAU,GAAG;EACxD,MAAM,eAAe,aAAa,aAAa,MAAM,WAAW,MAAM,IAAI;EAC1E,IAAI,CAAC,cAAc;EACnB,MAAM,aAAa,eAAe,GAAG,aAAa,QAAQ,OAAO,EAAE,EAAE,GAAG,iBAAiB;EACzF,IAAI;EACJ,IAAI;GAEF,WADiB,WAAW,QAAQ,UAClB,CAAC,CAAC;IAAE,GAAG;IAAQ,GAAG,OAAO;GAAS,CAAC;EACvD,SAAS,KAAK;GACZ,MAAM,IAAI,MAAM,8BAA8B,aAAa,KAAM,IAAc,SAAS;EAC1F;EACA,MAAM,YAAY,WAAW,QAAQ,UAAU,EAAE,CAAC,CAAC,QAAQ,MAAM,GAAG;EACpE,IAAI,UAAU,WAAW,QAAQ;CACnC;AACF;;;;;;;;;;;;;AAcA,SAAS,aAAa,KAAqB;CACzC,OAAO,IAAI,QAAQ,cAAc,GAAG,MAAc,EAAE,YAAY,CAAC;AACnE;AAEA,SAAgB,qBACd,KACA,UACS;CACT,MAAM,aAAa,IAAI,YAAY,GAAG;CACtC,IAAI,eAAe,IAEjB,OAAO,CAAC,CAAC,SAAS;CAEpB,MAAM,SAAS,IAAI,MAAM,GAAG,UAAU;CACtC,MAAM,SAAS,IAAI,MAAM,aAAa,CAAC;CACvC,IAAI,WAAW,UAEb,OAAO,CAAC,CAAC,SAAS;CAGpB,IAAI,SAAS,YAAY,QAAQ,OAAO;CAExC,OAAO,CAAC,CAAC,SAAS,aAAa,GAAG;AACpC;;;;;AAMA,SAAgB,oBAAoB,WAAkC;CACpE,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,SAAS;CACf,KAAK,MAAM,QAAQ,OAAO,KAAK,SAAS,GACtC,IAAI,KAAK,WAAW,MAAM,GAAG;EAE3B,MAAM,MADO,KAAK,MAAM,EACT,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EAC5B,IAAI,KAAK,KAAK,IAAI,GAAG;CACvB;CAEF,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK;AACxB;AAEA,SAAgB,gBACd,KACA,WACA,QACM;CACN,2BAA2B,KAAK,WAAW,kBAAkB,IAAI,MAAM;CAEvE,MAAM,cAAc,oBAAoB,SAAS;CACjD,KAAK,MAAM,OAAO,aAChB,IAAI,qBAAqB,KAAK,OAAO,QAAQ,GAC3C,2BAA2B,KAAK,WAAW,sBAAsB,OAAO,IAAI,MAAM;CAGtF,kBAAkB,KAAK,MAAM;AAC/B;;;AC3GA,MAAM,cAAc;AAEpB,eAAsB,eACpB,UACsB;CAEtB,MAAM,MAAM,qCADC,YAAY,QAC6B;CAEtD,IAAI,YAA0B;CAC9B,KAAK,IAAI,UAAU,GAAG,WAAW,aAAa,WAC5C,IAAI;EACF,OAAO,MAAM,aAAa,GAAG;CAC/B,SAAS,KAAK;EACZ,YAAY,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;EAC9D,IAAI,UAAU,aAAa;GAEzB,MAAM,QAAQ,KAAK,IAAI,GAAG,UAAU,CAAC,IAAI;GACzC,QAAQ,KAAK,kCAAkC,QAAQ,GAAG,YAAY,iBAAiB,MAAM,MAAM;GACnG,MAAM,IAAI,SAAS,MAAM,WAAW,GAAG,KAAK,CAAC;EAC/C;CACF;CAGF,MAAM,IAAI,MACR,mCAAmC,YAAY,aAAa,WAAW,SACzE;AACF;AAEA,SAAS,aAAa,SAA8B;CAClD,MAAM,SAAS,YAAY,KAAK,OAAO,GAAG,wBAAwB,CAAC;CAEnE,IAAI;EACF,SAAS,wBAAwB,QAAQ,KAAK,OAAO,IAAI;GACvD,OAAO;GACP,SAAS;EACX,CAAC;EAGD,OAAO,mBADc,KAAK,QAAQ,WACG,CAAC;CACxC,UAAU;EACR,IAAI;GACF,OAAO,QAAQ;IAAE,WAAW;IAAM,OAAO;GAAK,CAAC;EACjD,QAAQ,CAER;CACF;AACF;AAEA,SAAS,mBAAmB,KAA0B;CACpD,MAAM,YAAyB,CAAC;CAEhC,SAAS,QAAQ,YAAoB;EACnC,MAAM,UAAU,YAAY,YAAY,EAAE,eAAe,KAAK,CAAC;EAE/D,KAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,WAAW,KAAK,YAAY,MAAM,IAAI;GAC5C,IAAI,MAAM,YAAY,GACpB,QAAQ,QAAQ;QACX,IAAI,MAAM,OAAO,GAAG;IACzB,MAAM,eAAe,SAAS,KAAK,QAAQ;IAC3C,UAAU,aAAa,kBAAkB,aAAa,UAAU,OAAO;GACzE;EACF;CACF;CAEA,QAAQ,GAAG;CACX,OAAO;AACT;;;ACpEA,eAAsB,aACpB,KACA,WACe;CACf,IAAI;EACF,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;CAC1C,QAAQ;EACN,MAAM,IAAI,MAAM,4BAA4B,WAAW;CACzD;CAEA,MAAM,QAAQ,IAAI,YAAY;CAC9B,MAAM,UAAoB,CAAC;CAE3B,IAAI;EACF,KAAK,MAAM,YAAY,OAAO;GAC5B,MAAM,UAAU,IAAI,SAAS,QAAQ;GACrC,MAAM,WAAW,KAAK,WAAW,QAAQ;GAGzC,UAFY,QAAQ,QAER,GAAG,EAAE,WAAW,KAAK,CAAC;GAClC,cAAc,UAAU,SAAS,OAAO;GACxC,QAAQ,KAAK,QAAQ;EACvB;CACF,SAAS,KAAK;EAEZ,QAAQ,KAAK,+BAA+B;EAC5C,KAAK,MAAM,QAAQ,SACjB,IAAI;GACF,OAAO,MAAM,EAAE,OAAO,KAAK,CAAC;EAC9B,QAAQ,CAER;EAGF,MAAM,OAAO,IAAI,IAAI,QAAQ,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC;EACnD,KAAK,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,GAClC,IAAI;GACF,OAAO,KAAK;IAAE,WAAW;IAAM,OAAO;GAAK,CAAC;EAC9C,QAAQ,CAER;EAEF,MAAM,IAAI,MACR,4BAA4B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAC7E;CACF;CAEA,QAAQ,QAAQ,SAAS,MAAM,OAAO,YAAY,WAAW;AAC/D;AAEA,SAAgB,cAAc,aAA6B;CACzD,OAAO,KAAK,QAAQ,IAAI,GAAG,WAAW;AACxC;;;ACrDA,SAAgB,oBACd,YACA,gBACM;CACN,QAAQ,KAAK,gCAAgC,eAAe,IAAI;CAEhE,MAAM,WAA2C;EAC/C,KAAK;EACL,MAAM;EACN,KAAK;CACP;CAEA,IAAI;EACF,SAAS,SAAS,iBAAiB;GACjC,KAAK;GACL,OAAO;EACT,CAAC;EACD,QAAQ,QAAQ,wBAAwB;CAC1C,QAAQ;EACN,QAAQ,KAAK,0DAA0D;CACzE;AACF;AAEA,SAAgB,YAAY,YAA0B;CACpD,QAAQ,KAAK,gCAAgC;CAE7C,IAAI;EACF,SAAS,YAAY;GAAE,KAAK;GAAY,OAAO;EAAS,CAAC;EACzD,SAAS,aAAa;GAAE,KAAK;GAAY,OAAO;EAAS,CAAC;EAC1D,SAAS,gEAA8D;GACrE,KAAK;GACL,OAAO;EACT,CAAC;EACD,QAAQ,QAAQ,4BAA4B;CAC9C,QAAQ;EACN,QAAQ,KAAK,sDAAsD;CACrE;AACF;;;ACtCA,eAAsB,iBACpB,QACwB;CACxB,MAAM,mBAAmB,CAAC,OAAO;CACjC,MAAM,eAAe,CAAC,OAAO;CAC7B,MAAM,sBAAsB,CAAC,OAAO;CAEpC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,qBACzC,OAAO;EACL,aAAa,OAAO,eAAe;EACnC,YAAY;EACZ,UAAU,OAAO,YAAY;EAC7B,SAAS,OAAO;EAChB,gBAAgB,OAAO;EACvB,KAAK,OAAO,OAAO;EACnB,SAAS,OAAO,WAAW;EAC3B,UAAU,OAAO,YAAY,CAAC;CAChC;CAGF,EAAE,MAAM,qBAAqB;CAE7B,MAAM,WAA+C,CAAC;CAEtD,IAAI,kBACF,SAAS,oBACP,EAAE,KAAK;EACL,SAAS;EACT,cAAc;EACd,WAAW,UAA8B;GACvC,IAAI,CAAC,OAAO,OAAO;EACrB;CACF,CAAC;CAGL,IAAI,cACF,SAAS,gBACP,EAAE,OAAO;EACP,SAAS;EACT,SAAS,CACP;GAAE,OAAO;GAAO,OAAO;GAAO,MAAM;EAAe,GACnD;GAAE,OAAO;GAAQ,OAAO;GAAW,MAAM;EAAoB,CAC/D;EACA,cAAc;CAChB,CAAC;CAGL,IAAI,qBACF,SAAS,uBACP,EAAE,OAAO;EACP,SAAS;EACT,SAAS;GACP;IAAE,OAAO;IAAO,OAAO;GAAM;GAC7B;IAAE,OAAO;IAAQ,OAAO;GAAO;GAC/B;IAAE,OAAO;IAAO,OAAO;GAAM;EAC/B;EACA,cAAc;CAChB,CAAC;CASL,MAAM,SAAkC,MANlB,EAAE,MAAM,UAAoD,EAChF,gBAAgB;EACd,EAAE,OAAO,sBAAsB;EAC/B,QAAQ,KAAK,CAAC;CAChB,EACF,CAC0D;CAE1D,EAAE,MAAM,6BAA6B;CAErC,OAAO;EACL,aAAc,OAAO,eAA0B,OAAO,eAAe;EACrE,YAAY;EACZ,UAAU,OAAO,YAAY;EAC7B,SAAU,OAAO,WAAuB,OAAO,WAAW;EAC1D,gBAAiB,OAAO,kBAAqC,OAAO,kBAAkB;EACtF,KAAK,OAAO,OAAO;EACnB,SAAS,OAAO,WAAW;EAC3B,UAAU,OAAO,YAAY,CAAC;CAChC;AACF;;;ACjFA,MAAM,8BAAc,IAAI,IAAI;CAC1B;CACA;CAAO;CACP;CAAkB;CAClB;CAAO;CAAS;CAChB;CACA;CAAU;CACV;AACF,CAAC;;;;;;;;AASD,SAAgB,WAAW,MAAkD;CAC3E,MAAM,WAA6C,CAAC;CACpD,IAAI,IAAI;CACR,OAAO,IAAI,KAAK,QAAQ;EACtB,MAAM,MAAM,KAAK;EACjB,IAAI,CAAC,IAAI,WAAW,IAAI,GAAG;GAAE;GAAK;EAAS;EAC3C,MAAM,MAAM,IAAI,MAAM,CAAC;EACvB,MAAM,MAAM,IAAI,QAAQ,cAAc,GAAG,MAAM,EAAE,YAAY,CAAC;EAC9D,IAAI,YAAY,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,GAAG;GAAE;GAAK;EAAS;EAClE,MAAM,OAAO,KAAK,IAAI;EACtB,IAAI,QAAQ,CAAC,KAAK,WAAW,IAAI,GAAG;GAClC,SAAS,OAAO;GAChB,KAAK;EACP,OAAO;GACL,SAAS,OAAO;GAChB;EACF;CACF;CACA,OAAO;AACT;;;ACfA,eAAsB,cAAc,SAAuC;CACzE,wBAAwB;CACxB,MAAM,EAAE,YAAY,KAAK,MAAM,aAAa,IAAI,IAAI,mBAAmB,OAAO,KAAK,GAAG,GAAG,OAAO,CAAC;CACjG,QAAQ,KAAK,wBAAwB,SAAS;CAG9C,IAAI,SAAiC;EACnC,aAAa,QAAQ;EACrB,UAAW,QAAQ,YAAyB;EAC5C,SAAU,QAAQ,WAAuB;EACzC,gBAAiB,QAAQ,kBAAqC;EAC9D,KAAK,QAAQ,QAAQ;EACrB,SAAS,QAAQ,WAAW;EAC5B,UAAU,CAAC;CACb;CAGA,OAAO,WAAW,WAAW,QAAQ,KAAK,MAAM,CAAC,CAAC;CAGlD,IAAI,CAAC,QAAQ,KACX,IAAI;EACF,SAAS,MAAM,iBAAiB,MAAM;CACxC,SAAS,KAAK;EACZ,QAAQ,MAAM,eAAe,QAAQ,IAAI,UAAU,eAAe;EAClE,QAAQ,KAAK,CAAC;CAChB;CAIF,OAAO,cAAc,OAAO,eAAe;CAC3C,OAAO,aAAa,OAAO,cAAc;CACzC,OAAO,UAAU,OAAO,WAAW;CACnC,OAAO,iBAAiB,OAAO,kBAAkB;CACjD,OAAO,MAAM,OAAO,QAAQ,KAAA,IAAY,OAAO,MAAM;CACrD,OAAO,UAAU,OAAO,WAAW;CACnC,OAAO,WAAW,OAAO,YAAY,CAAC;CAGtC,MAAM,SAAS,oBAAoB,UAAU,MAAM;CACnD,IAAI,CAAC,OAAO,SAAS;EACnB,QAAQ,MAAM,wBAAwB;EACtC,KAAK,MAAM,SAAS,OAAO,MAAM,QAC/B,QAAQ,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,EAAE,IAAI,MAAM,SAAS;EAE7D,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,cAAc,OAAO;CAG3B,IAAI,YAAY,YAAY,WAAW,GAAG,GAAG;EAC3C,YAAY,aAAa,YAAY;EACrC,YAAY,cAAc,YAAY,YAAY,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK;CACxE,OACE,YAAY,aAAa,cAAc,YAAY,WAAW;CAGhE,IAAI,WAAW,YAAY,UAAU,GAAG;EACtC,QAAQ,MAAM,cAAc,YAAY,WAAW,kBAAkB;EACrE,QAAQ,KAAK,CAAC;CAChB;CAEA,IAAI,QAAQ,QAAQ;EAClB,QAAQ,KAAK,6BAA6B;EAC1C,QAAQ,KAAK,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;EACjD;CACF;CAGA,QAAQ,KAAK,uBAAuB;CACpC,MAAM,YAAY,MAAM,eAAe,YAAY,QAAQ;CAG3D,MAAM,MAAM,IAAI,kBAAkB;CAClC,gBAAgB,KAAK,WAAW,WAAW;CAG3C,MAAM,aAAa,KAAK,YAAY,UAAU;CAG9C,IAAI,YAAY,QAAQ,OACtB,YAAY,YAAY,UAAU;CAIpC,IAAI,YAAY,SACd,oBAAoB,YAAY,YAAY,YAAY,cAAc;CAGxE,QAAQ,QAAQ,YAAY,YAAY,YAAY,WAAW;CAC/D,QAAQ,KAAK,QAAQ,YAAY,aAAa;CAC9C,IAAI,CAAC,YAAY,SAAS;EACxB,MAAM,KAAK,YAAY;EACvB,MAAM,aAAa,OAAO,QAAQ,UAAU,OAAO,SAAS,WAAW;EACvE,QAAQ,KAAK,KAAK,YAAY;CAChC;CACA,QAAQ,KAAK,KAAK,YAAY,eAAe,SAAS;AACxD;AAEA,eAAsB,SAAwB;CA0B5C,MAzBgB,IAAI,QAAQ,CAAC,CAC1B,KAAK,qBAAqB,CAAC,CAC3B,SAAS,iBAAiB,2BAA2B,CAAC,CACtD,OAAO,qBAAqB,kCAAkC,CAAC,CAC/D,OAAO,aAAa,4BAA4B,CAAC,CACjD,OAAO,4BAA4B,oCAAoC,CAAC,CACxE,OAAO,YAAY,yBAAyB,CAAC,CAC7C,OAAO,aAAa,sBAAsB,CAAC,CAC3C,OAAO,aAAa,0BAA0B,CAAC,CAC/C,OAAO,oBAAoB,sBAAsB,CAAC,CAClD,mBAAmB,CAAC,CACpB,qBAAqB,IAAI,CAAC,CAC1B,OAAO,OAAO,aAAa,SAAS;EACnC,MAAM,cAAc;GAClB;GACA,UAAU,KAAK;GACf,KAAK,CAAC,CAAC,KAAK;GACZ,gBAAgB,KAAK;GACrB,KAAK,KAAK;GACV,SAAS,CAAC,CAAC,KAAK;GAChB,QAAQ,CAAC,CAAC,KAAK;GACf,SAAS,KAAK;EAChB,CAAC;CACH,CAEU,CAAC,CAAC,WAAW,QAAQ,IAAI;AACvC"}