testplane 9.1.1 → 9.2.1

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 (261) hide show
  1. package/build/package.json +2 -2
  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/testplane-selectivity.js +19 -19
  9. package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -1
  10. package/build/src/browser/client-scripts/screen-shooter/build/bundle.compat.js +2 -2
  11. package/build/src/browser/client-scripts/screen-shooter/build/bundle.native.js +2 -2
  12. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/implementation.js +52 -84
  13. package/build/src/browser/client-scripts/screen-shooter/tsc-out/client-scripts/screen-shooter/operations.js +4 -1
  14. package/build/src/browser/commands/assert-view/index.js +25 -2
  15. package/build/src/browser/commands/assert-view/index.js.map +1 -1
  16. package/build/src/browser/existing-browser.js +8 -1
  17. package/build/src/browser/existing-browser.js.map +1 -1
  18. package/build/src/browser/history/index.d.ts +4 -2
  19. package/build/src/browser/history/index.js +146 -67
  20. package/build/src/browser/history/index.js.map +1 -1
  21. package/build/src/browser/new-browser.js +1 -1
  22. package/build/src/browser/new-browser.js.map +1 -1
  23. package/build/src/browser/screen-shooter/elements-screen-shooter.d.ts +5 -0
  24. package/build/src/browser/screen-shooter/elements-screen-shooter.js +102 -55
  25. package/build/src/browser/screen-shooter/elements-screen-shooter.js.map +1 -1
  26. package/build/src/browser/screen-shooter/viewport-screen-shooter.d.ts +4 -0
  27. package/build/src/browser/screen-shooter/viewport-screen-shooter.js +29 -7
  28. package/build/src/browser/screen-shooter/viewport-screen-shooter.js.map +1 -1
  29. package/build/src/browser-pool/basic-pool.d.ts +4 -3
  30. package/build/src/browser-pool/basic-pool.js +39 -7
  31. package/build/src/browser-pool/basic-pool.js.map +1 -1
  32. package/build/src/browser-pool/caching-pool.d.ts +3 -2
  33. package/build/src/browser-pool/caching-pool.js +19 -7
  34. package/build/src/browser-pool/caching-pool.js.map +1 -1
  35. package/build/src/browser-pool/index.d.ts +2 -1
  36. package/build/src/browser-pool/index.js +8 -4
  37. package/build/src/browser-pool/index.js.map +1 -1
  38. package/build/src/browser-pool/limited-pool.d.ts +5 -1
  39. package/build/src/browser-pool/limited-pool.js +42 -4
  40. package/build/src/browser-pool/limited-pool.js.map +1 -1
  41. package/build/src/browser-pool/per-browser-limited-pool.d.ts +2 -2
  42. package/build/src/browser-pool/per-browser-limited-pool.js +2 -1
  43. package/build/src/browser-pool/per-browser-limited-pool.js.map +1 -1
  44. package/build/src/browser-pool/types.d.ts +8 -0
  45. package/build/src/cli/commands/config/index.js +7 -3
  46. package/build/src/cli/commands/config/index.js.map +1 -1
  47. package/build/src/cli/commands/install-deps/index.js +46 -38
  48. package/build/src/cli/commands/install-deps/index.js.map +1 -1
  49. package/build/src/cli/commands/list-browsers/index.js +15 -11
  50. package/build/src/cli/commands/list-browsers/index.js.map +1 -1
  51. package/build/src/cli/commands/list-tests/index.js +25 -21
  52. package/build/src/cli/commands/list-tests/index.js.map +1 -1
  53. package/build/src/cli/commands/selectivity-merge-dumps/index.js +12 -5
  54. package/build/src/cli/commands/selectivity-merge-dumps/index.js.map +1 -1
  55. package/build/src/cli/index.js +10 -6
  56. package/build/src/cli/index.js.map +1 -1
  57. package/build/src/config/defaults.d.ts +5 -0
  58. package/build/src/config/defaults.js +4 -0
  59. package/build/src/config/defaults.js.map +1 -1
  60. package/build/src/config/index.d.ts +6 -4
  61. package/build/src/config/index.js +60 -19
  62. package/build/src/config/index.js.map +1 -1
  63. package/build/src/config/options.js +26 -0
  64. package/build/src/config/options.js.map +1 -1
  65. package/build/src/config/types.d.ts +19 -0
  66. package/build/src/constants/process-messages.d.ts +3 -0
  67. package/build/src/constants/process-messages.js +4 -1
  68. package/build/src/constants/process-messages.js.map +1 -1
  69. package/build/src/events/async-emitter/index.d.ts +38 -0
  70. package/build/src/events/async-emitter/index.js +248 -5
  71. package/build/src/events/async-emitter/index.js.map +1 -1
  72. package/build/src/events/index.d.ts +3 -0
  73. package/build/src/events/index.js +1 -0
  74. package/build/src/events/index.js.map +1 -1
  75. package/build/src/index.d.ts +2 -1
  76. package/build/src/profiler/analysis/aggregator.d.ts +19 -0
  77. package/build/src/profiler/analysis/aggregator.js +229 -0
  78. package/build/src/profiler/analysis/aggregator.js.map +1 -0
  79. package/build/src/profiler/analysis/analyzers.d.ts +10 -0
  80. package/build/src/profiler/analysis/analyzers.js +1228 -0
  81. package/build/src/profiler/analysis/analyzers.js.map +1 -0
  82. package/build/src/profiler/analysis/compact.d.ts +5 -0
  83. package/build/src/profiler/analysis/compact.js +46 -0
  84. package/build/src/profiler/analysis/compact.js.map +1 -0
  85. package/build/src/profiler/analysis/finding-order.d.ts +4 -0
  86. package/build/src/profiler/analysis/finding-order.js +28 -0
  87. package/build/src/profiler/analysis/finding-order.js.map +1 -0
  88. package/build/src/profiler/analysis/outliers.d.ts +6 -0
  89. package/build/src/profiler/analysis/outliers.js +49 -0
  90. package/build/src/profiler/analysis/outliers.js.map +1 -0
  91. package/build/src/profiler/analysis/policy-v1.d.ts +71 -0
  92. package/build/src/profiler/analysis/policy-v1.js +43 -0
  93. package/build/src/profiler/analysis/policy-v1.js.map +1 -0
  94. package/build/src/profiler/collectors/module-graph.d.ts +14 -0
  95. package/build/src/profiler/collectors/module-graph.js +99 -0
  96. package/build/src/profiler/collectors/module-graph.js.map +1 -0
  97. package/build/src/profiler/collectors/pool-observer.d.ts +9 -0
  98. package/build/src/profiler/collectors/pool-observer.js +40 -0
  99. package/build/src/profiler/collectors/pool-observer.js.map +1 -0
  100. package/build/src/profiler/manager.d.ts +55 -0
  101. package/build/src/profiler/manager.js +343 -0
  102. package/build/src/profiler/manager.js.map +1 -0
  103. package/build/src/profiler/output/console.d.ts +6 -0
  104. package/build/src/profiler/output/console.js +443 -0
  105. package/build/src/profiler/output/console.js.map +1 -0
  106. package/build/src/profiler/output/json.d.ts +2 -0
  107. package/build/src/profiler/output/json.js +24 -0
  108. package/build/src/profiler/output/json.js.map +1 -0
  109. package/build/src/profiler/retention/operation-store.d.ts +22 -0
  110. package/build/src/profiler/retention/operation-store.js +110 -0
  111. package/build/src/profiler/retention/operation-store.js.map +1 -0
  112. package/build/src/profiler/retention/policy-v1.d.ts +22 -0
  113. package/build/src/profiler/retention/policy-v1.js +49 -0
  114. package/build/src/profiler/retention/policy-v1.js.map +1 -0
  115. package/build/src/profiler/retention/result-budget.d.ts +2 -0
  116. package/build/src/profiler/retention/result-budget.js +117 -0
  117. package/build/src/profiler/retention/result-budget.js.map +1 -0
  118. package/build/src/profiler/retention/serialized-budget.d.ts +5 -0
  119. package/build/src/profiler/retention/serialized-budget.js +58 -0
  120. package/build/src/profiler/retention/serialized-budget.js.map +1 -0
  121. package/build/src/profiler/retention/streaming-statistics.d.ts +38 -0
  122. package/build/src/profiler/retention/streaming-statistics.js +191 -0
  123. package/build/src/profiler/retention/streaming-statistics.js.map +1 -0
  124. package/build/src/profiler/retention/top-k.d.ts +13 -0
  125. package/build/src/profiler/retention/top-k.js +57 -0
  126. package/build/src/profiler/retention/top-k.js.map +1 -0
  127. package/build/src/profiler/runtime/async-activity.d.ts +19 -0
  128. package/build/src/profiler/runtime/async-activity.js +113 -0
  129. package/build/src/profiler/runtime/async-activity.js.map +1 -0
  130. package/build/src/profiler/runtime/bootstrap-probe.d.ts +42 -0
  131. package/build/src/profiler/runtime/bootstrap-probe.js +91 -0
  132. package/build/src/profiler/runtime/bootstrap-probe.js.map +1 -0
  133. package/build/src/profiler/runtime/clock.d.ts +17 -0
  134. package/build/src/profiler/runtime/clock.js +15 -0
  135. package/build/src/profiler/runtime/clock.js.map +1 -0
  136. package/build/src/profiler/runtime/event-observer.d.ts +4 -0
  137. package/build/src/profiler/runtime/event-observer.js +142 -0
  138. package/build/src/profiler/runtime/event-observer.js.map +1 -0
  139. package/build/src/profiler/runtime/noop.d.ts +20 -0
  140. package/build/src/profiler/runtime/noop.js +37 -0
  141. package/build/src/profiler/runtime/noop.js.map +1 -0
  142. package/build/src/profiler/runtime/runtime.d.ts +95 -0
  143. package/build/src/profiler/runtime/runtime.js +1343 -0
  144. package/build/src/profiler/runtime/runtime.js.map +1 -0
  145. package/build/src/profiler/runtime/types.d.ts +88 -0
  146. package/build/src/profiler/runtime/types.js +3 -0
  147. package/build/src/profiler/runtime/types.js.map +1 -0
  148. package/build/src/profiler/sanitize.d.ts +15 -0
  149. package/build/src/profiler/sanitize.js +194 -0
  150. package/build/src/profiler/sanitize.js.map +1 -0
  151. package/build/src/profiler/schema/index.d.ts +1 -0
  152. package/build/src/profiler/schema/index.js +18 -0
  153. package/build/src/profiler/schema/index.js.map +1 -0
  154. package/build/src/profiler/schema/v1.d.ts +281 -0
  155. package/build/src/profiler/schema/v1.js +3 -0
  156. package/build/src/profiler/schema/v1.js.map +1 -0
  157. package/build/src/runner/browser-env/vite/browser-modules/mocha/index.js +30 -0
  158. package/build/src/runner/browser-env/vite/browser-modules/mocha/index.js.map +1 -1
  159. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  160. package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +31 -6
  161. package/build/src/runner/browser-env/vite/browser-modules/types.js +8 -8
  162. package/build/src/runner/browser-env/vite/browser-modules/types.js.map +1 -1
  163. package/build/src/runner/browser-env/vite/plugins/generate-index-html.d.ts +7 -1
  164. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js +28 -6
  165. package/build/src/runner/browser-env/vite/plugins/generate-index-html.js.map +1 -1
  166. package/build/src/runner/browser-env/vite/server.js +17 -1
  167. package/build/src/runner/browser-env/vite/server.js.map +1 -1
  168. package/build/src/runner/browser-env/vite/socket.js +4 -0
  169. package/build/src/runner/browser-env/vite/socket.js.map +1 -1
  170. package/build/src/runner/browser-env/vite/types.d.ts +9 -7
  171. package/build/src/runner/browser-env/vite/types.js +8 -8
  172. package/build/src/runner/browser-env/vite/types.js.map +1 -1
  173. package/build/src/runner/browser-env/vite/utils.js +9 -2
  174. package/build/src/runner/browser-env/vite/utils.js.map +1 -1
  175. package/build/src/runner/browser-runner.d.ts +3 -1
  176. package/build/src/runner/browser-runner.js +4 -2
  177. package/build/src/runner/browser-runner.js.map +1 -1
  178. package/build/src/runner/index.d.ts +3 -1
  179. package/build/src/runner/index.js +7 -4
  180. package/build/src/runner/index.js.map +1 -1
  181. package/build/src/runner/test-runner/index.d.ts +2 -1
  182. package/build/src/runner/test-runner/index.js +2 -2
  183. package/build/src/runner/test-runner/index.js.map +1 -1
  184. package/build/src/runner/test-runner/insistant-test-runner.d.ts +2 -1
  185. package/build/src/runner/test-runner/insistant-test-runner.js +3 -2
  186. package/build/src/runner/test-runner/insistant-test-runner.js.map +1 -1
  187. package/build/src/runner/test-runner/regular-test-runner.d.ts +9 -3
  188. package/build/src/runner/test-runner/regular-test-runner.js +77 -16
  189. package/build/src/runner/test-runner/regular-test-runner.js.map +1 -1
  190. package/build/src/signal-handler.js +14 -5
  191. package/build/src/signal-handler.js.map +1 -1
  192. package/build/src/test-reader/index.d.ts +2 -1
  193. package/build/src/test-reader/index.js +19 -10
  194. package/build/src/test-reader/index.js.map +1 -1
  195. package/build/src/test-reader/mocha-reader/index.d.ts +2 -1
  196. package/build/src/test-reader/mocha-reader/index.js +41 -24
  197. package/build/src/test-reader/mocha-reader/index.js.map +1 -1
  198. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js +2 -2
  199. package/build/src/test-reader/mocha-reader/tree-builder-decorator.js.map +1 -1
  200. package/build/src/test-reader/mocha-reader/utils.d.ts +2 -0
  201. package/build/src/test-reader/mocha-reader/utils.js +18 -2
  202. package/build/src/test-reader/mocha-reader/utils.js.map +1 -1
  203. package/build/src/test-reader/test-object/hook.d.ts +4 -2
  204. package/build/src/test-reader/test-object/hook.js +3 -1
  205. package/build/src/test-reader/test-object/hook.js.map +1 -1
  206. package/build/src/test-reader/test-parser.d.ts +2 -1
  207. package/build/src/test-reader/test-parser.js +48 -4
  208. package/build/src/test-reader/test-parser.js.map +1 -1
  209. package/build/src/testplane.d.ts +6 -2
  210. package/build/src/testplane.js +82 -27
  211. package/build/src/testplane.js.map +1 -1
  212. package/build/src/types/index.d.ts +4 -1
  213. package/build/src/types/index.js.map +1 -1
  214. package/build/src/utils/exit-code.d.ts +1 -0
  215. package/build/src/utils/exit-code.js +28 -0
  216. package/build/src/utils/exit-code.js.map +1 -0
  217. package/build/src/utils/module-observer-registry.d.ts +43 -0
  218. package/build/src/utils/module-observer-registry.js +257 -0
  219. package/build/src/utils/module-observer-registry.js.map +1 -0
  220. package/build/src/utils/processor.js +1 -0
  221. package/build/src/utils/processor.js.map +1 -1
  222. package/build/src/utils/workers-registry.d.ts +48 -1
  223. package/build/src/utils/workers-registry.js +162 -4
  224. package/build/src/utils/workers-registry.js.map +1 -1
  225. package/build/src/worker/browser-env/runner/test-runner/execution-thread.js +15 -1
  226. package/build/src/worker/browser-env/runner/test-runner/execution-thread.js.map +1 -1
  227. package/build/src/worker/browser-env/runner/test-runner/index.js +20 -0
  228. package/build/src/worker/browser-env/runner/test-runner/index.js.map +1 -1
  229. package/build/src/worker/index.js +39 -1
  230. package/build/src/worker/index.js.map +1 -1
  231. package/build/src/worker/runner/browser-pool.d.ts +3 -2
  232. package/build/src/worker/runner/browser-pool.js +5 -3
  233. package/build/src/worker/runner/browser-pool.js.map +1 -1
  234. package/build/src/worker/runner/caching-test-parser.d.ts +6 -1
  235. package/build/src/worker/runner/caching-test-parser.js +40 -4
  236. package/build/src/worker/runner/caching-test-parser.js.map +1 -1
  237. package/build/src/worker/runner/index.d.ts +10 -9
  238. package/build/src/worker/runner/index.js +52 -6
  239. package/build/src/worker/runner/index.js.map +1 -1
  240. package/build/src/worker/runner/sequence-test-parser.d.ts +4 -1
  241. package/build/src/worker/runner/sequence-test-parser.js +17 -3
  242. package/build/src/worker/runner/sequence-test-parser.js.map +1 -1
  243. package/build/src/worker/runner/simple-test-parser.d.ts +3 -1
  244. package/build/src/worker/runner/simple-test-parser.js +4 -2
  245. package/build/src/worker/runner/simple-test-parser.js.map +1 -1
  246. package/build/src/worker/runner/test-runner/execution-thread.d.ts +20 -2
  247. package/build/src/worker/runner/test-runner/execution-thread.js +37 -2
  248. package/build/src/worker/runner/test-runner/execution-thread.js.map +1 -1
  249. package/build/src/worker/runner/test-runner/hook-runner.d.ts +1 -1
  250. package/build/src/worker/runner/test-runner/hook-runner.js +4 -4
  251. package/build/src/worker/runner/test-runner/hook-runner.js.map +1 -1
  252. package/build/src/worker/runner/test-runner/index.d.ts +8 -7
  253. package/build/src/worker/runner/test-runner/index.js +36 -25
  254. package/build/src/worker/runner/test-runner/index.js.map +1 -1
  255. package/build/src/worker/runner/test-runner/types.d.ts +8 -1
  256. package/build/src/worker/testplane-facade.js +63 -4
  257. package/build/src/worker/testplane-facade.js.map +1 -1
  258. package/build/src/worker/testplane.d.ts +6 -0
  259. package/build/src/worker/testplane.js +7 -1
  260. package/build/src/worker/testplane.js.map +1 -1
  261. package/package.json +2 -2
