@rstest/browser 0.9.7 → 0.9.8

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.
@@ -0,0 +1 @@
1
+ /*! LICENSE: 464.ae4bcbdfb4.js.LICENSE.txt */
@@ -2,9 +2,9 @@
2
2
  "use strict";
3
3
  var e, t, s, l, r, o, a = {
4
4
  5645 (e, t, s) {
5
- var l = s(6730);
5
+ var l = s(1627);
6
6
  let r = "__rstest_dispatch_response__", o = "runner";
7
- var a = s(7283), i = s(281), n = s(7026), c = s(162), d = s(2739);
7
+ var a = s(8433), i = s(9328), n = s(6165), c = s(1979), d = s(725);
8
8
  let u = (e)=>{
9
9
  let { message: t } = e;
10
10
  return (0, l.jsx)("div", {
@@ -15,7 +15,7 @@
15
15
  })
16
16
  });
17
17
  };
18
- var p = s(8609), h = s(6490), f = s(4335), x = s(6942), m = s(396);
18
+ var p = s(8132), h = s(4691), f = s(7372), x = s(1787), m = s(399);
19
19
  let g = (e, t)=>{
20
20
  if (!t) return e;
21
21
  let s = t.endsWith("/") ? t.slice(0, -1) : t;
@@ -32,7 +32,7 @@
32
32
  }
33
33
  }, "*"), fetch(`/__open-in-editor?file=${encodeURIComponent(e)}`).catch(()=>{});
34
34
  };
35
- var v = s(1696), y = s(1e3), _ = s(2886), C = s(1538), w = s(6609);
35
+ var v = s(1821), y = s(4797), _ = s(9043), C = s(83), w = s(1818);
36
36
  let b = {
37
37
  idle: {
38
38
  label: "Idle",
@@ -78,7 +78,7 @@
78
78
  })
79
79
  }
80
80
  };
81
- var S = s(5446), F = s(8426), N = s(2585), A = s(1309), P = s(5758), M = s(9031), z = s(3168), O = s(2024);
81
+ var S = s(1002), F = s(1275), N = s(7102), A = s(2204), P = s(8797), M = s(9010), z = s(8389), O = s(8603);
82
82
  let R = {
83
83
  iPhoneSE: {
84
84
  width: 375,
@@ -514,7 +514,7 @@
514
514
  ]
515
515
  });
516
516
  };
517
- var G = s(324);
517
+ var G = s(6103);
518
518
  let Z = (e)=>{
519
519
  let { className: t, style: s, direction: r = "horizontal", children: o, autoSaveId: a, ...i } = e, n = c.Children.toArray(o).filter((e)=>c.isValidElement(e) && e.type === L), d = c.useCallback(()=>{
520
520
  if (!a) return null;
@@ -567,7 +567,7 @@
567
567
  children: t
568
568
  });
569
569
  };
570
- var q = s(7419), H = s(9241), J = s(4562);
570
+ var q = s(246), H = s(9850), J = s(8039);
571
571
  let V = (e)=>(0, l.jsxs)("svg", {
572
572
  xmlns: "http://www.w3.org/2000/svg",
573
573
  fill: "none",
@@ -1585,7 +1585,7 @@
1585
1585
  ]
1586
1586
  });
1587
1587
  };
1588
- var K = s(7239), Y = s(4923), Q = s(8346), ee = s(407), et = s(3571), es = s(7889);
1588
+ var K = s(3985), Y = s(9384), Q = s(1257), ee = s(8028), et = s(1330), es = s(9529);
1589
1589
  let el = (0, c.memo)((e)=>{
1590
1590
  let { counts: t, isRunning: s } = e, r = s && 0 === t.running;
1591
1591
  return (0, l.jsx)("div", {
@@ -1725,7 +1725,7 @@
1725
1725
  ]
1726
1726
  });
1727
1727
  };
