testplane 9.1.0 → 9.2.0

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.
Files changed (275) hide show
  1. package/build/package.json +3 -3
  2. package/build/src/base-testplane.d.ts +17 -1
  3. package/build/src/base-testplane.js +43 -9
  4. package/build/src/base-testplane.js.map +1 -1
  5. package/build/src/browser/browser.d.ts +3 -0
  6. package/build/src/browser/browser.js +4 -2
  7. package/build/src/browser/browser.js.map +1 -1
  8. package/build/src/browser/cdp/selectivity/click-command-guard.d.ts +10 -0
  9. package/build/src/browser/cdp/selectivity/click-command-guard.js +57 -0
  10. package/build/src/browser/cdp/selectivity/click-command-guard.js.map +1 -0
  11. package/build/src/browser/cdp/selectivity/coverage-hooks.d.ts +13 -0
  12. package/build/src/browser/cdp/selectivity/coverage-hooks.js +43 -0
  13. package/build/src/browser/cdp/selectivity/coverage-hooks.js.map +1 -0
  14. package/build/src/browser/cdp/selectivity/index.js +61 -33
  15. package/build/src/browser/cdp/selectivity/index.js.map +1 -1
  16. package/build/src/browser/cdp/selectivity/js-selectivity.d.ts +1 -0
  17. package/build/src/browser/cdp/selectivity/js-selectivity.js +26 -18
  18. package/build/src/browser/cdp/selectivity/js-selectivity.js.map +1 -1
  19. package/build/src/browser/cdp/selectivity/navigation-guard.d.ts +18 -0
  20. package/build/src/browser/cdp/selectivity/navigation-guard.js +234 -0
  21. package/build/src/browser/cdp/selectivity/navigation-guard.js.map +1 -0
  22. package/build/src/browser/cdp/selectivity/testplane-selectivity.js +19 -19
  23. package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -1
  24. package/build/src/browser/client-scripts/screen-shooter/build/bundle.compat.js +2 -2
  25. package/build/src/browser/client-scripts/screen-shooter/build/bundle.native.js +2 -2
  26. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/implementation.js +52 -84
  27. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/operations.js +4 -1
  28. package/build/src/browser/commands/assert-view/index.js +25 -2
  29. package/build/src/browser/commands/assert-view/index.js.map +1 -1
  30. package/build/src/browser/existing-browser.js +8 -1
  31. package/build/src/browser/existing-browser.js.map +1 -1
  32. package/build/src/browser/history/index.d.ts +4 -2
  33. package/build/src/browser/history/index.js +146 -67
  34. package/build/src/browser/history/index.js.map +1 -1
  35. package/build/src/browser/new-browser.js +1 -1
  36. package/build/src/browser/new-browser.js.map +1 -1
  37. package/build/src/browser/screen-shooter/elements-screen-shooter.d.ts +5 -0
  38. package/build/src/browser/screen-shooter/elements-screen-shooter.js +102 -55
  39. package/build/src/browser/screen-shooter/elements-screen-shooter.js.map +1 -1
  40. package/build/src/browser/screen-shooter/viewport-screen-shooter.d.ts +4 -0
  41. package/build/src/browser/screen-shooter/viewport-screen-shooter.js +29 -7
  42. package/build/src/browser/screen-shooter/viewport-screen-shooter.js.map +1 -1
  43. package/build/src/browser-pool/basic-pool.d.ts +4 -3
  44. package/build/src/browser-pool/basic-pool.js +39 -7
  45. package/build/src/browser-pool/basic-pool.js.map +1 -1
  46. package/build/src/browser-pool/caching-pool.d.ts +3 -2
  47. package/build/src/browser-pool/caching-pool.js +19 -7
  48. package/build/src/browser-pool/caching-pool.js.map +1 -1
  49. package/build/src/browser-pool/index.d.ts +2 -1
  50. package/build/src/browser-pool/index.js +8 -4
  51. package/build/src/browser-pool/index.js.map +1 -1
  52. package/build/src/browser-pool/limited-pool.d.ts +5 -1
  53. package/build/src/browser-pool/limited-pool.js +42 -4
  54. package/build/src/browser-pool/limited-pool.js.map +1 -1
  55. package/build/src/browser-pool/per-browser-limited-pool.d.ts +2 -2
  56. package/build/src/browser-pool/per-browser-limited-pool.js +2 -1
  57. package/build/src/browser-pool/per-browser-limited-pool.js.map +1 -1
  58. package/build/src/browser-pool/types.d.ts +8 -0
  59. package/build/src/cli/commands/config/index.js +7 -3
  60. package/build/src/cli/commands/config/index.js.map +1 -1
  61. package/build/src/cli/commands/install-deps/index.js +46 -38
  62. package/build/src/cli/commands/install-deps/index.js.map +1 -1
  63. package/build/src/cli/commands/list-browsers/index.js +15 -11
  64. package/build/src/cli/commands/list-browsers/index.js.map +1 -1
  65. package/build/src/cli/commands/list-tests/index.js +25 -21
  66. package/build/src/cli/commands/list-tests/index.js.map +1 -1
  67. package/build/src/cli/commands/selectivity-merge-dumps/index.js +12 -5
  68. package/build/src/cli/commands/selectivity-merge-dumps/index.js.map +1 -1
  69. package/build/src/cli/index.js +10 -6
  70. package/build/src/cli/index.js.map +1 -1
  71. package/build/src/config/defaults.d.ts +5 -0
  72. package/build/src/config/defaults.js +4 -0
  73. package/build/src/config/defaults.js.map +1 -1
  74. package/build/src/config/index.d.ts +6 -4
  75. package/build/src/config/index.js +60 -19
  76. package/build/src/config/index.js.map +1 -1
  77. package/build/src/config/options.js +26 -0
  78. package/build/src/config/options.js.map +1 -1
  79. package/build/src/config/types.d.ts +19 -0
  80. package/build/src/constants/process-messages.d.ts +3 -0
  81. package/build/src/constants/process-messages.js +4 -1
  82. package/build/src/constants/process-messages.js.map +1 -1
  83. package/build/src/events/async-emitter/index.d.ts +38 -0
  84. package/build/src/events/async-emitter/index.js +248 -5
  85. package/build/src/events/async-emitter/index.js.map +1 -1
  86. package/build/src/events/index.d.ts +3 -0
  87. package/build/src/events/index.js +1 -0
  88. package/build/src/events/index.js.map +1 -1
  89. package/build/src/index.d.ts +2 -1
  90. package/build/src/profiler/analysis/aggregator.d.ts +19 -0
  91. package/build/src/profiler/analysis/aggregator.js +229 -0
  92. package/build/src/profiler/analysis/aggregator.js.map +1 -0
  93. package/build/src/profiler/analysis/analyzers.d.ts +10 -0
  94. package/build/src/profiler/analysis/analyzers.js +1228 -0
  95. package/build/src/profiler/analysis/analyzers.js.map +1 -0
  96. package/build/src/profiler/analysis/compact.d.ts +5 -0
  97. package/build/src/profiler/analysis/compact.js +46 -0
  98. package/build/src/profiler/analysis/compact.js.map +1 -0
  99. package/build/src/profiler/analysis/finding-order.d.ts +4 -0
  100. package/build/src/profiler/analysis/finding-order.js +28 -0
  101. package/build/src/profiler/analysis/finding-order.js.map +1 -0
  102. package/build/src/profiler/analysis/outliers.d.ts +6 -0
  103. package/build/src/profiler/analysis/outliers.js +49 -0
  104. package/build/src/profiler/analysis/outliers.js.map +1 -0
  105. package/build/src/profiler/analysis/policy-v1.d.ts +71 -0
  106. package/build/src/profiler/analysis/policy-v1.js +43 -0
  107. package/build/src/profiler/analysis/policy-v1.js.map +1 -0
  108. package/build/src/profiler/collectors/module-graph.d.ts +14 -0
  109. package/build/src/profiler/collectors/module-graph.js +99 -0
  110. package/build/src/profiler/collectors/module-graph.js.map +1 -0
  111. package/build/src/profiler/collectors/pool-observer.d.ts +9 -0
  112. package/build/src/profiler/collectors/pool-observer.js +40 -0
  113. package/build/src/profiler/collectors/pool-observer.js.map +1 -0
  114. package/build/src/profiler/manager.d.ts +55 -0
  115. package/build/src/profiler/manager.js +343 -0
  116. package/build/src/profiler/manager.js.map +1 -0
  117. package/build/src/profiler/output/console.d.ts +6 -0
  118. package/build/src/profiler/output/console.js +443 -0
  119. package/build/src/profiler/output/console.js.map +1 -0
  120. package/build/src/profiler/output/json.d.ts +2 -0
  121. package/build/src/profiler/output/json.js +24 -0
  122. package/build/src/profiler/output/json.js.map +1 -0
  123. package/build/src/profiler/retention/operation-store.d.ts +22 -0
  124. package/build/src/profiler/retention/operation-store.js +110 -0
  125. package/build/src/profiler/retention/operation-store.js.map +1 -0
  126. package/build/src/profiler/retention/policy-v1.d.ts +22 -0
  127. package/build/src/profiler/retention/policy-v1.js +49 -0
  128. package/build/src/profiler/retention/policy-v1.js.map +1 -0
  129. package/build/src/profiler/retention/result-budget.d.ts +2 -0
  130. package/build/src/profiler/retention/result-budget.js +117 -0
  131. package/build/src/profiler/retention/result-budget.js.map +1 -0
  132. package/build/src/profiler/retention/serialized-budget.d.ts +5 -0
  133. package/build/src/profiler/retention/serialized-budget.js +58 -0
  134. package/build/src/profiler/retention/serialized-budget.js.map +1 -0
  135. package/build/src/profiler/retention/streaming-statistics.d.ts +38 -0
  136. package/build/src/profiler/retention/streaming-statistics.js +191 -0
  137. package/build/src/profiler/retention/streaming-statistics.js.map +1 -0
  138. package/build/src/profiler/retention/top-k.d.ts +13 -0
  139. package/build/src/profiler/retention/top-k.js +57 -0
  140. package/build/src/profiler/retention/top-k.js.map +1 -0
  141. package/build/src/profiler/runtime/async-activity.d.ts +19 -0
  142. package/build/src/profiler/runtime/async-activity.js +113 -0
  143. package/build/src/profiler/runtime/async-activity.js.map +1 -0
  144. package/build/src/profiler/runtime/bootstrap-probe.d.ts +42 -0
  145. package/build/src/profiler/runtime/bootstrap-probe.js +91 -0
  146. package/build/src/profiler/runtime/bootstrap-probe.js.map +1 -0
  147. package/build/src/profiler/runtime/clock.d.ts +22 -0
  148. package/build/src/profiler/runtime/clock.js +15 -0
  149. package/build/src/profiler/runtime/clock.js.map +1 -0
  150. package/build/src/profiler/runtime/event-observer.d.ts +4 -0
  151. package/build/src/profiler/runtime/event-observer.js +142 -0
  152. package/build/src/profiler/runtime/event-observer.js.map +1 -0
  153. package/build/src/profiler/runtime/noop.d.ts +20 -0
  154. package/build/src/profiler/runtime/noop.js +37 -0
  155. package/build/src/profiler/runtime/noop.js.map +1 -0
  156. package/build/src/profiler/runtime/runtime.d.ts +95 -0
  157. package/build/src/profiler/runtime/runtime.js +1343 -0
  158. package/build/src/profiler/runtime/runtime.js.map +1 -0
  159. package/build/src/profiler/runtime/types.d.ts +88 -0
  160. package/build/src/profiler/runtime/types.js +3 -0
  161. package/build/src/profiler/runtime/types.js.map +1 -0
  162. package/build/src/profiler/sanitize.d.ts +15 -0
  163. package/build/src/profiler/sanitize.js +194 -0
  164. package/build/src/profiler/sanitize.js.map +1 -0
  165. package/build/src/profiler/schema/index.d.ts +1 -0
  166. package/build/src/profiler/schema/index.js +18 -0
  167. package/build/src/profiler/schema/index.js.map +1 -0
  168. package/build/src/profiler/schema/v1.d.ts +281 -0
  169. package/build/src/profiler/schema/v1.js +3 -0
  170. package/build/src/profiler/schema/v1.js.map +1 -0
  171. package/build/src/runner/browser-env/vite/browser-modules/mocha/index.js +30 -0
  172. package/build/src/runner/browser-env/vite/browser-modules/mocha/index.js.map +1 -1
  173. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  174. package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +31 -6
  175. package/build/src/runner/browser-env/vite/browser-modules/types.js +8 -8
  176. package/build/src/runner/browser-env/vite/browser-modules/types.js.map +1 -1
  177. package/build/src/runner/browser-env/vite/plugins/generate-index-html.d.ts +7 -1
  178. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js +28 -6
  179. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js.map +1 -1
  180. package/build/src/runner/browser-env/vite/server.js +17 -1
  181. package/build/src/runner/browser-env/vite/server.js.map +1 -1
  182. package/build/src/runner/browser-env/vite/socket.js +4 -0
  183. package/build/src/runner/browser-env/vite/socket.js.map +1 -1
  184. package/build/src/runner/browser-env/vite/types.d.ts +9 -7
  185. package/build/src/runner/browser-env/vite/types.js +8 -8
  186. package/build/src/runner/browser-env/vite/types.js.map +1 -1
  187. package/build/src/runner/browser-env/vite/utils.js +9 -2
  188. package/build/src/runner/browser-env/vite/utils.js.map +1 -1
  189. package/build/src/runner/browser-runner.d.ts +3 -1
  190. package/build/src/runner/browser-runner.js +4 -2
  191. package/build/src/runner/browser-runner.js.map +1 -1
  192. package/build/src/runner/index.d.ts +3 -1
  193. package/build/src/runner/index.js +7 -4
  194. package/build/src/runner/index.js.map +1 -1
  195. package/build/src/runner/test-runner/index.d.ts +2 -1
  196. package/build/src/runner/test-runner/index.js +2 -2
  197. package/build/src/runner/test-runner/index.js.map +1 -1
  198. package/build/src/runner/test-runner/insistant-test-runner.d.ts +2 -1
  199. package/build/src/runner/test-runner/insistant-test-runner.js +3 -2
  200. package/build/src/runner/test-runner/insistant-test-runner.js.map +1 -1
  201. package/build/src/runner/test-runner/regular-test-runner.d.ts +9 -3
  202. package/build/src/runner/test-runner/regular-test-runner.js +77 -16
  203. package/build/src/runner/test-runner/regular-test-runner.js.map +1 -1
  204. package/build/src/signal-handler.js +14 -5
  205. package/build/src/signal-handler.js.map +1 -1
  206. package/build/src/test-reader/index.d.ts +2 -1
  207. package/build/src/test-reader/index.js +19 -10
  208. package/build/src/test-reader/index.js.map +1 -1
  209. package/build/src/test-reader/mocha-reader/index.d.ts +2 -1
  210. package/build/src/test-reader/mocha-reader/index.js +41 -24
  211. package/build/src/test-reader/mocha-reader/index.js.map +1 -1
  212. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js +2 -2
  213. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js.map +1 -1
  214. package/build/src/test-reader/mocha-reader/utils.d.ts +2 -0
  215. package/build/src/test-reader/mocha-reader/utils.js +18 -2
  216. package/build/src/test-reader/mocha-reader/utils.js.map +1 -1
  217. package/build/src/test-reader/test-object/hook.d.ts +4 -2
  218. package/build/src/test-reader/test-object/hook.js +3 -1
  219. package/build/src/test-reader/test-object/hook.js.map +1 -1
  220. package/build/src/test-reader/test-parser.d.ts +2 -1
  221. package/build/src/test-reader/test-parser.js +48 -4
  222. package/build/src/test-reader/test-parser.js.map +1 -1
  223. package/build/src/testplane.d.ts +6 -2
  224. package/build/src/testplane.js +82 -27
  225. package/build/src/testplane.js.map +1 -1
  226. package/build/src/types/index.d.ts +4 -1
  227. package/build/src/types/index.js.map +1 -1
  228. package/build/src/utils/exit-code.d.ts +1 -0
  229. package/build/src/utils/exit-code.js +28 -0
  230. package/build/src/utils/exit-code.js.map +1 -0
  231. package/build/src/utils/module-observer-registry.d.ts +43 -0
  232. package/build/src/utils/module-observer-registry.js +257 -0
  233. package/build/src/utils/module-observer-registry.js.map +1 -0
  234. package/build/src/utils/processor.js +1 -0
  235. package/build/src/utils/processor.js.map +1 -1
  236. package/build/src/utils/workers-registry.d.ts +48 -1
  237. package/build/src/utils/workers-registry.js +162 -4
  238. package/build/src/utils/workers-registry.js.map +1 -1
  239. package/build/src/worker/browser-env/runner/test-runner/execution-thread.js +15 -1
  240. package/build/src/worker/browser-env/runner/test-runner/execution-thread.js.map +1 -1
  241. package/build/src/worker/browser-env/runner/test-runner/index.js +20 -0
  242. package/build/src/worker/browser-env/runner/test-runner/index.js.map +1 -1
  243. package/build/src/worker/index.js +39 -1
  244. package/build/src/worker/index.js.map +1 -1
  245. package/build/src/worker/runner/browser-pool.d.ts +3 -2
  246. package/build/src/worker/runner/browser-pool.js +5 -3
  247. package/build/src/worker/runner/browser-pool.js.map +1 -1
  248. package/build/src/worker/runner/caching-test-parser.d.ts +6 -1
  249. package/build/src/worker/runner/caching-test-parser.js +40 -4
  250. package/build/src/worker/runner/caching-test-parser.js.map +1 -1
  251. package/build/src/worker/runner/index.d.ts +10 -9
  252. package/build/src/worker/runner/index.js +52 -6
  253. package/build/src/worker/runner/index.js.map +1 -1
  254. package/build/src/worker/runner/sequence-test-parser.d.ts +4 -1
  255. package/build/src/worker/runner/sequence-test-parser.js +17 -3
  256. package/build/src/worker/runner/sequence-test-parser.js.map +1 -1
  257. package/build/src/worker/runner/simple-test-parser.d.ts +3 -1
  258. package/build/src/worker/runner/simple-test-parser.js +4 -2
  259. package/build/src/worker/runner/simple-test-parser.js.map +1 -1
  260. package/build/src/worker/runner/test-runner/execution-thread.d.ts +20 -2
  261. package/build/src/worker/runner/test-runner/execution-thread.js +37 -2
  262. package/build/src/worker/runner/test-runner/execution-thread.js.map +1 -1
  263. package/build/src/worker/runner/test-runner/hook-runner.d.ts +1 -1
  264. package/build/src/worker/runner/test-runner/hook-runner.js +4 -4
  265. package/build/src/worker/runner/test-runner/hook-runner.js.map +1 -1
  266. package/build/src/worker/runner/test-runner/index.d.ts +8 -7
  267. package/build/src/worker/runner/test-runner/index.js +36 -25
  268. package/build/src/worker/runner/test-runner/index.js.map +1 -1
  269. package/build/src/worker/runner/test-runner/types.d.ts +8 -1
  270. package/build/src/worker/testplane-facade.js +63 -4
  271. package/build/src/worker/testplane-facade.js.map +1 -1
  272. package/build/src/worker/testplane.d.ts +6 -0
  273. package/build/src/worker/testplane.js +7 -1
  274. package/build/src/worker/testplane.js.map +1 -1
  275. package/package.json +3 -3