@@ -4,12 +4,255 @@ exports.AsyncEmitter = void 0;
4
4
  const events_1 = require("events");
5
5
  const promise_1 = require("../../utils/promise");
6
6
  class AsyncEmitter extends events_1.EventEmitter {
7
+ constructor(observer) {
8
+ super();
9
+ this._wrappedListeners = new WeakMap();
10
+ this._onceWrappers = new WeakMap();
11
+ this._asyncDispatch = new WeakSet();
12
+ this._eventObserver = observer;
13
+ }
14
+ setEventObserver(observer) {
15
+ this._eventObserver = observer;
16
+ return this;
17
+ }
18
+ addListener(event, listener) {
19
+ return super.addListener(event, this._wrapListener(event, listener));
20
+ }
21
+ on(event, listener) {
22
+ return super.on(event, this._wrapListener(event, listener));
23
+ }
24
+ once(event, listener) {
25
+ const wrapped = this._wrapListener(event, listener);
26
+ super.once(event, wrapped);
27
+ const raw = super.rawListeners(event).at(-1);
28
+ if (raw && raw !== wrapped) {
29
+ this._onceWrappers.set(raw, wrapped);
30
+ }
31
+ return this;
32
+ }
33
+ prependListener(event, listener) {
34
+ return super.prependListener(event, this._wrapListener(event, listener));
35
+ }
36
+ prependOnceListener(event, listener) {
37
+ const wrapped = this._wrapListener(event, listener);
38
+ super.prependOnceListener(event, wrapped);
39
+ const raw = super.rawListeners(event)[0];
40
+ if (raw && raw !== wrapped) {
41
+ this._onceWrappers.set(raw, wrapped);
42
+ }
43
+ return this;
44
+ }
45
+ removeListener(event, listener) {
46
+ const rawListeners = super.rawListeners(event);
47
+ for (let index = rawListeners.length - 1; index >= 0; index -= 1) {
48
+ const raw = rawListeners[index];
49
+ if (raw === listener || this._unwrap(raw) === listener) {
50
+ return super.removeListener(event, raw);
51
+ }
52
+ }
53
+ return this;
54
+ }
55
+ off(event, listener) {
56
+ return this.removeListener(event, listener);
57
+ }
58
+ listeners(event) {
59
+ return super.listeners(event).map(listener => this._unwrap(listener));
60
+ }
61
+ rawListeners(event) {
62
+ return super.rawListeners(event).map(rawListener => {
63
+ const raw = rawListener;
64
+ const onceWrapper = this._onceWrappers.get(raw);
65
+ if (onceWrapper) {
66
+ Object.defineProperty(raw, "listener", {
67
+ configurable: true,
68
+ value: this._unwrap(onceWrapper),
69
+ });
70
+ return raw;
71
+ }
72
+ return this._wrappedListeners.has(raw) ? this._unwrap(raw) : raw;
73
+ });
74
+ }
75
+ emit(event, ...args) {
76
+ const normalizedArgs = event === "newListener" || event === "removeListener"
77
+ ? args.map((argument, index) => index === 1 && typeof argument === "function" ? this._unwrap(argument) : argument)
78
+ : args;
79
+ const action = () => super.emit(event, ...normalizedArgs);
80
+ if (!this._eventObserver) {
81
+ return action();
82
+ }
83
+ return this._observeSyncSafely(trackedAction => this._eventObserver.observeSyncEmission(event, trackedAction), action);
84
+ }
7
85
  async emitAndWait(event, ...args) {
8
- const results = await Promise.allSettled(this.listeners(event).map(l => (0, promise_1.promiseMethod)(l).apply(this, args)));
9
- const rejected = results.find(({ status }) => status === "rejected");
10
- return rejected
11
- ? Promise.reject(rejected.reason)
12
- : results.map(r => r.value);
86
+ const dispatch = async () => {
87
+ const results = await Promise.allSettled(super.rawListeners(event).map(rawListener => {
88
+ const listener = rawListener;
89
+ const wrapped = this._resolveWrapped(listener);
90
+ const action = () => {
91
+ if (wrapped) {
92
+ this._asyncDispatch.add(wrapped.wrapper);
93
+ }
94
+ return (0, promise_1.promiseMethod)(listener).apply(this, args);
95
+ };
96
+ return this._eventObserver && wrapped
97
+ ? this._observeAsyncSafely(trackedAction => this._eventObserver.observeAsync(wrapped.metadata.registration, trackedAction), action)
98
+ : action();
99
+ }));
100
+ const rejected = results.find(({ status }) => status === "rejected");
101
+ return rejected
102
+ ? Promise.reject(rejected.reason)
103
+ : results.map(r => r.value);
104
+ };
105
+ return this._eventObserver
106
+ ? this._observeAsyncSafely(trackedAction => this._eventObserver.observeAsyncEmission(event, trackedAction), dispatch)
107
+ : dispatch();
108
+ }
109
+ _wrapListener(event, listener) {
110
+ const observer = this._eventObserver;
111
+ if (!observer) {
112
+ return listener;
113
+ }
114
+ if (this._resolveWrapped(listener)) {
115
+ return listener;
116
+ }
117
+ let registration;
118
+ try {
119
+ registration = observer.register({ event, listener });
120
+ }
121
+ catch (error) {
122
+ this._reportObserverError("event.register", error);
123
+ return listener;
124
+ }
125
+ const asyncDispatch = this._asyncDispatch;
126
+ const observeSyncSafely = this._observeSyncSafely.bind(this);
127
+ const wrapped = function (...args) {
128
+ if (asyncDispatch.has(wrapped)) {
129
+ asyncDispatch.delete(wrapped);
130
+ return listener.apply(this, args);
131
+ }
132
+ const action = () => listener.apply(this, args);
133
+ return observeSyncSafely(trackedAction => observer.observeSync(registration, trackedAction), action);
134
+ };
135
+ Object.defineProperty(wrapped, "listener", { configurable: true, value: listener });
136
+ this._wrappedListeners.set(wrapped, { original: listener, registration });
137
+ return wrapped;
138
+ }
139
+ _resolveWrapped(listener) {
140
+ let current = this._onceWrappers.get(listener) ?? listener;
141
+ const visited = new Set();
142
+ while (!visited.has(current)) {
143
+ visited.add(current);
144
+ const metadata = this._wrappedListeners.get(current);
145
+ if (metadata) {
146
+ return { wrapper: current, metadata };
147
+ }
148
+ const nested = current.listener;
149
+ if (typeof nested !== "function") {
150
+ return;
151
+ }
152
+ current = nested;
153
+ }
154
+ return;
155
+ }
156
+ _unwrap(listener) {
157
+ return this._resolveWrapped(listener)?.metadata.original ?? listener;
158
+ }
159
+ _observeSyncSafely(observe, action) {
160
+ let actionCalled = false;
161
+ let actionCompleted = false;
162
+ let actionFailed = false;
163
+ let actionResult;
164
+ let actionError;
165
+ const trackedAction = () => {
166
+ if (actionCalled) {
167
+ if (actionFailed) {
168
+ throw actionError;
169
+ }
170
+ return actionResult;
171
+ }
172
+ actionCalled = true;
173
+ try {
174
+ actionResult = action();
175
+ actionCompleted = true;
176
+ return actionResult;
177
+ }
178
+ catch (error) {
179
+ actionFailed = true;
180
+ actionError = error;
181
+ throw error;
182
+ }
183
+ };
184
+ try {
185
+ observe(trackedAction);
186
+ if (actionFailed) {
187
+ throw actionError;
188
+ }
189
+ if (!actionCalled) {
190
+ this._reportObserverError("event.observe", new Error("Event observer did not invoke the action"));
191
+ return action();
192
+ }
193
+ return actionResult;
194
+ }
195
+ catch (error) {
196
+ if (actionFailed) {
197
+ throw actionError;
198
+ }
199
+ this._reportObserverError("event.observe", error);
200
+ if (actionCalled && actionCompleted) {
201
+ return actionResult;
202
+ }
203
+ return action();
204
+ }
205
+ }
206
+ async _observeAsyncSafely(observe, action) {
207
+ let actionCalled = false;
208
+ let actionPromise;
209
+ let actionFailed = false;
210
+ let actionError;
211
+ const trackedAction = () => {
212
+ if (actionPromise) {
213
+ return actionPromise;
214
+ }
215
+ actionCalled = true;
216
+ try {
217
+ actionPromise = Promise.resolve(action()).catch(error => {
218
+ actionFailed = true;
219
+ actionError = error;
220
+ throw error;
221
+ });
222
+ }
223
+ catch (error) {
224
+ actionFailed = true;
225
+ actionError = error;
226
+ actionPromise = Promise.reject(error);
227
+ }
228
+ return actionPromise;
229
+ };
230
+ try {
231
+ await observe(trackedAction);
232
+ if (actionFailed) {
233
+ throw actionError;
234
+ }
235
+ if (!actionCalled) {
236
+ this._reportObserverError("event.observe", new Error("Event observer did not invoke the action"));
237
+ return action();
238
+ }
239
+ return actionPromise;
240
+ }
241
+ catch (error) {
242
+ if (actionFailed) {
243
+ throw actionError;
244
+ }
245
+ this._reportObserverError("event.observe", error);
246
+ return actionCalled ? actionPromise : action();
247
+ }
248
+ }
249
+ _reportObserverError(stage, error) {
250
+ try {
251
+ this._eventObserver?.error(stage, error);
252
+ }
253
+ catch {
254
+ // Profiling diagnostics are fail-open.
255
+ }
13
256
  }
14
257
  }
