{"version":3,"sources":["../node_modules/wrappy/wrappy.js","../node_modules/once/once.js","../src/constants.ts","../src/inputs/getVitestJsonPath.ts","../src/inputs/parseVitestJsonFinalReport.ts","../src/report/generateBadges.ts","../node_modules/deprecation/dist-web/index.js","../node_modules/@octokit/request-error/dist-src/index.js","../src/inputs/getGithubToken.ts","../src/utils/getOctokit.ts","../src/inputs/getPullChanges.ts","../src/inputs/getWorkspacePackages.ts","../src/inputs/getChangedPackages.ts","../src/inputs/getViteConfigPath.ts","../src/inputs/parseCoverageThresholds.ts","../src/inputs/getVitestThresholds.ts","../src/report/generateFileCoverageHtml.ts","../src/report/generateHeadline.ts","../src/report/generateSummaryTableHtml.ts","../src/report/generateCoverageSummary.ts","../src/utils/updateReadmeEntry.ts","../src/utils/writeSummaryToReadMe.ts","../src/main.mts"],"names":["cb","once","core2","resolve","core3","core4","getOctokit","github","github2","core6","fs","core7","stripIndent","readFile","core8","oneLine","summary","core9","existsSync","github4","core10"],"mappings":"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","file":"main.mjs","sourcesContent":["// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n  if (fn && cb) return wrappy(fn)(cb)\n\n  if (typeof fn !== 'function')\n    throw new TypeError('need wrapper function')\n\n  Object.keys(fn).forEach(function (k) {\n    wrapper[k] = fn[k]\n  })\n\n  return wrapper\n\n  function wrapper() {\n    var args = new Array(arguments.length)\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n    var ret = fn.apply(this, args)\n    var cb = args[args.length-1]\n    if (typeof ret === 'function' && ret !== cb) {\n      Object.keys(cb).forEach(function (k) {\n        ret[k] = cb[k]\n      })\n    }\n    return ret\n  }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n  Object.defineProperty(Function.prototype, 'once', {\n    value: function () {\n      return once(this)\n    },\n    configurable: true\n  })\n\n  Object.defineProperty(Function.prototype, 'onceStrict', {\n    value: function () {\n      return onceStrict(this)\n    },\n    configurable: true\n  })\n})\n\nfunction once (fn) {\n  var f = function () {\n    if (f.called) return f.value\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  f.called = false\n  return f\n}\n\nfunction onceStrict (fn) {\n  var f = function () {\n    if (f.called)\n      throw new Error(f.onceError)\n    f.called = true\n    return f.value = fn.apply(this, arguments)\n  }\n  var name = fn.name || 'Function wrapped with `once`'\n  f.onceError = name + \" shouldn't be called more than once\"\n  f.called = false\n  return f\n}\n","export const icons = {\n  red: '🔴',\n  green: '🟢',\n  blue: '🔵',\n  increase: '⬆️',\n  decrease: '⬇️',\n  equal: '🟰',\n  target: '🎯',\n};\n\nexport const COVERAGE_README_MARKER = `<!-- hyperse-vitest-coverage-reporter-marker-readme -->`;\n\nexport const defaultJsonSummaryPath = 'coverage/coverage-summary.json';\nexport const defaultJsonFinalPath = 'coverage/coverage-final.json';\n","import { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport { defaultJsonFinalPath, defaultJsonSummaryPath } from '../constants';\n\nexport const getVitestJsonPath = (projectCwd: string) => {\n  const jsonSummaryPath = resolve(\n    projectCwd,\n    core.getInput('json-summary-path') || defaultJsonSummaryPath\n  );\n  const jsonFinalPath = resolve(\n    projectCwd,\n    core.getInput('json-final-path') || defaultJsonFinalPath\n  );\n\n  const jsonSummaryCompareInput = core.getInput('json-summary-compare-path');\n  let jsonSummaryComparePath: string | null = null;\n  if (jsonSummaryCompareInput) {\n    jsonSummaryComparePath = resolve(projectCwd, jsonSummaryCompareInput);\n  }\n\n  return {\n    jsonFinalPath,\n    jsonSummaryPath,\n    jsonSummaryComparePath,\n  };\n};\n","import { stripIndent } from 'common-tags';\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport type { JsonFinal } from '../types/JsonFinal.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\n\nconst parseVitestCoverageReport = async <type extends JsonSummary | JsonFinal>(\n  jsonPath: string\n): Promise<type> => {\n  const resolvedJsonSummaryPath = resolve(process.cwd(), jsonPath);\n  const jsonSummaryRaw = await readFile(resolvedJsonSummaryPath);\n  return JSON.parse(jsonSummaryRaw.toString()) as type;\n};\n\nexport const parseVitestJsonSummaryReport = async (\n  jsonSummaryPath: string\n): Promise<JsonSummary> => {\n  try {\n    return await parseVitestCoverageReport<JsonSummary>(jsonSummaryPath);\n  } catch (err: unknown) {\n    const stack = err instanceof Error ? err.stack : '';\n    core.setFailed(stripIndent`\n        Failed to parse the json-summary at path \"${jsonSummaryPath}.\"\n        Make sure to run vitest before this action and to include the \"json-summary\" reporter.\n\n        Original Error:\n        ${stack}\n    `);\n\n    // Rethrow to abort the entire workflow\n    throw err;\n  }\n};\n\nexport const parseVitestJsonFinalReport = async (\n  jsonFinalPath: string\n): Promise<JsonFinal> => {\n  try {\n    return await parseVitestCoverageReport<JsonFinal>(jsonFinalPath);\n  } catch (err: unknown) {\n    const stack = err instanceof Error ? err.stack : '';\n    core.warning(stripIndent`\n      Failed to parse JSON Final at path \"${jsonFinalPath}\".\n      Line coverage will be empty. To include it, make sure to include the \"json\" reporter in your vitest execution.\n\n      Original Error:\n      ${stack}\n    `);\n    return {};\n  }\n};\n","import { createWriteStream, existsSync, mkdirSync } from 'node:fs';\nimport https from 'node:https';\nimport { resolve } from 'node:path';\nimport type { CoverageReport } from '../types/JsonSummary.js';\n\n/**\n * Generate a shields.io URL for a badge.\n * Change the color of the badge based on the percentage.\n *\n * @param summaryData The coverage summary report data.\n * @param summaryKey  The summary key to display on the badge.\n * @returns The shields.io URL.\n */\nconst generateUrl = (\n  summaryData: CoverageReport,\n  summaryKey: keyof CoverageReport\n) => {\n  const percentage = summaryData[summaryKey].pct;\n  let color = 'brightgreen';\n  if (percentage < 70) {\n    color = 'red';\n  } else if (percentage < 80) {\n    color = 'yellow';\n  } else if (percentage < 90) {\n    color = 'orange';\n  }\n  return `https://img.shields.io/badge/coverage%3A${summaryKey}-${percentage}%25-${color}.svg`;\n};\n\n/**\n * Download a badge from shields.io.\n * @param url The shields.io URL.\n * @param filename The filename to save the badge to.\n * @return Promise<void>\n */\nconst downloadBadge = (url: string, filename: string) => {\n  return new Promise<void>((resolve, reject) => {\n    https.get(url, (res) => {\n      if (res.statusCode !== 200) {\n        const newError = new Error(\n          `Error downloading badge: ${res.statusMessage}`\n        );\n        console.error(newError);\n        return reject(newError);\n      }\n\n      const file = createWriteStream(filename);\n      res.pipe(file);\n      file.on('finish', () => {\n        file.close();\n        resolve();\n      });\n      file.on('error', (err) => {\n        console.error(`Error saving badge: ${err}`);\n        reject(err);\n      });\n    });\n  });\n};\n\n/**\n * Generate badges for code coverage.\n */\nexport type GenerateBadgesOptions = {\n  /**\n   * The path to the coverage json file.\n   */\n  totalCoverageReport: CoverageReport;\n  /**\n   * The directory to save the badges to.\n   */\n  badgesSavedTo: string;\n};\n\n/**\n * Generate badges for code coverage.\n */\nexport const generateBadges = async (options: GenerateBadgesOptions) => {\n  const { badgesSavedTo, totalCoverageReport } = options;\n\n  // Construct the shields.io URL for each badge.\n  const statementsBadgeUrl = generateUrl(totalCoverageReport, 'statements');\n  const branchesBadgeUrl = generateUrl(totalCoverageReport, 'branches');\n  const functionsBadgeUrl = generateUrl(totalCoverageReport, 'functions');\n  const linesBadgeUrl = generateUrl(totalCoverageReport, 'lines');\n\n  // Create the badges directory if it does not exist.\n  if (!existsSync(badgesSavedTo)) {\n    mkdirSync(badgesSavedTo);\n  }\n\n  // Download each badge and save it to the badges directory.\n  await downloadBadge(\n    statementsBadgeUrl,\n    resolve(badgesSavedTo, 'statements.svg')\n  );\n  await downloadBadge(\n    functionsBadgeUrl,\n    resolve(badgesSavedTo, 'functions.svg')\n  );\n  await downloadBadge(linesBadgeUrl, resolve(badgesSavedTo, 'lines.svg'));\n  await downloadBadge(branchesBadgeUrl, resolve(badgesSavedTo, 'branches.svg'));\n\n  console.log('Code coverage badges created successfully.');\n};\n","class Deprecation extends Error {\n  constructor(message) {\n    super(message); // Maintains proper stack trace (only available on V8)\n\n    /* istanbul ignore next */\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n\n    this.name = 'Deprecation';\n  }\n\n}\n\nexport { Deprecation };\n","import { Deprecation } from \"deprecation\";\nimport once from \"once\";\nconst logOnceCode = once((deprecation) => console.warn(deprecation));\nconst logOnceHeaders = once((deprecation) => console.warn(deprecation));\nclass RequestError extends Error {\n  constructor(message, statusCode, options) {\n    super(message);\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    this.name = \"HttpError\";\n    this.status = statusCode;\n    let headers;\n    if (\"headers\" in options && typeof options.headers !== \"undefined\") {\n      headers = options.headers;\n    }\n    if (\"response\" in options) {\n      this.response = options.response;\n      headers = options.response.headers;\n    }\n    const requestCopy = Object.assign({}, options.request);\n    if (options.request.headers.authorization) {\n      requestCopy.headers = Object.assign({}, options.request.headers, {\n        authorization: options.request.headers.authorization.replace(\n          /(?<! ) .*$/,\n          \" [REDACTED]\"\n        )\n      });\n    }\n    requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n    this.request = requestCopy;\n    Object.defineProperty(this, \"code\", {\n      get() {\n        logOnceCode(\n          new Deprecation(\n            \"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"\n          )\n        );\n        return statusCode;\n      }\n    });\n    Object.defineProperty(this, \"headers\", {\n      get() {\n        logOnceHeaders(\n          new Deprecation(\n            \"[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.\"\n          )\n        );\n        return headers || {};\n      }\n    });\n  }\n}\nexport {\n  RequestError\n};\n","import * as core from '@actions/core';\n\n/**\n * Get the GitHub token from action input `github-token`\n * @returns\n */\nexport const getGithubToken = () => {\n  const gitHubToken = core.getInput('github-token').trim();\n  return gitHubToken;\n};\n","import * as github from '@actions/github';\nimport { getGithubToken } from '../inputs/getGithubToken.js';\n\nexport type Octokit = ReturnType<typeof github.getOctokit>;\n\n/**\n * Get the Octokit instance\n * @returns The Octokit instance\n */\nexport const getOctokit = () => {\n  const gitHubToken = getGithubToken();\n  const octokit: Octokit = github.getOctokit(gitHubToken);\n  return octokit;\n};\n","import * as core from '@actions/core';\nimport * as github from '@actions/github';\nimport { RequestError } from '@octokit/request-error';\nimport { getOctokit } from '../utils/getOctokit.js';\nimport { FileCoverageMode } from './getCoverageModeFrom.js';\n\nexport async function getPullChanges(\n  fileCoverageMode: FileCoverageMode\n): Promise<string[]> {\n  // Skip Changes collection if we don't need it\n  if (fileCoverageMode === FileCoverageMode.None) {\n    return [];\n  }\n\n  // Skip Changes collection if we can't do it\n  if (!github.context.payload?.pull_request) {\n    return [];\n  }\n\n  const prNumber = github.context.payload.pull_request.number;\n  try {\n    const paths: string[] = [];\n    const octokit = getOctokit();\n\n    core.startGroup(\n      `Fetching list of changed files for PR#${prNumber} from Github API`\n    );\n\n    const iterator = octokit.paginate.iterator(octokit.rest.pulls.listFiles, {\n      owner: github.context.repo.owner,\n      repo: github.context.repo.repo,\n      pull_number: prNumber,\n      per_page: 100,\n    });\n\n    for await (const response of iterator) {\n      core.info(`Received ${response.data.length} items`);\n\n      for (const file of response.data) {\n        core.debug(`[${file.status}] ${file.filename}`);\n        if (['added', 'modified'].includes(file.status)) {\n          paths.push(file.filename);\n        }\n      }\n    }\n    return paths;\n  } catch (error) {\n    if (\n      error instanceof RequestError &&\n      (error.status === 404 || error.status === 403)\n    ) {\n      core.warning(\n        `Couldn't fetch changes of PR due to error:\\n[${error.name}]\\n${error.message}`\n      );\n      return [];\n    }\n\n    throw error;\n  } finally {\n    core.endGroup();\n  }\n}\n","import { getPackages } from '@manypkg/get-packages';\n\n/**\n * Get the workspace packages\n * @param cwd The current working directory, repo root\n * @returns\n */\nexport async function getWorkspacePackages(\n  cwd: string\n): Promise<\n  Map<string, { name: string; relativeDir: string; version: string }>\n> {\n  const { packages } = await getPackages(cwd);\n  const sortedPackages: Array<\n    [string, { name: string; relativeDir: string; version: string }]\n  > = packages.map((x) => [\n    x.dir,\n    {\n      name: x.packageJson.name,\n      version: x.packageJson.version,\n      relativeDir: x.relativeDir,\n    },\n  ]);\n  // sort by package name\n  sortedPackages.sort((a, b) => {\n    if (a[1].name < b[1].name) {\n      return -1;\n    }\n    if (a[1].name > b[1].name) {\n      return 1;\n    }\n    return 0;\n  });\n\n  return new Map(sortedPackages);\n}\n","import * as core from '@actions/core';\nimport type { Package } from '@manypkg/get-packages';\nimport { FileCoverageMode } from './getCoverageModeFrom';\nimport { getPullChanges } from './getPullChanges';\nimport { getWorkspacePackages } from './getWorkspacePackages';\n\nexport async function getChangedPackages(\n  repoCwd: string,\n  includeAllProjects = false\n) {\n  const workspacePackages = await getWorkspacePackages(repoCwd);\n  const changedPackages = new Set<Package>();\n  // if all project don't need to check changes\n  const allChangedFiles = includeAllProjects\n    ? []\n    : await getPullChanges(FileCoverageMode.All);\n  core.debug(`allChangedFiles: ${JSON.stringify(allChangedFiles, null, 2)}`);\n  for (const [dir, { name, relativeDir, version }] of workspacePackages) {\n    const includeThisProject =\n      includeAllProjects ||\n      allChangedFiles.find((s) => !!~s.indexOf(relativeDir));\n\n    core.info(`package(${name}: ${relativeDir}) is: ${includeThisProject}`);\n    if (includeThisProject) {\n      changedPackages.add({\n        dir,\n        relativeDir,\n        packageJson: {\n          name,\n          version,\n        },\n      });\n    }\n  }\n\n  return [...changedPackages];\n}\n","import { stripIndent } from 'common-tags';\nimport { constants, promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\n\nconst testFilePath = async (workingDirectory: string, filePath: string) => {\n  const resolvedPath = resolve(workingDirectory, filePath);\n  await fs.access(resolvedPath, constants.R_OK);\n  return resolvedPath;\n};\n\nconst defaultPaths = [\n  'vitest.config.ts',\n  'vitest.config.mts',\n  'vitest.config.cts',\n  'vitest.config.js',\n  'vitest.config.mjs',\n  'vitest.config.cjs',\n  'vite.config.ts',\n  'vite.config.mts',\n  'vite.config.cts',\n  'vite.config.js',\n  'vite.config.mjs',\n  'vite.config.cjs',\n  'vitest.workspace.ts',\n  'vitest.workspace.mts',\n  'vitest.workspace.cts',\n  'vitest.workspace.js',\n  'vitest.workspace.mjs',\n  'vitest.workspace.cjs',\n];\n\n/**\n * Get the path to the vite config file\n * @param workingDirectory The working directory, repo root\n * @param configPath The vite config path, optional, if not provided will try to find the vite config file in the default paths\n * @returns\n */\nexport const getViteConfigPath = async (\n  workingDirectory: string,\n  configPath: string = ''\n) => {\n  try {\n    if (configPath === '') {\n      return await Promise.any(\n        defaultPaths.map((filePath) => testFilePath(workingDirectory, filePath))\n      );\n    }\n\n    return await testFilePath(workingDirectory, configPath);\n  } catch {\n    const searchPath = configPath\n      ? resolve(workingDirectory, configPath)\n      : `any default location in \"${workingDirectory}\"`;\n\n    core.warning(stripIndent`\n          Failed to read vite config file at ${searchPath}.\n          Make sure you provide the vite-config-path option if you're using a non-default location or name of your config file.\n\n          Will not include thresholds in the final report.\n      `);\n    return null;\n  }\n};\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport type { Thresholds } from '../types/Threshold.js';\n\nconst regex100 = /100\"?\\s*:\\s*true/;\nconst regexStatements = /statements\\s*:\\s*(\\d+)/;\nconst regexLines = /lines:\\s*(\\d+)/;\nconst regexBranches = /branches\\s*:\\s*(\\d+)/;\nconst regexFunctions = /functions\\s*:\\s*(\\d+)/;\n\n/**\n * Parse the coverage thresholds from the vite config file, supports all vite config file formats\n * @param vitestConfigPath The path to the vite config file\n * @returns\n */\nexport const parseCoverageThresholds = async (\n  vitestConfigPath: string\n): Promise<Thresholds> => {\n  try {\n    const resolvedViteConfigPath = resolve(process.cwd(), vitestConfigPath);\n    const rawContent = await readFile(resolvedViteConfigPath, 'utf8');\n\n    const has100Value = rawContent.match(regex100);\n\n    if (has100Value) {\n      return {\n        lines: 100,\n        branches: 100,\n        functions: 100,\n        statements: 100,\n      };\n    }\n\n    const lines = rawContent.match(regexLines);\n    const branches = rawContent.match(regexBranches);\n    const functions = rawContent.match(regexFunctions);\n    const statements = rawContent.match(regexStatements);\n\n    return {\n      lines: lines ? Number.parseInt(lines[1]) : undefined,\n      branches: branches ? Number.parseInt(branches[1]) : undefined,\n      functions: functions ? Number.parseInt(functions[1]) : undefined,\n      statements: statements ? Number.parseInt(statements[1]) : undefined,\n    };\n  } catch (err: unknown) {\n    core.warning(\n      `Could not read vite config file for tresholds due to an error:\\n ${err}`\n    );\n    return {};\n  }\n};\n","import type { Thresholds } from '../types/Threshold.js';\nimport { getViteConfigPath } from './getViteConfigPath.js';\nimport { parseCoverageThresholds } from './parseCoverageThresholds.js';\n\nexport const getVitestThresholds = async (\n  projectCwd: string,\n  viteConfigPath: string = ''\n): Promise<Thresholds> => {\n  // ViteConfig is optional, as it is only required for thresholds. If no vite config is provided, we will not include thresholds in the final report.\n  const finalViteConfigPath = await getViteConfigPath(\n    projectCwd,\n    viteConfigPath\n  );\n\n  const thresholds = finalViteConfigPath\n    ? await parseCoverageThresholds(finalViteConfigPath)\n    : {};\n  return thresholds;\n};\n","import { oneLine } from 'common-tags';\nimport * as path from 'node:path';\nimport { FileCoverageMode } from '../inputs/getCoverageModeFrom.js';\nimport type { JsonFinal } from '../types/JsonFinal.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\nimport { generateBlobFileUrl } from './generateFileUrl.js';\nimport {\n  getUncoveredLinesFromStatements,\n  type LineRange,\n} from './getUncoveredLinesFromStatements.js';\n\ntype FileCoverageInputs = {\n  jsonSummary: JsonSummary;\n  jsonFinal: JsonFinal;\n  fileCoverageMode: FileCoverageMode;\n  pullChanges: string[];\n};\n\nconst workspacePath = process.cwd();\n\nexport const generateFileCoverageHtml = ({\n  jsonSummary,\n  jsonFinal,\n  fileCoverageMode,\n  pullChanges,\n}: FileCoverageInputs) => {\n  const filePaths = Object.keys(jsonSummary).filter((key) => key !== 'total');\n\n  const formatFileLine = (filePath: string) => {\n    const coverageSummary = jsonSummary[filePath];\n    const lineCoverage = jsonFinal[filePath];\n\n    // LineCoverage might be empty if coverage-final.json was not provided.\n    const uncoveredLines = lineCoverage\n      ? getUncoveredLinesFromStatements(jsonFinal[filePath])\n      : [];\n    const relativeFilePath = path.relative(workspacePath, filePath);\n    const url = generateBlobFileUrl(relativeFilePath);\n\n    return `\n      <tr>\n        <td align=\"left\"><a href=\"${url}\">${relativeFilePath}</a></td>\n        <td align=\"right\">${coverageSummary.statements.pct}%</td>\n        <td align=\"right\">${coverageSummary.branches.pct}%</td>\n        <td align=\"right\">${coverageSummary.functions.pct}%</td>\n        <td align=\"right\">${coverageSummary.lines.pct}%</td>\n        <td align=\"left\">${createRangeURLs(uncoveredLines, url)}</td>\n      </tr>`;\n  };\n\n  let reportData = '';\n\n  const [changedFiles, unchangedFiles] = splitFilesByChangeStatus(\n    filePaths,\n    pullChanges\n  );\n\n  if (\n    fileCoverageMode === FileCoverageMode.Changes &&\n    changedFiles.length === 0\n  ) {\n    return 'No changed files found.';\n  }\n\n  if (changedFiles.length > 0) {\n    reportData += `\n\t\t\t${formatGroupLine('Changed Files')} \n\t\t\t${changedFiles.map(formatFileLine).join('')}\n\t\t`;\n  }\n\n  if (fileCoverageMode === FileCoverageMode.All && unchangedFiles.length > 0) {\n    reportData += `\n\t\t\t${formatGroupLine('Unchanged Files')}\n\t\t\t${unchangedFiles.map(formatFileLine).join('')}\n\t\t`;\n  }\n\n  return oneLine`\n    <table>\n      <thead>\n        <tr>\n         <th align=\"left\">File</th>\n         <th align=\"right\">Stmts</th>\n         <th align=\"right\">% Branch</th>\n         <th align=\"right\">% Funcs</th>\n         <th align=\"right\">% Lines</th>\n         <th align=\"left\">Uncovered Lines</th>\n        </tr>\n      </thead>\n      <tbody>\n      ${reportData}\n      </tbody>\n    </table>\n  `;\n};\n\nfunction formatGroupLine(caption: string): string {\n  return `\n\t\t<tr>\n\t\t\t<td align=\"left\" colspan=\"6\"><b>${caption}</b></td>\n\t\t</tr>\n\t`;\n}\n\nfunction createRangeURLs(uncoveredLines: LineRange[], url: string): string {\n  return uncoveredLines\n    .map((range) => {\n      let linkText = `${range.start}`;\n      let urlHash = `#L${range.start}`;\n\n      if (range.start !== range.end) {\n        linkText += `-${range.end}`;\n        urlHash += `-L${range.end}`;\n      }\n\n      return `<a href=\"${url}${urlHash}\" class=\"text-red\">${linkText}</a>`;\n    })\n    .join(', ');\n}\n\nfunction splitFilesByChangeStatus(\n  filePaths: string[],\n  pullChanges: string[]\n): [string[], string[]] {\n  return filePaths.reduce(\n    ([changedFiles, unchangedFiles], filePath) => {\n      // Pull Changes has filePaths relative to the git repository, whereas the jsonSummary has filePaths relative to the workspace.\n      // So we have to convert the filePaths to be relative to the workspace.\n      const comparePath = path.relative(workspacePath, filePath);\n      if (pullChanges.includes(comparePath)) {\n        changedFiles.push(filePath);\n      } else {\n        unchangedFiles.push(filePath);\n      }\n      return [changedFiles, unchangedFiles];\n    },\n    [[], []] as [string[], string[]]\n  );\n}\n","type HeadlineArgs = {\n  name?: string;\n  relativeDir?: string;\n};\n\nexport function generateHeadline(options: HeadlineArgs) {\n  const relativeDir = options.relativeDir;\n\n  if (options.name && relativeDir) {\n    return `Coverage Report for ${options.name} (${relativeDir})`;\n  }\n\n  if (options.name) {\n    return `Coverage Report for ${options.name}`;\n  }\n\n  if (relativeDir) {\n    return `Coverage Report for ${relativeDir}`;\n  }\n\n  return 'Coverage Report';\n}\n","import { oneLine } from 'common-tags';\nimport { icons } from '../constants.js';\nimport type { CoverageReport, ReportNumbers } from '../types/JsonSummary.js';\nimport type { Thresholds } from '../types/Threshold.js';\n\nexport function generateSummaryTableHtml(\n  jsonReport: CoverageReport,\n  thresholds: Thresholds = {},\n  jsonCompareReport: CoverageReport | undefined = undefined\n): string {\n  return oneLine`\n\t\t<table>\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t <th align=\"center\">Status</th>\n\t\t\t\t <th align=\"left\">Category</th>\n\t\t\t\t <th align=\"right\">Percentage</th>\n\t\t\t\t <th align=\"right\">Covered / Total</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.lines, category: 'Lines', threshold: thresholds.lines, reportCompareNumbers: jsonCompareReport?.lines })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.statements, category: 'Statements', threshold: thresholds.statements, reportCompareNumbers: jsonCompareReport?.statements })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.functions, category: 'Functions', threshold: thresholds.functions, reportCompareNumbers: jsonCompareReport?.functions })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.branches, category: 'Branches', threshold: thresholds.branches, reportCompareNumbers: jsonCompareReport?.branches })}\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t`;\n}\n\nfunction generateTableRow({\n  reportNumbers,\n  category,\n  threshold,\n  reportCompareNumbers,\n}: {\n  reportNumbers: ReportNumbers;\n  category: string;\n  threshold?: number;\n  reportCompareNumbers?: ReportNumbers;\n}): string {\n  let status = icons.blue;\n  let percent = `${reportNumbers.pct}%`;\n\n  if (threshold) {\n    percent = `${percent} (${icons.target} ${threshold}%)`;\n    status = reportNumbers.pct >= threshold ? icons.green : icons.red;\n  }\n\n  if (reportCompareNumbers) {\n    const percentDiff = reportNumbers.pct - reportCompareNumbers.pct;\n    const compareString = getCompareString(percentDiff);\n    percent = `${percent}<br/>${compareString}`;\n  }\n\n  return `\n    <td align=\"center\">${status}</td>\n    <td align=\"left\">${category}</td>\n\t\t<td align=\"right\">${percent}</td>\n    <td align=\"right\">${reportNumbers.covered} / ${reportNumbers.total}</td>\n  `;\n}\n\nfunction getCompareString(percentDiff: number): string {\n  if (percentDiff === 0) {\n    return `${icons.equal} <em>±0%</em>`;\n  }\n\n  if (percentDiff > 0) {\n    return `${icons.increase} <em>+${percentDiff.toFixed(2)}%</em>`;\n  }\n\n  // The - char is already included in a negative number\n  return `${icons.decrease} <em>${percentDiff.toFixed(2)}%</em>`;\n}\n","import { existsSync } from 'node:fs';\nimport * as core from '@actions/core';\nimport * as github from '@actions/github';\nimport { getChangedPackages } from '../inputs/getChangedPackages.js';\nimport { FileCoverageMode } from '../inputs/getCoverageModeFrom.js';\nimport { getPullChanges } from '../inputs/getPullChanges.js';\nimport { getVitestJsonPath } from '../inputs/getVitestJsonPath.js';\nimport { getVitestThresholds } from '../inputs/getVitestThresholds.js';\nimport {\n  parseVitestJsonFinalReport,\n  parseVitestJsonSummaryReport,\n} from '../inputs/parseVitestJsonFinalReport.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\nimport { generateFileCoverageHtml } from './generateFileCoverageHtml.js';\nimport { generateHeadline } from './generateHeadline.js';\nimport { generateSummaryTableHtml } from './generateSummaryTableHtml.js';\n\ntype GenerateCoverageSummaryOptions = {\n  name: string;\n  repoCwd: string;\n  hideHeadline?: boolean;\n  fileCoverageMode: FileCoverageMode;\n  includeAllProjects: boolean;\n};\n\nexport const generateCoverageSummary = async (\n  options: GenerateCoverageSummaryOptions\n): Promise<typeof core.summary> => {\n  const changedPackages = await getChangedPackages(\n    options.repoCwd,\n    options.includeAllProjects\n  );\n  const summary = !options.hideHeadline\n    ? core.summary.addHeading(\n        generateHeadline({\n          name: options.name,\n          relativeDir: '',\n        }),\n        2\n      )\n    : core.summary;\n\n  for (const packageItem of changedPackages) {\n    const projectCwd = packageItem.dir;\n    core.info(`generating coverage summary from: ${projectCwd}`);\n    const { jsonSummaryPath, jsonSummaryComparePath, jsonFinalPath } =\n      getVitestJsonPath(projectCwd);\n\n    if (!existsSync(jsonSummaryPath)) {\n      core.warning(`No summary report json file found, skip ${projectCwd}`);\n      continue;\n    }\n\n    const jsonSummary = await parseVitestJsonSummaryReport(jsonSummaryPath);\n    const thresholds = await getVitestThresholds(projectCwd);\n\n    let jsonSummaryCompare: JsonSummary | undefined;\n    if (jsonSummaryComparePath) {\n      jsonSummaryCompare = await parseVitestJsonSummaryReport(\n        jsonSummaryComparePath\n      );\n    }\n    // for single project, we don't need to show the project name\n    // single project `relativeDir===''`\n    if (packageItem.relativeDir) {\n      summary.addHeading(\n        generateHeadline({\n          name: options.name,\n          relativeDir: packageItem.relativeDir,\n        }),\n        2\n      );\n    }\n\n    const tableData = generateSummaryTableHtml(\n      jsonSummary.total,\n      thresholds,\n      jsonSummaryCompare?.total\n    );\n\n    summary.addRaw(tableData);\n\n    if (options.fileCoverageMode !== FileCoverageMode.None) {\n      const pullChanges = await getPullChanges(options.fileCoverageMode);\n      const jsonFinal = await parseVitestJsonFinalReport(jsonFinalPath);\n      const fileTable = generateFileCoverageHtml({\n        jsonSummary,\n        jsonFinal,\n        fileCoverageMode: options.fileCoverageMode,\n        pullChanges,\n      });\n      summary.addDetails('File Coverage', fileTable);\n    }\n  }\n  try {\n    summary.addRaw(\n      `<em>Generated in workflow <a href=${getWorkflowSummaryURL()}>#${github.context.runNumber}</a></em>`\n    );\n  } catch {\n    // ignore, when we use cli mode, we don't have github context\n  }\n  return summary;\n};\n\nfunction getWorkflowSummaryURL() {\n  const { owner, repo } = github.context.repo;\n  const { runId } = github.context;\n  return `${github.context.serverUrl}/${owner}/${repo}/actions/runs/${runId}`;\n}\n","import { toString } from 'mdast-util-to-string';\nimport remarkParse from 'remark-parse';\nimport remarkStringify from 'remark-stringify';\nimport { unified } from 'unified';\nimport { COVERAGE_README_MARKER } from '../constants.js';\n\nexport function updateReadmeEntry(readme: string, readmeUpdateBody: string) {\n  const ast = unified().use(remarkParse).parse(readme);\n  const updatedast = unified().use(remarkParse).parse(readmeUpdateBody);\n\n  const nodes = ast.children;\n  let headingStartInfo:\n    | {\n        index: number;\n      }\n    | undefined;\n  let endIndex: number | undefined;\n\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (node.type === 'html') {\n      const stringified: string = toString(node);\n      if (\n        headingStartInfo === undefined &&\n        stringified === COVERAGE_README_MARKER\n      ) {\n        headingStartInfo = {\n          index: i,\n        };\n        continue;\n      }\n      if (endIndex === undefined && headingStartInfo !== undefined) {\n        endIndex = i;\n        break;\n      }\n    }\n  }\n\n  if (headingStartInfo && endIndex) {\n    ast.children.splice(\n      headingStartInfo.index,\n      endIndex - headingStartInfo.index + 1,\n      ...updatedast.children\n    );\n  } else {\n    ast.children.splice(2, 0, ...updatedast.children);\n  }\n  return {\n    content: unified().use(remarkStringify).stringify(ast),\n  };\n}\n","import { existsSync } from 'node:fs';\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport * as core from '@actions/core';\nimport { COVERAGE_README_MARKER } from '../constants.js';\nimport { updateReadmeEntry } from './updateReadmeEntry.js';\n\n/**\n * Write the vitest coverage summary to the README\n * @param cwd - The current working directory\n * @param summary - The summary to write to the README\n * @param headline - The headline to use for the summary `## Coverage Report`\n */\nexport const writeSummaryToReadMe = async (\n  cwd: string,\n  summary: typeof core.summary,\n  headline: string\n) => {\n  const readmeUpdateBody = `${COVERAGE_README_MARKER}\\n\\n${headline}\\n\\n${summary.stringify()}`;\n  const readmeFile = join(cwd, 'README.md');\n  if (existsSync(readmeFile)) {\n    const readmeContents = await readFile(readmeFile, 'utf8');\n    const entry = updateReadmeEntry(readmeContents, readmeUpdateBody);\n    await writeFile(readmeFile, entry.content);\n  } else {\n    core.warning(`No README.md found in ${cwd}`);\n  }\n};\n","import minimist from 'minimist';\nimport { resolve } from 'path';\nimport { FileCoverageMode } from './inputs/getCoverageModeFrom.js';\nimport { getVitestJsonPath } from './inputs/getVitestJsonPath.js';\nimport { parseVitestJsonSummaryReport } from './inputs/parseVitestJsonFinalReport.js';\nimport { generateBadges } from './report/generateBadges.js';\nimport { generateCoverageSummary } from './report/generateCoverageSummary.js';\nimport { writeSummaryToReadMe } from './utils/writeSummaryToReadMe.js';\n\ntype Argv = {\n  p: string;\n  path: string;\n  type: Array<'badges' | 'readme'>;\n  projectCwd: string;\n};\n\nexport const main = async (args: string[]) => {\n  const argv = minimist<Argv>(args, {\n    '--': true,\n    alias: {\n      p: 'path',\n    },\n    default: {\n      p: 'coverage/badges',\n      type: ['badges'],\n      projectCwd: process.cwd(),\n    },\n  });\n  const cwd = argv.projectCwd || process.cwd();\n  const badgesSavedTo = resolve(cwd, argv.path);\n  const { jsonSummaryPath } = getVitestJsonPath(cwd);\n  const jsonSummary = await parseVitestJsonSummaryReport(jsonSummaryPath);\n  const types = Array.isArray(argv.type) ? argv.type : [argv.type];\n  for (const type of types) {\n    if (type === 'badges') {\n      await generateBadges({\n        badgesSavedTo,\n        totalCoverageReport: jsonSummary.total,\n      });\n    } else if (type === 'readme') {\n      const summary = await generateCoverageSummary({\n        name: '',\n        fileCoverageMode: FileCoverageMode.None,\n        repoCwd: cwd,\n        hideHeadline: true,\n        includeAllProjects: true,\n      });\n      await writeSummaryToReadMe(cwd, summary, '## Coverage Report');\n    }\n  }\n};\n"]}