@@ -0,0 +1,281 @@
1
+ export type EnabledProfilerLevel = 1 | 2 | 3;
2
+ export type ProfilerOperationName = "run" | "readTests" | `cli:${string}` | "api";
3
+ export type ProfilerRunOutcome = "passed" | "failed" | "aborted" | "unknown";
4
+ export type ProfilerConfidence = "high" | "medium" | "low";
5
+ export type ProfilerValue = string | number | boolean | null;
6
+ export interface ProcessRef {
7
+ /** Role of the process that recorded the operation. */
8
+ type: "master" | "worker" | "browser";
9
+ /** Operating-system process identifier, when it is available. */
10
+ pid?: number;
11
+ /** Testplane identifier that distinguishes worker instances, including restarted workers. */
12
+ workerInstanceId?: string;
13
+ /** Browser configuration name, such as `chrome` or `firefox`. */
14
+ browserId?: string;
15
+ }
16
+ export interface ProfilerPartialReason {
17
+ code: string;
18
+ message: string;
19
+ }
20
+ export interface CorrelationContext {
21
+ /** Internal runtime correlation only; omitted from the final single-run result. */
22
+ runId?: string;
23
+ /** Identifier of the operation that was active when this context was created. */
24
+ spanId?: string;
25
+ /** Stable identifier of the test across its retry attempts. */
26
+ testId?: string;
27
+ /** Identifier of one specific test attempt. */
28
+ attemptId?: string;
29
+ /** Zero-based retry attempt number. The first attempt is `0`. */
30
+ attempt?: number;
31
+ /** Browser configuration name associated with this operation. */
32
+ browserId?: string;
33
+ /** Identifier of the concrete browser session used by the operation. */
34
+ sessionId?: string;
35
+ /** Mocha runnable type, for example `test`, `beforeEach`, or `afterEach`. */
36
+ runnableKind?: string;
37
+ }
38
+ export interface SourceRef {
39
+ file?: string;
40
+ line?: number;
41
+ column?: number;
42
+ functionName?: string;
43
+ plugin?: string;
44
+ /** How certain the profiler is that this source location caused the recorded operation. */
45
+ confidence: ProfilerConfidence;
46
+ }
47
+ export interface MeasurementQuality {
48
+ /** How the elapsed time was obtained: measured directly, calculated, or sampled. */
49
+ timing: "exact" | "estimated" | "sampled";
50
+ /** Scope and method of the CPU measurement. `process-window` may include unrelated concurrent work. */
51
+ cpu: "process-window" | "thread" | "sampled" | "unavailable";
52
+ /** How complete and reliable the optional source location is. */
53
+ source?: "exact" | "partial" | "unavailable";
54
+ /** Short explanations of known limits in this measurement. */
55
+ notes?: string[];
56
+ }
57
+ export interface OperationTiming {
58
+ /**
59
+ * Elapsed time represented by this operation.
60
+ * It includes every kind of activity or waiting during the interval; `quality.timing` says how it was obtained.
61
+ */
62
+ wallMs: number;
63
+ /**
64
+ * Part of `wallMs` left after subtracting the larger of two separately calculated durations:
65
+ * elapsed time covered by retained direct children, or elapsed time covered by child spans seen while the parent was open.
66
+ * A standalone child measurement removed by retention is in neither duration, so its time may remain here.
67
+ */
68
+ selfWallMs?: number;
69
+ /**
70
+ * Sum of `wallMs` for all retained direct child operations.
71
+ * It can be greater than the parent `wallMs` when children overlap or run in parallel.
72
+ */
73
+ cumulativeWorkMs?: number;
74
+ /**
75
+ * Child work that happened at the same time as other retained direct child work.
76
+ * It is the sum of child durations minus the elapsed time covered by their combined intervals.
77
+ */
78
+ overlapMs?: number;
79
+ /**
80
+ * Estimate of the longest dependent path through the retained operation tree.
81
+ * It adds this operation's self time to its longest retained child path and never exceeds `wallMs`.
82
+ */
83
+ criticalPathMs?: number;
84
+ /**
85
+ * Combined elapsed time covered by direct child spans while the parent was open, before timeline retention.
86
+ * It does not include standalone measurements that were recorded only after their duration was known.
87
+ */
88
+ observedChildUnionMs?: number;
89
+ /**
90
+ * CPU time used by the whole Node.js process while the operation was open.
91
+ * Concurrent work in the same process may be included.
92
+ */
93
+ processCpuMs?: number;
94
+ /** CPU time used by the current Node.js thread while the operation was open. */
95
+ threadCpuMs?: number;
96
+ /**
97
+ * Best-effort time spent in JavaScript callbacks attributed to this operation by `async_hooks`.
98
+ * Native work and activity that cannot be linked to the operation are not included.
99
+ */
100
+ activeJsMs?: number;
101
+ /**
102
+ * Part of `wallMs` not attributed to active JavaScript.
103
+ * It may include I/O, scheduling waits, native work, and activity that could not be linked to the operation.
104
+ */
105
+ waitingMs?: number;
106
+ /** Fraction from `0` to `1` showing how much of the interval the Node.js event loop was busy. */
107
+ eventLoopUtilization?: number;
108
+ }
109
+ export interface RetainedOperation {
110
+ id: string;
111
+ parentId?: string;
112
+ kind: string;
113
+ name: string;
114
+ process: ProcessRef;
115
+ context: CorrelationContext;
116
+ /** Elapsed time from the start of the profiled run to the start of this operation. */
117
+ startOffsetMs: number;
118
+ timing: OperationTiming;
119
+ source?: SourceRef;
120
+ attributes: Record<string, ProfilerValue>;
121
+ quality: MeasurementQuality;
122
+ /** Final state of the operation. `interrupted` means profiling stopped before normal completion. */
123
+ status?: "completed" | "failed" | "interrupted";
124
+ }
125
+ export interface ProfilerAggregate {
126
+ kind: string;
127
+ name: string;
128
+ /** Number of measurements included in this aggregate. */
129
+ count: number;
130
+ /**
131
+ * Sum of all measurements. For timing aggregates this is the sum of elapsed durations.
132
+ * Resource-sampling aggregates keep their native numeric unit despite the `WallMs` name.
133
+ */
134
+ totalWallMs: number;
135
+ /** Smallest measurement. For timing aggregates the value is in milliseconds. */
136
+ minWallMs: number;
137
+ /** Largest measurement. For timing aggregates the value is in milliseconds. */
138
+ maxWallMs: number;
139
+ /** Arithmetic average. For timing aggregates the value is in milliseconds. */
140
+ meanWallMs: number;
141
+ /** Estimated median from a bounded random sample: about half of the values are at or below it. */
142
+ p50WallMs?: number;
143
+ /** Estimated 95th percentile from a bounded random sample: about 95% of the values are at or below it. */
144
+ p95WallMs?: number;
145
+ /**
146
+ * Sum of measured work in the represented hierarchy. It normally equals `totalWallMs`.
147
+ * The browser-command summary includes every nested command here while `totalWallMs` includes root commands only.
148
+ */
149
+ cumulativeWorkMs?: number;
150
+ /**
151
+ * `cumulativeWorkMs - totalWallMs` for the browser-command summary.
152
+ * It shows additional nested-command work and is not a direct measurement of parallel execution.
153
+ */
154
+ overlapMs?: number;
155
+ attributes?: Record<string, ProfilerValue>;
156
+ }
157
+ export interface ProfileAggregates {
158
+ byKind: ProfilerAggregate[];
159
+ phases: ProfilerAggregate[];
160
+ listeners: ProfilerAggregate[];
161
+ testFiles: ProfilerAggregate[];
162
+ tests: ProfilerAggregate[];
163
+ hooks: ProfilerAggregate[];
164
+ commands: ProfilerAggregate[];
165
+ workers: ProfilerAggregate[];
166
+ browsers: ProfilerAggregate[];
167
+ metrics: Array<{
168
+ name: string;
169
+ value: number;
170
+ dimensions: Record<string, ProfilerValue>;
171
+ }>;
172
+ }
173
+ export interface FindingEvidence {
174
+ /** Stable machine-readable name of the measured fact. */
175
+ metric: string;
176
+ value: ProfilerValue;
177
+ /** Unit of `value`, for example `ms`, `ratio`, or `count`. */
178
+ unit?: string;
179
+ /** Policy value that caused the analyzer to report this finding. */
180
+ threshold?: ProfilerValue;
181
+ /** Timeline operation that provides this evidence, when one exists. */
182
+ operationId?: string;
183
+ }
184
+ export interface Finding {
185
+ id: string;
186
+ analyzer: {
187
+ id: string;
188
+ version: number;
189
+ };
190
+ category: string;
191
+ severity: "warning";
192
+ /** Plain-language description of what the analyzer observed. */
193
+ observation: string;
194
+ evidence: FindingEvidence[];
195
+ /** Concrete next step that may improve the run. */
196
+ action: string;
197
+ /** Confidence in the finding and its suggested action, not in profiler execution success. */
198
+ confidence: ProfilerConfidence;
199
+ operationIds: string[];
200
+ entityIds?: string[];
201
+ confidenceReasons?: string[];
202
+ }
203
+ export interface ProfilerCapabilities {
204
+ processCpu: "available" | "unavailable";
205
+ threadCpu: "available" | "unavailable";
206
+ eventLoop: "available" | "unavailable";
207
+ asyncActivity: "available" | "unavailable" | "disabled";
208
+ moduleGraph: "cjs" | "cjs-and-esm" | "unavailable" | "disabled";
209
+ browserTelemetry: "available" | "partial" | "unavailable" | "disabled";
210
+ }
211
+ export interface ProfilerError {
212
+ stage: string;
213
+ code?: string;
214
+ message: string;
215
+ }
216
+ export interface TruncationEntry {
217
+ /** Collector or retention bucket whose data was limited. */
218
+ collector: string;
219
+ /** Total number of records offered to the retention policy. */
220
+ seen: number;
221
+ /** Number of records kept in the final profiler data. */
222
+ retained: number;
223
+ /** Short name of the retention rule that selected the records. */
224
+ rule: string;
225
+ /** Whether at least one offered record was not retained. */
226
+ truncated: boolean;
227
+ }
228
+ export interface DataQuality {
229
+ clock: {
230
+ /** Largest estimated clock-alignment error among merged process fragments. */
231
+ maxUncertaintyMs?: number;
232
+ /** Number of fragments that could not be aligned to the main process timeline. */
233
+ unalignedFragments: number;
234
+ };
235
+ coverage: Array<{
236
+ collector: string;
237
+ status: "complete" | "partial" | "unavailable";
238
+ reason?: string;
239
+ }>;
240
+ }
241
+ export interface EnvironmentSummary {
242
+ node: string;
243
+ platform: string;
244
+ arch: string;
245
+ /** Number of logical CPU execution slots reported by Node.js for this host. */
246
+ availableParallelism: number;
247
+ /** Worker count configured for this Testplane run. */
248
+ configuredWorkers?: number;
249
+ /** Configured maximum browser sessions, grouped by browser configuration name. */
250
+ configuredSessionsPerBrowser?: Record<string, number>;
251
+ }
252
+ export interface ProfilerResultV1 {
253
+ schemaVersion: 1;
254
+ run: {
255
+ id: string;
256
+ level: EnabledProfilerLevel;
257
+ operation: ProfilerOperationName;
258
+ profileStatus: "complete" | "partial";
259
+ runOutcome: ProfilerRunOutcome;
260
+ /** ISO 8601 wall-clock time when profiling started. */
261
+ startedAt: string;
262
+ /** Real elapsed time of the complete profiled Testplane operation. */
263
+ durationMs: number;
264
+ partialReasons: ProfilerPartialReason[];
265
+ };
266
+ environment: EnvironmentSummary;
267
+ capabilities: ProfilerCapabilities;
268
+ timeline: RetainedOperation[];
269
+ aggregates: ProfileAggregates;
270
+ findings: Finding[];
271
+ dataQuality: DataQuality;
272
+ profiler: {
273
+ collectionErrors: ProfilerError[];
274
+ truncation: TruncationEntry[];
275
+ /**
276
+ * Sum of time measured inside span-start and span-end bookkeeping.
277
+ * Sampling, fragment transport, final analysis, console rendering, and JSON writing are not included.
278
+ */
279
+ inRunOverheadEstimateMs?: number;
280
+ };
281
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1.js","sourceRoot":"","sources":["../../../../src/profiler/schema/v1.ts"],"names":[],"mappings":""}
@@ -49,6 +49,8 @@ export class MochaWrapper {
49
49
  throw error;
50
50
  }
51
51
  let error = undefined;
52
+ const shouldProfile = (window.__testplane__.profilerLevel ?? 0) >= 3;
53
+ const telemetryStart = shouldProfile ? tryStartBrowserTelemetry() : undefined;
52
54
  try {
53
55
  const ctx = { browser: window.__testplane__.browser };
54
56
  await runnableToRun.fn.call(ctx, ctx);
@@ -56,8 +58,36 @@ export class MochaWrapper {
56
58
  catch (err) {
57
59
  error = err;
58
60
  }
61
+ try {
62
+ if (telemetryStart) {
63
+ const longTasks = performance.getEntriesByType("longtask").slice(telemetryStart.longTaskCount);
64
+ this._socket.emit(BrowserEventNames.profilerFragment, {
65
+ fullTitle: payload.fullTitle,
66
+ wallMs: Math.max(0, performance.now() - telemetryStart.startedAt),
67
+ resourceCount: Math.max(0, performance.getEntriesByType("resource").length - telemetryStart.resourceCount),
68
+ longTaskCount: longTasks.length,
69
+ longTaskWallMs: longTasks.reduce((total, entry) => total + entry.duration, 0),
70
+ context: payload.profileContext,
71
+ });
72
+ }
73
+ }
74
+ catch {
75
+ // Profiling must never block the runnable ack / hang the worker.
76
+ }
59
77
  return cb(getErrorsOnRunRunnable(error));
60
78
  });
61
79
  }
62
80
  }
81
+ function tryStartBrowserTelemetry() {
82
+ try {
83
+ return {
84
+ startedAt: performance.now(),
85
+ resourceCount: performance.getEntriesByType("resource").length,
86
+ longTaskCount: performance.getEntriesByType("longtask").length,
87
+ };
88
+ }
89
+ catch {
90
+ return;
91
+ }
92
+ }
63
93
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/runner/browser-env/vite/browser-modules/mocha/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/runner/browser-env/vite/browser-modules/mocha/index.ts"],"names":[],"mappings":"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"}