15
258
  exports.AsyncEmitter = AsyncEmitter;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/events/async-emitter/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AACtC,iDAAoD;AAEpD,MAAa,YAAa,SAAQ,qBAAY;IAC1C,KAAK,CAAC,WAAW,CAAC,KAAsB,EAAE,GAAG,IAAe;QACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,uBAAa,EAAC,CAAoC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAU,CAAC,CAAC,CAC9G,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QACrE,OAAO,QAAQ;YACX,CAAC,CAAC,OAAO,CAAC,MAAM,CAAE,QAAkC,CAAC,MAAM,CAAC;YAC5D,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAqC,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC;CACJ;AAXD,oCAWC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/events/async-emitter/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export declare const MasterAsyncEvents: {
13
13
  readonly SESSION_START: "startSession";
14
14
  readonly SESSION_END: "endSession";
15
15
  readonly EXIT: "exit";
16
+ readonly PROFILER_RESULT: "profilerResult";
16
17
  };
17
18
  export type MasterAsyncEvents = typeof MasterAsyncEvents;
18
19
  export type MasterAsyncEvent = ValueOf<MasterAsyncEvents>;
@@ -101,6 +102,7 @@ export declare const MasterEvents: {
101
102
  readonly SESSION_START: "startSession";
102
103
  readonly SESSION_END: "endSession";
103
104
  readonly EXIT: "exit";
105
+ readonly PROFILER_RESULT: "profilerResult";
104
106
  };
