{"version":3,"file":"build.mjs","names":[],"sources":["../src/build.ts"],"sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { access, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport process from \"node:process\";\nimport { formatDuration } from \"./cli/timing\";\nimport { resolveLocalDevelopmentPath } from \"./config\";\nimport type { WorkspaceDeployResult } from \"./contract\";\nimport { applyDeployResults, type DeployResultEntry, parseDeployLines } from \"./integrity\";\nimport { syncResolvedSharedDeps } from \"./shared-deps\";\nimport type { BosConfig, BosPluginRef, RuntimeConfig } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { padRight } from \"./utils/string\";\nimport { colors, icons } from \"./utils/theme\";\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n  host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n  ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n  api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\ntype WorkspaceTarget = {\n  key: string;\n  kind: \"app\" | \"plugin\";\n  path: string;\n};\n\nexport function getPluginRef(entry: string | BosPluginRef | undefined | null): BosPluginRef | null {\n  if (!entry || typeof entry === \"string\") return null;\n  return entry;\n}\n\nexport async function fileExists(path: string): Promise<boolean> {\n  try {\n    await access(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function readJsonFile<T>(path: string): Promise<T> {\n  return JSON.parse(await readFile(path, \"utf8\")) as T;\n}\n\nfunction resolveWorkspaceTarget(\n  key: string,\n  bosConfig: BosConfig | null,\n  runtimeConfig: RuntimeConfig | null,\n  configDir: string,\n): WorkspaceTarget | null {\n  if (bosConfig?.app && key in bosConfig.app) {\n    const appEntry = (bosConfig.app as Record<string, { development?: string }>)[key];\n    const devPath = resolveLocalDevelopmentPath(appEntry?.development, configDir);\n    if (devPath) {\n      return {\n        key,\n        kind: \"app\",\n        path: devPath,\n      };\n    }\n    return {\n      key,\n      kind: \"app\",\n      path: `${configDir}/${key}`,\n    };\n  }\n\n  const runtimePlugin = runtimeConfig?.plugins?.[key];\n  const pluginPath =\n    runtimePlugin?.localPath ??\n    resolveLocalDevelopmentPath(getPluginRef(bosConfig?.plugins?.[key])?.development, configDir);\n  if (pluginPath) {\n    return {\n      key,\n      kind: \"plugin\",\n      path: pluginPath,\n    };\n  }\n\n  return null;\n}\n\nexport function selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n  const allPackages = [\n    ...Object.keys(bosConfig?.app ?? {}),\n    ...Object.keys(bosConfig?.plugins ?? {}),\n  ];\n  if (packages === \"all\") {\n    return allPackages;\n  }\n\n  return packages\n    .split(\",\")\n    .map((pkg) => pkg.trim())\n    .filter((pkg) => allPackages.includes(pkg));\n}\n\ninterface BuildAttemptResult {\n  success: boolean;\n  url?: string;\n  error?: string;\n  warnings?: string[];\n  exitCode: number;\n  output: string;\n  deployEntries?: DeployResultEntry[];\n}\n\nasync function runBuildAttempt(\n  cmd: string,\n  args: string[],\n  cwd: string,\n  env: Record<string, string>,\n  verbose: boolean,\n): Promise<BuildAttemptResult> {\n  const result = await run(cmd, args, {\n    cwd,\n    env,\n    capture: true,\n    onChunk: (stream, chunk) => {\n      if (stream === \"stderr\") {\n        process.stderr.write(chunk);\n      } else if (verbose) {\n        process.stdout.write(chunk);\n      }\n      const text = chunk.toString(\"utf-8\");\n      if (/ZEPHYR|auth\\.zephyr-cloud\\.io\\/authorize|ZE\\d{4,}/.test(text)) {\n        process.stdout.write(chunk);\n      }\n    },\n  });\n  const stdout = result?.stdout ?? \"\";\n  const stderr = result?.stderr ?? \"\";\n  const exitCode = result?.exitCode ?? 0;\n  const output = `${stdout}\\n${stderr}`;\n\n  const deployEntries = parseDeployLines(output);\n\n  if (deployEntries.length > 0) {\n    const result: BuildAttemptResult = {\n      success: true,\n      url: deployEntries[0]?.url,\n      exitCode: 0,\n      output,\n      deployEntries,\n    };\n    if (exitCode !== 0) {\n      const errorLines = output\n        .split(\"\\n\")\n        .filter((line) => /\\bERROR\\b/.test(line) || line.startsWith(\"Rspack compiled with\"))\n        .slice(0, 5);\n      if (errorLines.length > 0) {\n        result.warnings = errorLines.map((l) => l.trim());\n        if (!verbose) {\n          console.log(\n            `  ${colors.yellow(\"⚠\")} Build completed with errors (exit code ${exitCode}) — Zephyr deployed successfully`,\n          );\n          for (const line of errorLines) {\n            console.log(`    ${colors.dim(line.trim())}`);\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  if (exitCode !== 0) {\n    const lastLines = output.trim().split(\"\\n\").slice(-5).join(\"\\n\");\n    return {\n      success: false,\n      error: `Build failed (exit code ${exitCode})\\n${lastLines}`,\n      exitCode,\n      output,\n    };\n  }\n\n  const deployMatch = output.match(/🚀.*Deployed:\\s*(https?:\\S+)/);\n  if (deployMatch) {\n    return { success: true, url: deployMatch[1], exitCode: 0, output };\n  }\n\n  const zeMatch = output.match(/ZE\\d{4,}/);\n  if (zeMatch) {\n    const zeLines = output\n      .split(\"\\n\")\n      .filter((l) => /ZEPHYR|ZE\\d{4,}/.test(l))\n      .slice(0, 5);\n    const detail = zeLines.length > 0 ? `\\n${zeLines.join(\"\\n\")}` : \"\";\n    return {\n      success: false,\n      error: `Zephyr upload failed (${zeMatch[0]})${detail}`,\n      exitCode: 0,\n      output,\n    };\n  }\n\n  if (env.DEPLOY === \"true\") {\n    return {\n      success: false,\n      error: \"No deploy URL found (Zephyr may have failed)\",\n      exitCode: 0,\n      output,\n    };\n  }\n  return { success: true, exitCode: 0, output };\n}\n\ninterface InternalWorkspaceResult extends WorkspaceDeployResult {\n  deployEntries?: DeployResultEntry[];\n}\n\nasync function buildOneWorkspace(\n  ws: WorkspaceTarget,\n  env: Record<string, string>,\n  opts: { deploy: boolean; verbose?: boolean },\n): Promise<InternalWorkspaceResult> {\n  const pkgJson = await readJsonFile<{\n    scripts?: Record<string, string>;\n  }>(`${ws.path}/package.json`);\n  const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n  const buildConfig = shouldDeployScript\n    ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n    : (buildCommands[ws.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n  const wsEnv = { ...env };\n\n  const startTime = Date.now();\n  let attempt = await runBuildAttempt(\n    buildConfig.cmd,\n    buildConfig.args,\n    ws.path,\n    wsEnv,\n    opts.verbose ?? false,\n  );\n\n  let retried = false;\n  const firstAttempt: BuildAttemptResult | undefined = attempt.success ? undefined : { ...attempt };\n\n  if (!attempt.success && attempt.exitCode === 0 && opts.deploy) {\n    if (!opts.verbose) {\n      console.log(`  ${colors.yellow(\"↻\")} ${padRight(ws.key, 28)} retrying...`);\n    }\n    retried = true;\n    attempt = await runBuildAttempt(\n      buildConfig.cmd,\n      buildConfig.args,\n      ws.path,\n      wsEnv,\n      opts.verbose ?? false,\n    );\n\n    if (!attempt.success && firstAttempt) {\n      attempt.error = `First attempt: ${firstAttempt.error}\\nRetry: ${attempt.error}`;\n    }\n  }\n\n  const durationMs = Date.now() - startTime;\n  const result: InternalWorkspaceResult = {\n    key: ws.key,\n    kind: ws.kind,\n    success: attempt.success,\n    url: attempt.url,\n    error: attempt.error,\n    warnings: attempt.warnings,\n    deployEntries: attempt.deployEntries,\n    durationMs,\n    retried: retried ? true : undefined,\n  };\n\n  if (!opts.verbose) {\n    const name = padRight(ws.key, 28);\n    if (result.success) {\n      const duration = formatDuration(durationMs);\n      const retryTag = retried ? \" (retried)\" : \"\";\n      console.log(`  ${colors.green(icons.ok)} ${name} ${colors.dim(duration + retryTag)}`);\n    } else {\n      const errorLine = (result.error ?? \"Failed\").split(\"\\n\")[0];\n      console.log(`  ${colors.error(icons.err)} ${name} ${errorLine}`);\n    }\n  }\n\n  return result;\n}\n\nexport async function buildWorkspaceTargets(opts: {\n  configDir: string;\n  bosConfig: BosConfig | null;\n  runtimeConfig: RuntimeConfig | null;\n  targets: string[];\n  deploy: boolean;\n  verbose?: boolean;\n}): Promise<{\n  built: string[];\n  skipped: string[];\n  deployResults?: WorkspaceDeployResult[];\n}> {\n  const existing: WorkspaceTarget[] = [];\n  const skipped: string[] = [];\n\n  for (const target of opts.targets) {\n    const resolved = resolveWorkspaceTarget(\n      target,\n      opts.bosConfig,\n      opts.runtimeConfig,\n      opts.configDir,\n    );\n    if (!resolved) {\n      skipped.push(target);\n      continue;\n    }\n\n    const exists = await fileExists(`${resolved.path}/package.json`);\n    if (exists) existing.push(resolved);\n    else skipped.push(target);\n  }\n\n  if (existing.length === 0) {\n    return { built: [], skipped };\n  }\n\n  const sharedSync = await syncResolvedSharedDeps({\n    configDir: opts.configDir,\n    hostMode: \"local\",\n    bosConfig: opts.bosConfig ?? undefined,\n    extendsChain: [],\n  });\n  if (sharedSync.catalogChanged) {\n    await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n  }\n\n  const shouldBuildPlugin = existing.some((entry) => entry.key === \"api\");\n\n  const forceRebuild = opts.deploy;\n  const buildTasks: Promise<void>[] = [buildEverythingDevQuietly(opts.configDir, forceRebuild)];\n  if (shouldBuildPlugin) {\n    buildTasks.push(buildEveryPluginQuietly(opts.configDir, forceRebuild));\n  }\n  await Promise.all(buildTasks);\n\n  const env: Record<string, string> = {\n    ...process.env,\n    NODE_ENV: opts.deploy ? \"production\" : \"development\",\n  };\n  if (opts.deploy) {\n    env.DEPLOY = \"true\";\n  } else {\n    delete env.DEPLOY;\n  }\n\n  const bosConfigPath = join(opts.configDir, \"bos.config.json\");\n  let configSnapshot: string | undefined;\n  if (opts.deploy && existsSync(bosConfigPath)) {\n    configSnapshot = readFileSync(bosConfigPath, \"utf-8\");\n  }\n\n  const orderedExisting = opts.deploy\n    ? [\n        ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n        ...existing.filter((entry) => entry.kind === \"plugin\"),\n        ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n      ]\n    : existing;\n\n  const parallelGroup = opts.deploy\n    ? orderedExisting.filter((e) => e.key !== \"host\")\n    : orderedExisting;\n  const sequentialGroup = opts.deploy ? orderedExisting.filter((e) => e.key === \"host\") : [];\n\n  const built: string[] = [];\n  const deployResults: WorkspaceDeployResult[] = [];\n\n  if (opts.deploy && parallelGroup.length > 0) {\n    const total = parallelGroup.length + sequentialGroup.length;\n    console.log();\n    console.log(`  Building ${total} workspace${total > 1 ? \"s\" : \"\"}...`);\n    console.log();\n\n    const results = await Promise.allSettled(\n      parallelGroup.map((ws) => buildOneWorkspace(ws, env, opts)),\n    );\n\n    const allDeployEntries: DeployResultEntry[] = [];\n    for (let i = 0; i < parallelGroup.length; i++) {\n      const ws = parallelGroup[i];\n      const result = results[i];\n      if (result.status === \"fulfilled\") {\n        if (result.value.success) {\n          built.push(ws.key);\n        }\n        if (result.value.deployEntries) {\n          allDeployEntries.push(...result.value.deployEntries);\n        }\n        const { deployEntries: _deployEntries, ...deployResult } = result.value;\n        deployResults.push(deployResult);\n      } else {\n        deployResults.push({\n          key: ws.key,\n          kind: ws.kind,\n          success: false,\n          error: result.reason?.message ?? \"Unknown error\",\n        });\n      }\n    }\n\n    if (configSnapshot && allDeployEntries.length > 0) {\n      const config = JSON.parse(configSnapshot) as Record<string, unknown>;\n      const merged = applyDeployResults(config, allDeployEntries);\n      writeFileSync(bosConfigPath, `${JSON.stringify(merged, null, 2)}\\n`);\n    }\n\n    for (const ws of sequentialGroup) {\n      const result = await buildOneWorkspace(ws, env, opts);\n      if (result.success) {\n        built.push(ws.key);\n      }\n      if (result.deployEntries) {\n        const hostEntries = result.deployEntries.filter((r) => r.urlField.startsWith(\"app.host\"));\n        if (hostEntries.length > 0 && existsSync(bosConfigPath)) {\n          const currentConfig = JSON.parse(readFileSync(bosConfigPath, \"utf-8\")) as Record<\n            string,\n            unknown\n          >;\n          const merged = applyDeployResults(currentConfig, hostEntries);\n          writeFileSync(bosConfigPath, `${JSON.stringify(merged, null, 2)}\\n`);\n        }\n      }\n      const { deployEntries: _deployEntries, ...sequentialResult } = result;\n      deployResults.push(sequentialResult);\n    }\n\n    console.log();\n  } else {\n    for (const resolved of orderedExisting) {\n      const buildConfig = buildCommands[resolved.key] ?? {\n        cmd: \"bun\",\n        args: [\"run\", \"build\"],\n      };\n\n      await run(buildConfig.cmd, buildConfig.args, {\n        cwd: resolved.path,\n        env,\n      });\n      built.push(resolved.key);\n    }\n  }\n\n  return { built, skipped, deployResults: opts.deploy ? deployResults : undefined };\n}\n\nexport async function buildEveryPluginQuietly(cwd: string, force = false) {\n  const packageDir = `${cwd}/packages/every-plugin`;\n  const packageExists = await fileExists(`${packageDir}/package.json`);\n  if (!packageExists) {\n    return;\n  }\n\n  const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n  const distExists = await fileExists(distPath);\n\n  if (distExists && !force) {\n    return;\n  }\n\n  const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n    cwd,\n    capture: true,\n  })) as { stdout: string; stderr: string; exitCode: number };\n\n  if (result.exitCode === 0) {\n    return;\n  }\n\n  if (result.stdout.trim()) {\n    process.stdout.write(result.stdout);\n  }\n\n  if (result.stderr.trim()) {\n    process.stderr.write(result.stderr);\n  }\n\n  throw new Error(\n    `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n  );\n}\n\nexport async function buildEverythingDevQuietly(cwd: string, force = false) {\n  const packageDir = `${cwd}/packages/everything-dev`;\n  const packageExists = await fileExists(`${packageDir}/package.json`);\n  if (!packageExists) {\n    return;\n  }\n\n  const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n  const distExists = await fileExists(distPath);\n\n  if (distExists && !force) {\n    return;\n  }\n\n  const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n    cwd,\n    capture: true,\n  })) as { stdout: string; stderr: string; exitCode: number };\n\n  if (result.exitCode === 0) {\n    return;\n  }\n\n  if (result.stdout.trim()) {\n    process.stdout.write(result.stdout);\n  }\n\n  if (result.stderr.trim()) {\n    process.stderr.write(result.stderr);\n  }\n\n  throw new Error(\n    `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n  );\n}\n"],"mappings":"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"}