headlamp 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -593,7 +593,7 @@ var init_TimeoutError = __esm({
593
593
 
594
594
  // node_modules/es-toolkit/dist/promise/delay.mjs
595
595
  function delay(ms, { signal } = {}) {
596
- return new Promise((resolve10, reject) => {
596
+ return new Promise((resolve11, reject) => {
597
597
  const abortError = () => {
598
598
  reject(new AbortError());
599
599
  };
@@ -606,7 +606,7 @@ function delay(ms, { signal } = {}) {
606
606
  }
607
607
  const timeoutId = setTimeout(() => {
608
608
  signal?.removeEventListener("abort", abortHandler);
609
- resolve10();
609
+ resolve11();
610
610
  }, ms);
611
611
  signal?.addEventListener("abort", abortHandler, { once: true });
612
612
  });
@@ -671,11 +671,11 @@ var init_exec = __esm({
671
671
  child.stderr?.on("data", (chunk) => {
672
672
  stderr += String(chunk);
673
673
  });
674
- const exec = new Promise((resolve10, reject) => {
674
+ const exec = new Promise((resolve11, reject) => {
675
675
  child.on("error", reject);
676
676
  child.on(
677
677
  "close",
678
- (code) => Number(code) === 0 ? resolve10(stdout) : reject(new Error(stderr || `exit ${code}`))
678
+ (code) => Number(code) === 0 ? resolve11(stdout) : reject(new Error(stderr || `exit ${code}`))
679
679
  );
680
680
  });
681
681
  try {
@@ -695,7 +695,7 @@ var init_exec = __esm({
695
695
  throw caughtError;
696
696
  }
697
697
  };
698
- runExitCode = async (cmd, args, opts = {}) => new Promise((resolve10, reject) => {
698
+ runExitCode = async (cmd, args, opts = {}) => new Promise((resolve11, reject) => {
699
699
  const child = spawn(cmd, [...args], {
700
700
  cwd: opts.cwd,
701
701
  env: opts.env,
@@ -704,9 +704,9 @@ var init_exec = __esm({
704
704
  windowsHide: true
705
705
  });
706
706
  child.on("error", reject);
707
- child.on("close", (code) => resolve10(Number(code)));
707
+ child.on("close", (code) => resolve11(Number(code)));
708
708
  });
709
- runWithCapture = async (cmd, args, opts) => new Promise((resolve10, reject) => {
709
+ runWithCapture = async (cmd, args, opts) => new Promise((resolve11, reject) => {
710
710
  const child = spawn(cmd, [...args], {
711
711
  cwd: opts.cwd,
712
712
  env: opts.env,
@@ -722,7 +722,7 @@ var init_exec = __esm({
722
722
  buf += String(chunk);
723
723
  });
724
724
  child.on("error", reject);
725
- child.on("close", (code) => resolve10({ code: Number(code), output: buf }));
725
+ child.on("close", (code) => resolve11({ code: Number(code), output: buf }));
726
726
  });
727
727
  }
728
728
  });
@@ -1126,8 +1126,8 @@ var require_utils = __commonJS({
1126
1126
  }
1127
1127
  return output;
1128
1128
  };
1129
- exports.basename = (path12, { windows } = {}) => {
1130
- const segs = path12.split(windows ? /[\\/]/ : "/");
1129
+ exports.basename = (path13, { windows } = {}) => {
1130
+ const segs = path13.split(windows ? /[\\/]/ : "/");
1131
1131
  const last = segs[segs.length - 1];
1132
1132
  if (last === "") {
1133
1133
  return segs[segs.length - 2];
@@ -3496,11 +3496,11 @@ var require_lib = __commonJS({
3496
3496
  "node_modules/json5/lib/index.js"(exports, module) {
3497
3497
  var parse = require_parse2();
3498
3498
  var stringify = require_stringify();
3499
- var JSON53 = {
3499
+ var JSON54 = {
3500
3500
  parse,
3501
3501
  stringify
3502
3502
  };
3503
- module.exports = JSON53;
3503
+ module.exports = JSON54;
3504
3504
  }
3505
3505
  });
3506
3506
 
@@ -6126,15 +6126,23 @@ var buildMessageSection = (messageLines, details, _ctx, opts) => {
6126
6126
  const fallbackLines = [];
6127
6127
  if (hasOnlyBareError) {
6128
6128
  const startFrom = hintIdx >= 0 ? hintIdx + 1 : 0;
6129
+ let started = false;
6129
6130
  for (let i = startFrom; i < lines.length; i += 1) {
6130
6131
  const candidate = lines[i];
6131
- if (!candidate.trim()) {
6132
+ if (isStackLine(candidate)) {
6132
6133
  break;
6133
6134
  }
6134
- if (isStackLine(candidate)) {
6135
+ if (!candidate.trim()) {
6136
+ if (!started) {
6137
+ continue;
6138
+ }
6135
6139
  break;
6136
6140
  }
6141
+ started = true;
6137
6142
  fallbackLines.push(candidate);
6143
+ if (fallbackLines.length >= 6) {
6144
+ break;
6145
+ }
6138
6146
  }
6139
6147
  if (fallbackLines.length === 0 && details && details.messages && details.messages.length) {
6140
6148
  fallbackLines.push(
@@ -6202,7 +6210,7 @@ var linesFromDetails = (details) => {
6202
6210
  if (typeof obj.received === "string") {
6203
6211
  pushMaybe(obj.received, messages);
6204
6212
  }
6205
- const arrays = ["errors", "causes", "aggregatedErrors"];
6213
+ const arrays = ["errors", "details", "issues", "inner", "causes", "aggregatedErrors"];
6206
6214
  for (const key of arrays) {
6207
6215
  const arr = obj[key];
6208
6216
  if (Array.isArray(arr)) {
@@ -6211,7 +6219,7 @@ var linesFromDetails = (details) => {
6211
6219
  }
6212
6220
  }
6213
6221
  }
6214
- const nestedCandidates = ["error", "cause", "matcherResult"];
6222
+ const nestedCandidates = ["error", "cause", "matcherResult", "context", "data"];
6215
6223
  for (const key of nestedCandidates) {
6216
6224
  if (obj[key] && typeof obj[key] === "object") {
6217
6225
  visitDeep(obj[key], depth + 1);
@@ -6240,9 +6248,7 @@ var linesFromDetails = (details) => {
6240
6248
  pushMaybe(matcher.expected, messages);
6241
6249
  pushMaybe(matcher.received, messages);
6242
6250
  }
6243
- if (messages.length === 0 && stacks.length === 0) {
6244
- visitDeep(detail, 0);
6245
- }
6251
+ visitDeep(detail, 0);
6246
6252
  }
6247
6253
  }
6248
6254
  return { stacks, messages };
@@ -6306,24 +6312,31 @@ var buildConsoleSection = (maybeConsole) => {
6306
6312
  var buildFallbackMessageBlock = (messageLines, details) => {
6307
6313
  const normalize2 = (arr) => arr.map((lineText) => stripAnsiSimple(lineText)).filter((line) => line.trim().length > 0);
6308
6314
  const normalized = normalize2(messageLines);
6309
- const informative = normalized.filter((line) => !/^\s*(?:Error|AssertionError):?\s*$/.test(line));
6315
+ const informative = normalized.filter(
6316
+ (line) => !/^\s*(?:Error|AssertionError):?\s*$/i.test(line)
6317
+ );
6310
6318
  if (informative.length > 0) {
6311
6319
  return [];
6312
6320
  }
6313
6321
  const errorIdx = normalized.findIndex(
6314
- (line) => /(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError|Error):?/.test(line)
6322
+ (line) => /(TypeError|ReferenceError|SyntaxError|RangeError|AssertionError|Error):?/i.test(line)
6315
6323
  );
6316
6324
  const collected = [];
6317
6325
  if (errorIdx >= 0) {
6318
- for (let i = errorIdx; i < normalized.length && collected.length < 8; i += 1) {
6319
- const ln = normalized[i];
6320
- if (!ln.trim()) {
6326
+ let started = false;
6327
+ for (let i = errorIdx + 1; i < messageLines.length && collected.length < 8; i += 1) {
6328
+ const raw = stripAnsiSimple(messageLines[i]);
6329
+ if (isStackLine(raw)) {
6321
6330
  break;
6322
6331
  }
6323
- if (isStackLine(ln)) {
6332
+ if (!raw.trim()) {
6333
+ if (!started) {
6334
+ continue;
6335
+ }
6324
6336
  break;
6325
6337
  }
6326
- collected.push(ln);
6338
+ started = true;
6339
+ collected.push(raw);
6327
6340
  }
6328
6341
  }
6329
6342
  const fromDetails = collected.length > 0 ? [] : normalize2(details.messages).slice(0, 6);
@@ -6571,39 +6584,13 @@ var makeCtx = (opts, showStacks = false) => {
6571
6584
  return { cwd, width, showStacks, projectHint, editorCmd: opts?.editorCmd, readSource: readSource2 };
6572
6585
  };
6573
6586
 
6574
- // src/lib/formatter/bridge.ts
6575
- var import_json52 = __toESM(require_lib(), 1);
6587
+ // src/lib/formatter/bridge/tryBridgeFallback.ts
6588
+ var import_json53 = __toESM(require_lib(), 1);
6576
6589
  import * as fs6 from "node:fs";
6590
+ import * as path11 from "node:path";
6591
+
6592
+ // src/lib/formatter/bridge/logic.ts
6577
6593
  import * as path10 from "node:path";
6578
- var colorTokens2 = {
6579
- pass: Colors.Success,
6580
- fail: Colors.Failure,
6581
- skip: Colors.Skip,
6582
- todo: Colors.Todo,
6583
- passPill: (text) => BackgroundColors.Success(ansi.white(` ${text} `)),
6584
- failPill: (text) => BackgroundColors.Failure(ansi.white(` ${text} `))
6585
- };
6586
- var by = (keySelector) => (left, right) => keySelector(left) - keySelector(right);
6587
- var isObject = (candidateValue) => !!candidateValue && typeof candidateValue === "object";
6588
- var asHttpList = (candidateValue) => Array.isArray(candidateValue) ? candidateValue : [];
6589
- var summarizeUrl = (method, url, route) => {
6590
- const base = route || url || "";
6591
- const qs = url && url.includes("?") ? ` ? ${url.split("?")[1]}` : "";
6592
- return [method || "", base, qs].filter(Boolean).join(" ").trim();
6593
- };
6594
- var stripBridgeEventsFromConsole = (maybeConsole) => {
6595
- if (!Array.isArray(maybeConsole)) {
6596
- return maybeConsole;
6597
- }
6598
- return maybeConsole.filter((entry) => {
6599
- try {
6600
- const raw = Array.isArray(entry.message) ? entry.message.map(String).join(" ") : String(entry.message ?? "");
6601
- return !raw.includes("[JEST-BRIDGE-EVENT]");
6602
- } catch {
6603
- return true;
6604
- }
6605
- });
6606
- };
6607
6594
  var extractBridgePath2 = (raw, cwd) => {
6608
6595
  const matches = Array.from(
6609
6596
  raw.matchAll(/Test results written to:\s+([^\n\r]+jest-bridge-[^\s'"]+\.json)/g)
@@ -6611,7 +6598,7 @@ var extractBridgePath2 = (raw, cwd) => {
6611
6598
  if (!matches.length) {
6612
6599
  return null;
6613
6600
  }
6614
- const jsonPath = (matches[matches.length - 1][1] ?? "").trim().replace(/^["'`]|["'`]$/g, "");
6601
+ const jsonPath = (matches[matches.length - 1][1] ?? "").trim().replace(/^['"`]|['"`]$/g, "");
6615
6602
  return path10.isAbsolute(jsonPath) ? jsonPath : path10.resolve(cwd, jsonPath).replace(/\\/g, "/");
6616
6603
  };
6617
6604
  var isTransportError = (msg) => {
@@ -6620,25 +6607,6 @@ var isTransportError = (msg) => {
6620
6607
  lowercaseMessage
6621
6608
  );
6622
6609
  };
6623
- var envNumber = (name, fallback) => {
6624
- const parsed = Number(process.env[name]);
6625
- return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
6626
- };
6627
- var HEADLAMP_HTTP_WINDOW_MS = () => envNumber("HEADLAMP_HTTP_WINDOW_MS", 3e3);
6628
- var HEADLAMP_HTTP_STRICT_WINDOW_MS = () => envNumber("HEADLAMP_HTTP_STRICT_WINDOW_MS", 600);
6629
- var HEADLAMP_HTTP_MIN_SCORE = () => envNumber("HEADLAMP_HTTP_MIN_SCORE", 1200);
6630
- var HEADLAMP_HTTP_DIFF_LIMIT = () => envNumber("HEADLAMP_HTTP_DIFF_LIMIT", 6);
6631
- var HEADLAMP_HTTP_SHOW_MISS = () => process.env.HEADLAMP_HTTP_MISS === "1";
6632
- var eventsNear = (http, ts, testPath, windowMs = HEADLAMP_HTTP_WINDOW_MS()) => {
6633
- if (typeof ts !== "number" || !Number.isFinite(ts)) {
6634
- return [];
6635
- }
6636
- return http.filter((e) => {
6637
- const timeOk = typeof e.timestampMs === "number" && Math.abs(e.timestampMs - ts) <= windowMs;
6638
- const pathOk = !testPath || e.testPath === testPath;
6639
- return timeOk && pathOk;
6640
- });
6641
- };
6642
6610
  var parseMethodPathFromTitle = (title) => {
6643
6611
  if (!title) {
6644
6612
  return {};
@@ -6646,35 +6614,6 @@ var parseMethodPathFromTitle = (title) => {
6646
6614
  const matchResult = title.match(/\b(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\s+([^\s)]+)/i);
6647
6615
  return matchResult ? { method: matchResult[1]?.toUpperCase(), path: matchResult[2] } : {};
6648
6616
  };
6649
- var isHttpStatusNumber = (statusNumber) => typeof statusNumber === "number" && statusNumber >= 100 && statusNumber <= 599;
6650
- var hasStatusSemantics = (assertionLike) => {
6651
- if (!assertionLike) {
6652
- return false;
6653
- }
6654
- if (isHttpStatusNumber(assertionLike.expectedNumber) || isHttpStatusNumber(assertionLike.receivedNumber)) {
6655
- return true;
6656
- }
6657
- const combinedRaw = `${assertionLike.matcher ?? ""} ${assertionLike.message ?? ""}`;
6658
- const combinedMessage = combinedRaw.toLowerCase();
6659
- return /\bstatus(code)?\b|\btohaves(tatus|tatuscode)\b/.test(combinedMessage);
6660
- };
6661
- var fileSuggestsHttp = (relPath2) => /(?:^|\/)(routes?|api|controllers?|e2e|integration)(?:\/|\.test\.)/i.test(relPath2);
6662
- var inferHttpNumbersFromText = (lines) => {
6663
- const text = lines.join("\n");
6664
- const match = text.match(/Expected:\s*(\d{3})[\s\S]*?Received:\s*(\d{3})/i);
6665
- if (match) {
6666
- return { expectedNumber: Number(match[1]), receivedNumber: Number(match[2]) };
6667
- }
6668
- return {};
6669
- };
6670
- var titleSuggestsHttp = (title) => {
6671
- const { method, path: parsedPath } = parseMethodPathFromTitle(title);
6672
- return Boolean(method || parsedPath && parsedPath.startsWith("/"));
6673
- };
6674
- var isHttpRelevant = (ctx) => {
6675
- const assertionCtx = ctx.assertion;
6676
- return ctx.hasTransportSignal || ctx.httpCountInSameTest > 0 || titleSuggestsHttp(ctx.title) || hasStatusSemantics(assertionCtx) || fileSuggestsHttp(ctx.relPath);
6677
- };
6678
6617
  var routeSimilarityScore = (hint, evt) => {
6679
6618
  if (!hint.path && !hint.method) {
6680
6619
  return 0;
@@ -6695,6 +6634,15 @@ var routeSimilarityScore = (hint, evt) => {
6695
6634
  }
6696
6635
  return methodOk * 10;
6697
6636
  };
6637
+ var envNumber = (name, fallback) => {
6638
+ const parsed = Number(process.env[name]);
6639
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
6640
+ };
6641
+ var HEADLAMP_HTTP_WINDOW_MS = () => envNumber("HEADLAMP_HTTP_WINDOW_MS", 3e3);
6642
+ var HEADLAMP_HTTP_STRICT_WINDOW_MS = () => envNumber("HEADLAMP_HTTP_STRICT_WINDOW_MS", 600);
6643
+ var HEADLAMP_HTTP_MIN_SCORE = () => envNumber("HEADLAMP_HTTP_MIN_SCORE", 1200);
6644
+ var HEADLAMP_HTTP_DIFF_LIMIT = () => envNumber("HEADLAMP_HTTP_DIFF_LIMIT", 6);
6645
+ var HEADLAMP_HTTP_SHOW_MISS = () => process.env.HEADLAMP_HTTP_MISS === "1";
6698
6646
  var scoreHttpForAssertion = (assertion, titleHint) => (candidateEvent) => {
6699
6647
  const tsA = assertion.timestampMs;
6700
6648
  const tsH = candidateEvent.timestampMs;
@@ -6715,14 +6663,20 @@ var pickRelevantHttp = (assertion, http, ctx) => {
6715
6663
  const windowMs = isTransportError(assertion.message) ? HEADLAMP_HTTP_STRICT_WINDOW_MS() : HEADLAMP_HTTP_WINDOW_MS();
6716
6664
  let pool = strictPool;
6717
6665
  if (!pool.length) {
6718
- pool = http.filter(
6719
- (e) => e.testPath === ctx.testPath && typeof assertion.timestampMs === "number" && typeof e.timestampMs === "number" && Math.abs(e.timestampMs - assertion.timestampMs) <= windowMs
6720
- );
6666
+ pool = http.filter((event) => {
6667
+ const samePath = event.testPath === ctx.testPath;
6668
+ const tsA = assertion.timestampMs;
6669
+ const tsH = event.timestampMs;
6670
+ const inWindow = typeof tsA === "number" && typeof tsH === "number" && Math.abs(tsH - tsA) <= windowMs;
6671
+ return samePath && inWindow;
6672
+ });
6721
6673
  }
6722
6674
  if (!pool.length) {
6723
- pool = http.filter(
6724
- (e) => typeof assertion.timestampMs === "number" && typeof e.timestampMs === "number" && Math.abs(e.timestampMs - assertion.timestampMs) <= windowMs
6725
- );
6675
+ pool = http.filter((event) => {
6676
+ const tsA = assertion.timestampMs;
6677
+ const tsH = event.timestampMs;
6678
+ return typeof tsA === "number" && typeof tsH === "number" && Math.abs(tsH - tsA) <= windowMs;
6679
+ });
6726
6680
  }
6727
6681
  if (!pool.length) {
6728
6682
  return void 0;
@@ -6732,9 +6686,11 @@ var pickRelevantHttp = (assertion, http, ctx) => {
6732
6686
  const threshold = isTransportError(assertion.message) ? Math.max(HEADLAMP_HTTP_MIN_SCORE(), 1400) : HEADLAMP_HTTP_MIN_SCORE();
6733
6687
  return best && best.s >= threshold ? best.h : void 0;
6734
6688
  };
6735
- var isBridgeJSONLike = (candidateValue) => !!candidateValue && typeof candidateValue === "object" && "aggregated" in candidateValue;
6689
+
6690
+ // src/lib/formatter/bridge/utils.ts
6691
+ var import_json52 = __toESM(require_lib(), 1);
6736
6692
  var coerceJestJsonToBridge = (raw) => {
6737
- if (isBridgeJSONLike(raw)) {
6693
+ if (raw && typeof raw === "object" && "aggregated" in raw) {
6738
6694
  return raw;
6739
6695
  }
6740
6696
  const j = raw;
@@ -6761,19 +6717,85 @@ var coerceJestJsonToBridge = (raw) => {
6761
6717
  }))
6762
6718
  })),
6763
6719
  aggregated: {
6764
- numTotalTestSuites: j.numTotalTestSuites,
6765
- numPassedTestSuites: j.numPassedTestSuites,
6766
- numFailedTestSuites: j.numFailedTestSuites,
6767
- numTotalTests: j.numTotalTests,
6768
- numPassedTests: j.numPassedTests,
6769
- numFailedTests: j.numFailedTests,
6770
- numPendingTests: j.numPendingTests,
6771
- numTodoTests: j.numTodoTests,
6772
- startTime: j.startTime,
6773
- success: j.success
6720
+ numTotalTestSuites: raw.numTotalTestSuites,
6721
+ numPassedTestSuites: raw.numPassedTestSuites,
6722
+ numFailedTestSuites: raw.numFailedTestSuites,
6723
+ numTotalTests: raw.numTotalTests,
6724
+ numPassedTests: raw.numPassedTests,
6725
+ numFailedTests: raw.numFailedTests,
6726
+ numPendingTests: raw.numPendingTests,
6727
+ numTodoTests: raw.numTodoTests,
6728
+ startTime: raw.startTime,
6729
+ success: raw.success,
6730
+ runTimeMs: raw.aggregated?.runTimeMs
6774
6731
  }
6775
6732
  };
6776
6733
  };
6734
+ var colorTokens2 = {
6735
+ pass: Colors.Success,
6736
+ fail: Colors.Failure,
6737
+ skip: Colors.Skip,
6738
+ todo: Colors.Todo,
6739
+ passPill: (text) => BackgroundColors.Success(ansi.white(` ${text} `)),
6740
+ failPill: (text) => BackgroundColors.Failure(ansi.white(` ${text} `))
6741
+ };
6742
+ var by = (keySelector) => (left, right) => keySelector(left) - keySelector(right);
6743
+ var isObject = (candidateValue) => !!candidateValue && typeof candidateValue === "object";
6744
+ var asHttpList = (candidateValue) => Array.isArray(candidateValue) ? candidateValue : [];
6745
+ var summarizeUrl = (method, url, route) => {
6746
+ const base = route || url || "";
6747
+ const qs = url && url.includes("?") ? ` ? ${url.split("?")[1]}` : "";
6748
+ return [method || "", base, qs].filter(Boolean).join(" ").trim();
6749
+ };
6750
+ var stripBridgeEventsFromConsole = (maybeConsole) => {
6751
+ if (!Array.isArray(maybeConsole)) {
6752
+ return maybeConsole;
6753
+ }
6754
+ return maybeConsole.filter((entry) => {
6755
+ try {
6756
+ const raw = Array.isArray(entry.message) ? entry.message.map(String).join(" ") : String(entry.message ?? "");
6757
+ return !raw.includes("[JEST-BRIDGE-EVENT]");
6758
+ } catch {
6759
+ return true;
6760
+ }
6761
+ });
6762
+ };
6763
+ var eventsNear = (http, ts, testPath, windowMs = HEADLAMP_HTTP_WINDOW_MS()) => {
6764
+ if (typeof ts !== "number" || !Number.isFinite(ts)) {
6765
+ return [];
6766
+ }
6767
+ return http.filter((event) => {
6768
+ const timeOk = typeof event.timestampMs === "number" && Math.abs(event.timestampMs - ts) <= windowMs;
6769
+ const pathOk = !testPath || event.testPath === testPath;
6770
+ return timeOk && pathOk;
6771
+ });
6772
+ };
6773
+ var isHttpStatusNumber = (statusNumber) => typeof statusNumber === "number" && statusNumber >= 100 && statusNumber <= 599;
6774
+ var inferHttpNumbersFromText = (lines) => {
6775
+ const text = lines.join("\n");
6776
+ const match = text.match(/Expected:\s*(\d{3})[\s\S]*?Received:\s*(\d{3})/i);
6777
+ if (match) {
6778
+ return { expectedNumber: Number(match[1]), receivedNumber: Number(match[2]) };
6779
+ }
6780
+ return {};
6781
+ };
6782
+ var titleSuggestsHttp = (title) => {
6783
+ const { method, path: parsedPath } = parseMethodPathFromTitle(title);
6784
+ return Boolean(method || parsedPath && parsedPath.startsWith("/"));
6785
+ };
6786
+ var hasStatusSemantics = (assertionLike) => {
6787
+ if (!assertionLike) {
6788
+ return false;
6789
+ }
6790
+ if (isHttpStatusNumber(assertionLike.expectedNumber) || isHttpStatusNumber(assertionLike.receivedNumber)) {
6791
+ return true;
6792
+ }
6793
+ const combinedRaw = `${assertionLike.matcher ?? ""} ${assertionLike.message ?? ""}`;
6794
+ const combinedMessage = combinedRaw.toLowerCase();
6795
+ return /\bstatus(code)?\b|\btohaves(tatus|tatuscode)\b/.test(combinedMessage);
6796
+ };
6797
+ var fileSuggestsHttp = (relPath2) => /(?:^|\/)(routes?|api|controllers?|e2e|integration)(?:\/|\.test\.)/i.test(relPath2);
6798
+ var isHttpRelevant = (ctx) => ctx.hasTransportSignal || ctx.httpCountInSameTest > 0 || titleSuggestsHttp(ctx.title) || hasStatusSemantics(ctx.assertion) || fileSuggestsHttp(ctx.relPath);
6777
6799
  var vitestFooter = (agg, durationMs) => {
6778
6800
  const files = [
6779
6801
  agg.numFailedTestSuites ? colorTokens2.fail(`${agg.numFailedTestSuites} failed`) : "",
@@ -7250,13 +7272,21 @@ var renderVitestFromJestJSON = (data, ctx, opts) => {
7250
7272
  out.push(vitestFooter(data.aggregated));
7251
7273
  return out.join("\n");
7252
7274
  };
7275
+
7276
+ // src/lib/formatter/bridge/tryBridgeFallback.ts
7253
7277
  var tryBridgeFallback = (raw, ctx, opts) => {
7254
- const bridgeJsonPath = extractBridgePath2(raw, ctx.cwd);
7278
+ let bridgeJsonPath = extractBridgePath2(raw, ctx.cwd);
7279
+ if (!bridgeJsonPath) {
7280
+ const def = path11.resolve(ctx.cwd, "coverage/jest-run.json").replace(/\\/g, "/");
7281
+ if (fs6.existsSync(def)) {
7282
+ bridgeJsonPath = def;
7283
+ }
7284
+ }
7255
7285
  if (!bridgeJsonPath || !fs6.existsSync(bridgeJsonPath)) {
7256
7286
  return null;
7257
7287
  }
7258
7288
  try {
7259
- const json = import_json52.default.parse(fs6.readFileSync(bridgeJsonPath, "utf8"));
7289
+ const json = import_json53.default.parse(fs6.readFileSync(bridgeJsonPath, "utf8"));
7260
7290
  const bridge = coerceJestJsonToBridge(json);
7261
7291
  return renderVitestFromJestJSON(bridge, ctx, opts);
7262
7292
  } catch {
@@ -7274,23 +7304,39 @@ var formatJestOutputVitest = (raw, opts) => pipe(
7274
7304
  (state) => ({ ...state, chunks: parseChunks(state.raw) }),
7275
7305
  (state) => ({
7276
7306
  ...state,
7277
- rendered: renderChunks(state.chunks, state.ctx, mkPrettyFns(), {
7307
+ native: renderChunks(state.chunks, state.ctx, mkPrettyFns(), {
7278
7308
  onlyFailures: Boolean(state.opts?.onlyFailures)
7279
- })
7309
+ }).text
7280
7310
  }),
7281
- (state) => {
7282
- if (state.rendered.hadParsed) {
7283
- return state.rendered.text;
7284
- }
7285
- const fallback = tryBridgeFallback(state.raw, state.ctx, {
7311
+ (state) => ({
7312
+ ...state,
7313
+ bridge: tryBridgeFallback(state.raw, state.ctx, {
7286
7314
  onlyFailures: Boolean(state.opts?.onlyFailures)
7287
- });
7288
- if (!fallback) {
7289
- return state.rendered.text;
7315
+ }) || null
7316
+ }),
7317
+ (state) => {
7318
+ const out = [];
7319
+ const seen = /* @__PURE__ */ new Set();
7320
+ const pushUnique = (text) => {
7321
+ if (!text) {
7322
+ return;
7323
+ }
7324
+ for (const line of text.split(/\r?\n/)) {
7325
+ const key = stripAnsiSimple(line);
7326
+ if (!seen.has(key)) {
7327
+ out.push(line);
7328
+ seen.add(key);
7329
+ }
7330
+ }
7331
+ };
7332
+ pushUnique(state.native);
7333
+ if (state.bridge) {
7334
+ if (out.length) {
7335
+ out.push("");
7336
+ }
7337
+ pushUnique(state.bridge);
7290
7338
  }
7291
- const prefix = state.rendered.text;
7292
- return prefix ? `${prefix}
7293
- ${fallback}` : fallback;
7339
+ return out.join("\n");
7294
7340
  }
7295
7341
  );
7296
7342
 
@@ -7407,7 +7453,7 @@ module.exports = BridgeReporter;`;
7407
7453
  init_env_utils();
7408
7454
  init_exec();
7409
7455
  init_args();
7410
- import * as path11 from "node:path";
7456
+ import * as path12 from "node:path";
7411
7457
  import * as os3 from "node:os";
7412
7458
  import * as fsSync3 from "node:fs";
7413
7459
  import * as fs7 from "node:fs/promises";
@@ -7687,7 +7733,7 @@ var mergeLcov = async () => {
7687
7733
  try {
7688
7734
  const entries = fsSync3.readdirSync(dir, { withFileTypes: true });
7689
7735
  for (const entry of entries) {
7690
- const full = path11.join(dir, entry.name);
7736
+ const full = path12.join(dir, entry.name);
7691
7737
  if (entry.isDirectory()) {
7692
7738
  out.push(...collectLcovs(full));
7693
7739
  } else if (entry.isFile() && entry.name === "lcov.info") {
@@ -7699,8 +7745,8 @@ var mergeLcov = async () => {
7699
7745
  return out;
7700
7746
  };
7701
7747
  try {
7702
- const jestRoot = path11.join("coverage", "jest");
7703
- const candidates = [path11.join(jestRoot, "lcov.info"), ...collectLcovs(jestRoot)].map((candidatePath) => path11.resolve(candidatePath)).filter((absolutePath, index, arr) => arr.indexOf(absolutePath) === index);
7748
+ const jestRoot = path12.join("coverage", "jest");
7749
+ const candidates = [path12.join(jestRoot, "lcov.info"), ...collectLcovs(jestRoot)].map((candidatePath) => path12.resolve(candidatePath)).filter((absolutePath, index, arr) => arr.indexOf(absolutePath) === index);
7704
7750
  for (const filePath of candidates) {
7705
7751
  try {
7706
7752
  const content = await readOrEmpty(filePath);
@@ -7740,7 +7786,7 @@ var emitMergedCoverage = async (ui, opts) => {
7740
7786
  try {
7741
7787
  const entries = fsSync3.readdirSync(dir, { withFileTypes: true });
7742
7788
  for (const entry of entries) {
7743
- const full = path11.join(dir, entry.name);
7789
+ const full = path12.join(dir, entry.name);
7744
7790
  if (entry.isDirectory()) {
7745
7791
  out.push(...listJsons(full));
7746
7792
  } else if (entry.isFile() && entry.name === "coverage-final.json") {
@@ -7751,11 +7797,11 @@ var emitMergedCoverage = async (ui, opts) => {
7751
7797
  }
7752
7798
  return out;
7753
7799
  };
7754
- const coverageRoot = path11.join("coverage", "jest");
7800
+ const coverageRoot = path12.join("coverage", "jest");
7755
7801
  const jsonCandidates = [
7756
- path11.join(coverageRoot, "coverage-final.json"),
7802
+ path12.join(coverageRoot, "coverage-final.json"),
7757
7803
  ...listJsons(coverageRoot)
7758
- ].map((candidatePath) => path11.resolve(candidatePath)).filter((absolutePath, index, arr) => {
7804
+ ].map((candidatePath) => path12.resolve(candidatePath)).filter((absolutePath, index, arr) => {
7759
7805
  const isFirst = arr.indexOf(absolutePath) === index;
7760
7806
  const exists = fsSync3.existsSync(absolutePath);
7761
7807
  return isFirst && exists;
@@ -7817,7 +7863,7 @@ var emitMergedCoverage = async (ui, opts) => {
7817
7863
  executedTests: opts.executedTests ?? []
7818
7864
  });
7819
7865
  const context = LibReport.createContext({
7820
- dir: path11.resolve("coverage", "merged"),
7866
+ dir: path12.resolve("coverage", "merged"),
7821
7867
  coverageMap: filteredMap,
7822
7868
  defaultSummarizer: "nested"
7823
7869
  });
@@ -7885,8 +7931,8 @@ var emitMergedCoverage = async (ui, opts) => {
7885
7931
  for (const reporter of reporters) {
7886
7932
  reporter.execute(context);
7887
7933
  }
7888
- const textPath = path11.resolve("coverage", "merged", "coverage.txt");
7889
- const summaryPath = path11.resolve("coverage", "merged", "coverage-summary.txt");
7934
+ const textPath = path12.resolve("coverage", "merged", "coverage.txt");
7935
+ const summaryPath = path12.resolve("coverage", "merged", "coverage-summary.txt");
7890
7936
  const filesToPrint = [];
7891
7937
  if (fsSync3.existsSync(textPath)) {
7892
7938
  filesToPrint.push(textPath);
@@ -8029,13 +8075,13 @@ var program = async () => {
8029
8075
  const rels2 = Array.from(
8030
8076
  /* @__PURE__ */ new Set([...branchDiff, ...stagedNow, ...unstagedNow, ...untrackedNow])
8031
8077
  );
8032
- return rels2.map((rel) => path11.resolve(cwd, rel).replace(/\\/g, "/")).filter((abs) => !abs.includes("/node_modules/") && !abs.includes("/coverage/"));
8078
+ return rels2.map((rel) => path12.resolve(cwd, rel).replace(/\\/g, "/")).filter((abs) => !abs.includes("/node_modules/") && !abs.includes("/coverage/"));
8033
8079
  }
8034
8080
  const staged = mode === "staged" || mode === "all" ? await collect("git", ["diff", "--name-only", "--diff-filter=ACMRTUXB", "--cached"]) : [];
8035
8081
  const unstagedTracked = mode === "unstaged" || mode === "all" ? await collect("git", ["diff", "--name-only", "--diff-filter=ACMRTUXB"]) : [];
8036
8082
  const untracked = mode === "unstaged" || mode === "all" ? await collect("git", ["ls-files", "--others", "--exclude-standard"]) : [];
8037
8083
  const rels = Array.from(/* @__PURE__ */ new Set([...staged, ...unstagedTracked, ...untracked]));
8038
- return rels.map((rel) => path11.resolve(cwd, rel).replace(/\\/g, "/")).filter((abs) => !abs.includes("/node_modules/") && !abs.includes("/coverage/"));
8084
+ return rels.map((rel) => path12.resolve(cwd, rel).replace(/\\/g, "/")).filter((abs) => !abs.includes("/node_modules/") && !abs.includes("/coverage/"));
8039
8085
  };
8040
8086
  const repoRootForChanged = workspaceRoot ?? await findRepoRoot();
8041
8087
  const changedSelectionAbs = changed ? await getChangedFiles(changed, repoRootForChanged) : [];
@@ -8060,18 +8106,18 @@ var program = async () => {
8060
8106
  if (!token) {
8061
8107
  continue;
8062
8108
  }
8063
- const isAbs = path11.isAbsolute(token);
8109
+ const isAbs = path12.isAbsolute(token);
8064
8110
  const looksLikeRelPath = /[\\/]/.test(token);
8065
8111
  let candidateFromRoot;
8066
8112
  if (token.startsWith("/")) {
8067
- candidateFromRoot = path11.join(repoRoot, token.slice(1));
8113
+ candidateFromRoot = path12.join(repoRoot, token.slice(1));
8068
8114
  } else if (looksLikeRelPath) {
8069
- candidateFromRoot = path11.join(repoRoot, token);
8115
+ candidateFromRoot = path12.join(repoRoot, token);
8070
8116
  } else {
8071
8117
  candidateFromRoot = void 0;
8072
8118
  }
8073
8119
  const tryPushIfProd = (absPath) => {
8074
- const norm = path11.resolve(absPath).replace(/\\/g, "/");
8120
+ const norm = path12.resolve(absPath).replace(/\\/g, "/");
8075
8121
  const isTest = /(^|\/)tests?\//i.test(norm) || /\.(test|spec)\.[tj]sx?$/i.test(norm);
8076
8122
  if (!isTest && fsSync3.existsSync(norm)) {
8077
8123
  results.add(norm);
@@ -8093,7 +8139,7 @@ var program = async () => {
8093
8139
  }),
8094
8140
  timeoutMs: 4e3
8095
8141
  });
8096
- const matches = out.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).map((rel) => path11.resolve(repoRoot, rel).replace(/\\/g, "/")).filter(
8142
+ const matches = out.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).map((rel) => path12.resolve(repoRoot, rel).replace(/\\/g, "/")).filter(
8097
8143
  (abs) => !abs.includes("/node_modules/") && !abs.includes("/coverage/") && !/(^|\/)tests?\//i.test(abs) && !/\.(test|spec)\.[tj]sx?$/i.test(abs)
8098
8144
  );
8099
8145
  matches.forEach((abs) => results.add(abs));
@@ -8114,8 +8160,8 @@ var program = async () => {
8114
8160
  const jestDiscoveryArgs = selectionIncludesProdPaths ? stripPathTokens(jest) : jest;
8115
8161
  const projectConfigs = [];
8116
8162
  try {
8117
- const baseCfg = path11.resolve("jest.config.js");
8118
- const tsCfg = path11.resolve("jest.ts.config.js");
8163
+ const baseCfg = path12.resolve("jest.config.js");
8164
+ const tsCfg = path12.resolve("jest.ts.config.js");
8119
8165
  if (fsSync3.existsSync(baseCfg)) {
8120
8166
  projectConfigs.push(baseCfg);
8121
8167
  }
@@ -8132,7 +8178,7 @@ var program = async () => {
8132
8178
  );
8133
8179
  const prodSelections2 = expandedProdSelections;
8134
8180
  for (const cfg of projectConfigs) {
8135
- const cfgCwd = path11.dirname(cfg);
8181
+ const cfgCwd = path12.dirname(cfg);
8136
8182
  const allTests = await discoverJestResilient([...jestDiscoveryArgs, "--config", cfg], {
8137
8183
  cwd: cfgCwd
8138
8184
  });
@@ -8145,7 +8191,7 @@ var program = async () => {
8145
8191
  });
8146
8192
  } catch (err) {
8147
8193
  if (isDebug()) {
8148
- console.warn(`direct selection failed for project ${path11.basename(cfg)}: ${String(err)}`);
8194
+ console.warn(`direct selection failed for project ${path12.basename(cfg)}: ${String(err)}`);
8149
8195
  }
8150
8196
  }
8151
8197
  perProjectFiles.set(cfg, directPerProject);
@@ -8157,7 +8203,7 @@ var program = async () => {
8157
8203
  )} | related=${selectionIncludesProdPaths} | cwd=${repoRootForDiscovery}`
8158
8204
  );
8159
8205
  for (const cfg of projectConfigs) {
8160
- const cfgCwd = path11.dirname(cfg);
8206
+ const cfgCwd = path12.dirname(cfg);
8161
8207
  const files = await discoverJestResilient([...jestDiscoveryArgs, "--config", cfg], {
8162
8208
  cwd: cfgCwd
8163
8209
  });
@@ -8172,13 +8218,13 @@ var program = async () => {
8172
8218
  );
8173
8219
  const candidates = selectionHasPaths && selectionLooksLikeTest ? selectionTestPaths : files;
8174
8220
  const absFiles = candidates.map(
8175
- (candidatePath) => path11.isAbsolute(candidatePath) ? candidatePath : path11.join(repoRootForDiscovery, candidatePath)
8221
+ (candidatePath) => path12.isAbsolute(candidatePath) ? candidatePath : path12.join(repoRootForDiscovery, candidatePath)
8176
8222
  ).map((absolutePath) => absolutePath.replace(/\\/g, "/"));
8177
8223
  const onlyOwned = await filterCandidatesForProject(
8178
8224
  cfg,
8179
8225
  jestDiscoveryArgs,
8180
8226
  absFiles,
8181
- path11.dirname(cfg)
8227
+ path12.dirname(cfg)
8182
8228
  );
8183
8229
  perProjectFiltered.set(cfg, onlyOwned);
8184
8230
  }
@@ -8190,7 +8236,7 @@ var program = async () => {
8190
8236
  if (selectionHasPaths && prodSelections.length > 0) {
8191
8237
  console.info(`rg related \u2192 prodSelections=${prodSelections.length} (starting)`);
8192
8238
  const repoRootForRefinement = workspaceRoot ?? await findRepoRoot();
8193
- const selectionKey = prodSelections.map((absPath) => path11.relative(repoRootForRefinement, absPath).replace(/\\/g, "/")).sort((firstPath, secondPath) => firstPath.localeCompare(secondPath)).join("|");
8239
+ const selectionKey = prodSelections.map((absPath) => path12.relative(repoRootForRefinement, absPath).replace(/\\/g, "/")).sort((firstPath, secondPath) => firstPath.localeCompare(secondPath)).join("|");
8194
8240
  const { cachedRelated: cachedRelated2, findRelatedTestsFast: findRelatedTestsFast2, DEFAULT_TEST_GLOBS: DEFAULT_TEST_GLOBS2 } = await Promise.resolve().then(() => (init_fast_related(), fast_related_exports));
8195
8241
  const { DEFAULT_EXCLUDE: DEFAULT_EXCLUDE2 } = await Promise.resolve().then(() => (init_args(), args_exports));
8196
8242
  const rgMatches = await cachedRelated2({
@@ -8220,7 +8266,7 @@ var program = async () => {
8220
8266
  cfg,
8221
8267
  jestDiscoveryArgs,
8222
8268
  rgCandidates,
8223
- path11.dirname(cfg)
8269
+ path12.dirname(cfg)
8224
8270
  );
8225
8271
  perProjectFromRg.set(cfg, owned);
8226
8272
  }
@@ -8235,9 +8281,9 @@ var program = async () => {
8235
8281
  } else {
8236
8282
  const repoRootForScan = repoRootForDiscovery;
8237
8283
  const toSeeds = (abs) => {
8238
- const rel = path11.relative(repoRootForScan, abs).replace(/\\/g, "/");
8284
+ const rel = path12.relative(repoRootForScan, abs).replace(/\\/g, "/");
8239
8285
  const withoutExt = rel.replace(/\.(m?[tj]sx?)$/i, "");
8240
- const base = path11.basename(withoutExt);
8286
+ const base = path12.basename(withoutExt);
8241
8287
  const segs = withoutExt.split("/");
8242
8288
  const tail2 = segs.slice(-2).join("/");
8243
8289
  return Array.from(new Set([withoutExt, base, tail2].filter(Boolean)));
@@ -8252,8 +8298,8 @@ var program = async () => {
8252
8298
  }
8253
8299
  };
8254
8300
  const resolveLocalImport = (fromFile, spec) => {
8255
- const baseDir = path11.dirname(fromFile);
8256
- const cand = path11.resolve(baseDir, spec);
8301
+ const baseDir = path12.dirname(fromFile);
8302
+ const cand = path12.resolve(baseDir, spec);
8257
8303
  const exts = ["", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"];
8258
8304
  for (const ext of exts) {
8259
8305
  const full = ext ? `${cand}${ext}` : cand;
@@ -8262,7 +8308,7 @@ var program = async () => {
8262
8308
  }
8263
8309
  }
8264
8310
  for (const ext of exts) {
8265
- const full = path11.join(cand, `index${ext}`);
8311
+ const full = path12.join(cand, `index${ext}`);
8266
8312
  if (fsSync3.existsSync(full)) {
8267
8313
  return full;
8268
8314
  }
@@ -8316,7 +8362,7 @@ var program = async () => {
8316
8362
  cfg,
8317
8363
  jestDiscoveryArgs,
8318
8364
  keptCandidates,
8319
- path11.dirname(cfg)
8365
+ path12.dirname(cfg)
8320
8366
  );
8321
8367
  perProjectFromScan.set(cfg, owned);
8322
8368
  }
@@ -8346,7 +8392,7 @@ var program = async () => {
8346
8392
  try {
8347
8393
  const allAcross = [];
8348
8394
  for (const cfg of projectConfigs) {
8349
- const cfgCwd = path11.dirname(cfg);
8395
+ const cfgCwd = path12.dirname(cfg);
8350
8396
  const listed = await discoverJestResilient([...jestDiscoveryArgs, "--config", cfg], {
8351
8397
  cwd: cfgCwd
8352
8398
  });
@@ -8360,9 +8406,9 @@ var program = async () => {
8360
8406
  }
8361
8407
  }
8362
8408
  const seeds = prodSelections.map(
8363
- (abs) => path11.relative(repoRoot, abs).replace(/\\/g, "/").replace(/\.(m?[tj]sx?)$/i, "")
8409
+ (abs) => path12.relative(repoRoot, abs).replace(/\\/g, "/").replace(/\.(m?[tj]sx?)$/i, "")
8364
8410
  ).flatMap((rel) => {
8365
- const base = path11.basename(rel);
8411
+ const base = path12.basename(rel);
8366
8412
  const segments = rel.split("/");
8367
8413
  return Array.from(new Set([rel, base, segments.slice(-2).join("/")].filter(Boolean)));
8368
8414
  });
@@ -8375,8 +8421,8 @@ var program = async () => {
8375
8421
  }
8376
8422
  };
8377
8423
  const resolveLocalImport = (fromFile, spec) => {
8378
- const baseDir = path11.dirname(fromFile);
8379
- const candidate = path11.resolve(baseDir, spec);
8424
+ const baseDir = path12.dirname(fromFile);
8425
+ const candidate = path12.resolve(baseDir, spec);
8380
8426
  const extensions = ["", ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"];
8381
8427
  for (const ext of extensions) {
8382
8428
  const fullPath = ext ? `${candidate}${ext}` : candidate;
@@ -8385,7 +8431,7 @@ var program = async () => {
8385
8431
  }
8386
8432
  }
8387
8433
  for (const ext of extensions) {
8388
- const fullPath = path11.join(candidate, `index${ext}`);
8434
+ const fullPath = path12.join(candidate, `index${ext}`);
8389
8435
  if (fsSync3.existsSync(fullPath)) {
8390
8436
  return fullPath;
8391
8437
  }
@@ -8542,10 +8588,10 @@ var program = async () => {
8542
8588
  };
8543
8589
  const prodSeedsForRun = (() => {
8544
8590
  const changedAbs = (changedSelectionAbs ?? []).map(
8545
- (absPath) => path11.resolve(absPath).replace(/\\/g, "/")
8591
+ (absPath) => path12.resolve(absPath).replace(/\\/g, "/")
8546
8592
  );
8547
8593
  const selAbs = selectionPathsAugmented.map(
8548
- (pathToken) => path11.resolve(pathToken).replace(/\\/g, "/")
8594
+ (pathToken) => path12.resolve(pathToken).replace(/\\/g, "/")
8549
8595
  );
8550
8596
  return (changedAbs.length ? changedAbs : selAbs).filter(
8551
8597
  (abs) => /[\\/]/.test(abs) && !/(^|\/)tests?\//i.test(abs) && !/\.(test|spec)\.[tj]sx?$/i.test(abs)
@@ -8560,17 +8606,17 @@ var program = async () => {
8560
8606
  const cfg = projectsToRun[projIndex];
8561
8607
  const files = perProjectFiltered.get(cfg) ?? [];
8562
8608
  if (files.length === 0) {
8563
- console.info(`Project ${path11.basename(cfg)}: 0 matching tests after filter; skipping.`);
8609
+ console.info(`Project ${path12.basename(cfg)}: 0 matching tests after filter; skipping.`);
8564
8610
  continue;
8565
8611
  }
8566
8612
  files.forEach(
8567
- (absTestPath) => executedTestFilesSet.add(path11.resolve(absTestPath).replace(/\\/g, "/"))
8613
+ (absTestPath) => executedTestFilesSet.add(path12.resolve(absTestPath).replace(/\\/g, "/"))
8568
8614
  );
8569
- const outJson = path11.join(
8615
+ const outJson = path12.join(
8570
8616
  os3.tmpdir(),
8571
8617
  `jest-bridge-${Date.now()}-${Math.random().toString(36).slice(2)}.json`
8572
8618
  );
8573
- const reporterPath = path11.resolve("scripts/jest-vitest-bridge.cjs");
8619
+ const reporterPath = path12.resolve("scripts/jest-vitest-bridge.cjs");
8574
8620
  try {
8575
8621
  const needsWrite = (() => {
8576
8622
  try {
@@ -8581,10 +8627,10 @@ var program = async () => {
8581
8627
  }
8582
8628
  })();
8583
8629
  if (needsWrite) {
8584
- fsSync3.mkdirSync(path11.dirname(reporterPath), { recursive: true });
8630
+ fsSync3.mkdirSync(path12.dirname(reporterPath), { recursive: true });
8585
8631
  fsSync3.writeFileSync(reporterPath, JEST_BRIDGE_REPORTER_SOURCE, "utf8");
8586
8632
  }
8587
- const envPath = path11.resolve("scripts/jest-bridge-env.cjs");
8633
+ const envPath = path12.resolve("scripts/jest-bridge-env.cjs");
8588
8634
  try {
8589
8635
  const existingEnv = fsSync3.readFileSync(envPath, "utf8");
8590
8636
  if (existingEnv !== JEST_BRIDGE_ENV_SOURCE) {
@@ -8592,7 +8638,7 @@ var program = async () => {
8592
8638
  }
8593
8639
  } catch {
8594
8640
  try {
8595
- fsSync3.mkdirSync(path11.dirname(envPath), { recursive: true });
8641
+ fsSync3.mkdirSync(path12.dirname(envPath), { recursive: true });
8596
8642
  } catch {
8597
8643
  }
8598
8644
  fsSync3.writeFileSync(envPath, JEST_BRIDGE_ENV_SOURCE, "utf8");
@@ -8600,7 +8646,7 @@ var program = async () => {
8600
8646
  } catch (ensureReporterError) {
8601
8647
  console.warn(`Unable to ensure jest bridge reporter: ${String(ensureReporterError)}`);
8602
8648
  }
8603
- const selectedFilesForCoverage = selectionPathsAugmented.filter((pathToken) => /[\\/]/.test(pathToken)).filter((pathToken) => !looksLikeTestPath(pathToken)).map((pathToken) => path11.relative(repoRootForDiscovery, pathToken).replace(/\\\\/g, "/")).filter((rel) => rel && !/^\.+\//.test(rel)).map((rel) => rel.startsWith("./") ? rel : `./${rel}`);
8649
+ const selectedFilesForCoverage = selectionPathsAugmented.filter((pathToken) => /[\\/]/.test(pathToken)).filter((pathToken) => !looksLikeTestPath(pathToken)).map((pathToken) => path12.relative(repoRootForDiscovery, pathToken).replace(/\\\\/g, "/")).filter((rel) => rel && !/^\.+\//.test(rel)).map((rel) => rel.startsWith("./") ? rel : `./${rel}`);
8604
8650
  const coverageFromArgs = [];
8605
8651
  for (const relPath2 of selectedFilesForCoverage) {
8606
8652
  coverageFromArgs.push("--collectCoverageFrom", relPath2);
@@ -8618,11 +8664,11 @@ var program = async () => {
8618
8664
  `--reporters=${reporterPath}`,
8619
8665
  "--colors",
8620
8666
  "--env",
8621
- path11.resolve("scripts/jest-bridge-env.cjs"),
8667
+ path12.resolve("scripts/jest-bridge-env.cjs"),
8622
8668
  ...sanitizedJestRunArgs,
8623
8669
  ...collectCoverage ? [
8624
8670
  "--coverageDirectory",
8625
- path11.join("coverage", "jest", path11.basename(cfg).replace(/[^a-zA-Z0-9_.-]+/g, "_"))
8671
+ path12.join("coverage", "jest", path12.basename(cfg).replace(/[^a-zA-Z0-9_.-]+/g, "_"))
8626
8672
  ] : [],
8627
8673
  ...coverageFromArgs,
8628
8674
  "--passWithNoTests",
@@ -8748,10 +8794,10 @@ ${stripFooter(rawAlso)}`.trimEnd();
8748
8794
  try {
8749
8795
  const prodSeeds = (() => {
8750
8796
  const changedAbs = (changedSelectionAbs ?? []).map(
8751
- (absPath) => path11.resolve(absPath).replace(/\\/g, "/")
8797
+ (absPath) => path12.resolve(absPath).replace(/\\/g, "/")
8752
8798
  );
8753
8799
  const selAbs = selectionPathsAugmented.map(
8754
- (pathToken) => path11.resolve(pathToken).replace(/\\/g, "/")
8800
+ (pathToken) => path12.resolve(pathToken).replace(/\\/g, "/")
8755
8801
  );
8756
8802
  return (changedAbs.length ? changedAbs : selAbs).filter(
8757
8803
  (abs) => /[\\/]/.test(abs) && !/(^|\/)tests?\//i.test(abs) && !/\.(test|spec)\.[tj]sx?$/i.test(abs)
@@ -8844,6 +8890,7 @@ export {
8844
8890
  drawFailLine,
8845
8891
  drawRule,
8846
8892
  emitMergedCoverage,
8893
+ extractBridgePath,
8847
8894
  filterCandidatesForProject,
8848
8895
  filterCoverageMap,
8849
8896
  findCodeFrameStart,
@@ -8882,7 +8929,6 @@ export {
8882
8929
  routeSimilarityScore,
8883
8930
  rule,
8884
8931
  runJestBootstrap,
8885
- scoreHttpForAssertion,
8886
8932
  stripAnsiSimple,
8887
8933
  supportsUnicode,
8888
8934
  tintPct,