{"version":3,"file":"index.mjs","names":[],"sources":["../src/normalize.ts","../src/platforms.ts","../src/runtime.ts","../src/detect.ts"],"sourcesContent":["/**\n * Shared parsers for CI env values: ref → branch, repo string → { owner, name }, env value → deployment enum.\n */\n\nexport type DeploymentEnvironment = (\n  'development'\n  | 'preview'\n  | 'staging'\n  | 'production'\n  | 'test'\n);\n\nexport interface RepoParts {\n  owner: string;\n  name: string;\n}\n\n/**\n * Parse a git ref (e.g. GITHUB_REF) into a short branch name.\n * - refs/heads/feat/foo → feat/foo\n * - refs/pull/123/merge → undefined (PR merge ref; not a branch name)\n */\nexport function refToBranch(ref: string | undefined): string | undefined {\n  if (!ref || typeof ref !== 'string') return undefined;\n  const s = ref.trim();\n  if (s.startsWith('refs/heads/')) return s.slice('refs/heads/'.length);\n  if (s.startsWith('refs/head/')) return s.slice('refs/head/'.length);\n  if (s.startsWith('refs/pull/')) return undefined;\n  return s;\n}\n\n/**\n * Parse a \"owner/repo\" string into { owner, name }.\n * Handles URLs that end with owner/repo or .git.\n */\nexport function parseRepoSlug(s: string | undefined): RepoParts | undefined {\n  if (!s || typeof s !== 'string') return undefined;\n  const trimmed = s.trim();\n  if (!trimmed) return undefined;\n  // URL like https://github.com/owner/repo or https://github.com/owner/repo.git\n  let slug = trimmed;\n  try {\n    if (trimmed.includes('://') || trimmed.startsWith('git@')) {\n      const url = new URL(trimmed.replace(/^git@([^:]+):/, 'https://$1/'));\n      const path = url.pathname.replace(/^\\/+/, '').replace(/\\.git$/, '');\n      const parts = path.split('/');\n      if (parts.length >= 2) {\n        slug = `${parts[0]}/${parts[1]}`;\n      }\n    }\n  } catch {\n    // not a URL, use as-is\n  }\n  const idx = slug.indexOf('/');\n  if (idx <= 0 || idx === slug.length - 1) return undefined;\n  const owner = slug.slice(0, idx);\n  const name = slug.slice(idx + 1).replace(/\\.git$/, '');\n  if (!owner || !name) return undefined;\n  return { owner, name };\n}\n\n/**\n * Parse PR number from env (string or number). For URLs (e.g. CircleCI CIRCLE_PULL_REQUEST),\n * extract the number from the path.\n */\nexport function parsePrNumber(value: string | number | undefined): number | undefined {\n  if (value === undefined || value === '') return undefined;\n  if (typeof value === 'number' && Number.isInteger(value) && value > 0) return value;\n  const s = String(value).trim();\n  if (!s) return undefined;\n  const n = parseInt(s, 10);\n  if (!Number.isNaN(n) && n > 0) return n;\n  // URL like https://github.com/owner/repo/pull/123\n  const match = s.match(/\\/pull\\/(\\d+)(?:\\/|$)/) ?? s.match(/(\\d+)$/);\n  if (match) {\n    const num = parseInt(match[1], 10);\n    if (!Number.isNaN(num) && num > 0) return num;\n  }\n  return undefined;\n}\n\n/**\n * Shorten commit SHA to 7 chars (or keep as-is if already short).\n */\nexport function shortSha(sha: string | undefined): string | undefined {\n  if (!sha || typeof sha !== 'string') return undefined;\n  const s = sha.trim();\n  if (s.length >= 7) return s.slice(0, 7);\n  return s || undefined;\n}\n\n/**\n * Map a platform-specific string to our normalized deployment environment.\n * Uses the given map (platform value -> enum); lookup is case-insensitive, then falls back to raw value.\n */\nexport function mapToDeploymentEnvironment(\n  value: string | undefined,\n  map: Record<string, DeploymentEnvironment>,\n): DeploymentEnvironment | undefined {\n  if (!value || typeof value !== 'string') return undefined;\n  const trimmed = value.trim();\n  const key = trimmed.toLowerCase();\n  return map[key] ?? map[trimmed];\n}\n","import type { EnvRecord, PlatformDefinition } from './types';\nimport {\n  parsePrNumber,\n  parseRepoSlug,\n  refToBranch,\n} from './normalize';\n\n/** Helper: detect when env key has one of the values */\nfunction envEq(name: string, value: string): (env: EnvRecord) => boolean {\n  return (env) => env[name] === value;\n}\n\n/** Helper: detect when all of the env vars are set */\nfunction envAll(...names: Array<string>): (env: EnvRecord) => boolean {\n  return (env) => names.every((n) => !!env[n]);\n}\n\n/** Helper: detect when any of the env vars are set */\nfunction envAny(...names: Array<string>): (env: EnvRecord) => boolean {\n  return (env) => names.some((n) => !!env[n]);\n}\n\nexport const PLATFORMS: Array<PlatformDefinition> = [\n  // Very common (alpha) ---\n  {\n    name: 'Cloudflare Pages',\n    docsUrl: 'https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables',\n    detect: 'CF_PAGES',\n    branch: 'CF_PAGES_BRANCH',\n    commitSha: 'CF_PAGES_COMMIT_SHA',\n    buildUrl: 'CF_PAGES_URL',\n  },\n  {\n    name: 'Cloudflare Workers',\n    docsUrl: 'https://developers.cloudflare.com/workers/ci-cd/builds/configuration/#default-variables',\n    detect: 'WORKERS_CI',\n    branch: 'WORKERS_CI_BRANCH',\n    commitSha: 'WORKERS_CI_COMMIT_SHA',\n    runId: 'WORKERS_CI_BUILD_UUID',\n  },\n  {\n    name: 'GitHub Actions',\n    docsUrl: 'https://docs.github.com/en/actions/learn-github-actions/variables',\n    detect: 'GITHUB_ACTIONS',\n    isPR: (env) => env.GITHUB_EVENT_NAME === 'pull_request',\n    prNumber: (env) => (\n      env.GITHUB_REF?.startsWith('refs/pull/') ? parsePrNumber(env.GITHUB_REF) : undefined\n    ),\n    repo: (env) => parseRepoSlug(env.GITHUB_REPOSITORY),\n    branch: (env) => env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME || refToBranch(env.GITHUB_REF),\n    commitSha: 'GITHUB_SHA',\n    runId: 'GITHUB_RUN_ID',\n    buildUrl: (env) => {\n      const server = env.GITHUB_SERVER_URL;\n      const repo = env.GITHUB_REPOSITORY;\n      const runId = env.GITHUB_RUN_ID;\n      if (server && repo && runId) return `${server}/${repo}/actions/runs/${runId}`;\n      return undefined;\n    },\n    workflowName: 'GITHUB_WORKFLOW',\n    actor: 'GITHUB_ACTOR',\n    eventName: 'GITHUB_EVENT_NAME',\n  },\n  {\n    name: 'GitLab CI',\n    docsUrl: 'https://docs.gitlab.com/ee/ci/variables/predefined_variables.html',\n    detect: 'GITLAB_CI',\n    isPR: 'CI_MERGE_REQUEST_ID',\n    prNumber: 'CI_MERGE_REQUEST_IID',\n    repo: (env) => {\n      const path = env.CI_PROJECT_PATH;\n      if (!path) return undefined;\n      const parts = path.split('/').filter(Boolean);\n      if (parts.length >= 2) {\n        return { owner: parts.slice(0, -1).join('/'), name: parts[parts.length - 1]! };\n      }\n      if (parts.length === 1) return { owner: parts[0]!, name: parts[0]! };\n      return undefined;\n    },\n    branch: 'CI_COMMIT_REF_NAME',\n    commitSha: 'CI_COMMIT_SHA',\n    runId: 'CI_PIPELINE_ID',\n    buildUrl: 'CI_PIPELINE_URL',\n  },\n  {\n    name: 'Netlify CI',\n    docsUrl: 'https://docs.netlify.com/configure-builds/environment-variables',\n    detect: 'NETLIFY',\n    // `netlify dev` (local dev server) also sets NETLIFY_LOCAL\n    ci: (env) => env.NETLIFY_LOCAL === undefined,\n    isPR: (env) => env.PULL_REQUEST !== undefined && env.PULL_REQUEST !== 'false',\n    repo: (env) => parseRepoSlug(env.REPOSITORY_URL),\n    branch: (env) => env.HEAD ?? env.BRANCH,\n    commitSha: 'COMMIT_REF',\n    runId: 'BUILD_ID',\n    buildUrl: 'DEPLOY_URL',\n    environment: {\n      var: 'CONTEXT',\n      map: {\n        production: 'production',\n        'deploy-preview': 'preview',\n        'branch-deploy': 'preview',\n        dev: 'development',\n      },\n    },\n  },\n  {\n    name: 'Vercel',\n    docsUrl: 'https://vercel.com/docs/environment-variables/system-environment-variables',\n    detect: envAny('NOW_BUILDER', 'VERCEL'),\n    // `vercel dev` (local dev server) also sets VERCEL/VERCEL_ENV; only NOW_BUILDER means a real build\n    ci: (env) => !!env.NOW_BUILDER,\n    isPR: 'VERCEL_GIT_PULL_REQUEST_ID',\n    prNumber: 'VERCEL_GIT_PULL_REQUEST_ID',\n    repo: (env) => {\n      const owner = env.VERCEL_GIT_REPO_OWNER;\n      const name = env.VERCEL_GIT_REPO_SLUG;\n      if (owner && name) return { owner, name };\n      return parseRepoSlug(env.VERCEL_GIT_REPO_SLUG);\n    },\n    branch: 'VERCEL_GIT_COMMIT_REF',\n    commitSha: 'VERCEL_GIT_COMMIT_SHA',\n    buildUrl: (env) => (env.VERCEL_URL ? `https://${env.VERCEL_URL}` : undefined),\n    environment: 'VERCEL_ENV',\n    runId: 'VERCEL_DEPLOYMENT_ID',\n  },\n\n  // Somewhat common (alpha) ---\n  {\n    name: 'AWS Amplify',\n    docsUrl: 'https://docs.aws.amazon.com/amplify/latest/userguide/environment-variables.html',\n    detect: 'AWS_APP_ID',\n    isPR: 'AWS_PULL_REQUEST_ID',\n    prNumber: (env) => parsePrNumber(env.AWS_PULL_REQUEST_ID),\n    repo: (env) => parseRepoSlug(env.AWS_CLONE_URL),\n    branch: 'AWS_BRANCH',\n    commitSha: 'AWS_COMMIT_ID',\n    runId: 'AWS_JOB_ID',\n  },\n  {\n    name: 'AWS CodeBuild',\n    docsUrl: 'https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html',\n    detect: 'CODEBUILD_BUILD_ARN',\n    isPR: (env) => ['PULL_REQUEST_CREATED', 'PULL_REQUEST_UPDATED', 'PULL_REQUEST_REOPENED'].includes(\n      env.CODEBUILD_WEBHOOK_EVENT ?? '',\n    ),\n    repo: (env) => parseRepoSlug(env.CODEBUILD_SOURCE_REPO_URL),\n    branch: (env) => {\n      const ref = env.CODEBUILD_WEBHOOK_HEAD_REF;\n      return ref ? ref.replace(/^refs\\/heads\\//, '') : undefined;\n    },\n    commitSha: 'CODEBUILD_RESOLVED_SOURCE_VERSION',\n  },\n  {\n    name: 'Azure Pipelines',\n    docsUrl:\n      'https://learn.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml',\n    detect: 'TF_BUILD',\n    isPR: (env) => env.BUILD_REASON === 'PullRequest',\n    prNumber: (env) => (\n      parsePrNumber(env.SYSTEM_PULLREQUEST_PULLREQUESTNUMBER)\n      ?? parsePrNumber(env.SYSTEM_PULLREQUEST_PULLREQUESTID)\n    ),\n    branch: 'BUILD_SOURCEBRANCHNAME',\n    commitSha: 'BUILD_SOURCEVERSION',\n  },\n  {\n    name: 'Bitbucket Pipelines',\n    docsUrl: 'https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets',\n    detect: 'BITBUCKET_COMMIT',\n    isPR: 'BITBUCKET_PR_ID',\n    prNumber: 'BITBUCKET_PR_ID',\n    repo: (env) => {\n      const owner = env.BITBUCKET_WORKSPACE ?? env.BITBUCKET_REPO_FULL_NAME?.split('/')[0];\n      const name = env.BITBUCKET_REPO_FULL_NAME?.split('/').pop() ?? env.BITBUCKET_REPO_SLUG;\n      if (owner && name) return { owner, name };\n      return parseRepoSlug(env.BITBUCKET_REPO_FULL_NAME);\n    },\n    branch: 'BITBUCKET_BRANCH',\n    commitSha: 'BITBUCKET_COMMIT',\n  },\n  {\n    name: 'Buildkite',\n    docsUrl: 'https://buildkite.com/docs/pipelines/environment-variables',\n    detect: 'BUILDKITE',\n    isPR: (env) => env.BUILDKITE_PULL_REQUEST !== undefined && env.BUILDKITE_PULL_REQUEST !== 'false',\n    prNumber: 'BUILDKITE_PULL_REQUEST',\n    repo: (env) => parseRepoSlug(env.BUILDKITE_REPO),\n    branch: 'BUILDKITE_BRANCH',\n    commitSha: 'BUILDKITE_COMMIT',\n    runId: 'BUILDKITE_BUILD_ID',\n    buildUrl: 'BUILDKITE_BUILD_URL',\n  },\n  {\n    name: 'CircleCI',\n    docsUrl: 'https://circleci.com/docs/reference/variables/',\n    detect: 'CIRCLECI',\n    isPR: 'CIRCLE_PULL_REQUEST',\n    prNumber: 'CIRCLE_PULL_REQUEST',\n    repo: (env) => parseRepoSlug(env.CIRCLE_REPOSITORY_URL),\n    branch: 'CIRCLE_BRANCH',\n    commitSha: 'CIRCLE_SHA1',\n    runId: 'CIRCLE_BUILD_NUM',\n    buildUrl: 'CIRCLE_BUILD_URL',\n  },\n  {\n    name: 'Jenkins',\n    docsUrl: 'https://www.jenkins.io/doc/book/security/environment-variables',\n    detect: envAll('JENKINS_URL', 'BUILD_ID'),\n    isPR: (env) => !!(env.ghprbPullId ?? env.CHANGE_ID),\n    prNumber: (env) => parsePrNumber(env.ghprbPullId ?? env.CHANGE_ID),\n  },\n  {\n    name: 'Railway',\n    docsUrl: 'https://docs.railway.com/reference/variables',\n    detect: envAny('RAILWAY_ENVIRONMENT_ID', 'RAILWAY_PROJECT_ID'),\n    repo: (env) => {\n      const owner = env.RAILWAY_GIT_REPO_OWNER;\n      const name = env.RAILWAY_GIT_REPO_NAME;\n      if (owner && name) return { owner, name };\n      return undefined;\n    },\n    branch: 'RAILWAY_GIT_BRANCH',\n    commitSha: 'RAILWAY_GIT_COMMIT_SHA',\n    runId: 'RAILWAY_DEPLOYMENT_ID',\n    buildUrl: (env) => (env.RAILWAY_PUBLIC_DOMAIN ? `https://${env.RAILWAY_PUBLIC_DOMAIN}` : undefined),\n    environment: {\n      var: 'RAILWAY_ENVIRONMENT_NAME',\n      map: { production: 'production' },\n    },\n  },\n  {\n    name: 'Render',\n    docsUrl: 'https://render.com/docs/environment-variables',\n    detect: 'RENDER',\n    isPR: (env) => env.IS_PULL_REQUEST === 'true',\n    repo: (env) => parseRepoSlug(env.RENDER_GIT_REPO_SLUG),\n    branch: 'RENDER_GIT_BRANCH',\n    commitSha: 'RENDER_GIT_COMMIT',\n  },\n  {\n    name: 'Travis CI',\n    docsUrl: 'https://docs.travis-ci.com/user/environment-variables',\n    detect: 'TRAVIS',\n    isPR: (env) => env.TRAVIS_PULL_REQUEST !== undefined && env.TRAVIS_PULL_REQUEST !== 'false',\n    prNumber: 'TRAVIS_PULL_REQUEST',\n    repo: (env) => parseRepoSlug(env.TRAVIS_REPO_SLUG),\n    branch: (env) => env.TRAVIS_BRANCH,\n    commitSha: 'TRAVIS_COMMIT',\n  },\n\n  // Less common (alpha) ---\n  {\n    name: 'Agola CI',\n    docsUrl: 'https://agola.io/doc/concepts/secrets_variables.html',\n    detect: 'AGOLA_GIT_REF',\n    isPR: 'AGOLA_PULL_REQUEST_ID',\n    prNumber: 'AGOLA_PULL_REQUEST_ID',\n  },\n  { name: 'Alpic', detect: 'ALPIC_HOST' },\n  {\n    name: 'Appcircle',\n    detect: 'AC_APPCIRCLE',\n    isPR: (env) => env.AC_GIT_PR !== undefined && env.AC_GIT_PR !== 'false',\n    prNumber: 'AC_GIT_PR',\n  },\n  {\n    name: 'AppVeyor',\n    docsUrl: 'https://www.appveyor.com/docs/environment-variables',\n    detect: 'APPVEYOR',\n    isPR: 'APPVEYOR_PULL_REQUEST_NUMBER',\n    prNumber: 'APPVEYOR_PULL_REQUEST_NUMBER',\n    repo: (env) => parseRepoSlug(env.APPVEYOR_REPO_NAME),\n    branch: 'APPVEYOR_REPO_BRANCH',\n    commitSha: 'APPVEYOR_REPO_COMMIT',\n  },\n  { name: 'Bamboo', detect: 'bamboo_planKey' },\n  {\n    name: 'Bitrise',\n    docsUrl: 'https://docs.bitrise.io/en/bitrise-ci/references/available-environment-variables.html',\n    detect: 'BITRISE_IO',\n    isPR: 'BITRISE_PULL_REQUEST',\n    prNumber: 'BITRISE_PULL_REQUEST',\n    repo: (env) => {\n      const owner = env.BITRISEIO_GIT_REPOSITORY_OWNER;\n      const name = env.BITRISEIO_GIT_REPOSITORY_SLUG;\n      return owner && name ? { owner, name } : undefined;\n    },\n    branch: 'BITRISE_GIT_BRANCH',\n    commitSha: 'BITRISE_GIT_COMMIT',\n  },\n  {\n    name: 'Buddy',\n    detect: 'BUDDY_WORKSPACE_ID',\n    isPR: 'BUDDY_EXECUTION_PULL_REQUEST_ID',\n    prNumber: 'BUDDY_EXECUTION_PULL_REQUEST_ID',\n  },\n  {\n    name: 'Cirrus CI',\n    docsUrl: 'https://cirrus-ci.org/guide/writing-tasks',\n    detect: 'CIRRUS_CI',\n    isPR: 'CIRRUS_PR',\n    prNumber: 'CIRRUS_PR',\n    repo: (env) => parseRepoSlug(env.CIRRUS_REPO_FULL_NAME),\n    branch: 'CIRRUS_BRANCH',\n    commitSha: 'CIRRUS_CHANGE_IN_REPO',\n  },\n  {\n    name: 'Codefresh',\n    docsUrl: 'https://codefresh.io/docs/docs/pipelines/variables',\n    detect: 'CF_BUILD_ID',\n    isPR: (env) => !!(env.CF_PULL_REQUEST_NUMBER ?? env.CF_PULL_REQUEST_ID),\n    prNumber: (env) => parsePrNumber(env.CF_PULL_REQUEST_NUMBER ?? env.CF_PULL_REQUEST_ID),\n    branch: 'CF_BRANCH',\n    commitSha: 'CF_REVISION',\n  },\n  { name: 'Codemagic', detect: 'CM_BUILD_ID', prNumber: 'CM_PULL_REQUEST' },\n  { name: 'Codeship', detect: (env) => env.CI_NAME === 'codeship' },\n  {\n    name: 'Deno Deploy',\n    docsUrl: 'https://docs.deno.com/deploy/early-access/reference/env-vars-and-contexts',\n    detect: envAny('DENO_DEPLOY', 'DENO_DEPLOYMENT_ID'),\n    runId: (env) => env.DENO_DEPLOY_BUILD_ID ?? env.DENO_DEPLOYMENT_ID,\n  },\n  {\n    name: 'Drone',\n    docsUrl: 'https://docs.drone.io/pipeline/environment/reference',\n    detect: 'DRONE',\n    isPR: (env) => env.DRONE_BUILD_EVENT === 'pull_request',\n    prNumber: 'DRONE_PULL_REQUEST',\n    repo: (env) => {\n      const full = env.DRONE_REPO;\n      if (full) return parseRepoSlug(full);\n      const owner = env.DRONE_REPO_OWNER;\n      const name = env.DRONE_REPO_NAME;\n      if (owner && name) return { owner, name };\n      return undefined;\n    },\n    branch: 'DRONE_COMMIT_BRANCH',\n    commitSha: 'DRONE_COMMIT_SHA',\n  },\n  { name: 'dsari', detect: 'DSARI' },\n  { name: 'Earthly', detect: 'EARTHLY_CI' },\n  {\n    name: 'Expo Application Services',\n    docsUrl: 'https://docs.expo.dev/build-reference/variables',\n    detect: 'EAS_BUILD',\n    commitSha: 'EAS_BUILD_GIT_COMMIT_HASH',\n  },\n  { name: 'Firebase App Hosting', docsUrl: 'https://firebase.google.com/docs/app-hosting/configure', detect: 'FIREBASE_APP_HOSTING' },\n  {\n    name: 'Fly.io',\n    docsUrl: 'https://fly.io/docs/machines/runtime-environment/',\n    // set on every Fly Machine; no git metadata is exposed\n    detect: envAll('FLY_APP_NAME', 'FLY_MACHINE_ID'),\n    runId: 'FLY_IMAGE_REF',\n  },\n  { name: 'Gerrit', detect: 'GERRIT_PROJECT' },\n  { name: 'Gitea Actions', detect: 'GITEA_ACTIONS' },\n  { name: 'GoCD', detect: 'GO_PIPELINE_LABEL' },\n  { name: 'Google Cloud Build', detect: 'BUILDER_OUTPUT' }, // not actually set by default, user has to set it within their yaml config\n  {\n    name: 'Google Cloud Run',\n    docsUrl: 'https://cloud.google.com/run/docs/container-contract',\n    // Cloud Run doesn't inject git metadata; only available if wired up manually via Cloud Build substitutions\n    detect: envAny('K_SERVICE', 'CLOUD_RUN_JOB'),\n    runId: (env) => env.K_REVISION ?? env.CLOUD_RUN_EXECUTION,\n  },\n  { name: 'Heroku', detect: (env) => (env.NODE ?? '').includes('/app/.heroku/node/bin/node') },\n  { name: 'Hudson', detect: 'HUDSON_URL' },\n  {\n    name: 'LayerCI',\n    detect: 'LAYERCI',\n    isPR: 'LAYERCI_PULL_REQUEST',\n    prNumber: 'LAYERCI_PULL_REQUEST',\n  },\n  { name: 'Magnum CI', detect: 'MAGNUM' },\n  {\n    name: 'Nevercode',\n    detect: 'NEVERCODE',\n    isPR: (env) => env.NEVERCODE_PULL_REQUEST !== undefined && env.NEVERCODE_PULL_REQUEST !== 'false',\n    prNumber: 'NEVERCODE_PULL_REQUEST',\n  },\n  { name: 'Prow', detect: 'PROW_JOB_ID' },\n  { name: 'ReleaseHub', detect: 'RELEASE_BUILD_ID' },\n  {\n    name: 'Sail CI',\n    detect: 'SAILCI',\n    isPR: 'SAIL_PULL_REQUEST_NUMBER',\n    prNumber: 'SAIL_PULL_REQUEST_NUMBER',\n  },\n  {\n    name: 'Screwdriver',\n    detect: 'SCREWDRIVER',\n    isPR: (env) => env.SD_PULL_REQUEST !== undefined && env.SD_PULL_REQUEST !== 'false',\n    prNumber: 'SD_PULL_REQUEST',\n  },\n  {\n    name: 'Semaphore',\n    docsUrl: 'https://docs.semaphore.io/reference/env-vars/',\n    detect: 'SEMAPHORE',\n    isPR: 'SEMAPHORE_GIT_PR_NUMBER',\n    prNumber: 'SEMAPHORE_GIT_PR_NUMBER',\n    repo: (env) => parseRepoSlug(env.SEMAPHORE_GIT_REPO_SLUG),\n    branch: 'SEMAPHORE_GIT_BRANCH',\n    commitSha: 'SEMAPHORE_GIT_SHA',\n  },\n  { name: 'Sourcehut', detect: (env) => env.CI_NAME === 'sourcehut' },\n  { name: 'Strider CD', detect: 'STRIDER' },\n  { name: 'TaskCluster', detect: envAny('TASK_ID', 'RUN_ID') },\n  {\n    name: 'TeamCity',\n    docsUrl: 'https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html',\n    detect: 'TEAMCITY_VERSION',\n  },\n  {\n    name: 'Vela',\n    detect: 'VELA',\n    isPR: (env) => env.VELA_PULL_REQUEST === '1',\n    prNumber: 'VELA_PULL_REQUEST',\n  },\n  { name: 'Visual Studio App Center', detect: 'APPCENTER_BUILD_ID' },\n  {\n    name: 'Woodpecker',\n    docsUrl: 'https://woodpecker-ci.org/docs/usage/environment',\n    detect: envEq('CI', 'woodpecker'),\n    isPR: (env) => env.CI_BUILD_EVENT === 'pull_request',\n    repo: (env) => parseRepoSlug(env.CI_REPO),\n    branch: 'CI_COMMIT_BRANCH',\n    prNumber: (env) => parsePrNumber(env.CI_COMMIT_PULL_REQUEST),\n    commitSha: 'CI_COMMIT_SHA',\n  },\n  { name: 'Xcode Cloud', detect: 'CI_XCODE_PROJECT', prNumber: 'CI_PULL_REQUEST_NUMBER' },\n  { name: 'Xcode Server', detect: 'XCS' },\n  {\n    name: 'Zeabur',\n    docsUrl: 'https://zeabur.com/docs/en-US/deploy/variables',\n    detect: envAny('ZEABUR_SERVICE_ID', 'ZEABUR_PROJECT_ID', 'ZEABUR_ENVIRONMENT_ID'),\n    repo: (env) => {\n      const owner = env.ZEABUR_GIT_REPO_OWNER;\n      const name = env.ZEABUR_GIT_REPO_NAME;\n      if (owner && name) return { owner, name };\n      return undefined;\n    },\n    branch: 'ZEABUR_GIT_BRANCH',\n    commitSha: 'ZEABUR_GIT_COMMIT_SHA',\n  },\n\n  // Dev sandboxes (alpha) — interactive environments, not a CI pipeline ---\n  {\n    name: 'CodeSandbox',\n    docsUrl: 'https://codesandbox.io/docs/learn/environment/configuration',\n    detect: envAny('CODESANDBOX_SSE', 'CODESANDBOX_HOST'),\n    ci: false,\n  },\n  {\n    name: 'GitHub Codespaces',\n    docsUrl: 'https://docs.github.com/en/codespaces/reference/system-environment-variables-for-codespaces',\n    detect: 'CODESPACES',\n    repo: (env) => parseRepoSlug(env.GITHUB_REPOSITORY),\n    ci: false,\n  },\n  {\n    name: 'Gitpod',\n    docsUrl: 'https://www.gitpod.io/docs/references/gitpod-environment-variables',\n    detect: 'GITPOD_WORKSPACE_ID',\n    ci: false,\n  },\n  {\n    name: 'Replit',\n    docsUrl: 'https://docs.replit.com/replit-workspace/dependencies/environment-variables',\n    detect: envAny('REPL_ID', 'REPLIT_DB_URL'),\n    ci: false,\n  },\n  {\n    name: 'StackBlitz',\n    docsUrl: 'https://developer.stackblitz.com/guides/user-guide/environment-variables',\n    // WebContainers don't set a dedicated env var. Match std-env exactly: SHELL alone is too weak\n    // a signal (some unrelated environments use /bin/jsh), so also require the WebContainer runtime marker.\n    detect: (env) => env.SHELL === '/bin/jsh' && !!(globalThis as any).process?.versions?.webcontainer,\n    ci: false,\n  },\n];\n","/**\n * JS runtime + OS detection, independent of CI/deploy platform detection.\n * Reads ambient globals (globalThis, process) rather than an env record, since these\n * signals (Deno global, process.versions.bun, navigator.userAgent, ...) aren't env vars.\n */\n\nexport type JsRuntime = | 'node'\n  | 'deno'\n  | 'bun'\n  | 'workerd'\n  | 'fastly'\n  | 'netlify'\n  | 'edge-light'\n  | 'browser'\n  | undefined;\n\nexport interface RuntimeInfo {\n  runtime: JsRuntime;\n  isNode: boolean;\n  isDeno: boolean;\n  isBun: boolean;\n  /** Cloudflare Workers */\n  isWorkerd: boolean;\n  isFastly: boolean;\n  isNetlify: boolean;\n  /** Generic \"edge\" runtime (Vercel Edge Functions, Netlify Edge Functions, ...) */\n  isEdgeLight: boolean;\n  isBrowser: boolean;\n}\n\n/**\n * Detects the current JS runtime. Pass a custom `globalObj` (defaults to `globalThis`) for testing.\n */\nexport function detectRuntime(globalObj: any = globalThis): RuntimeInfo {\n  const g = globalObj;\n  const process = g.process;\n\n  const isDeno = typeof g.Deno !== 'undefined';\n  const isBun = typeof g.Bun !== 'undefined' || !!process?.versions?.bun;\n  const isWorkerd = g.navigator?.userAgent === 'Cloudflare-Workers';\n  const isFastly = typeof g.fastly !== 'undefined';\n  const isNetlify = typeof g.Netlify !== 'undefined';\n  const isEdgeLight = typeof g.EdgeRuntime !== 'undefined';\n  // Matches std-env: true whenever a Node-compatible `process.versions.node` exists, even under\n  // Bun/Deno's Node compat mode. The mutually-exclusive `runtime` name below still picks Bun/Deno first.\n  const isNode = !!process?.versions?.node;\n  const isBrowser = typeof g.window !== 'undefined' && typeof g.document !== 'undefined';\n\n  // Priority order matches std-env's runtimeChecks.\n  let runtime: JsRuntime;\n  if (isNetlify) runtime = 'netlify';\n  else if (isEdgeLight) runtime = 'edge-light';\n  else if (isWorkerd) runtime = 'workerd';\n  else if (isFastly) runtime = 'fastly';\n  else if (isDeno) runtime = 'deno';\n  else if (isBun) runtime = 'bun';\n  else if (isNode) runtime = 'node';\n  else if (isBrowser) runtime = 'browser';\n\n  return {\n    runtime,\n    isNode,\n    isDeno,\n    isBun,\n    isWorkerd,\n    isFastly,\n    isNetlify,\n    isEdgeLight,\n    isBrowser,\n  };\n}\n\nexport type OsPlatform = 'darwin' | 'win32' | 'linux' | undefined;\n\nexport interface OsInfo {\n  platform: OsPlatform;\n  isMac: boolean;\n  isWindows: boolean;\n  isLinux: boolean;\n}\n\n/**\n * Detects the current OS from `process.platform`. Pass a custom `processObj` for testing.\n * Only meaningful on Node/Bun/Deno; returns all-false when `process.platform` isn't available (e.g. browser, Workers).\n */\nexport function detectOs(processObj: any = (globalThis as any).process): OsInfo {\n  const platform: OsPlatform = processObj?.platform;\n  return {\n    platform,\n    isMac: platform === 'darwin',\n    isWindows: platform === 'win32',\n    isLinux: platform === 'linux',\n  };\n}\n","import type { CiEnvInfo, EnvRecord, PlatformDefinition } from './types';\nimport {\n  type DeploymentEnvironment, type RepoParts,\n  mapToDeploymentEnvironment,\n  parsePrNumber,\n  parseRepoSlug,\n  refToBranch,\n  shortSha,\n} from './normalize';\nimport { PLATFORMS } from './platforms';\nimport { detectOs, detectRuntime } from './runtime';\n\nconst VALID_ENVIRONMENTS: Set<string> = new Set(\n  ['development', 'preview', 'staging', 'production', 'test'],\n);\n\nfunction runDetect(platform: PlatformDefinition, env: EnvRecord): boolean {\n  const d = platform.detect;\n  if (typeof d === 'string') return !!env[d];\n  return d(env);\n}\n\nfunction runExtractor<T>(\n  platform: PlatformDefinition,\n  key: keyof PlatformDefinition,\n  env: EnvRecord,\n): T | undefined {\n  const ext = platform[key];\n  if (ext === undefined) return undefined;\n  if (typeof ext === 'function') return (ext as (env: EnvRecord) => T | undefined)(env);\n  if (key === 'environment' && typeof ext === 'object' && ext !== null && 'var' in ext && 'map' in ext) {\n    return mapToDeploymentEnvironment(env[ext.var], ext.map) as T;\n  }\n  const raw = env[ext as string];\n  if (raw === undefined || raw === '') return undefined;\n  switch (key) {\n    case 'repo':\n      return parseRepoSlug(raw) as T;\n    case 'branch': {\n      const branch = refToBranch(raw);\n      return (branch ?? raw) as T;\n    }\n    case 'prNumber':\n      return parsePrNumber(raw) as T;\n    case 'commitSha':\n      return raw as T;\n    case 'environment':\n      return VALID_ENVIRONMENTS.has(raw) ? raw as T : undefined;\n    default:\n      return raw as T;\n  }\n}\n\nfunction buildRaw(\n  platform: PlatformDefinition,\n  env: EnvRecord,\n): Record<string, string> | undefined {\n  const keys = [\n    'repo',\n    'branch',\n    'prNumber',\n    'commitSha',\n    'environment',\n    'runId',\n    'buildUrl',\n    'workflowName',\n    'actor',\n    'eventName',\n  ] as const;\n  const raw: Record<string, string> = {};\n  let hasAny = false;\n  for (const k of keys) {\n    const ext = platform[k];\n    if (typeof ext === 'string' && env[ext]) {\n      raw[ext] = env[ext]!;\n      hasAny = true;\n    }\n    if (k === 'environment' && typeof ext === 'object' && ext !== null && 'var' in ext && env[ext.var]) {\n      raw[ext.var] = env[ext.var]!;\n      hasAny = true;\n    }\n  }\n  return hasAny ? raw : undefined;\n}\n\n/**\n * Compute CiEnvInfo from the given env record. Uses in-package platform definitions.\n * If env.CI === 'false', returns isCI: false (escape hatch).\n */\nexport function getCiEnv(env: EnvRecord): CiEnvInfo {\n  const e = env;\n  const runtime = detectRuntime();\n  const os = detectOs();\n\n  if (e.CI === 'false') {\n    return { isCI: false, runtime, os };\n  }\n\n  for (const platform of PLATFORMS) {\n    if (!runDetect(platform, e)) continue;\n\n    const repo = runExtractor<RepoParts>(platform, 'repo', e);\n    const commitSha = runExtractor<string>(platform, 'commitSha', e);\n    let isPR: boolean | undefined;\n    if (platform.isPR !== undefined) {\n      isPR = typeof platform.isPR === 'string' ? !!e[platform.isPR] : platform.isPR(e);\n    } else {\n      isPR = runExtractor<number>(platform, 'prNumber', e) !== undefined;\n    }\n    const isPlatformCI = typeof platform.ci === 'function' ? platform.ci(e) : platform.ci !== false;\n    const info: CiEnvInfo = {\n      isCI: isPlatformCI,\n      name: platform.name,\n      docsUrl: platform.docsUrl,\n      isPR,\n      repo,\n      fullRepoName: repo ? `${repo.owner}/${repo.name}` : undefined,\n      branch: runExtractor<string>(platform, 'branch', e),\n      prNumber: runExtractor<number>(platform, 'prNumber', e),\n      commitSha,\n      commitShaShort: shortSha(commitSha),\n      environment: runExtractor<DeploymentEnvironment>(platform, 'environment', e),\n      runId: runExtractor<string>(platform, 'runId', e),\n      buildUrl: runExtractor<string>(platform, 'buildUrl', e),\n      workflowName: runExtractor<string>(platform, 'workflowName', e),\n      actor: runExtractor<string>(platform, 'actor', e),\n      eventName: runExtractor<string>(platform, 'eventName', e),\n      raw: buildRaw(platform, e),\n      runtime,\n      os,\n    };\n    return info;\n  }\n\n  // Generic CI (e.g. CI=true but no vendor matched)\n  const isCI = e.CI === 'true'\n    || !!e.BUILD_ID\n    || !!e.BUILD_NUMBER\n    || !!e.CI_APP_ID\n    || !!e.CI_BUILD_ID\n    || !!e.CI_BUILD_NUMBER\n    || !!e.CI_NAME\n    || !!e.CONTINUOUS_INTEGRATION\n    || !!e.RUN_ID;\n\n  return {\n    isCI: !!isCI,\n    runtime,\n    os,\n  };\n}\n\n/**\n * Convenience: compute CiEnvInfo from the current process.env.\n * Equivalent to getCiEnv(process.env).\n */\nexport function getCiEnvFromProcess(): CiEnvInfo {\n  return getCiEnv(process.env);\n}\n"],"mappings":"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"}