1728
- var eo = s(5860), ea = s(6254), ei = s(2559), en = s(7957), ec = s(719);
1728
+ var eo = s(3615), ea = s(1375), ei = s(2688), en = s(9656), ec = s(9520);
1729
1729
  let ed = [
1730
1730
  "pass",
1731
1731
  "fail",
@@ -3069,7 +3069,7 @@
3069
3069
  }, (o = self.rspackChunk_rstest_browser_ui = self.rspackChunk_rstest_browser_ui || []).forEach(r.bind(null, 0)), o.push = r.bind(null, o.push.bind(o));
3070
3070
  var c = n.O(void 0, [
3071
3071
  "783",
3072
- "407"
3072
+ "464"
3073
3073
  ], ()=>n(5645));
3074
3074
  c = n.O(c);
3075
3075
  })();
@@ -1,12 +1,12 @@
1
- /*! LICENSE: lib-react.57a7325be2.js.LICENSE.txt */
2
- /*! LICENSE: lib-react.57a7325be2.js.LICENSE.txt */ "use strict";
1
+ /*! LICENSE: lib-react.9b88cb98a5.js.LICENSE.txt */
2
+ /*! LICENSE: lib-react.9b88cb98a5.js.LICENSE.txt */ "use strict";
3
3
  (self.rspackChunk_rstest_browser_ui = self.rspackChunk_rstest_browser_ui || []).push([
4
4
  [
5
5
  "783"
6
6
  ],
7
7
  {
8
- 7816 (e, t, n) {
9
- var r, l = n(1099), a = n(162), o = n(5466);
8
+ 530 (e, t, n) {
9
+ var r, l = n(1099), a = n(1979), o = n(7708);
10
10
  function i(e) {
11
11
  var t = "https://react.dev/errors/" + e;
12
12
  if (1 < arguments.length) {
@@ -7729,7 +7729,7 @@
7729
7729
  }
7730
7730
  };
7731
7731
  var cI = a.version;
7732
- if ("19.2.4" !== cI) throw Error(i(527, cI, "19.2.4"));
7732
+ if ("19.2.5" !== cI) throw Error(i(527, cI, "19.2.5"));
7733
7733
  if (F.findDOMNode = function(e) {
7734
7734
  var t = e._reactInternals;
7735
7735
  if (void 0 === t) {
@@ -7807,10 +7807,10 @@
7807
7807
  if (!cU.isDisabled && cU.supportsFiber) try {
7808
7808
  ep = cU.inject({
7809
7809
  bundleType: 0,
7810
- version: "19.2.4",
7810
+ version: "19.2.5",
7811
7811
  rendererPackageName: "react-dom",
7812
7812
  currentDispatcherRef: D,
7813
- reconcilerVersion: "19.2.4"
7813
+ reconcilerVersion: "19.2.5"
7814
7814
  }), em = cU;
7815
7815
  } catch (e) {}
7816
7816
  }
@@ -7822,10 +7822,10 @@
7822
7822
  if (!u(e)) throw Error(i(299));
7823
7823
  var l = !1, a = "", o = of, s = od, c = op, f = null;
7824
7824
  return null != n && (!0 === n.unstable_strictMode && (l = !0), void 0 !== n.identifierPrefix && (a = n.identifierPrefix), void 0 !== n.onUncaughtError && (o = n.onUncaughtError), void 0 !== n.onCaughtError && (s = n.onCaughtError), void 0 !== n.onRecoverableError && (c = n.onRecoverableError), void 0 !== n.formState && (f = n.formState)), (t = cr(e, 1, !0, t, null != n ? n : null, l, a, f, o, s, c, cR)).context = n7, n = t.current, (a = lC(l = eL(l = uo()))).callback = null, l_(n, a, l), n = l, t.current.lanes = n, ez(t, n), uW(t), e[eI] = t.current, se(e), new cM(t);
7825
- }, t.version = "19.2.4";
7825
+ }, t.version = "19.2.5";
7826
7826
  },
7827
- 8844 (e, t, n) {
7828
- var r = n(162);
7827
+ 7850 (e, t, n) {
7828
+ var r = n(1979);
7829
7829
  function l(e) {
7830
7830
  var t = "https://react.dev/errors/" + e;
7831
7831
  if (1 < arguments.length) {
@@ -7936,27 +7936,27 @@
7936
7936
  return u.H.useFormState(e, t, n);
7937
7937
  }, t.useFormStatus = function() {
7938
7938
  return u.H.useHostTransitionStatus();
7939
- }, t.version = "19.2.4";
7939
+ }, t.version = "19.2.5";
7940
7940
  },
7941
- 2739 (e, t, n) {
7941
+ 725 (e, t, n) {
7942
7942
  (function e() {
7943
7943
  if ("u" > typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) try {
7944
7944
  __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e);
7945
7945
  } catch (e) {
7946
7946
  console.error(e);
7947
7947
  }
7948
- })(), e.exports = n(7816);
7948
+ })(), e.exports = n(530);
7949
7949
  },
7950
- 5466 (e, t, n) {
7950
+ 7708 (e, t, n) {
7951
7951
  (function e() {
7952
7952
  if ("u" > typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) try {
7953
7953
  __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e);
7954
7954
  } catch (e) {
7955
7955
  console.error(e);
7956
7956
  }
7957
- })(), e.exports = n(8844);
7957
+ })(), e.exports = n(7850);
7958
7958
  },
7959
- 5448 (e, t) {
7959
+ 2055 (e, t) {
7960
7960
  var n = Symbol.for("react.transitional.element");
7961
7961
  function r(e, t, r) {
7962
7962
  var l = null;
@@ -7972,7 +7972,7 @@
7972
7972
  }
7973
7973
  t.Fragment = Symbol.for("react.fragment"), t.jsx = r, t.jsxs = r;
7974
7974
  },
7975
- 2035 (e, t) {
7975
+ 808 (e, t) {
7976
7976
  var n = Symbol.for("react.transitional.element"), r = Symbol.for("react.portal"), l = Symbol.for("react.fragment"), a = Symbol.for("react.strict_mode"), o = Symbol.for("react.profiler"), i = Symbol.for("react.consumer"), u = Symbol.for("react.context"), s = Symbol.for("react.forward_ref"), c = Symbol.for("react.suspense"), f = Symbol.for("react.memo"), d = Symbol.for("react.lazy"), p = Symbol.for("react.activity"), m = Symbol.iterator, h = {
7977
7977
  isMounted: function() {
7978
7978
  return !1;
@@ -8250,13 +8250,13 @@
8250
8250
  return E.H.useSyncExternalStore(e, t, n);
8251
8251
  }, t.useTransition = function() {
8252
8252
  return E.H.useTransition();
8253
- }, t.version = "19.2.4";
8253
+ }, t.version = "19.2.5";
8254
8254
  },
8255
- 162 (e, t, n) {
8256
- e.exports = n(2035);
8255
+ 1979 (e, t, n) {
8256
+ e.exports = n(808);
8257
8257
  },
8258
- 6730 (e, t, n) {
8259
- e.exports = n(5448);
8258
+ 1627 (e, t, n) {
8259
+ e.exports = n(2055);
8260
8260
  },
8261
8261
  7146 (e, t) {
8262
8262
  function n(e, t) {
@@ -0,0 +1 @@
1
+ /*! LICENSE: lib-react.9b88cb98a5.js.LICENSE.txt */
@@ -12,7 +12,7 @@
12
12
  <script>
13
13
  window.__RSTEST_BROWSER_OPTIONS__ = __RSTEST_OPTIONS_PLACEHOLDER__;
14
14
  </script>
15
- <script defer src="/container-static/js/lib-react.57a7325be2.js"></script><script defer src="/container-static/js/407.89ee95c89d.js"></script><script defer src="/container-static/js/index.3ad6624086.js"></script><link href="/container-static/css/index.5c72297783.css" rel="stylesheet"></head>
15
+ <script defer src="/container-static/js/lib-react.9b88cb98a5.js"></script><script defer src="/container-static/js/464.ae4bcbdfb4.js"></script><script defer src="/container-static/js/index.c13dfe1ecf.js"></script><link href="/container-static/css/index.5c72297783.css" rel="stylesheet"></head>
16
16
  <body>
17
17
  <div id="root"></div>
18
18
  </body>
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import { existsSync } from "node:fs";
2
2
  import promises from "node:fs/promises";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { isDeepStrictEqual } from "node:util";
5
- import { color, getSetupFiles, getTestEntries, isDebug, loadCoverageProvider, logger, rsbuild, serializableConfig } from "@rstest/core/browser";
5
+ import { color, createCoverageProvider, getSetupFiles, getTestEntries, isDebug, loadCoverageProvider, logger, rsbuild, serializableConfig } from "@rstest/core/browser";
6
6
  import open_editor from "open-editor";
7
7
  import { basename, dirname, join, normalize, relative, resolve as external_pathe_resolve } from "pathe";
8
8
  import sirv from "sirv";
@@ -3651,10 +3651,23 @@ const runBrowserController = async (context, options)=>{
3651
3651
  if (skipOnTestRunEnd) return;
3652
3652
  for (const reporter of context.reporters)await reporter.onTestRunStart?.();
3653
3653
  };
3654
+ const coverageConfig = browserProjects.find((project)=>project.normalizedConfig.coverage?.enabled)?.normalizedConfig.coverage;
3655
+ const coverageProvider = coverageConfig?.enabled ? await createCoverageProvider(coverageConfig, context.rootPath) : null;
3654
3656
  const notifyTestRunEnd = async ({ duration, unhandledErrors, filterRerunTestPaths })=>{
3655
3657
  if (skipOnTestRunEnd) return;
3658
+ let mergedCoverage;
3659
+ if (coverageProvider) {
3660
+ const coverageMap = coverageProvider.createCoverageMap();
3661
+ let hasCoverage = false;
3662
+ for (const result of context.reporterResults.results)if (result.coverage) {
3663
+ coverageMap.merge(result.coverage);
3664
+ hasCoverage = true;
3665
+ }
3666
+ if (hasCoverage) mergedCoverage = coverageMap.toJSON();
3667
+ }
3656
3668
  for (const reporter of context.reporters)await reporter.onTestRunEnd?.({
3657
3669
  results: context.reporterResults.results,
3670
+ coverage: mergedCoverage,
3658
3671
  testResults: context.reporterResults.testResults,
3659
3672
  duration,
3660
3673
  snapshotSummary: context.snapshotManager.summary,
@@ -4221,7 +4234,6 @@ const runBrowserController = async (context, options)=>{
4221
4234
  if (currentRunnerFramesSignature === signature) return;
4222
4235
  await new Promise((resolve, reject)=>{
4223
4236
  const waiters = runnerFramesWaiters.get(signature) ?? new Set();
4224
- let timeoutId;
4225
4237
  const cleanup = ()=>{
4226
4238
  const currentWaiters = runnerFramesWaiters.get(signature);
4227
4239
  if (!currentWaiters) return;
@@ -4233,7 +4245,7 @@ const runBrowserController = async (context, options)=>{
4233
4245
  cleanup();
4234
4246
  resolve();
4235
4247
  };
4236
- timeoutId = setTimeout(()=>{
4248
+ const timeoutId = setTimeout(()=>{
4237
4249
  cleanup();
4238
4250
  reject(new Error(`Timed out waiting for headed runner frames to be ready for ${testFiles.length} file(s).`));
4239
4251
  }, RUNNER_FRAMES_READY_TIMEOUT_MS);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rstest/browser",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "description": "Browser mode support for Rstest testing framework.",
5
5
  "keywords": [
6
6
  "rstest",
@@ -52,18 +52,18 @@
52
52
  "@types/convert-source-map": "^2.0.3",
53
53
  "@types/picomatch": "^4.0.3",
54
54
  "@types/ws": "^8.18.1",
55
- "@typescript/native-preview": "7.0.0-dev.20260408.1",
55
+ "@typescript/native-preview": "7.0.0-dev.20260412.1",
56
56
  "@vitest/snapshot": "^3.2.4",
57
57
  "birpc": "^4.0.0",
58
58
  "picomatch": "^4.0.4",
59
59
  "playwright": "^1.59.1",
60
60
  "@rstest/browser-ui": "0.0.0",
61
- "@rstest/core": "0.9.7",
61
+ "@rstest/core": "0.9.8",
62
62
  "@rstest/tsconfig": "0.0.1"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "playwright": "^1.49.1",
66
- "@rstest/core": "^0.9.7"
66
+ "@rstest/core": "^0.9.8"
67
67
  },
68
68
  "peerDependenciesMeta": {
69
69
  "playwright": {
@@ -8,7 +8,9 @@ import type { Rspack } from '@rstest/core';
8
8
  import {
9
9
  type BrowserTestRunOptions,
10
10
  type BrowserTestRunResult,
11
+ type CoverageMapData,
11
12
  color,
13
+ createCoverageProvider,
12
14
  type FormattedError,
13
15
  getSetupFiles,
14
16
  getTestEntries,
@@ -1781,6 +1783,13 @@ export const runBrowserController = async (
1781
1783
  }
1782
1784
  };
1783
1785
 
1786
+ const coverageConfig = browserProjects.find(
1787
+ (project) => project.normalizedConfig.coverage?.enabled,
1788
+ )?.normalizedConfig.coverage;
1789
+ const coverageProvider = coverageConfig?.enabled
1790
+ ? await createCoverageProvider(coverageConfig, context.rootPath)
1791
+ : null;
1792
+
1784
1793
  const notifyTestRunEnd = async ({
1785
1794
  duration,
1786
1795
  unhandledErrors,
@@ -1798,9 +1807,26 @@ export const runBrowserController = async (
1798
1807
  return;
1799
1808
  }
1800
1809
 
1810
+ // Merge per-file coverage into a single CoverageMapData for reporters
1811
+ let mergedCoverage: CoverageMapData | undefined;
1812
+ if (coverageProvider) {
1813
+ const coverageMap = coverageProvider.createCoverageMap();
1814
+ let hasCoverage = false;
1815
+ for (const result of context.reporterResults.results) {
1816
+ if (result.coverage) {
1817
+ coverageMap.merge(result.coverage);
1818
+ hasCoverage = true;
1819
+ }
1820
+ }
1821
+ if (hasCoverage) {
1822
+ mergedCoverage = coverageMap.toJSON();
1823
+ }
1824
+ }
1825
+
1801
1826
  for (const reporter of context.reporters) {
1802
1827
  await reporter.onTestRunEnd?.({
1803
1828
  results: context.reporterResults.results,
1829
+ coverage: mergedCoverage,
1804
1830
  testResults: context.reporterResults.testResults,
1805
1831
  duration,
1806
1832
  snapshotSummary: context.snapshotManager.summary,
@@ -2731,7 +2757,6 @@ export const runBrowserController = async (
2731
2757
  await new Promise<void>((resolve, reject) => {
2732
2758
  const waiters =
2733
2759
  runnerFramesWaiters.get(signature) ?? new Set<() => void>();
2734
- let timeoutId: ReturnType<typeof setTimeout> | undefined;
2735
2760
 
2736
2761
  const cleanup = () => {
2737
2762
  const currentWaiters = runnerFramesWaiters.get(signature);
@@ -2752,7 +2777,7 @@ export const runBrowserController = async (
2752
2777
  resolve();
2753
2778
  };
2754
2779
 
2755
- timeoutId = setTimeout(() => {
2780
+ const timeoutId = setTimeout(() => {
2756
2781
  cleanup();
2757
2782
  reject(
2758
2783
  new Error(
@@ -1 +0,0 @@
1
- /*! LICENSE: 407.89ee95c89d.js.LICENSE.txt */
@@ -1 +0,0 @@
1
- /*! LICENSE: lib-react.57a7325be2.js.LICENSE.txt */