{"version":3,"file":"snapshot-D7Ytw8S0.cjs","names":["readFileSync","process","read","join","dirname","Diagnostics","process","pluralize","styleText","loadConfigs","logLevelMap","Hookable","cliReporter","createPlainWriter","formatMs","getElapsedMs","createSnapshot","runStudio"],"sources":["../src/runners/studio/ci.ts","../src/runners/studio/snapshot.ts"],"sourcesContent":["import { readFileSync } from 'node:fs'\nimport process from 'node:process'\n\n/**\n * Stable identity for the CI agent a snapshot run registers or reuses.\n */\nexport type CiContext = {\n  /**\n   * Fed into the machine token, so the same merge or pull request reuses one agent.\n   */\n  id: string\n  /**\n   * Agent display name shown in Studio.\n   */\n  name: string\n  /** The commit this run builds, so the next snapshot can diff against it. */\n  commit?: string\n  /** The branch a pull request merges into, and the `id` runs on that branch register under. */\n  base?: { branch: string; id: string }\n}\n\ntype GithubPullRequest = { number: number; head?: { sha?: string }; base?: { ref?: string } }\n\nfunction readGithubPullRequest(eventPath: string | undefined): GithubPullRequest | undefined {\n  if (!eventPath) {\n    return undefined\n  }\n\n  try {\n    const event = JSON.parse(readFileSync(eventPath, 'utf8')) as { pull_request?: GithubPullRequest }\n    return event.pull_request?.number ? event.pull_request : undefined\n  } catch {\n    return undefined\n  }\n}\n\n/** Reproduces GitLab's `CI_COMMIT_REF_SLUG` for a branch it gives no slug of, like a merge request's target. */\nexport function gitlabRefSlug(ref: string): string {\n  return ref\n    .toLowerCase()\n    .replace(/[^a-z0-9]/gu, '-')\n    .slice(0, 63)\n    .replace(/^-+|-+$/g, '')\n}\n\n/**\n * Detects the CI provider from its environment variables and derives a stable identity from it.\n * The GitHub row reproduces `gh:<repositoryId>:<prNumber>`, the identity `kubb-labs/action` has\n * always registered agents under, so an existing repository keeps reusing its agent.\n */\nexport function detectCi(env: Record<string, string | undefined> = process.env): CiContext | null {\n  if (env.GITHUB_ACTIONS) {\n    const pullRequest = readGithubPullRequest(env.GITHUB_EVENT_PATH)\n    const repositoryId = env.GITHUB_REPOSITORY_ID ?? env.GITHUB_REPOSITORY ?? ''\n    const branch = env.GITHUB_REF?.startsWith('refs/heads/') ? env.GITHUB_REF.slice('refs/heads/'.length) : undefined\n    // A branch run is scoped by its ref, which a pull request number never collides with.\n    const scope = pullRequest?.number ?? (branch ? `refs/heads/${branch}` : env.GITHUB_RUN_ID) ?? ''\n    const baseBranch = pullRequest?.base?.ref\n\n    return {\n      id: `gh:${repositoryId}:${scope}`,\n      name: `${env.GITHUB_REPOSITORY ?? 'github'}#${pullRequest?.number ?? branch ?? scope}`,\n      // The head commit, not the merge commit a pull request run checks out.\n      commit: pullRequest?.head?.sha ?? env.GITHUB_SHA,\n      base: baseBranch ? { branch: baseBranch, id: `gh:${repositoryId}:refs/heads/${baseBranch}` } : undefined,\n    }\n  }\n\n  if (env.GITLAB_CI) {\n    const scope = env.CI_MERGE_REQUEST_IID ?? env.CI_COMMIT_REF_SLUG ?? ''\n    const baseBranch = env.CI_MERGE_REQUEST_TARGET_BRANCH_NAME\n\n    return {\n      id: `gl:${env.CI_PROJECT_ID ?? ''}:${scope}`,\n      name: `${env.CI_PROJECT_PATH ?? 'gitlab'}#${scope}`,\n      commit: env.CI_MERGE_REQUEST_SOURCE_BRANCH_SHA || env.CI_COMMIT_SHA,\n      base: baseBranch ? { branch: baseBranch, id: `gl:${env.CI_PROJECT_ID ?? ''}:${gitlabRefSlug(baseBranch)}` } : undefined,\n    }\n  }\n\n  if (env.BITBUCKET_BUILD_NUMBER) {\n    const scope = env.BITBUCKET_PR_ID ?? env.BITBUCKET_BRANCH ?? ''\n\n    return { id: `bb:${env.BITBUCKET_REPO_UUID ?? ''}:${scope}`, name: `${env.BITBUCKET_REPO_FULL_NAME ?? 'bitbucket'}#${scope}`, commit: env.BITBUCKET_COMMIT }\n  }\n\n  if (env.CIRCLECI) {\n    // Owner-qualified: two projects with the same name under different CircleCI orgs must not\n    // collide on one agent, since registering it purges the other project's live sessions.\n    const owner = env.CIRCLE_PROJECT_USERNAME ?? ''\n    const project = env.CIRCLE_PROJECT_REPONAME ?? 'circleci'\n    const scope = env.CIRCLE_PR_NUMBER ?? env.CIRCLE_BRANCH ?? ''\n\n    return { id: `circle:${owner}:${project}:${scope}`, name: `${owner ? `${owner}/` : ''}${project}#${scope}`, commit: env.CIRCLE_SHA1 }\n  }\n\n  return null\n}\n","import { dirname, join } from 'node:path'\nimport process from 'node:process'\nimport { styleText } from 'node:util'\nimport { formatMs, getElapsedMs, read } from '@internals/utils'\nimport { cliReporter, Diagnostics, Hookable, type KubbHooks, logLevel as logLevelMap } from '@kubb/core'\nimport { createSnapshot } from '@kubb/studio'\nimport type { BranchSnapshotChanges, PublishedSnapshot, SnapshotChanges } from '@kubb/studio/protocol'\nimport { pluralize } from '../../ui/text.ts'\nimport { createPlainWriter } from '../../loggers/plainWriter.ts'\nimport setupReporters from '../../loggers/reporters.ts'\nimport { type CiContext, detectCi } from './ci.ts'\nimport { loadConfigs, runStudio, type SnapshotOptions } from './run.ts'\nimport type { command } from '../../commands/studio/snapshot.ts'\nimport type { CommandRunner } from 'gunshi'\n\n/**\n * Walks up from `directory` to the first package.json with a name and a version.\n */\nasync function findPackageJson(directory: string): Promise<{ name: string; version: string }> {\n  const packageJson = JSON.parse(await read(join(directory, 'package.json')).catch(() => '{}')) as Partial<{ name: string; version: string }>\n  if (packageJson.name && packageJson.version) return { name: packageJson.name, version: packageJson.version }\n\n  const parent = dirname(directory)\n  if (parent === directory)\n    throw new Diagnostics.Error({\n      code: Diagnostics.code.unknown,\n      severity: 'error',\n      message: `No package.json with a name and a version found above ${process.cwd()}`,\n      help: 'Pass `--name` and `--version`, or run from a package with a package.json.',\n    })\n\n  return findPackageJson(parent)\n}\n\nfunction resolveCiIdentity(options: SnapshotOptions): CiContext {\n  const detected = detectCi()\n  // A custom --id drops the detected base, since runs on that branch may use a custom id too.\n  const ci = options.id ? { id: options.id, name: detected?.name ?? options.id, commit: detected?.commit } : detected\n\n  if (!ci) {\n    throw new Diagnostics.Error({\n      code: Diagnostics.code.unknown,\n      severity: 'error',\n      message: 'Could not detect a supported CI provider (GitHub Actions, GitLab CI, Bitbucket Pipelines, CircleCI). Pass --id.',\n    })\n  }\n\n  // An explicit --base-id may not name a branch, so it labels the comparison itself.\n  const base = options.baseId ? { branch: options.baseId, id: options.baseId } : ci.base\n\n  return { ...ci, base: base?.id === ci.id ? undefined : base }\n}\n\nfunction absoluteUrl(studioUrl: string, path: string): string {\n  return new URL(path, `${studioUrl}/`).toString()\n}\n\ntype SnapshotResult = {\n  id: string\n  /** Sequence number on the CI agent, when Studio sends one. */\n  number?: number\n  name: string | null\n  version: string | null\n  integrity: string | null\n  url: string\n  snapshotIdUrl: string\n  /** Studio page of the snapshot, when Studio sends one. */\n  webUrl?: string\n  expiresAt: string\n  agentUrl: string\n  /** What changed since the previous snapshot of this package on this agent. */\n  changes?: SnapshotChanges\n  /** What differs from the latest snapshot of the base branch, named by `branch`. */\n  branchChanges?: BranchSnapshotChanges & { branch: string }\n}\n\nfunction toResult({ studioUrl, snapshot, ci }: { studioUrl: string; snapshot: PublishedSnapshot; ci: CiContext }): SnapshotResult {\n  return {\n    id: snapshot.id,\n    number: snapshot.number,\n    name: snapshot.name,\n    version: snapshot.version,\n    integrity: snapshot.integrity,\n    url: absoluteUrl(studioUrl, snapshot.url),\n    snapshotIdUrl: absoluteUrl(studioUrl, snapshot.snapshotIdUrl),\n    webUrl: snapshot.webUrl ? absoluteUrl(studioUrl, snapshot.webUrl) : undefined,\n    expiresAt: snapshot.expiresAt,\n    agentUrl: absoluteUrl(studioUrl, `/agents/${snapshot.agent.slug ?? snapshot.agent.id}`),\n    changes: snapshot.changes,\n    branchChanges: snapshot.branchChanges && ci.base ? { ...snapshot.branchChanges, branch: ci.base.branch } : undefined,\n  }\n}\n\n/** How many files differ, `against` what. */\nfunction describeChanges(changes: SnapshotChanges, against: string): string {\n  const { added, changed, removed } = changes\n  const parts = [\n    added.length && `+${pluralize(added.length, 'file')}`,\n    changed.length && `~${changed.length} changed`,\n    removed.length && `-${removed.length} removed`,\n  ].filter(Boolean)\n\n  return parts.length ? `${parts.join('  ')}  ${against}` : `No changes ${against}`\n}\n\n/** One summary line: how many files changed, and since which run. */\nexport function formatChanges(changes: SnapshotChanges): string {\n  if (!changes.base) {\n    return 'First snapshot'\n  }\n  const { number, commit, createdAt } = changes.base\n\n  return describeChanges(changes, `vs ${number ? `#${number}` : (commit?.slice(0, 7) ?? createdAt)}`)\n}\n\n/** One summary line: how the snapshot differs from the base branch's latest one. */\nexport function formatBranchChanges(changes: BranchSnapshotChanges & { branch: string }): string {\n  if (changes.base) return describeChanges(changes, `vs ${changes.branch}`)\n\n  return changes.baseFound ? `No snapshot of ${changes.branch} for this package yet` : `No snapshot of ${changes.branch} to compare with`\n}\n\nfunction printSummary(result: SnapshotResult): void {\n  const row = (label: string, value: string) => `  ${styleText('dim', label.padEnd(7))} ${value}`\n\n  console.log(\n    [\n      '',\n      ...(result.webUrl ? [row('View', styleText('cyan', result.webUrl))] : []),\n      ...(result.changes ? [row('Diff', formatChanges(result.changes))] : []),\n      ...(result.branchChanges ? [row('Branch', formatBranchChanges(result.branchChanges))] : []),\n      row('Use', `npm i ${result.url}`),\n      row('Expires', result.expiresAt.slice(0, 10)),\n    ].join('\\n'),\n  )\n}\n\n/**\n * Generates the project, packs it, and publishes it to Kubb Studio in one request, under the CI\n * agent the run's identity names.\n */\nexport async function snapshot(options: SnapshotOptions): Promise<void> {\n  const token = options.token ?? process.env.KUBB_TOKEN\n  if (!token) {\n    throw new Diagnostics.Error({\n      code: Diagnostics.code.unknown,\n      severity: 'error',\n      message: 'An organization CI API key is required. Pass --token or set KUBB_TOKEN.',\n    })\n  }\n  // A snapshot publishes the first entry.\n  const config = (await loadConfigs(options)).configs[0]!\n  const ci = resolveCiIdentity(options)\n  // package.json is read only for whichever of name/version --name and --version did not supply.\n  const { name, version: packageVersion } =\n    options.name && options.packageVersion\n      ? { name: options.name, version: options.packageVersion }\n      : await findPackageJson(process.cwd()).then((found) => ({ name: options.name ?? found.name, version: options.packageVersion ?? found.version }))\n  const logLevel = logLevelMap[options.logLevel ?? 'info']\n\n  const write = options.json ? (line: string) => console.error(line) : (line: string) => console.log(line)\n  const hooks = new Hookable<KubbHooks>()\n  // The steps below are the CI log; the run's own per-file output only shows when asked for with --log-level verbose.\n  setupReporters(hooks, { logLevel: logLevel > logLevelMap.info ? logLevel : logLevelMap.silent, reporters: [cliReporter], writer: createPlainWriter(write) })\n  const step = (message: string) => {\n    if (logLevel > logLevelMap.silent) {\n      write(message)\n    }\n  }\n\n  hooks.hook('kubb:generation:end', ({ filesCreated = 0, status, hrStart }) => {\n    if (status !== 'failed' && hrStart) step(`✓ Generated ${pluralize(filesCreated, 'file')} in ${formatMs(getElapsedMs(hrStart))}`)\n  })\n\n  try {\n    const published = await createSnapshot({\n      studioUrl: options.studioUrl,\n      apiKey: token,\n      config,\n      hooks,\n      id: ci.id,\n      name: ci.name,\n      packageName: name,\n      version: packageVersion,\n      commit: ci.commit,\n      baseId: ci.base?.id,\n    })\n    const result = toResult({ studioUrl: options.studioUrl, snapshot: published, ci })\n\n    step(`✓ Packed ${result.name ?? name}@${result.version ?? packageVersion}`)\n    step(`✓ Published snapshot ${result.number ? `#${result.number}` : result.id} for ${ci.name}${ci.commit ? `@${ci.commit.slice(0, 7)}` : ''}`)\n\n    if (options.json) console.log(JSON.stringify(result))\n    else printSummary(result)\n  } catch (error) {\n    step('✖ Snapshot failed')\n    throw error\n  }\n}\n\nexport const runner: CommandRunner<{ args: typeof command.args; extensions: {} }> = ({ values }) =>\n  runStudio(\n    values,\n    (options) =>\n      snapshot({\n        ...options,\n        token: values.token,\n        id: values.id,\n        baseId: values.baseId,\n        name: values.name,\n        packageVersion: values.packageVersion,\n        json: values.json,\n      }),\n    { json: values.json },\n  )\n"],"mappings":"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"}