105
107
  export type MasterEvents = typeof MasterEvents;
106
108
  export type MasterEvent = MasterAsyncEvent | MasterSyncEvent;
@@ -146,5 +148,6 @@ export declare const Events: {
146
148
  readonly SESSION_START: "startSession";
147
149
  readonly SESSION_END: "endSession";
148
150
  readonly EXIT: "exit";
151
+ readonly PROFILER_RESULT: "profilerResult";
149
152
  };
150
153
  export type Events = typeof Events;
@@ -27,6 +27,7 @@ exports.MasterAsyncEvents = {
27
27
  SESSION_START: "startSession",
28
28
  SESSION_END: "endSession",
29
29
  EXIT: "exit",
30
+ PROFILER_RESULT: "profilerResult",
30
31
  };
31
32
  exports.RunnerSyncEvents = {
32
33
  NEW_WORKER_PROCESS: "newWorkerProcess",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,0CAAwB;AAIX,QAAA,gBAAgB,GAAG;IAC5B,qBAAqB,EAAE,qBAAqB;CACtC,CAAC;AAME,QAAA,iBAAiB,GAAG;IAC7B,IAAI,EAAE,MAAM;IAEZ,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IAEvB,aAAa,EAAE,cAAc;IAC7B,WAAW,EAAE,YAAY;IAEzB,IAAI,EAAE,MAAM;CACN,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,kBAAkB,EAAE,kBAAkB;IAEtC,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,UAAU;IAErB,UAAU,EAAE,WAAW;IACvB,uBAAuB,EAAE,sBAAsB;IAC/C,QAAQ,EAAE,SAAS;IAEnB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,UAAU;IACrB,YAAY,EAAE,aAAa;IAE3B,KAAK,EAAE,OAAO;IAEd,aAAa,EAAE,cAAc;IAE7B,kBAAkB,EAAE,iBAAiB;IAErC,iBAAiB,EAAE,kBAAkB;CAC/B,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,GAAG,EAAE,KAAK;IAEV,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IAEV,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,eAAe;IAEhC,gBAAgB,EAAE,gBAAgB;IAElC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,KAAK;CACN,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,GAAG,wBAAgB;IACnB,GAAG,wBAAgB;CACtB,CAAC;AAMW,QAAA,YAAY,GAAG;IACxB,GAAG,yBAAiB;IACpB,GAAG,wBAAgB;CACb,CAAC;AAME,QAAA,YAAY,GAAG;IACxB,IAAI,EAAE,oBAAY,CAAC,IAAI;IAEvB,gBAAgB,EAAE,oBAAY,CAAC,gBAAgB;IAC/C,eAAe,EAAE,oBAAY,CAAC,eAAe;IAE7C,gBAAgB,EAAE,oBAAY,CAAC,gBAAgB;IAE/C,WAAW,EAAE,YAAY;IAEzB,gBAAgB,EAAE,iBAAiB;CAC7B,CAAC;AAaE,QAAA,MAAM,GAAG;IAClB,GAAG,oBAAY;IACf,GAAG,oBAAY;CACT,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,0CAAwB;AAIX,QAAA,gBAAgB,GAAG;IAC5B,qBAAqB,EAAE,qBAAqB;CACtC,CAAC;AAME,QAAA,iBAAiB,GAAG;IAC7B,IAAI,EAAE,MAAM;IAEZ,YAAY,EAAE,aAAa;IAC3B,UAAU,EAAE,WAAW;IAEvB,aAAa,EAAE,cAAc;IAC7B,WAAW,EAAE,YAAY;IAEzB,IAAI,EAAE,MAAM;IAEZ,eAAe,EAAE,gBAAgB;CAC3B,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,kBAAkB,EAAE,kBAAkB;IAEtC,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,UAAU;IAErB,UAAU,EAAE,WAAW;IACvB,uBAAuB,EAAE,sBAAsB;IAC/C,QAAQ,EAAE,SAAS;IAEnB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,UAAU;IACrB,YAAY,EAAE,aAAa;IAE3B,KAAK,EAAE,OAAO;IAEd,aAAa,EAAE,cAAc;IAE7B,kBAAkB,EAAE,iBAAiB;IAErC,iBAAiB,EAAE,kBAAkB;CAC/B,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,GAAG,EAAE,KAAK;IAEV,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IAEV,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,eAAe;IAEhC,gBAAgB,EAAE,gBAAgB;IAElC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,KAAK;CACN,CAAC;AAME,QAAA,gBAAgB,GAAG;IAC5B,GAAG,wBAAgB;IACnB,GAAG,wBAAgB;CACtB,CAAC;AAMW,QAAA,YAAY,GAAG;IACxB,GAAG,yBAAiB;IACpB,GAAG,wBAAgB;CACb,CAAC;AAME,QAAA,YAAY,GAAG;IACxB,IAAI,EAAE,oBAAY,CAAC,IAAI;IAEvB,gBAAgB,EAAE,oBAAY,CAAC,gBAAgB;IAC/C,eAAe,EAAE,oBAAY,CAAC,eAAe;IAE7C,gBAAgB,EAAE,oBAAY,CAAC,gBAAgB;IAE/C,WAAW,EAAE,YAAY;IAEzB,gBAAgB,EAAE,iBAAiB;CAC7B,CAAC;AAaE,QAAA,MAAM,GAAG;IAClB,GAAG,oBAAY;IACf,GAAG,oBAAY;CACT,CAAC"}
@@ -11,9 +11,10 @@ export * from "./globals";
11
11
  export * as unstable from "./unstable";
12
12
  export type { SessionOptions } from "./browser/types";
13
13
  export type { WdioBrowser, TestResult, Test, Suite, TestError, HermioneCtx, GlobalHelper, TestplaneCtx, TestFunction, TestFunctionCtx, ExecutionThreadCtx, Cookie, TestTag, } from "./types";
14
- export type { Config } from "./config";
14
+ export type { Config, ProfilerConfig, ProfilerLevel } from "./config";
15
15
  export { TimeTravelMode, SelectivityMode } from "./config";
16
16
  export type { ConfigInput, AssertViewOpts } from "./config/types";
17
+ export type { ProfilerResultV1 } from "./profiler/schema";
17
18
  export type { TestCollection, FormatterTreeSuite, FormatterTreeTest, FormatterTreeMainRunnable, FormatterListTest, } from "./test-collection";
18
19
  export type { StatsResult } from "./stats";
19
20
  export type { SaveStateData } from "./browser/commands/saveState";
@@ -0,0 +1,19 @@
1
+ import type { ProfileAggregates, ProfilerError, ProfilerOperationName, RetainedOperation } from "../schema";
2
+ import type { RuntimeSnapshot } from "../runtime/types";
3
+ export interface NormalizedProfile {
4
+ runId: string;
5
+ operation: ProfilerOperationName;
6
+ level: RuntimeSnapshot["level"];
7
+ /** Real elapsed time of the complete profiled Testplane operation. */
8
+ durationMs: number;
9
+ timeline: RetainedOperation[];
10
+ aggregates: ProfileAggregates;
11
+ errors: ProfilerError[];
12
+ truncation: RuntimeSnapshot["truncation"];
13
+ /** Sum of time measured inside span-start and span-end bookkeeping. */
14
+ overheadMs: number;
15
+ clock: RuntimeSnapshot["clock"];
16
+ }
17
+ export declare const aggregateProfile: (snapshot: RuntimeSnapshot, durationMs: number, operationName?: ProfilerOperationName) => NormalizedProfile;
18
+ export declare function unionDuration(intervals: ReadonlyArray<readonly [number, number]>): number;
19
+ export declare function operationUnionWithin(parent: RetainedOperation, operations: RetainedOperation[]): number;
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.operationUnionWithin = exports.unionDuration = exports.aggregateProfile = void 0;
4
+ const aggregateProfile = (snapshot, durationMs, operationName = "run") => {
5
+ const errors = [...snapshot.errors];
6
+ const rootId = `${snapshot.runId}:operation`;
7
+ const timeline = snapshot.operations.map(operation => ({
8
+ ...operation,
9
+ timing: { ...operation.timing },
10
+ parentId: operation.parentId ?? rootId,
11
+ }));
12
+ const root = {
13
+ id: rootId,
14
+ kind: "testplane.operation",
15
+ name: "Testplane operation",
16
+ process: { type: "master", pid: process.pid },
17
+ context: { runId: snapshot.runId },
18
+ startOffsetMs: 0,
19
+ timing: { wallMs: durationMs },
20
+ attributes: {},
21
+ quality: { timing: "exact", cpu: "process-window" },
22
+ status: "completed",
23
+ };
24
+ timeline.unshift(root);
25
+ const operationsById = new Map(timeline.map(operation => [operation.id, operation]));
26
+ for (const operation of timeline) {
27
+ if (operation.parentId && !operationsById.has(operation.parentId)) {
28
+ errors.push({
29
+ stage: "aggregation.parent",
30
+ code: "MISSING_PARENT",
31
+ message: `Operation ${operation.id} referenced a missing parent`,
32
+ });
33
+ operation.parentId = rootId;
34
+ }
35
+ }
36
+ rejectCycles(root, timeline, operationsById, errors);
37
+ const childrenByParentId = buildChildren(timeline);
38
+ calculateOperationTimings(root, childrenByParentId);
39
+ addUnattributedOperations(timeline, childrenByParentId, snapshot.runId);
40
+ timeline.sort((left, right) => left.startOffsetMs - right.startOffsetMs || left.id.localeCompare(right.id));
41
+ return {
42
+ runId: snapshot.runId,
43
+ operation: operationName,
44
+ level: snapshot.level,
45
+ durationMs,
46
+ timeline,
47
+ aggregates: categorizeAggregates(snapshot.aggregates, snapshot.metrics),
48
+ errors,
49
+ truncation: snapshot.truncation,
50
+ overheadMs: snapshot.overheadMs,
51
+ clock: snapshot.clock,
52
+ };
53
+ };
54
+ exports.aggregateProfile = aggregateProfile;
55
+ function buildChildren(timeline) {
56
+ const childrenByParentId = new Map();
57
+ for (const operation of timeline) {
58
+ if (!operation.parentId) {
59
+ continue;
60
+ }
61
+ const siblings = childrenByParentId.get(operation.parentId) ?? [];
62
+ siblings.push(operation);
63
+ childrenByParentId.set(operation.parentId, siblings);
64
+ }
65
+ return childrenByParentId;
66
+ }
67
+ function rejectCycles(root, timeline, operationsById, errors) {
68
+ for (const operation of timeline) {
69
+ if (operation.id === root.id) {
70
+ continue;
71
+ }
72
+ const visited = new Set([operation.id]);
73
+ let parentId = operation.parentId;
74
+ while (parentId) {
75
+ if (visited.has(parentId)) {
76
+ operation.parentId = root.id;
77
+ errors.push({
78
+ stage: "aggregation.dag",
79
+ code: "CYCLE",
80
+ message: `Dropped cyclic parent edge for operation ${operation.id}`,
81
+ });
82
+ break;
83
+ }
84
+ visited.add(parentId);
85
+ parentId = operationsById.get(parentId)?.parentId;
86
+ }
87
+ }
88
+ }
89
+ function calculateOperationTimings(operation, childrenByParentId) {
90
+ const directChildren = childrenByParentId.get(operation.id) ?? [];
91
+ const retainedChildUnionMs = operationUnionWithin(operation, directChildren);
92
+ const observedChildUnionMs = operation.timing.observedChildUnionMs;
93
+ const childUnionMs = observedChildUnionMs !== undefined
94
+ ? Math.min(operation.timing.wallMs, Math.max(retainedChildUnionMs, observedChildUnionMs))
95
+ : retainedChildUnionMs;
96
+ const cumulativeChildWorkMs = directChildren.reduce((total, child) => total + child.timing.wallMs, 0);
97
+ operation.timing.selfWallMs = Math.max(0, operation.timing.wallMs - childUnionMs);
98
+ operation.timing.cumulativeWorkMs = cumulativeChildWorkMs;
99
+ operation.timing.overlapMs = Math.max(0, cumulativeChildWorkMs - retainedChildUnionMs);
100
+ let longestChildPath = 0;
101
+ for (const child of directChildren) {
102
+ longestChildPath = Math.max(longestChildPath, calculateOperationTimings(child, childrenByParentId));
103
+ }
104
+ operation.timing.criticalPathMs = Math.min(operation.timing.wallMs, (operation.timing.selfWallMs ?? 0) + longestChildPath);
105
+ return operation.timing.criticalPathMs;
106
+ }
107
+ function unionDuration(intervals) {
108
+ if (!intervals.length) {
109
+ return 0;
110
+ }
111
+ const sortedIntervals = [...intervals].sort(([left], [right]) => left - right);
112
+ let [currentStart, currentEnd] = sortedIntervals[0];
113
+ let totalDuration = 0;
114
+ for (let index = 1; index < sortedIntervals.length; index += 1) {
115
+ const [start, end] = sortedIntervals[index];
116
+ if (start <= currentEnd) {
117
+ currentEnd = Math.max(currentEnd, end);
118
+ }
119
+ else {
120
+ totalDuration += currentEnd - currentStart;
121
+ currentStart = start;
122
+ currentEnd = end;
123
+ }
124
+ }
125
+ return totalDuration + currentEnd - currentStart;
126
+ }
127
+ exports.unionDuration = unionDuration;
128
+ function addUnattributedOperations(timeline, childrenByParentId, runId) {
129
+ let sequence = 0;
130
+ for (const parent of [...timeline]) {
131
+ const unattributedMs = parent.timing.selfWallMs ?? 0;
132
+ const directChildren = childrenByParentId.get(parent.id);
133
+ if (unattributedMs <= 0 || !directChildren) {
134
+ continue;
135
+ }
136
+ const retainedChildUnionMs = operationUnionWithin(parent, directChildren);
137
+ const observedChildUnionMs = parent.timing.observedChildUnionMs;
138
+ const childrenTruncated = observedChildUnionMs !== undefined && observedChildUnionMs > retainedChildUnionMs + 1;
139
+ sequence += 1;
140
+ timeline.push({
141
+ id: `${runId}:unattributed:${sequence}`,
142
+ parentId: parent.id,
143
+ kind: "testplane.phase.unattributed",
144
+ name: "Unattributed",
145
+ process: parent.process,
146
+ context: parent.context,
147
+ startOffsetMs: parent.startOffsetMs,
148
+ timing: {
149
+ wallMs: unattributedMs,
150
+ selfWallMs: unattributedMs,
151
+ cumulativeWorkMs: 0,
152
+ overlapMs: 0,
153
+ criticalPathMs: unattributedMs,
154
+ },
155
+ attributes: childrenTruncated ? { retentionAffected: true } : {},
156
+ quality: {
157
+ timing: "estimated",
158
+ cpu: "unavailable",
159
+ notes: childrenTruncated
160
+ ? [
161
+ "Parent interval minus retained child intervals; some child detail was dropped by retention, so this residual is a detail-budget artifact, not missing instrumentation",
162
+ ]
163
+ : ["Computed as parent interval minus the union of retained direct child intervals"],
164
+ },
165
+ status: "completed",
166
+ });
167
+ }
168
+ }
169
+ function operationUnionWithin(parent, operations) {
170
+ const parentStart = parent.startOffsetMs;
171
+ const parentEnd = parentStart + parent.timing.wallMs;
172
+ const intervals = operations
173
+ .map(child => [
174
+ Math.max(parentStart, child.startOffsetMs),
175
+ Math.min(parentEnd, child.startOffsetMs + child.timing.wallMs),
176
+ ])
177
+ .filter(([start, end]) => end > start);
178
+ return unionDuration(intervals);
179
+ }
180
+ exports.operationUnionWithin = operationUnionWithin;
181
+ function categorizeAggregates(aggregates, metrics) {
182
+ const profilerAggregates = aggregates.map(toProfilerAggregate);
183
+ const filterByKindPrefix = (prefixes) => profilerAggregates.filter(aggregate => prefixes.some(prefix => aggregate.kind.startsWith(prefix)));
184
+ const commandRoot = profilerAggregates.find(aggregate => aggregate.kind === "browser.command.root" && aggregate.name === "<root>");
185
+ const commandCumulative = profilerAggregates.find(aggregate => aggregate.kind === "browser.command.cumulative" && aggregate.name === "<all>");
186
+ const commandSummary = commandRoot
187
+ ? {
188
+ ...commandRoot,
189
+ kind: "browser.command",
190
+ name: "<root>",
191
+ cumulativeWorkMs: commandCumulative?.totalWallMs ?? commandRoot.totalWallMs,
192
+ overlapMs: Math.max(0, (commandCumulative?.totalWallMs ?? commandRoot.totalWallMs) - commandRoot.totalWallMs),
193
+ }
194
+ : undefined;
195
+ return {
196
+ // Browser kinds live in `commands` / `browsers` only — keep byKind free of that duplication.
197
+ byKind: profilerAggregates.filter(aggregate => !aggregate.kind.startsWith("browser.")),
198
+ phases: filterByKindPrefix(["testplane.phase."]),
199
+ listeners: filterByKindPrefix(["event.listener", "user.callback"]),
200
+ testFiles: filterByKindPrefix(["test.file", "files.load"]),
201
+ tests: filterByKindPrefix(["test.attempt", "test.body"]),
202
+ hooks: filterByKindPrefix(["test.hook", "test.beforeEach", "test.afterEach"]),
203
+ commands: [
204
+ ...(commandSummary ? [commandSummary] : []),
205
+ ...profilerAggregates.filter(aggregate => aggregate.kind === "browser.command"),
206
+ ],
207
+ workers: filterByKindPrefix(["worker."]),
208
+ // Session/pool/runnable stay here; command family is only under `commands`.
209
+ browsers: profilerAggregates.filter(aggregate => (aggregate.kind.startsWith("browser.") || aggregate.kind.startsWith("session.")) &&
210
+ !aggregate.kind.startsWith("browser.command")),
211
+ metrics: metrics.map(({ name, value, dimensions }) => ({ name, value, dimensions })),
212
+ };
213
+ }
214
+ function toProfilerAggregate({ kind, name, attributes, statistics }) {
215
+ return {
216
+ kind,
217
+ name,
218
+ count: statistics.count,
219
+ totalWallMs: statistics.sum,
220
+ minWallMs: statistics.min,
221
+ maxWallMs: statistics.max,
222
+ meanWallMs: statistics.mean,
223
+ p50WallMs: statistics.p50,
224
+ p95WallMs: statistics.p95,
225
+ cumulativeWorkMs: statistics.sum,
226
+ attributes,
227
+ };
228
+ }
229
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../../src/profiler/analysis/aggregator.ts"],"names":[],"mappings":";;;AAwBO,MAAM,gBAAgB,GAAG,CAC5B,QAAyB,EACzB,UAAkB,EAClB,gBAAuC,KAAK,EAC3B,EAAE;IACnB,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,YAAY,CAAC;IAC7C,MAAM,QAAQ,GAAwB,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACxE,GAAG,SAAS;QACZ,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE;QAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,MAAM;KACzC,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAsB;QAC5B,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAC7C,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;QAClC,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;QAC9B,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE;QACnD,MAAM,EAAE,WAAW;KACtB,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,aAAa,SAAS,CAAC,EAAE,8BAA8B;aACnE,CAAC,CAAC;YACH,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC;QAChC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACpD,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5G,OAAO;QACH,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,SAAS,EAAE,aAAa;QACxB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU;QACV,QAAQ;QACR,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC;QACvE,MAAM;QACN,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;KACxB,CAAC;AACN,CAAC,CAAC;AAxDW,QAAA,gBAAgB,oBAwD3B;AAEF,SAAS,aAAa,CAAC,QAA6B;IAChD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClE,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC9B,CAAC;AAED,SAAS,YAAY,CACjB,IAAuB,EACvB,QAA6B,EAC7B,cAA8C,EAC9C,MAAuB;IAEvB,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3B,SAAS;QACb,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAClC,OAAO,QAAQ,EAAE,CAAC;YACd,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC;oBACR,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,4CAA4C,SAAS,CAAC,EAAE,EAAE;iBACtE,CAAC,CAAC;gBACH,MAAM;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtB,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACtD,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAC9B,SAA4B,EAC5B,kBAAoD;IAEpD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC;IACnE,MAAM,YAAY,GACd,oBAAoB,KAAK,SAAS;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;QACzF,CAAC,CAAC,oBAAoB,CAAC;IAC/B,MAAM,qBAAqB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEtG,SAAS,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;IAClF,SAAS,CAAC,MAAM,CAAC,gBAAgB,GAAG,qBAAqB,CAAC;IAC1D,SAAS,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;IAEvF,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACjC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxG,CAAC;IACD,SAAS,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CACtC,SAAS,CAAC,MAAM,CAAC,MAAM,EACvB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,gBAAgB,CACxD,CAAC;IAEF,OAAO,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;AAC3C,CAAC;AAED,SAAgB,aAAa,CAAC,SAAmD;IAC7E,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACb,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAC/E,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,aAAa,IAAI,UAAU,GAAG,YAAY,CAAC;YAC3C,YAAY,GAAG,KAAK,CAAC;YACrB,UAAU,GAAG,GAAG,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AACrD,CAAC;AArBD,sCAqBC;AAED,SAAS,yBAAyB,CAC9B,QAA6B,EAC7B,kBAAoD,EACpD,KAAa;IAEb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,SAAS;QACb,CAAC;QAED,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC1E,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAChE,MAAM,iBAAiB,GAAG,oBAAoB,KAAK,SAAS,IAAI,oBAAoB,GAAG,oBAAoB,GAAG,CAAC,CAAC;QAEhH,QAAQ,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,GAAG,KAAK,iBAAiB,QAAQ,EAAE;YACvC,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,IAAI,EAAE,8BAA8B;YACpC,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,MAAM,EAAE;gBACJ,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,cAAc;gBAC1B,gBAAgB,EAAE,CAAC;gBACnB,SAAS,EAAE,CAAC;gBACZ,cAAc,EAAE,cAAc;aACjC;YACD,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAChE,OAAO,EAAE;gBACL,MAAM,EAAE,WAAW;gBACnB,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,iBAAiB;oBACpB,CAAC,CAAC;wBACI,uKAAuK;qBAC1K;oBACH,CAAC,CAAC,CAAC,gFAAgF,CAAC;aAC3F;YACD,MAAM,EAAE,WAAW;SACtB,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAyB,EAAE,UAA+B;IAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACrD,MAAM,SAAS,GAAG,UAAU;SACvB,GAAG,CACA,KAAK,CAAC,EAAE,CACJ;QACI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;KACxD,CACjB;SACA,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IAC3C,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAbD,oDAaC;AAED,SAAS,oBAAoB,CAAC,UAA8B,EAAE,OAAmC;IAC7F,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,CAAC,QAAkB,EAAuB,EAAE,CACnE,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CACvC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,sBAAsB,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CACxF,CAAC;IACF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,IAAI,CAC7C,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,4BAA4B,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,CAC7F,CAAC;IACF,MAAM,cAAc,GAAG,WAAW;QAC9B,CAAC,CAAC;YACI,GAAG,WAAW;YACd,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,QAAQ;YACd,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,IAAI,WAAW,CAAC,WAAW;YAC3E,SAAS,EAAE,IAAI,CAAC,GAAG,CACf,CAAC,EACD,CAAC,iBAAiB,EAAE,WAAW,IAAI,WAAW,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,WAAW,CACxF;SACJ;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACH,6FAA6F;QAC7F,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtF,MAAM,EAAE,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAChD,SAAS,EAAE,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAClE,SAAS,EAAE,kBAAkB,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1D,KAAK,EAAE,kBAAkB,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxD,KAAK,EAAE,kBAAkB,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC7E,QAAQ,EAAE;YACN,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC;SAClF;QACD,OAAO,EAAE,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC;QACxC,4EAA4E;QAC5E,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAC/B,SAAS,CAAC,EAAE,CACR,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAChF,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CACpD;QACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;KACvF,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAoB;IACjF,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,WAAW,EAAE,UAAU,CAAC,GAAG;QAC3B,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,SAAS,EAAE,UAAU,CAAC,GAAG;QACzB,gBAAgB,EAAE,UAAU,CAAC,GAAG;QAChC,UAAU;KACb,CAAC;AACN,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Finding } from "../schema";
2
+ import { type NormalizedProfile } from "./aggregator";
3
+ export type FindingDraft = Omit<Finding, "id">;
4
+ export interface ProfilerAnalyzer {
5
+ readonly id: string;
6
+ /** Lowest profiler detail level that provides enough data for this analyzer. */
7
+ readonly minLevel: 1 | 2 | 3;
8
+ analyze(profile: NormalizedProfile): FindingDraft[];
9
+ }
10
+ export declare const runAnalyzers: (profile: NormalizedProfile, analyzers?: ProfilerAnalyzer[]) => Finding[];