@heal-dev/heal-playwright-tracer 1.0.0 → 1.0.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.
Files changed (704) hide show
  1. package/README.md +94 -116
  2. package/dist/application/babel-playwright-tracer-plugin/index.js +16 -2
  3. package/dist/application/commander-cli-adapter/commander-cli-adapter.d.ts +24 -0
  4. package/dist/application/commander-cli-adapter/commander-cli-adapter.js +133 -0
  5. package/dist/application/heal-config/index.d.ts +1 -1
  6. package/dist/application/heal-config/registry.js +2 -1
  7. package/dist/application/heal-config/types.d.ts +187 -6
  8. package/dist/application/playwright-fixture/index.js +247 -48
  9. package/dist/application/playwright-fixture/wire-all-pages.d.ts +37 -0
  10. package/dist/application/playwright-fixture/wire-all-pages.js +71 -0
  11. package/dist/application/trace-event-recorder-runtime/index.d.ts +5 -0
  12. package/dist/application/trace-event-recorder-runtime/index.js +11 -1
  13. package/dist/bin/heal-tracer.d.ts +7 -0
  14. package/dist/bin/heal-tracer.js +16 -0
  15. package/dist/domain/code-hook-injector/service/statement-analysis/async-enclosing-function-detector.d.ts +11 -0
  16. package/dist/domain/code-hook-injector/service/statement-analysis/async-enclosing-function-detector.js +21 -0
  17. package/dist/domain/code-hook-injector/service/trace-hook/preprocess-call.d.ts +10 -0
  18. package/dist/domain/code-hook-injector/service/trace-hook/preprocess-call.js +17 -0
  19. package/dist/domain/persistence/execution-history-schema.d.ts +112 -0
  20. package/dist/domain/persistence/execution-history-schema.js +10 -0
  21. package/dist/domain/persistence/index.d.ts +7 -0
  22. package/dist/domain/persistence/index.js +10 -0
  23. package/dist/domain/persistence/test-status.d.ts +6 -0
  24. package/dist/domain/persistence/test-status.js +7 -0
  25. package/dist/domain/trace-event-recorder/model/console-trace-schema.d.ts +36 -0
  26. package/dist/domain/trace-event-recorder/model/console-trace-schema.js +7 -0
  27. package/dist/domain/trace-event-recorder/model/global-names.d.ts +1 -0
  28. package/dist/domain/trace-event-recorder/model/global-names.js +9 -1
  29. package/dist/domain/trace-event-recorder/model/network-trace-schema.d.ts +105 -0
  30. package/dist/domain/trace-event-recorder/model/network-trace-schema.js +7 -0
  31. package/dist/domain/trace-event-recorder/model/statement-trace-schema.d.ts +68 -2
  32. package/dist/domain/trace-event-recorder/model/statement-trace-schema.js +1 -1
  33. package/dist/domain/trace-event-recorder/model/trace-schema.d.ts +1 -0
  34. package/dist/domain/trace-event-recorder/service/projectors/statement-projector.d.ts +10 -1
  35. package/dist/domain/trace-event-recorder/service/projectors/statement-projector.js +39 -3
  36. package/dist/domain/trace-event-recorder/service/serializers/error-serializer.js +28 -10
  37. package/dist/domain/trace-event-recorder/service/serializers/index.d.ts +7 -0
  38. package/dist/domain/trace-event-recorder/service/serializers/index.js +13 -0
  39. package/dist/domain/trace-event-recorder/service/trace-event-recorder.d.ts +25 -0
  40. package/dist/domain/trace-event-recorder/service/trace-event-recorder.js +33 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/infrastructure/artifact-summary-printer/artifact-summary-printer.d.ts +20 -0
  43. package/dist/infrastructure/artifact-summary-printer/artifact-summary-printer.js +24 -0
  44. package/dist/infrastructure/artifact-summary-printer/index.d.ts +7 -0
  45. package/dist/infrastructure/artifact-summary-printer/index.js +10 -0
  46. package/dist/infrastructure/heal-reporter/crash-error-classifier.d.ts +13 -0
  47. package/dist/infrastructure/heal-reporter/crash-error-classifier.js +65 -0
  48. package/dist/infrastructure/heal-reporter/failing-statement-finder.d.ts +14 -0
  49. package/dist/infrastructure/heal-reporter/failing-statement-finder.js +118 -0
  50. package/dist/infrastructure/heal-reporter/heal-tracer-reporter.d.ts +134 -0
  51. package/dist/infrastructure/heal-reporter/heal-tracer-reporter.js +537 -0
  52. package/dist/infrastructure/heal-reporter/index.d.ts +14 -0
  53. package/dist/infrastructure/heal-reporter/index.js +23 -0
  54. package/dist/infrastructure/heal-reporter/ndjson-tail-inspector.d.ts +8 -0
  55. package/dist/infrastructure/heal-reporter/ndjson-tail-inspector.js +75 -0
  56. package/dist/infrastructure/heal-traces-layout/execution-id-resolver.d.ts +14 -0
  57. package/dist/infrastructure/heal-traces-layout/execution-id-resolver.js +52 -0
  58. package/dist/infrastructure/heal-traces-layout/heal-traces-layout.d.ts +37 -0
  59. package/dist/infrastructure/heal-traces-layout/heal-traces-layout.js +116 -0
  60. package/dist/infrastructure/heal-traces-layout/index.d.ts +7 -0
  61. package/dist/infrastructure/heal-traces-layout/index.js +14 -0
  62. package/dist/infrastructure/local-viewer-adapter/discover-traces.d.ts +70 -0
  63. package/dist/infrastructure/local-viewer-adapter/discover-traces.js +280 -0
  64. package/dist/infrastructure/local-viewer-adapter/local-viewer-server.d.ts +44 -0
  65. package/dist/infrastructure/local-viewer-adapter/local-viewer-server.js +398 -0
  66. package/dist/infrastructure/local-viewer-adapter/ndjson-trace-loader.d.ts +25 -0
  67. package/dist/infrastructure/local-viewer-adapter/ndjson-trace-loader.js +74 -0
  68. package/dist/infrastructure/playwright-console-capture-adapter/console-capture-session.d.ts +40 -0
  69. package/dist/infrastructure/playwright-console-capture-adapter/console-capture-session.js +243 -0
  70. package/dist/infrastructure/playwright-console-capture-adapter/index.d.ts +7 -0
  71. package/dist/infrastructure/playwright-console-capture-adapter/index.js +20 -0
  72. package/dist/infrastructure/playwright-locator-screenshot-adapter/assertion-wrapper.js +22 -9
  73. package/dist/infrastructure/playwright-locator-screenshot-adapter/index.d.ts +1 -1
  74. package/dist/infrastructure/playwright-locator-screenshot-adapter/index.js +2 -2
  75. package/dist/infrastructure/playwright-locator-screenshot-adapter/locator-patch.js +19 -7
  76. package/dist/infrastructure/playwright-locator-screenshot-adapter/overlay-helpers.d.ts +2 -2
  77. package/dist/infrastructure/playwright-locator-screenshot-adapter/overlay-helpers.js +22 -9
  78. package/dist/infrastructure/playwright-locator-screenshot-adapter/screenshot-capture-session.d.ts +14 -3
  79. package/dist/infrastructure/playwright-locator-screenshot-adapter/screenshot-capture-session.js +94 -25
  80. package/dist/infrastructure/playwright-network-capture-adapter/body-preview.d.ts +43 -0
  81. package/dist/infrastructure/playwright-network-capture-adapter/body-preview.js +107 -0
  82. package/dist/infrastructure/playwright-network-capture-adapter/index.d.ts +10 -0
  83. package/dist/infrastructure/playwright-network-capture-adapter/index.js +27 -0
  84. package/dist/infrastructure/playwright-network-capture-adapter/network-capture-session.d.ts +55 -0
  85. package/dist/infrastructure/playwright-network-capture-adapter/network-capture-session.js +630 -0
  86. package/dist/infrastructure/playwright-network-capture-adapter/network-coalescer.d.ts +54 -0
  87. package/dist/infrastructure/playwright-network-capture-adapter/network-coalescer.js +96 -0
  88. package/dist/infrastructure/playwright-network-capture-adapter/redaction.d.ts +14 -0
  89. package/dist/infrastructure/playwright-network-capture-adapter/redaction.js +44 -0
  90. package/dist/infrastructure/playwright-test-context-adapter/playwright-test-context-adapter.d.ts +6 -1
  91. package/dist/infrastructure/playwright-test-context-adapter/playwright-test-context-adapter.js +5 -1
  92. package/dist/infrastructure/stdout-capture-adapter/stdout-capture-session.js +1 -1
  93. package/dist/util/logger.d.ts +17 -0
  94. package/dist/util/logger.js +60 -0
  95. package/dist/util/with-timeout.d.ts +6 -0
  96. package/dist/util/with-timeout.js +33 -0
  97. package/package.json +20 -3
  98. package/tracer-viewer-bundle/assets/abap-BdImnpbu.js +13 -0
  99. package/tracer-viewer-bundle/assets/abap-BdImnpbu.js.map +1 -0
  100. package/tracer-viewer-bundle/assets/actionscript-3-CoDkCxhg.js +13 -0
  101. package/tracer-viewer-bundle/assets/actionscript-3-CoDkCxhg.js.map +1 -0
  102. package/tracer-viewer-bundle/assets/ada-bCR0ucgS.js +13 -0
  103. package/tracer-viewer-bundle/assets/ada-bCR0ucgS.js.map +1 -0
  104. package/tracer-viewer-bundle/assets/andromeeda-C4gqWexZ.js +12 -0
  105. package/tracer-viewer-bundle/assets/andromeeda-C4gqWexZ.js.map +1 -0
  106. package/tracer-viewer-bundle/assets/angular-html-DA-rfuFy.js +41 -0
  107. package/tracer-viewer-bundle/assets/angular-html-DA-rfuFy.js.map +1 -0
  108. package/tracer-viewer-bundle/assets/angular-ts-BrjP3tb8.js +30 -0
  109. package/tracer-viewer-bundle/assets/angular-ts-BrjP3tb8.js.map +1 -0
  110. package/tracer-viewer-bundle/assets/apache-Pmp26Uib.js +13 -0
  111. package/tracer-viewer-bundle/assets/apache-Pmp26Uib.js.map +1 -0
  112. package/tracer-viewer-bundle/assets/apex-D8_7TLub.js +13 -0
  113. package/tracer-viewer-bundle/assets/apex-D8_7TLub.js.map +1 -0
  114. package/tracer-viewer-bundle/assets/apl-CORt7UWP.js +19 -0
  115. package/tracer-viewer-bundle/assets/apl-CORt7UWP.js.map +1 -0
  116. package/tracer-viewer-bundle/assets/applescript-Co6uUVPk.js +13 -0
  117. package/tracer-viewer-bundle/assets/applescript-Co6uUVPk.js.map +1 -0
  118. package/tracer-viewer-bundle/assets/ara-BRHolxvo.js +13 -0
  119. package/tracer-viewer-bundle/assets/ara-BRHolxvo.js.map +1 -0
  120. package/tracer-viewer-bundle/assets/asciidoc-Ve4PFQV2.js +13 -0
  121. package/tracer-viewer-bundle/assets/asciidoc-Ve4PFQV2.js.map +1 -0
  122. package/tracer-viewer-bundle/assets/asm-D_Q5rh1f.js +13 -0
  123. package/tracer-viewer-bundle/assets/asm-D_Q5rh1f.js.map +1 -0
  124. package/tracer-viewer-bundle/assets/astro-HNnZUWAn.js +19 -0
  125. package/tracer-viewer-bundle/assets/astro-HNnZUWAn.js.map +1 -0
  126. package/tracer-viewer-bundle/assets/aurora-x-D-2ljcwZ.js +12 -0
  127. package/tracer-viewer-bundle/assets/aurora-x-D-2ljcwZ.js.map +1 -0
  128. package/tracer-viewer-bundle/assets/awk-DMzUqQB5.js +13 -0
  129. package/tracer-viewer-bundle/assets/awk-DMzUqQB5.js.map +1 -0
  130. package/tracer-viewer-bundle/assets/ayu-dark-DYE7WIF3.js +12 -0
  131. package/tracer-viewer-bundle/assets/ayu-dark-DYE7WIF3.js.map +1 -0
  132. package/tracer-viewer-bundle/assets/ayu-light-BA47KaF1.js +12 -0
  133. package/tracer-viewer-bundle/assets/ayu-light-BA47KaF1.js.map +1 -0
  134. package/tracer-viewer-bundle/assets/ayu-mirage-32ctXXKs.js +12 -0
  135. package/tracer-viewer-bundle/assets/ayu-mirage-32ctXXKs.js.map +1 -0
  136. package/tracer-viewer-bundle/assets/ballerina-BFfxhgS-.js +13 -0
  137. package/tracer-viewer-bundle/assets/ballerina-BFfxhgS-.js.map +1 -0
  138. package/tracer-viewer-bundle/assets/bat-BkioyH1T.js +13 -0
  139. package/tracer-viewer-bundle/assets/bat-BkioyH1T.js.map +1 -0
  140. package/tracer-viewer-bundle/assets/beancount-k_qm7-4y.js +13 -0
  141. package/tracer-viewer-bundle/assets/beancount-k_qm7-4y.js.map +1 -0
  142. package/tracer-viewer-bundle/assets/berry-uYugtg8r.js +13 -0
  143. package/tracer-viewer-bundle/assets/berry-uYugtg8r.js.map +1 -0
  144. package/tracer-viewer-bundle/assets/bibtex-CHM0blh-.js +13 -0
  145. package/tracer-viewer-bundle/assets/bibtex-CHM0blh-.js.map +1 -0
  146. package/tracer-viewer-bundle/assets/bicep-Bmn6On1c.js +13 -0
  147. package/tracer-viewer-bundle/assets/bicep-Bmn6On1c.js.map +1 -0
  148. package/tracer-viewer-bundle/assets/bird2-BIv1doCn.js +13 -0
  149. package/tracer-viewer-bundle/assets/bird2-BIv1doCn.js.map +1 -0
  150. package/tracer-viewer-bundle/assets/blade-BjGOyj-B.js +21 -0
  151. package/tracer-viewer-bundle/assets/blade-BjGOyj-B.js.map +1 -0
  152. package/tracer-viewer-bundle/assets/bsl-BO_Y6i37.js +14 -0
  153. package/tracer-viewer-bundle/assets/bsl-BO_Y6i37.js.map +1 -0
  154. package/tracer-viewer-bundle/assets/c-BIGW1oBm.js +13 -0
  155. package/tracer-viewer-bundle/assets/c-BIGW1oBm.js.map +1 -0
  156. package/tracer-viewer-bundle/assets/c3-eo99z4R2.js +13 -0
  157. package/tracer-viewer-bundle/assets/c3-eo99z4R2.js.map +1 -0
  158. package/tracer-viewer-bundle/assets/cadence-Bv_4Rxtq.js +13 -0
  159. package/tracer-viewer-bundle/assets/cadence-Bv_4Rxtq.js.map +1 -0
  160. package/tracer-viewer-bundle/assets/cairo-KRGpt6FW.js +14 -0
  161. package/tracer-viewer-bundle/assets/cairo-KRGpt6FW.js.map +1 -0
  162. package/tracer-viewer-bundle/assets/catppuccin-frappe-DFWUc33u.js +12 -0
  163. package/tracer-viewer-bundle/assets/catppuccin-frappe-DFWUc33u.js.map +1 -0
  164. package/tracer-viewer-bundle/assets/catppuccin-latte-C9dUb6Cb.js +12 -0
  165. package/tracer-viewer-bundle/assets/catppuccin-latte-C9dUb6Cb.js.map +1 -0
  166. package/tracer-viewer-bundle/assets/catppuccin-macchiato-DQyhUUbL.js +12 -0
  167. package/tracer-viewer-bundle/assets/catppuccin-macchiato-DQyhUUbL.js.map +1 -0
  168. package/tracer-viewer-bundle/assets/catppuccin-mocha-D87Tk5Gz.js +12 -0
  169. package/tracer-viewer-bundle/assets/catppuccin-mocha-D87Tk5Gz.js.map +1 -0
  170. package/tracer-viewer-bundle/assets/clarity-D53aC0YG.js +13 -0
  171. package/tracer-viewer-bundle/assets/clarity-D53aC0YG.js.map +1 -0
  172. package/tracer-viewer-bundle/assets/clojure-P80f7IUj.js +13 -0
  173. package/tracer-viewer-bundle/assets/clojure-P80f7IUj.js.map +1 -0
  174. package/tracer-viewer-bundle/assets/cmake-D1j8_8rp.js +13 -0
  175. package/tracer-viewer-bundle/assets/cmake-D1j8_8rp.js.map +1 -0
  176. package/tracer-viewer-bundle/assets/cobol-nBiQ_Alo.js +17 -0
  177. package/tracer-viewer-bundle/assets/cobol-nBiQ_Alo.js.map +1 -0
  178. package/tracer-viewer-bundle/assets/codeowners-Bp6g37R7.js +13 -0
  179. package/tracer-viewer-bundle/assets/codeowners-Bp6g37R7.js.map +1 -0
  180. package/tracer-viewer-bundle/assets/codeql-DsOJ9woJ.js +13 -0
  181. package/tracer-viewer-bundle/assets/codeql-DsOJ9woJ.js.map +1 -0
  182. package/tracer-viewer-bundle/assets/coffee-Ch7k5sss.js +14 -0
  183. package/tracer-viewer-bundle/assets/coffee-Ch7k5sss.js.map +1 -0
  184. package/tracer-viewer-bundle/assets/common-lisp-Cg-RD9OK.js +13 -0
  185. package/tracer-viewer-bundle/assets/common-lisp-Cg-RD9OK.js.map +1 -0
  186. package/tracer-viewer-bundle/assets/coq-DkFqJrB1.js +13 -0
  187. package/tracer-viewer-bundle/assets/coq-DkFqJrB1.js.map +1 -0
  188. package/tracer-viewer-bundle/assets/cpp-CofmeUqb.js +23 -0
  189. package/tracer-viewer-bundle/assets/cpp-CofmeUqb.js.map +1 -0
  190. package/tracer-viewer-bundle/assets/crystal-DNxU26gB.js +19 -0
  191. package/tracer-viewer-bundle/assets/crystal-DNxU26gB.js.map +1 -0
  192. package/tracer-viewer-bundle/assets/csharp-COcwbKMJ.js +13 -0
  193. package/tracer-viewer-bundle/assets/csharp-COcwbKMJ.js.map +1 -0
  194. package/tracer-viewer-bundle/assets/css-CLj8gQPS.js +13 -0
  195. package/tracer-viewer-bundle/assets/css-CLj8gQPS.js.map +1 -0
  196. package/tracer-viewer-bundle/assets/csv-fuZLfV_i.js +13 -0
  197. package/tracer-viewer-bundle/assets/csv-fuZLfV_i.js.map +1 -0
  198. package/tracer-viewer-bundle/assets/cue-D82EKSYY.js +13 -0
  199. package/tracer-viewer-bundle/assets/cue-D82EKSYY.js.map +1 -0
  200. package/tracer-viewer-bundle/assets/cypher-COkxafJQ.js +13 -0
  201. package/tracer-viewer-bundle/assets/cypher-COkxafJQ.js.map +1 -0
  202. package/tracer-viewer-bundle/assets/d-85-TOEBH.js +13 -0
  203. package/tracer-viewer-bundle/assets/d-85-TOEBH.js.map +1 -0
  204. package/tracer-viewer-bundle/assets/dark-plus-C3mMm8J8.js +12 -0
  205. package/tracer-viewer-bundle/assets/dark-plus-C3mMm8J8.js.map +1 -0
  206. package/tracer-viewer-bundle/assets/dart-bE4Kk8sk.js +13 -0
  207. package/tracer-viewer-bundle/assets/dart-bE4Kk8sk.js.map +1 -0
  208. package/tracer-viewer-bundle/assets/dax-CEL-wOlO.js +13 -0
  209. package/tracer-viewer-bundle/assets/dax-CEL-wOlO.js.map +1 -0
  210. package/tracer-viewer-bundle/assets/desktop-BmXAJ9_W.js +13 -0
  211. package/tracer-viewer-bundle/assets/desktop-BmXAJ9_W.js.map +1 -0
  212. package/tracer-viewer-bundle/assets/diff-D97Zzqfu.js +13 -0
  213. package/tracer-viewer-bundle/assets/diff-D97Zzqfu.js.map +1 -0
  214. package/tracer-viewer-bundle/assets/docker-BcOcwvcX.js +13 -0
  215. package/tracer-viewer-bundle/assets/docker-BcOcwvcX.js.map +1 -0
  216. package/tracer-viewer-bundle/assets/dotenv-Da5cRb03.js +13 -0
  217. package/tracer-viewer-bundle/assets/dotenv-Da5cRb03.js.map +1 -0
  218. package/tracer-viewer-bundle/assets/dracula-BzJJZx-M.js +12 -0
  219. package/tracer-viewer-bundle/assets/dracula-BzJJZx-M.js.map +1 -0
  220. package/tracer-viewer-bundle/assets/dracula-soft-BXkSAIEj.js +12 -0
  221. package/tracer-viewer-bundle/assets/dracula-soft-BXkSAIEj.js.map +1 -0
  222. package/tracer-viewer-bundle/assets/dream-maker-BtqSS_iP.js +13 -0
  223. package/tracer-viewer-bundle/assets/dream-maker-BtqSS_iP.js.map +1 -0
  224. package/tracer-viewer-bundle/assets/edge-FbVlp4U3.js +18 -0
  225. package/tracer-viewer-bundle/assets/edge-FbVlp4U3.js.map +1 -0
  226. package/tracer-viewer-bundle/assets/elixir-CkH2-t6x.js +16 -0
  227. package/tracer-viewer-bundle/assets/elixir-CkH2-t6x.js.map +1 -0
  228. package/tracer-viewer-bundle/assets/elm-DbKCFpqz.js +15 -0
  229. package/tracer-viewer-bundle/assets/elm-DbKCFpqz.js.map +1 -0
  230. package/tracer-viewer-bundle/assets/emacs-lisp-CXvaQtF9.js +13 -0
  231. package/tracer-viewer-bundle/assets/emacs-lisp-CXvaQtF9.js.map +1 -0
  232. package/tracer-viewer-bundle/assets/erb-BYCe7drp.js +32 -0
  233. package/tracer-viewer-bundle/assets/erb-BYCe7drp.js.map +1 -0
  234. package/tracer-viewer-bundle/assets/erlang-DsQrWhSR.js +14 -0
  235. package/tracer-viewer-bundle/assets/erlang-DsQrWhSR.js.map +1 -0
  236. package/tracer-viewer-bundle/assets/everforest-dark-BgDCqdQA.js +12 -0
  237. package/tracer-viewer-bundle/assets/everforest-dark-BgDCqdQA.js.map +1 -0
  238. package/tracer-viewer-bundle/assets/everforest-light-C8M2exoo.js +12 -0
  239. package/tracer-viewer-bundle/assets/everforest-light-C8M2exoo.js.map +1 -0
  240. package/tracer-viewer-bundle/assets/favicon-DRSNNJwn.svg +3 -0
  241. package/tracer-viewer-bundle/assets/fennel-BYunw83y.js +13 -0
  242. package/tracer-viewer-bundle/assets/fennel-BYunw83y.js.map +1 -0
  243. package/tracer-viewer-bundle/assets/fish-BvzEVeQv.js +13 -0
  244. package/tracer-viewer-bundle/assets/fish-BvzEVeQv.js.map +1 -0
  245. package/tracer-viewer-bundle/assets/fluent-C4IJs8-o.js +13 -0
  246. package/tracer-viewer-bundle/assets/fluent-C4IJs8-o.js.map +1 -0
  247. package/tracer-viewer-bundle/assets/fortran-fixed-form-CkoXwp7k.js +14 -0
  248. package/tracer-viewer-bundle/assets/fortran-fixed-form-CkoXwp7k.js.map +1 -0
  249. package/tracer-viewer-bundle/assets/fortran-free-form-BxgE0vQu.js +13 -0
  250. package/tracer-viewer-bundle/assets/fortran-free-form-BxgE0vQu.js.map +1 -0
  251. package/tracer-viewer-bundle/assets/fsharp-CXgrBDvD.js +14 -0
  252. package/tracer-viewer-bundle/assets/fsharp-CXgrBDvD.js.map +1 -0
  253. package/tracer-viewer-bundle/assets/gdresource-BOOCDP_w.js +15 -0
  254. package/tracer-viewer-bundle/assets/gdresource-BOOCDP_w.js.map +1 -0
  255. package/tracer-viewer-bundle/assets/gdscript-C5YyOfLZ.js +13 -0
  256. package/tracer-viewer-bundle/assets/gdscript-C5YyOfLZ.js.map +1 -0
  257. package/tracer-viewer-bundle/assets/gdshader-DkwncUOv.js +13 -0
  258. package/tracer-viewer-bundle/assets/gdshader-DkwncUOv.js.map +1 -0
  259. package/tracer-viewer-bundle/assets/genie-D0YGMca9.js +13 -0
  260. package/tracer-viewer-bundle/assets/genie-D0YGMca9.js.map +1 -0
  261. package/tracer-viewer-bundle/assets/gherkin-DyxjwDmM.js +13 -0
  262. package/tracer-viewer-bundle/assets/gherkin-DyxjwDmM.js.map +1 -0
  263. package/tracer-viewer-bundle/assets/git-commit-F4YmCXRG.js +14 -0
  264. package/tracer-viewer-bundle/assets/git-commit-F4YmCXRG.js.map +1 -0
  265. package/tracer-viewer-bundle/assets/git-rebase-r7XF79zn.js +14 -0
  266. package/tracer-viewer-bundle/assets/git-rebase-r7XF79zn.js.map +1 -0
  267. package/tracer-viewer-bundle/assets/github-dark-DHJKELXO.js +12 -0
  268. package/tracer-viewer-bundle/assets/github-dark-DHJKELXO.js.map +1 -0
  269. package/tracer-viewer-bundle/assets/github-dark-default-Cuk6v7N8.js +12 -0
  270. package/tracer-viewer-bundle/assets/github-dark-default-Cuk6v7N8.js.map +1 -0
  271. package/tracer-viewer-bundle/assets/github-dark-dimmed-DH5Ifo-i.js +12 -0
  272. package/tracer-viewer-bundle/assets/github-dark-dimmed-DH5Ifo-i.js.map +1 -0
  273. package/tracer-viewer-bundle/assets/github-dark-high-contrast-E3gJ1_iC.js +12 -0
  274. package/tracer-viewer-bundle/assets/github-dark-high-contrast-E3gJ1_iC.js.map +1 -0
  275. package/tracer-viewer-bundle/assets/github-light-DAi9KRSo.js +12 -0
  276. package/tracer-viewer-bundle/assets/github-light-DAi9KRSo.js.map +1 -0
  277. package/tracer-viewer-bundle/assets/github-light-default-D7oLnXFd.js +12 -0
  278. package/tracer-viewer-bundle/assets/github-light-default-D7oLnXFd.js.map +1 -0
  279. package/tracer-viewer-bundle/assets/github-light-high-contrast-BfjtVDDH.js +12 -0
  280. package/tracer-viewer-bundle/assets/github-light-high-contrast-BfjtVDDH.js.map +1 -0
  281. package/tracer-viewer-bundle/assets/gleam-BspZqrRM.js +13 -0
  282. package/tracer-viewer-bundle/assets/gleam-BspZqrRM.js.map +1 -0
  283. package/tracer-viewer-bundle/assets/glimmer-js-ByusRIyA.js +17 -0
  284. package/tracer-viewer-bundle/assets/glimmer-js-ByusRIyA.js.map +1 -0
  285. package/tracer-viewer-bundle/assets/glimmer-ts-BfAWNZQY.js +17 -0
  286. package/tracer-viewer-bundle/assets/glimmer-ts-BfAWNZQY.js.map +1 -0
  287. package/tracer-viewer-bundle/assets/glsl-DplSGwfg.js +14 -0
  288. package/tracer-viewer-bundle/assets/glsl-DplSGwfg.js.map +1 -0
  289. package/tracer-viewer-bundle/assets/gn-n2N0HUVH.js +13 -0
  290. package/tracer-viewer-bundle/assets/gn-n2N0HUVH.js.map +1 -0
  291. package/tracer-viewer-bundle/assets/gnuplot-DdkO51Og.js +13 -0
  292. package/tracer-viewer-bundle/assets/gnuplot-DdkO51Og.js.map +1 -0
  293. package/tracer-viewer-bundle/assets/go-C27-OAKa.js +13 -0
  294. package/tracer-viewer-bundle/assets/go-C27-OAKa.js.map +1 -0
  295. package/tracer-viewer-bundle/assets/graphql-ChdNCCLP.js +17 -0
  296. package/tracer-viewer-bundle/assets/graphql-ChdNCCLP.js.map +1 -0
  297. package/tracer-viewer-bundle/assets/groovy-gcz8RCvz.js +13 -0
  298. package/tracer-viewer-bundle/assets/groovy-gcz8RCvz.js.map +1 -0
  299. package/tracer-viewer-bundle/assets/gruvbox-dark-hard-CFHQjOhq.js +12 -0
  300. package/tracer-viewer-bundle/assets/gruvbox-dark-hard-CFHQjOhq.js.map +1 -0
  301. package/tracer-viewer-bundle/assets/gruvbox-dark-medium-GsRaNv29.js +12 -0
  302. package/tracer-viewer-bundle/assets/gruvbox-dark-medium-GsRaNv29.js.map +1 -0
  303. package/tracer-viewer-bundle/assets/gruvbox-dark-soft-CVdnzihN.js +12 -0
  304. package/tracer-viewer-bundle/assets/gruvbox-dark-soft-CVdnzihN.js.map +1 -0
  305. package/tracer-viewer-bundle/assets/gruvbox-light-hard-CH1njM8p.js +12 -0
  306. package/tracer-viewer-bundle/assets/gruvbox-light-hard-CH1njM8p.js.map +1 -0
  307. package/tracer-viewer-bundle/assets/gruvbox-light-medium-DRw_LuNl.js +12 -0
  308. package/tracer-viewer-bundle/assets/gruvbox-light-medium-DRw_LuNl.js.map +1 -0
  309. package/tracer-viewer-bundle/assets/gruvbox-light-soft-hJgmCMqR.js +12 -0
  310. package/tracer-viewer-bundle/assets/gruvbox-light-soft-hJgmCMqR.js.map +1 -0
  311. package/tracer-viewer-bundle/assets/hack-i7_Ulhet.js +17 -0
  312. package/tracer-viewer-bundle/assets/hack-i7_Ulhet.js.map +1 -0
  313. package/tracer-viewer-bundle/assets/haml-D5jkg6IW.js +15 -0
  314. package/tracer-viewer-bundle/assets/haml-D5jkg6IW.js.map +1 -0
  315. package/tracer-viewer-bundle/assets/handlebars-BpdQsYii.js +17 -0
  316. package/tracer-viewer-bundle/assets/handlebars-BpdQsYii.js.map +1 -0
  317. package/tracer-viewer-bundle/assets/haskell-Df6bDoY_.js +13 -0
  318. package/tracer-viewer-bundle/assets/haskell-Df6bDoY_.js.map +1 -0
  319. package/tracer-viewer-bundle/assets/haxe-CzTSHFRz.js +13 -0
  320. package/tracer-viewer-bundle/assets/haxe-CzTSHFRz.js.map +1 -0
  321. package/tracer-viewer-bundle/assets/hcl-BWvSN4gD.js +13 -0
  322. package/tracer-viewer-bundle/assets/hcl-BWvSN4gD.js.map +1 -0
  323. package/tracer-viewer-bundle/assets/hjson-D5-asLiD.js +13 -0
  324. package/tracer-viewer-bundle/assets/hjson-D5-asLiD.js.map +1 -0
  325. package/tracer-viewer-bundle/assets/hlsl-D3lLCCz7.js +13 -0
  326. package/tracer-viewer-bundle/assets/hlsl-D3lLCCz7.js.map +1 -0
  327. package/tracer-viewer-bundle/assets/horizon-BUw7H-hv.js +12 -0
  328. package/tracer-viewer-bundle/assets/horizon-BUw7H-hv.js.map +1 -0
  329. package/tracer-viewer-bundle/assets/horizon-bright-CUuTKBJd.js +12 -0
  330. package/tracer-viewer-bundle/assets/horizon-bright-CUuTKBJd.js.map +1 -0
  331. package/tracer-viewer-bundle/assets/houston-DnULxvSX.js +12 -0
  332. package/tracer-viewer-bundle/assets/houston-DnULxvSX.js.map +1 -0
  333. package/tracer-viewer-bundle/assets/html-derivative-DlHx6ybY.js +16 -0
  334. package/tracer-viewer-bundle/assets/html-derivative-DlHx6ybY.js.map +1 -0
  335. package/tracer-viewer-bundle/assets/html-pp8916En.js +15 -0
  336. package/tracer-viewer-bundle/assets/html-pp8916En.js.map +1 -0
  337. package/tracer-viewer-bundle/assets/http-jrhK8wxY.js +22 -0
  338. package/tracer-viewer-bundle/assets/http-jrhK8wxY.js.map +1 -0
  339. package/tracer-viewer-bundle/assets/hurl-irOxFIW8.js +21 -0
  340. package/tracer-viewer-bundle/assets/hurl-irOxFIW8.js.map +1 -0
  341. package/tracer-viewer-bundle/assets/hxml-Bvhsp5Yf.js +14 -0
  342. package/tracer-viewer-bundle/assets/hxml-Bvhsp5Yf.js.map +1 -0
  343. package/tracer-viewer-bundle/assets/hy-DFXneXwc.js +13 -0
  344. package/tracer-viewer-bundle/assets/hy-DFXneXwc.js.map +1 -0
  345. package/tracer-viewer-bundle/assets/imba-DGztddWO.js +13 -0
  346. package/tracer-viewer-bundle/assets/imba-DGztddWO.js.map +1 -0
  347. package/tracer-viewer-bundle/assets/index-CIRSNBm6.css +4792 -0
  348. package/tracer-viewer-bundle/assets/index-DS0dKIBi.js +36912 -0
  349. package/tracer-viewer-bundle/assets/index-DS0dKIBi.js.map +1 -0
  350. package/tracer-viewer-bundle/assets/ini-BEwlwnbL.js +13 -0
  351. package/tracer-viewer-bundle/assets/ini-BEwlwnbL.js.map +1 -0
  352. package/tracer-viewer-bundle/assets/java-CylS5w8V.js +13 -0
  353. package/tracer-viewer-bundle/assets/java-CylS5w8V.js.map +1 -0
  354. package/tracer-viewer-bundle/assets/javascript-wDzz0qaB.js +13 -0
  355. package/tracer-viewer-bundle/assets/javascript-wDzz0qaB.js.map +1 -0
  356. package/tracer-viewer-bundle/assets/jinja-f2NsQr07.js +22 -0
  357. package/tracer-viewer-bundle/assets/jinja-f2NsQr07.js.map +1 -0
  358. package/tracer-viewer-bundle/assets/jison-wvAkD_A8.js +14 -0
  359. package/tracer-viewer-bundle/assets/jison-wvAkD_A8.js.map +1 -0
  360. package/tracer-viewer-bundle/assets/json-Cp-IABpG.js +13 -0
  361. package/tracer-viewer-bundle/assets/json-Cp-IABpG.js.map +1 -0
  362. package/tracer-viewer-bundle/assets/json5-C9tS-k6U.js +13 -0
  363. package/tracer-viewer-bundle/assets/json5-C9tS-k6U.js.map +1 -0
  364. package/tracer-viewer-bundle/assets/jsonc-Des-eS-w.js +13 -0
  365. package/tracer-viewer-bundle/assets/jsonc-Des-eS-w.js.map +1 -0
  366. package/tracer-viewer-bundle/assets/jsonl-DcaNXYhu.js +13 -0
  367. package/tracer-viewer-bundle/assets/jsonl-DcaNXYhu.js.map +1 -0
  368. package/tracer-viewer-bundle/assets/jsonnet-DFQXde-d.js +13 -0
  369. package/tracer-viewer-bundle/assets/jsonnet-DFQXde-d.js.map +1 -0
  370. package/tracer-viewer-bundle/assets/jssm-C2t-YnRu.js +13 -0
  371. package/tracer-viewer-bundle/assets/jssm-C2t-YnRu.js.map +1 -0
  372. package/tracer-viewer-bundle/assets/jsx-g9-lgVsj.js +13 -0
  373. package/tracer-viewer-bundle/assets/jsx-g9-lgVsj.js.map +1 -0
  374. package/tracer-viewer-bundle/assets/julia-CxzCAyBv.js +21 -0
  375. package/tracer-viewer-bundle/assets/julia-CxzCAyBv.js.map +1 -0
  376. package/tracer-viewer-bundle/assets/just-VxiPbLrw.js +34 -0
  377. package/tracer-viewer-bundle/assets/just-VxiPbLrw.js.map +1 -0
  378. package/tracer-viewer-bundle/assets/kanagawa-dragon-CkXjmgJE.js +12 -0
  379. package/tracer-viewer-bundle/assets/kanagawa-dragon-CkXjmgJE.js.map +1 -0
  380. package/tracer-viewer-bundle/assets/kanagawa-lotus-CfQXZHmo.js +12 -0
  381. package/tracer-viewer-bundle/assets/kanagawa-lotus-CfQXZHmo.js.map +1 -0
  382. package/tracer-viewer-bundle/assets/kanagawa-wave-DWedfzmr.js +12 -0
  383. package/tracer-viewer-bundle/assets/kanagawa-wave-DWedfzmr.js.map +1 -0
  384. package/tracer-viewer-bundle/assets/kdl-DV7GczEv.js +13 -0
  385. package/tracer-viewer-bundle/assets/kdl-DV7GczEv.js.map +1 -0
  386. package/tracer-viewer-bundle/assets/kotlin-BdnUsdx6.js +13 -0
  387. package/tracer-viewer-bundle/assets/kotlin-BdnUsdx6.js.map +1 -0
  388. package/tracer-viewer-bundle/assets/kusto-wEQ09or8.js +13 -0
  389. package/tracer-viewer-bundle/assets/kusto-wEQ09or8.js.map +1 -0
  390. package/tracer-viewer-bundle/assets/laserwave-DUszq2jm.js +12 -0
  391. package/tracer-viewer-bundle/assets/laserwave-DUszq2jm.js.map +1 -0
  392. package/tracer-viewer-bundle/assets/latex-CWtU0Tv5.js +15 -0
  393. package/tracer-viewer-bundle/assets/latex-CWtU0Tv5.js.map +1 -0
  394. package/tracer-viewer-bundle/assets/lean-BZvkOJ9d.js +13 -0
  395. package/tracer-viewer-bundle/assets/lean-BZvkOJ9d.js.map +1 -0
  396. package/tracer-viewer-bundle/assets/less-B1dDrJ26.js +13 -0
  397. package/tracer-viewer-bundle/assets/less-B1dDrJ26.js.map +1 -0
  398. package/tracer-viewer-bundle/assets/light-plus-B7mTdjB0.js +12 -0
  399. package/tracer-viewer-bundle/assets/light-plus-B7mTdjB0.js.map +1 -0
  400. package/tracer-viewer-bundle/assets/liquid-C0sCDyMI.js +17 -0
  401. package/tracer-viewer-bundle/assets/liquid-C0sCDyMI.js.map +1 -0
  402. package/tracer-viewer-bundle/assets/llvm-DjAJT7YJ.js +13 -0
  403. package/tracer-viewer-bundle/assets/llvm-DjAJT7YJ.js.map +1 -0
  404. package/tracer-viewer-bundle/assets/log-2UxHyX5q.js +13 -0
  405. package/tracer-viewer-bundle/assets/log-2UxHyX5q.js.map +1 -0
  406. package/tracer-viewer-bundle/assets/logo-BtOb2qkB.js +13 -0
  407. package/tracer-viewer-bundle/assets/logo-BtOb2qkB.js.map +1 -0
  408. package/tracer-viewer-bundle/assets/lua-BaeVxFsk.js +14 -0
  409. package/tracer-viewer-bundle/assets/lua-BaeVxFsk.js.map +1 -0
  410. package/tracer-viewer-bundle/assets/luau-C-HG3fhB.js +13 -0
  411. package/tracer-viewer-bundle/assets/luau-C-HG3fhB.js.map +1 -0
  412. package/tracer-viewer-bundle/assets/make-CHLpvVh8.js +13 -0
  413. package/tracer-viewer-bundle/assets/make-CHLpvVh8.js.map +1 -0
  414. package/tracer-viewer-bundle/assets/markdown-Cvjx9yec.js +13 -0
  415. package/tracer-viewer-bundle/assets/markdown-Cvjx9yec.js.map +1 -0
  416. package/tracer-viewer-bundle/assets/marko-DjSrsDqO.js +17 -0
  417. package/tracer-viewer-bundle/assets/marko-DjSrsDqO.js.map +1 -0
  418. package/tracer-viewer-bundle/assets/material-theme-D5KoaKCx.js +12 -0
  419. package/tracer-viewer-bundle/assets/material-theme-D5KoaKCx.js.map +1 -0
  420. package/tracer-viewer-bundle/assets/material-theme-darker-BfHTSMKl.js +12 -0
  421. package/tracer-viewer-bundle/assets/material-theme-darker-BfHTSMKl.js.map +1 -0
  422. package/tracer-viewer-bundle/assets/material-theme-lighter-B0m2ddpp.js +12 -0
  423. package/tracer-viewer-bundle/assets/material-theme-lighter-B0m2ddpp.js.map +1 -0
  424. package/tracer-viewer-bundle/assets/material-theme-ocean-CyktbL80.js +12 -0
  425. package/tracer-viewer-bundle/assets/material-theme-ocean-CyktbL80.js.map +1 -0
  426. package/tracer-viewer-bundle/assets/material-theme-palenight-Csfq5Kiy.js +12 -0
  427. package/tracer-viewer-bundle/assets/material-theme-palenight-Csfq5Kiy.js.map +1 -0
  428. package/tracer-viewer-bundle/assets/matlab-D7o27uSR.js +13 -0
  429. package/tracer-viewer-bundle/assets/matlab-D7o27uSR.js.map +1 -0
  430. package/tracer-viewer-bundle/assets/mdc-DTYItulj.js +19 -0
  431. package/tracer-viewer-bundle/assets/mdc-DTYItulj.js.map +1 -0
  432. package/tracer-viewer-bundle/assets/mdx-Cmh6b_Ma.js +13 -0
  433. package/tracer-viewer-bundle/assets/mdx-Cmh6b_Ma.js.map +1 -0
  434. package/tracer-viewer-bundle/assets/mermaid-mWjccvbQ.js +13 -0
  435. package/tracer-viewer-bundle/assets/mermaid-mWjccvbQ.js.map +1 -0
  436. package/tracer-viewer-bundle/assets/min-dark-CafNBF8u.js +12 -0
  437. package/tracer-viewer-bundle/assets/min-dark-CafNBF8u.js.map +1 -0
  438. package/tracer-viewer-bundle/assets/min-light-CTRr51gU.js +12 -0
  439. package/tracer-viewer-bundle/assets/min-light-CTRr51gU.js.map +1 -0
  440. package/tracer-viewer-bundle/assets/mipsasm-CKIfxQSi.js +13 -0
  441. package/tracer-viewer-bundle/assets/mipsasm-CKIfxQSi.js.map +1 -0
  442. package/tracer-viewer-bundle/assets/mojo-rZm6bMo-.js +13 -0
  443. package/tracer-viewer-bundle/assets/mojo-rZm6bMo-.js.map +1 -0
  444. package/tracer-viewer-bundle/assets/monokai-D4h5O-jR.js +12 -0
  445. package/tracer-viewer-bundle/assets/monokai-D4h5O-jR.js.map +1 -0
  446. package/tracer-viewer-bundle/assets/moonbit-_H4v1dQx.js +13 -0
  447. package/tracer-viewer-bundle/assets/moonbit-_H4v1dQx.js.map +1 -0
  448. package/tracer-viewer-bundle/assets/move-IF9eRakj.js +13 -0
  449. package/tracer-viewer-bundle/assets/move-IF9eRakj.js.map +1 -0
  450. package/tracer-viewer-bundle/assets/narrat-DRg8JJMk.js +13 -0
  451. package/tracer-viewer-bundle/assets/narrat-DRg8JJMk.js.map +1 -0
  452. package/tracer-viewer-bundle/assets/nextflow-C-mBbutL.js +14 -0
  453. package/tracer-viewer-bundle/assets/nextflow-C-mBbutL.js.map +1 -0
  454. package/tracer-viewer-bundle/assets/nextflow-groovy-vE_lwT2v.js +13 -0
  455. package/tracer-viewer-bundle/assets/nextflow-groovy-vE_lwT2v.js.map +1 -0
  456. package/tracer-viewer-bundle/assets/nginx-BpAMiNFr.js +15 -0
  457. package/tracer-viewer-bundle/assets/nginx-BpAMiNFr.js.map +1 -0
  458. package/tracer-viewer-bundle/assets/night-owl-C39BiMTA.js +12 -0
  459. package/tracer-viewer-bundle/assets/night-owl-C39BiMTA.js.map +1 -0
  460. package/tracer-viewer-bundle/assets/night-owl-light-CMTm3GFP.js +12 -0
  461. package/tracer-viewer-bundle/assets/night-owl-light-CMTm3GFP.js.map +1 -0
  462. package/tracer-viewer-bundle/assets/nim-BIad80T-.js +21 -0
  463. package/tracer-viewer-bundle/assets/nim-BIad80T-.js.map +1 -0
  464. package/tracer-viewer-bundle/assets/nix-CwoSXNpI.js +19 -0
  465. package/tracer-viewer-bundle/assets/nix-CwoSXNpI.js.map +1 -0
  466. package/tracer-viewer-bundle/assets/nord-Ddv68eIx.js +12 -0
  467. package/tracer-viewer-bundle/assets/nord-Ddv68eIx.js.map +1 -0
  468. package/tracer-viewer-bundle/assets/nushell-Cz2AlsmD.js +13 -0
  469. package/tracer-viewer-bundle/assets/nushell-Cz2AlsmD.js.map +1 -0
  470. package/tracer-viewer-bundle/assets/objective-c-DXmwc3jG.js +13 -0
  471. package/tracer-viewer-bundle/assets/objective-c-DXmwc3jG.js.map +1 -0
  472. package/tracer-viewer-bundle/assets/objective-cpp-CLxacb5B.js +13 -0
  473. package/tracer-viewer-bundle/assets/objective-cpp-CLxacb5B.js.map +1 -0
  474. package/tracer-viewer-bundle/assets/ocaml-C0hk2d4L.js +13 -0
  475. package/tracer-viewer-bundle/assets/ocaml-C0hk2d4L.js.map +1 -0
  476. package/tracer-viewer-bundle/assets/odin-BBf5iR-q.js +13 -0
  477. package/tracer-viewer-bundle/assets/odin-BBf5iR-q.js.map +1 -0
  478. package/tracer-viewer-bundle/assets/one-dark-pro-DVMEJ2y_.js +12 -0
  479. package/tracer-viewer-bundle/assets/one-dark-pro-DVMEJ2y_.js.map +1 -0
  480. package/tracer-viewer-bundle/assets/one-light-C3Wv6jpd.js +12 -0
  481. package/tracer-viewer-bundle/assets/one-light-C3Wv6jpd.js.map +1 -0
  482. package/tracer-viewer-bundle/assets/openscad-C4EeE6gA.js +13 -0
  483. package/tracer-viewer-bundle/assets/openscad-C4EeE6gA.js.map +1 -0
  484. package/tracer-viewer-bundle/assets/pascal-D93ZcfNL.js +13 -0
  485. package/tracer-viewer-bundle/assets/pascal-D93ZcfNL.js.map +1 -0
  486. package/tracer-viewer-bundle/assets/perl-NvoQZIq0.js +19 -0
  487. package/tracer-viewer-bundle/assets/perl-NvoQZIq0.js.map +1 -0
  488. package/tracer-viewer-bundle/assets/php-R6g_5hLQ.js +20 -0
  489. package/tracer-viewer-bundle/assets/php-R6g_5hLQ.js.map +1 -0
  490. package/tracer-viewer-bundle/assets/pkl-u5AG7uiY.js +13 -0
  491. package/tracer-viewer-bundle/assets/pkl-u5AG7uiY.js.map +1 -0
  492. package/tracer-viewer-bundle/assets/plastic-3e1v2bzS.js +12 -0
  493. package/tracer-viewer-bundle/assets/plastic-3e1v2bzS.js.map +1 -0
  494. package/tracer-viewer-bundle/assets/plsql-ChMvpjG-.js +13 -0
  495. package/tracer-viewer-bundle/assets/plsql-ChMvpjG-.js.map +1 -0
  496. package/tracer-viewer-bundle/assets/po-BTJTHyun.js +13 -0
  497. package/tracer-viewer-bundle/assets/po-BTJTHyun.js.map +1 -0
  498. package/tracer-viewer-bundle/assets/poimandres-CS3Unz2-.js +12 -0
  499. package/tracer-viewer-bundle/assets/poimandres-CS3Unz2-.js.map +1 -0
  500. package/tracer-viewer-bundle/assets/polar-C0HS_06l.js +13 -0
  501. package/tracer-viewer-bundle/assets/polar-C0HS_06l.js.map +1 -0
  502. package/tracer-viewer-bundle/assets/postcss-CXtECtnM.js +13 -0
  503. package/tracer-viewer-bundle/assets/postcss-CXtECtnM.js.map +1 -0
  504. package/tracer-viewer-bundle/assets/powerquery-CEu0bR-o.js +13 -0
  505. package/tracer-viewer-bundle/assets/powerquery-CEu0bR-o.js.map +1 -0
  506. package/tracer-viewer-bundle/assets/powershell-Dpen1YoG.js +13 -0
  507. package/tracer-viewer-bundle/assets/powershell-Dpen1YoG.js.map +1 -0
  508. package/tracer-viewer-bundle/assets/prisma-Dd19v3D-.js +13 -0
  509. package/tracer-viewer-bundle/assets/prisma-Dd19v3D-.js.map +1 -0
  510. package/tracer-viewer-bundle/assets/prolog-CbFg5uaA.js +13 -0
  511. package/tracer-viewer-bundle/assets/prolog-CbFg5uaA.js.map +1 -0
  512. package/tracer-viewer-bundle/assets/proto-C7zT0LnQ.js +13 -0
  513. package/tracer-viewer-bundle/assets/proto-C7zT0LnQ.js.map +1 -0
  514. package/tracer-viewer-bundle/assets/pug-DKIMFp6K.js +16 -0
  515. package/tracer-viewer-bundle/assets/pug-DKIMFp6K.js.map +1 -0
  516. package/tracer-viewer-bundle/assets/puppet-BMWR74SV.js +13 -0
  517. package/tracer-viewer-bundle/assets/puppet-BMWR74SV.js.map +1 -0
  518. package/tracer-viewer-bundle/assets/purescript-CklMAg4u.js +13 -0
  519. package/tracer-viewer-bundle/assets/purescript-CklMAg4u.js.map +1 -0
  520. package/tracer-viewer-bundle/assets/python-B6aJPvgy.js +13 -0
  521. package/tracer-viewer-bundle/assets/python-B6aJPvgy.js.map +1 -0
  522. package/tracer-viewer-bundle/assets/qml-3beO22l8.js +14 -0
  523. package/tracer-viewer-bundle/assets/qml-3beO22l8.js.map +1 -0
  524. package/tracer-viewer-bundle/assets/qmldir-C8lEn-DE.js +13 -0
  525. package/tracer-viewer-bundle/assets/qmldir-C8lEn-DE.js.map +1 -0
  526. package/tracer-viewer-bundle/assets/qss-IeuSbFQv.js +13 -0
  527. package/tracer-viewer-bundle/assets/qss-IeuSbFQv.js.map +1 -0
  528. package/tracer-viewer-bundle/assets/r-Dspwwk_N.js +13 -0
  529. package/tracer-viewer-bundle/assets/r-Dspwwk_N.js.map +1 -0
  530. package/tracer-viewer-bundle/assets/racket-BqYA7rlc.js +13 -0
  531. package/tracer-viewer-bundle/assets/racket-BqYA7rlc.js.map +1 -0
  532. package/tracer-viewer-bundle/assets/raku-DXvB9xmW.js +13 -0
  533. package/tracer-viewer-bundle/assets/raku-DXvB9xmW.js.map +1 -0
  534. package/tracer-viewer-bundle/assets/razor-BDqjjVU7.js +17 -0
  535. package/tracer-viewer-bundle/assets/razor-BDqjjVU7.js.map +1 -0
  536. package/tracer-viewer-bundle/assets/red-bN70gL4F.js +12 -0
  537. package/tracer-viewer-bundle/assets/red-bN70gL4F.js.map +1 -0
  538. package/tracer-viewer-bundle/assets/reg-C-SQnVFl.js +13 -0
  539. package/tracer-viewer-bundle/assets/reg-C-SQnVFl.js.map +1 -0
  540. package/tracer-viewer-bundle/assets/regexp-CDVJQ6XC.js +13 -0
  541. package/tracer-viewer-bundle/assets/regexp-CDVJQ6XC.js.map +1 -0
  542. package/tracer-viewer-bundle/assets/rel-C3B-1QV4.js +13 -0
  543. package/tracer-viewer-bundle/assets/rel-C3B-1QV4.js.map +1 -0
  544. package/tracer-viewer-bundle/assets/riscv-BM1_JUlF.js +13 -0
  545. package/tracer-viewer-bundle/assets/riscv-BM1_JUlF.js.map +1 -0
  546. package/tracer-viewer-bundle/assets/ron-D8l8udqQ.js +13 -0
  547. package/tracer-viewer-bundle/assets/ron-D8l8udqQ.js.map +1 -0
  548. package/tracer-viewer-bundle/assets/rose-pine-dawn-DHQR4-dF.js +12 -0
  549. package/tracer-viewer-bundle/assets/rose-pine-dawn-DHQR4-dF.js.map +1 -0
  550. package/tracer-viewer-bundle/assets/rose-pine-moon-D4_iv3hh.js +12 -0
  551. package/tracer-viewer-bundle/assets/rose-pine-moon-D4_iv3hh.js.map +1 -0
  552. package/tracer-viewer-bundle/assets/rose-pine-qdsjHGoJ.js +12 -0
  553. package/tracer-viewer-bundle/assets/rose-pine-qdsjHGoJ.js.map +1 -0
  554. package/tracer-viewer-bundle/assets/rosmsg-BJDFO7_C.js +13 -0
  555. package/tracer-viewer-bundle/assets/rosmsg-BJDFO7_C.js.map +1 -0
  556. package/tracer-viewer-bundle/assets/rst-CRjBmOyv.js +35 -0
  557. package/tracer-viewer-bundle/assets/rst-CRjBmOyv.js.map +1 -0
  558. package/tracer-viewer-bundle/assets/ruby-Wjq7vjNf.js +31 -0
  559. package/tracer-viewer-bundle/assets/ruby-Wjq7vjNf.js.map +1 -0
  560. package/tracer-viewer-bundle/assets/rust-B1yitclQ.js +13 -0
  561. package/tracer-viewer-bundle/assets/rust-B1yitclQ.js.map +1 -0
  562. package/tracer-viewer-bundle/assets/sas-cz2c8ADy.js +14 -0
  563. package/tracer-viewer-bundle/assets/sas-cz2c8ADy.js.map +1 -0
  564. package/tracer-viewer-bundle/assets/sass-Cj5Yp3dK.js +13 -0
  565. package/tracer-viewer-bundle/assets/sass-Cj5Yp3dK.js.map +1 -0
  566. package/tracer-viewer-bundle/assets/scala-C151Ov-r.js +13 -0
  567. package/tracer-viewer-bundle/assets/scala-C151Ov-r.js.map +1 -0
  568. package/tracer-viewer-bundle/assets/scheme-C98Dy4si.js +13 -0
  569. package/tracer-viewer-bundle/assets/scheme-C98Dy4si.js.map +1 -0
  570. package/tracer-viewer-bundle/assets/scss-D5BDwBP9.js +14 -0
  571. package/tracer-viewer-bundle/assets/scss-D5BDwBP9.js.map +1 -0
  572. package/tracer-viewer-bundle/assets/sdbl-DVxCFoDh.js +13 -0
  573. package/tracer-viewer-bundle/assets/sdbl-DVxCFoDh.js.map +1 -0
  574. package/tracer-viewer-bundle/assets/shaderlab-Dg9Lc6iA.js +14 -0
  575. package/tracer-viewer-bundle/assets/shaderlab-Dg9Lc6iA.js.map +1 -0
  576. package/tracer-viewer-bundle/assets/shellscript-Yzrsuije.js +13 -0
  577. package/tracer-viewer-bundle/assets/shellscript-Yzrsuije.js.map +1 -0
  578. package/tracer-viewer-bundle/assets/shellsession-BADoaaVG.js +14 -0
  579. package/tracer-viewer-bundle/assets/shellsession-BADoaaVG.js.map +1 -0
  580. package/tracer-viewer-bundle/assets/slack-dark-BthQWCQV.js +12 -0
  581. package/tracer-viewer-bundle/assets/slack-dark-BthQWCQV.js.map +1 -0
  582. package/tracer-viewer-bundle/assets/slack-ochin-DqwNpetd.js +12 -0
  583. package/tracer-viewer-bundle/assets/slack-ochin-DqwNpetd.js.map +1 -0
  584. package/tracer-viewer-bundle/assets/smalltalk-BERRCDM3.js +13 -0
  585. package/tracer-viewer-bundle/assets/smalltalk-BERRCDM3.js.map +1 -0
  586. package/tracer-viewer-bundle/assets/snazzy-light-Bw305WKR.js +12 -0
  587. package/tracer-viewer-bundle/assets/snazzy-light-Bw305WKR.js.map +1 -0
  588. package/tracer-viewer-bundle/assets/solarized-dark-DXbdFlpD.js +12 -0
  589. package/tracer-viewer-bundle/assets/solarized-dark-DXbdFlpD.js.map +1 -0
  590. package/tracer-viewer-bundle/assets/solarized-light-L9t79GZl.js +12 -0
  591. package/tracer-viewer-bundle/assets/solarized-light-L9t79GZl.js.map +1 -0
  592. package/tracer-viewer-bundle/assets/solidity-rGO070M0.js +13 -0
  593. package/tracer-viewer-bundle/assets/solidity-rGO070M0.js.map +1 -0
  594. package/tracer-viewer-bundle/assets/soy-8wufbnw4.js +16 -0
  595. package/tracer-viewer-bundle/assets/soy-8wufbnw4.js.map +1 -0
  596. package/tracer-viewer-bundle/assets/sparql-rVzFXLq3.js +14 -0
  597. package/tracer-viewer-bundle/assets/sparql-rVzFXLq3.js.map +1 -0
  598. package/tracer-viewer-bundle/assets/splunk-BtCnVYZw.js +13 -0
  599. package/tracer-viewer-bundle/assets/splunk-BtCnVYZw.js.map +1 -0
  600. package/tracer-viewer-bundle/assets/sql-BLtJtn59.js +13 -0
  601. package/tracer-viewer-bundle/assets/sql-BLtJtn59.js.map +1 -0
  602. package/tracer-viewer-bundle/assets/ssh-config-_ykCGR6B.js +13 -0
  603. package/tracer-viewer-bundle/assets/ssh-config-_ykCGR6B.js.map +1 -0
  604. package/tracer-viewer-bundle/assets/stata-BH5u7GGu.js +14 -0
  605. package/tracer-viewer-bundle/assets/stata-BH5u7GGu.js.map +1 -0
  606. package/tracer-viewer-bundle/assets/stylus-BEDo0Tqx.js +13 -0
  607. package/tracer-viewer-bundle/assets/stylus-BEDo0Tqx.js.map +1 -0
  608. package/tracer-viewer-bundle/assets/surrealql-Bq5Q-fJD.js +14 -0
  609. package/tracer-viewer-bundle/assets/surrealql-Bq5Q-fJD.js.map +1 -0
  610. package/tracer-viewer-bundle/assets/svelte-Cy7k_4gC.js +17 -0
  611. package/tracer-viewer-bundle/assets/svelte-Cy7k_4gC.js.map +1 -0
  612. package/tracer-viewer-bundle/assets/swift-D82vCrfD.js +13 -0
  613. package/tracer-viewer-bundle/assets/swift-D82vCrfD.js.map +1 -0
  614. package/tracer-viewer-bundle/assets/synthwave-84-CbfX1IO0.js +12 -0
  615. package/tracer-viewer-bundle/assets/synthwave-84-CbfX1IO0.js.map +1 -0
  616. package/tracer-viewer-bundle/assets/system-verilog-CnnmHF94.js +13 -0
  617. package/tracer-viewer-bundle/assets/system-verilog-CnnmHF94.js.map +1 -0
  618. package/tracer-viewer-bundle/assets/systemd-4A_iFExJ.js +13 -0
  619. package/tracer-viewer-bundle/assets/systemd-4A_iFExJ.js.map +1 -0
  620. package/tracer-viewer-bundle/assets/talonscript-CkByrt1z.js +13 -0
  621. package/tracer-viewer-bundle/assets/talonscript-CkByrt1z.js.map +1 -0
  622. package/tracer-viewer-bundle/assets/tasl-QIJgUcNo.js +13 -0
  623. package/tracer-viewer-bundle/assets/tasl-QIJgUcNo.js.map +1 -0
  624. package/tracer-viewer-bundle/assets/tcl-dwOrl1Do.js +13 -0
  625. package/tracer-viewer-bundle/assets/tcl-dwOrl1Do.js.map +1 -0
  626. package/tracer-viewer-bundle/assets/templ-DhtptRzy.js +16 -0
  627. package/tracer-viewer-bundle/assets/templ-DhtptRzy.js.map +1 -0
  628. package/tracer-viewer-bundle/assets/terraform-BETggiCN.js +13 -0
  629. package/tracer-viewer-bundle/assets/terraform-BETggiCN.js.map +1 -0
  630. package/tracer-viewer-bundle/assets/tex-idrVyKtj.js +14 -0
  631. package/tracer-viewer-bundle/assets/tex-idrVyKtj.js.map +1 -0
  632. package/tracer-viewer-bundle/assets/tokyo-night-hegEt444.js +12 -0
  633. package/tracer-viewer-bundle/assets/tokyo-night-hegEt444.js.map +1 -0
  634. package/tracer-viewer-bundle/assets/toml-vGWfd6FD.js +13 -0
  635. package/tracer-viewer-bundle/assets/toml-vGWfd6FD.js.map +1 -0
  636. package/tracer-viewer-bundle/assets/ts-tags-DQrlYJgV.js +52 -0
  637. package/tracer-viewer-bundle/assets/ts-tags-DQrlYJgV.js.map +1 -0
  638. package/tracer-viewer-bundle/assets/tsv-B_m7g4N7.js +13 -0
  639. package/tracer-viewer-bundle/assets/tsv-B_m7g4N7.js.map +1 -0
  640. package/tracer-viewer-bundle/assets/tsx-COt5Ahok.js +13 -0
  641. package/tracer-viewer-bundle/assets/tsx-COt5Ahok.js.map +1 -0
  642. package/tracer-viewer-bundle/assets/turtle-BsS91CYL.js +13 -0
  643. package/tracer-viewer-bundle/assets/turtle-BsS91CYL.js.map +1 -0
  644. package/tracer-viewer-bundle/assets/twig-xg9kU7Mw.js +36 -0
  645. package/tracer-viewer-bundle/assets/twig-xg9kU7Mw.js.map +1 -0
  646. package/tracer-viewer-bundle/assets/typescript-BPQ3VLAy.js +13 -0
  647. package/tracer-viewer-bundle/assets/typescript-BPQ3VLAy.js.map +1 -0
  648. package/tracer-viewer-bundle/assets/typespec-CAFt9gP4.js +13 -0
  649. package/tracer-viewer-bundle/assets/typespec-CAFt9gP4.js.map +1 -0
  650. package/tracer-viewer-bundle/assets/typst-DHCkPAjA.js +13 -0
  651. package/tracer-viewer-bundle/assets/typst-DHCkPAjA.js.map +1 -0
  652. package/tracer-viewer-bundle/assets/v-BcVCzyr7.js +13 -0
  653. package/tracer-viewer-bundle/assets/v-BcVCzyr7.js.map +1 -0
  654. package/tracer-viewer-bundle/assets/vala-CsfeWuGM.js +13 -0
  655. package/tracer-viewer-bundle/assets/vala-CsfeWuGM.js.map +1 -0
  656. package/tracer-viewer-bundle/assets/vb-D17OF-Vu.js +13 -0
  657. package/tracer-viewer-bundle/assets/vb-D17OF-Vu.js.map +1 -0
  658. package/tracer-viewer-bundle/assets/verilog-BQ8w6xss.js +13 -0
  659. package/tracer-viewer-bundle/assets/verilog-BQ8w6xss.js.map +1 -0
  660. package/tracer-viewer-bundle/assets/vesper-DU1UobuO.js +12 -0
  661. package/tracer-viewer-bundle/assets/vesper-DU1UobuO.js.map +1 -0
  662. package/tracer-viewer-bundle/assets/vhdl-CeAyd5Ju.js +13 -0
  663. package/tracer-viewer-bundle/assets/vhdl-CeAyd5Ju.js.map +1 -0
  664. package/tracer-viewer-bundle/assets/viml-CJc9bBzg.js +13 -0
  665. package/tracer-viewer-bundle/assets/viml-CJc9bBzg.js.map +1 -0
  666. package/tracer-viewer-bundle/assets/vitesse-black-Bkuqu6BP.js +12 -0
  667. package/tracer-viewer-bundle/assets/vitesse-black-Bkuqu6BP.js.map +1 -0
  668. package/tracer-viewer-bundle/assets/vitesse-dark-D0r3Knsf.js +12 -0
  669. package/tracer-viewer-bundle/assets/vitesse-dark-D0r3Knsf.js.map +1 -0
  670. package/tracer-viewer-bundle/assets/vitesse-light-CVO1_9PV.js +12 -0
  671. package/tracer-viewer-bundle/assets/vitesse-light-CVO1_9PV.js.map +1 -0
  672. package/tracer-viewer-bundle/assets/vue-D2xRrEX4.js +43 -0
  673. package/tracer-viewer-bundle/assets/vue-D2xRrEX4.js.map +1 -0
  674. package/tracer-viewer-bundle/assets/vue-html-AaS7Mt5G.js +14 -0
  675. package/tracer-viewer-bundle/assets/vue-html-AaS7Mt5G.js.map +1 -0
  676. package/tracer-viewer-bundle/assets/vue-vine-BoDAl6tE.js +19 -0
  677. package/tracer-viewer-bundle/assets/vue-vine-BoDAl6tE.js.map +1 -0
  678. package/tracer-viewer-bundle/assets/vyper-CDx5xZoG.js +13 -0
  679. package/tracer-viewer-bundle/assets/vyper-CDx5xZoG.js.map +1 -0
  680. package/tracer-viewer-bundle/assets/wasm-CG6Dc4jp.js +15 -0
  681. package/tracer-viewer-bundle/assets/wasm-CG6Dc4jp.js.map +1 -0
  682. package/tracer-viewer-bundle/assets/wasm-MzD3tlZU.js +13 -0
  683. package/tracer-viewer-bundle/assets/wasm-MzD3tlZU.js.map +1 -0
  684. package/tracer-viewer-bundle/assets/wenyan-BV7otONQ.js +13 -0
  685. package/tracer-viewer-bundle/assets/wenyan-BV7otONQ.js.map +1 -0
  686. package/tracer-viewer-bundle/assets/wgsl-Dx-B1_4e.js +13 -0
  687. package/tracer-viewer-bundle/assets/wgsl-Dx-B1_4e.js.map +1 -0
  688. package/tracer-viewer-bundle/assets/wikitext-BhOHFoWU.js +13 -0
  689. package/tracer-viewer-bundle/assets/wikitext-BhOHFoWU.js.map +1 -0
  690. package/tracer-viewer-bundle/assets/wit-5i3qLPDT.js +13 -0
  691. package/tracer-viewer-bundle/assets/wit-5i3qLPDT.js.map +1 -0
  692. package/tracer-viewer-bundle/assets/wolfram-lXgVvXCa.js +13 -0
  693. package/tracer-viewer-bundle/assets/wolfram-lXgVvXCa.js.map +1 -0
  694. package/tracer-viewer-bundle/assets/xml-sdJ4AIDG.js +14 -0
  695. package/tracer-viewer-bundle/assets/xml-sdJ4AIDG.js.map +1 -0
  696. package/tracer-viewer-bundle/assets/xsl-CtQFsRM5.js +15 -0
  697. package/tracer-viewer-bundle/assets/xsl-CtQFsRM5.js.map +1 -0
  698. package/tracer-viewer-bundle/assets/yaml-Buea-lGh.js +13 -0
  699. package/tracer-viewer-bundle/assets/yaml-Buea-lGh.js.map +1 -0
  700. package/tracer-viewer-bundle/assets/zenscript-DVFEvuxE.js +13 -0
  701. package/tracer-viewer-bundle/assets/zenscript-DVFEvuxE.js.map +1 -0
  702. package/tracer-viewer-bundle/assets/zig-VOosw3JB.js +13 -0
  703. package/tracer-viewer-bundle/assets/zig-VOosw3JB.js.map +1 -0
  704. package/tracer-viewer-bundle/index.html +25 -0
@@ -3,8 +3,10 @@
3
3
  * This file and its contents are licensed under the AGPLv3 License.
4
4
  * Please see the LICENSE file at the root of this repository
5
5
  */
6
- import type { TestInfo } from '@playwright/test';
6
+ import type { BrowserContext, Request as PwRequest, TestInfo } from '@playwright/test';
7
7
  import type { HealTraceExporter } from '../../domain/trace-event-recorder/port/heal-trace-exporter';
8
+ import type { ConsoleLevel } from '../../domain/trace-event-recorder/model/console-trace-schema';
9
+ import type { EnterMeta } from '../../domain/trace-event-recorder/model/enter-meta';
8
10
  /**
9
11
  * Everything the fixture hands to a exporter or lifecycle factory
10
12
  * when a test starts. The `transport` subobject carries the per-test
@@ -13,8 +15,12 @@ import type { HealTraceExporter } from '../../domain/trace-event-recorder/port/h
13
15
  export interface HealTracerTestContext {
14
16
  testInfo: TestInfo;
15
17
  /**
16
- * Absolute path to the per-test `heal-data` directory. Created by
17
- * the fixture before any factory runs.
18
+ * Absolute path to the per-(test, attempt) directory under the
19
+ * persistent history root `<cwd>/heal-traces/<executionId>/<testId>/<attempt>/`.
20
+ * Created by the fixture before any factory runs. The ndjson, the
21
+ * per-statement screenshots, and any reporter-copied Playwright
22
+ * artefacts (trace.zip, video, failure screenshots) all land
23
+ * inside this directory.
18
24
  */
19
25
  healDataDir: string;
20
26
  transport: {
@@ -26,8 +32,26 @@ export interface HealTracerTestContext {
26
32
  */
27
33
  testId: string;
28
34
  attempt: number;
29
- /** Absolute `testInfo.outputDir`. */
35
+ /**
36
+ * Per-process executionId resolved at fixture time
37
+ * (HEAL_EXECUTION_ID, else uuidv4).
38
+ */
39
+ executionId: string;
40
+ /**
41
+ * Absolute path to the per-(test, attempt) directory under the
42
+ * persistent heal-traces tree — same as `healDataDir`. Kept on
43
+ * `transport` so exporters that ship artefacts out-of-band have
44
+ * a stable name for the directory they should consult.
45
+ */
30
46
  rootDir: string;
47
+ /**
48
+ * Absolute path to the per-test `heal-traces.ndjson` file the
49
+ * default NDJSON exporter writes to. Sourced from
50
+ * `HealTracesLayout` so it reflects the real on-disk location.
51
+ * Exporters that ship artifacts out-of-band can use this as the
52
+ * authoritative location of the per-test trace file.
53
+ */
54
+ healTracesFilePath: string;
31
55
  };
32
56
  }
33
57
  /**
@@ -63,11 +87,168 @@ export interface HealTestLifecycle {
63
87
  */
64
88
  export type HealTestLifecycleFactory = () => HealTestLifecycle;
65
89
  /**
66
- * Shape of the object passed to `configureTracer(...)`. Both fields
90
+ * Context passed to a `StatementPreProcessor` on every call. Extends
91
+ * `HealTracerTestContext` with the live `browserContext` for the
92
+ * current test so a pre-processor can read pages, evaluate scripts,
93
+ * stamp DOM, etc. before the user's statement runs.
94
+ *
95
+ * `browserContext` is the same object Playwright passes to the test —
96
+ * pre-processors share it with the test body, so any mutation the
97
+ * pre-processor makes is visible to the statement that follows.
98
+ */
99
+ export interface StatementPreProcessorContext extends HealTracerTestContext {
100
+ browserContext: BrowserContext;
101
+ }
102
+ /**
103
+ * Async function called once per traced leaf statement, before the
104
+ * statement body runs. The Babel plugin emits
105
+ * `await globalThis.__heal_preprocess?.(meta)` inside the try block;
106
+ * the fixture installs a single global that loops over every
107
+ * registered pre-processor in declaration order and awaits each.
108
+ *
109
+ * Async-context only: the emit is gated on the enclosing function
110
+ * being `async`. Statements inside synchronous helpers skip the
111
+ * pre-processor chain entirely (we cannot `await` from a sync
112
+ * function).
113
+ *
114
+ * Errors thrown by a pre-processor are caught by the statement's own
115
+ * try/catch — they will be reported as a `__heal_throw` for the
116
+ * statement, NOT swallowed silently. Pre-processors should therefore
117
+ * be defensive about their own internal failures (try/catch, log,
118
+ * return) when a partial side-effect is acceptable.
119
+ *
120
+ * Plain function — no class, no factory, no setup/teardown. Bind a
121
+ * method if you need instance state; or close over module-scoped
122
+ * state in `playwright.config.ts`.
123
+ */
124
+ export type StatementPreProcessor = (input: {
125
+ meta: EnterMeta;
126
+ ctx: StatementPreProcessorContext;
127
+ }) => void | Promise<void>;
128
+ /**
129
+ * Caps applied to async work the tracer wraps around the user's
130
+ * test. Both fields are optional; the fixture falls back to sensible
131
+ * defaults when omitted. The point of these caps is that the tracer
132
+ * must never outlast the work it is decorating — a hung overlay
133
+ * cleanup or a wedged user exporter must surface and unblock the
134
+ * test rather than hang it.
135
+ */
136
+ export interface HealTracerTimeouts {
137
+ /**
138
+ * Cap on every async the screenshot pipeline awaits — locator
139
+ * resolution (`boundingBox`, `locator.evaluate`), overlay draw /
140
+ * remove (`page.evaluate`), every CDP send (`Overlay.*`,
141
+ * `Page.captureScreenshot`, `Runtime.*`), `newCDPSession`, and
142
+ * the `page.screenshot` fallback. Capture is best-effort: on
143
+ * timeout the screenshot is dropped and the action proceeds.
144
+ * Default: 10_000ms.
145
+ */
146
+ screenshotMs?: number;
147
+ /**
148
+ * Cap on user-extensible per-test work — each lifecycle `setup` /
149
+ * `teardown`, the drained `onTestTeardown` hook chain, and the
150
+ * final `projector.finalize` (which closes every registered
151
+ * exporter). On timeout the fixture logs to stderr and continues
152
+ * with the next teardown step. Default: 30_000ms.
153
+ */
154
+ lifecycleMs?: number;
155
+ }
156
+ /**
157
+ * When and how the network adapter inlines request/response bodies.
158
+ * - `'never'` (default): bodies are never read; only `bytes` is
159
+ * populated when known via `Content-Length`. Cheapest option.
160
+ * - `'always'`: textual bodies under `maxBodyBytes` are inlined as
161
+ * `requestBody.preview` / `responseBody.preview` on every record.
162
+ * - `'on-error'`: bodies are buffered in memory while the test
163
+ * runs and flushed as separate `network-body` records ONLY if
164
+ * the test ends in a failing status. Discarded otherwise. Useful
165
+ * for keeping the happy-path light while still getting payloads
166
+ * for failing runs.
167
+ */
168
+ export type HealTracerNetworkBodyMode = 'never' | 'always' | 'on-error';
169
+ /**
170
+ * Tunables for `heal-network.ndjson` capture. Capture is on by
171
+ * default; pass `enabled: false` to suppress the stream. Tests and
172
+ * exceptional setups use this; the public configuration docs treat
173
+ * network capture as always-on.
174
+ */
175
+ export interface HealTracerNetworkConfig {
176
+ /** Pass `false` to suppress the stream. Defaults to `true`. */
177
+ enabled?: boolean;
178
+ /** See `HealTracerNetworkBodyMode`. Defaults to `'never'`. */
179
+ bodyMode?: HealTracerNetworkBodyMode;
180
+ /**
181
+ * Per-body cap in bytes. Bodies larger than this are not buffered;
182
+ * the record records `bytes` and sets `truncated: true`. Default:
183
+ * 8192.
184
+ */
185
+ maxBodyBytes?: number;
186
+ /**
187
+ * Headers (case-insensitive) the adapter MUST strip from both
188
+ * request and response headers before writing. Merged with a
189
+ * baked-in default denylist (`authorization`, `cookie`,
190
+ * `set-cookie`, `proxy-authorization`, `x-api-key`, `x-auth-token`)
191
+ * — provide additional names here to extend, not replace, that
192
+ * list.
193
+ */
194
+ redactHeaders?: string[];
195
+ /**
196
+ * Predicate to drop requests entirely before they reach the
197
+ * coalescer. Return `false` to skip a request (e.g. ignore noisy
198
+ * telemetry endpoints). Errors thrown by this function are
199
+ * swallowed and the request is kept.
200
+ */
201
+ urlFilter?: (url: string, request: PwRequest) => boolean;
202
+ /**
203
+ * Content-type allowlist for body inlining. A response whose
204
+ * `Content-Type` does not match any of these regexes will record
205
+ * `bytes` only, no `preview`. Defaults cover textual payloads
206
+ * (`text/*`, `application/json`, `application/xml`,
207
+ * `application/x-www-form-urlencoded`, `application/javascript`).
208
+ */
209
+ contentTypeAllowlist?: RegExp[];
210
+ }
211
+ /**
212
+ * Tunables for `heal-console.ndjson` capture. On by default; pass
213
+ * `enabled: false` to suppress the stream. Same opt-out story as
214
+ * `HealTracerNetworkConfig`.
215
+ */
216
+ export interface HealTracerConsoleConfig {
217
+ /** Pass `false` to suppress the stream. Defaults to `true`. */
218
+ enabled?: boolean;
219
+ /**
220
+ * Levels to keep. Anything else is dropped before being written.
221
+ * Default keeps everything (`['log','info','warn','error','debug','trace','pageerror']`).
222
+ */
223
+ levels?: ConsoleLevel[];
224
+ /**
225
+ * Per-arg cap in bytes — the JSON-serialized form of any single
226
+ * `console.*` argument is truncated past this. Default: 4096.
227
+ */
228
+ maxArgBytes?: number;
229
+ /**
230
+ * Cap on the number of args kept per console event. Default: 10.
231
+ */
232
+ maxArgsPerEvent?: number;
233
+ }
234
+ /**
235
+ * Shape of the object passed to `configureTracer(...)`. All fields
67
236
  * are optional — an empty config yields the default behaviour
68
- * (NDJSON-only output, no lifecycles).
237
+ * (statement-stream NDJSON + network and console sidecars, no
238
+ * lifecycles, default timeouts).
69
239
  */
70
240
  export interface HealTracerConfig {
71
241
  exporters?: HealTraceExporterFactory[];
72
242
  lifecycles?: HealTestLifecycleFactory[];
243
+ /**
244
+ * Per-statement async hooks. Each function in this array is awaited
245
+ * before the user's statement runs (gated on the enclosing function
246
+ * being `async`). Useful for pre-execution side-effects that must
247
+ * complete before Playwright resolves a locator — e.g. stamping the
248
+ * DOM with attributes a custom selector strategy depends on.
249
+ */
250
+ preProcessors?: StatementPreProcessor[];
251
+ timeouts?: HealTracerTimeouts;
252
+ network?: HealTracerNetworkConfig;
253
+ console?: HealTracerConsoleConfig;
73
254
  }
@@ -64,13 +64,14 @@ exports.reset = exports.expect = exports.test = void 0;
64
64
  // lifecycle teardowns so SDKs still see any globals
65
65
  // a lifecycle installed
66
66
  //
67
- // Output shape (per test): `heal-data/heal-traces.ndjson` — one
68
- // HealTraceRecord per line. See
67
+ // Output shape (per (test, attempt)):
68
+ // <cwd>/heal-traces/<executionId>/<playwrightTestId>/<attempt>/heal-traces.ndjson
69
+ // The fixture writes the ndjson + per-statement screenshots there;
70
+ // the reporter additionally copies Playwright artefacts (trace.zip,
71
+ // videos, failure screenshots, user attachments) into the same dir
72
+ // on `onTestEnd`. See
69
73
  // `../../domain/trace-event-recorder/model/statement-trace-schema.ts`
70
- // for the contract.
71
- //
72
- // Env toggles:
73
- // HEAL_TRACE_NDJSON default on; set to `0`/`false`/`off` to disable.
74
+ // for the record contract.
74
75
  //
75
76
  // Any backend integration (HTTP shipping, APM bindings,
76
77
  // telemetry-session setup, …) lives in user code and plugs in via
@@ -90,79 +91,207 @@ const playwright_step_tracking_adapter_1 = require("../../infrastructure/playwri
90
91
  const playwright_test_context_adapter_1 = require("../../infrastructure/playwright-test-context-adapter");
91
92
  const playwright_locator_screenshot_adapter_2 = require("../../infrastructure/playwright-locator-screenshot-adapter");
92
93
  const stdout_capture_adapter_1 = require("../../infrastructure/stdout-capture-adapter");
94
+ const playwright_console_capture_adapter_1 = require("../../infrastructure/playwright-console-capture-adapter");
95
+ const playwright_network_capture_adapter_1 = require("../../infrastructure/playwright-network-capture-adapter");
96
+ const heal_traces_layout_1 = require("../../infrastructure/heal-traces-layout");
97
+ const artifact_summary_printer_1 = require("../../infrastructure/artifact-summary-printer");
98
+ const heal_reporter_1 = require("../../infrastructure/heal-reporter");
93
99
  const heal_config_1 = require("../heal-config");
100
+ const with_timeout_1 = require("../../util/with-timeout");
101
+ const logger_1 = require("../../util/logger");
102
+ const wire_all_pages_1 = require("./wire-all-pages");
103
+ const global_names_1 = require("../../domain/trace-event-recorder/model/global-names");
104
+ // Defaults for the optional `timeouts` block in `HealTracerConfig`.
105
+ // `screenshotMs` caps best-effort decoration calls in the screenshot
106
+ // pipeline; `lifecycleMs` caps user setup/teardown and the final
107
+ // projector close. On `lifecycleMs` timeouts the fixture logs to
108
+ // stderr and continues the rest of teardown — a hung user exporter
109
+ // must not block the next test from starting.
110
+ const DEFAULT_SCREENSHOT_TIMEOUT_MS = 10000;
111
+ const DEFAULT_LIFECYCLE_TIMEOUT_MS = 30000;
94
112
  // Wrap `expect` so any assertion made against a Locator gets a
95
113
  // highlight screenshot stamped onto the active statement, the same
96
114
  // way locator actions do. Non-locator assertions fall through.
97
115
  const expect = (0, playwright_locator_screenshot_adapter_1.wrapExpect)(test_1.expect);
98
116
  exports.expect = expect;
99
- // All artifacts this package produces live under this subdirectory of
100
- // `testInfo.outputDir`, so they stay segregated from Playwright's own
101
- // output (screenshot/trace/video attachments).
102
- const HEAL_DATA_SUBDIR = 'heal-data';
103
- const NDJSON_FILENAME = 'heal-traces.ndjson';
104
- function envFlag(name, defaultOn) {
105
- const raw = process.env[name];
106
- if (raw == null || raw === '')
107
- return defaultOn;
108
- const v = raw.toLowerCase();
109
- if (v === '0' || v === 'false' || v === 'off' || v === 'no')
110
- return false;
111
- return true;
112
- }
113
- function buildHealTraceExporter(healDataDir, ctx) {
114
- const legs = [];
115
- if (envFlag('HEAL_TRACE_NDJSON', true)) {
116
- legs.push(new ndjson_exporter_adapter_1.NdjsonExporter(path.join(healDataDir, NDJSON_FILENAME)));
117
- }
117
+ function buildHealTraceExporter(ndjsonPath, ctx) {
118
+ const legs = [new ndjson_exporter_adapter_1.NdjsonExporter(ndjsonPath)];
118
119
  const { exporters = [] } = (0, heal_config_1.getTracerConfig)();
119
120
  for (const factory of exporters) {
120
121
  try {
121
122
  legs.push(factory(ctx));
122
123
  }
123
124
  catch (err) {
124
- console.error('[heal-playwright-tracer] exporter factory failed:', err);
125
+ logger_1.log.error('exporter factory failed', err);
125
126
  }
126
127
  }
127
- if (legs.length === 0) {
128
- // Neither leg active — return a no-op exporter so the projector
129
- // still runs without doing anything user-visible.
130
- return { write() { }, async close() { } };
131
- }
132
128
  return legs.length === 1 ? legs[0] : new service_1.CompositeHealTraceExporter(legs);
133
129
  }
134
130
  // Composition-root singletons — one per process.
135
- const testContextAdapter = new playwright_test_context_adapter_1.PlaywrightTestContextAdapter({ setContext: trace_event_recorder_runtime_1.setContext });
131
+ const testContextAdapter = new playwright_test_context_adapter_1.PlaywrightTestContextAdapter({ setContext: trace_event_recorder_runtime_1.setContext }, { resolveExecutionId: heal_traces_layout_1.resolveExecutionId });
136
132
  const stepTrackingAdapter = new playwright_step_tracking_adapter_1.PlaywrightStepTrackingAdapter({ pushStep: trace_event_recorder_runtime_1.pushStep, popStep: trace_event_recorder_runtime_1.popStep });
133
+ // The Babel plugin and the reporter are a pair — the in-worker fixture
134
+ // produces NDJSON; the reporter (main process) propagates the
135
+ // executionId, finalizes crashed traces, and copies Playwright
136
+ // artefacts. Running the plugin without the reporter silently produces
137
+ // half-broken output, so we hard-fail the first test in each worker.
138
+ // Reporter sets HEAL_TRACER_REPORTER=1 in onBegin; Playwright
139
+ // propagates env to workers.
140
+ let reporterCheckPassed = false;
141
+ function assertReporterRegistered() {
142
+ if (reporterCheckPassed)
143
+ return;
144
+ if (process.env.HEAL_TRACER_REPORTER !== '1') {
145
+ throw new Error('@heal-dev/heal-playwright-tracer: Babel plugin is wired but the ' +
146
+ 'reporter is not registered. Add to playwright.config.ts:\n' +
147
+ " reporter: [['@heal-dev/heal-playwright-tracer/reporter']]\n" +
148
+ 'See https://github.com/heal-dev/heal-playwright-tracer#register-the-reporter');
149
+ }
150
+ reporterCheckPassed = true;
151
+ }
137
152
  exports.test = test_1.test.extend({
138
153
  _traceAuto: [
139
- async ({ page }, use, testInfo) => {
154
+ async ({ page, browser, request }, use, testInfo) => {
155
+ assertReporterRegistered();
140
156
  const captured = testContextAdapter.capture(testInfo);
141
- const healDataDir = path.join(testInfo.outputDir, HEAL_DATA_SUBDIR);
142
- fs.mkdirSync(healDataDir, { recursive: true });
157
+ const layout = new heal_traces_layout_1.HealTracesLayout(process.cwd(), captured.executionId);
158
+ const testDir = layout.testDir(captured.testId, captured.attempt);
159
+ const ndjsonPath = layout.ndjsonPath(captured.testId, captured.attempt);
160
+ const screenshotsDir = path.dirname(layout.screenshotPath(captured.testId, captured.attempt, 'x.png'));
161
+ fs.mkdirSync(testDir, { recursive: true });
162
+ fs.mkdirSync(screenshotsDir, { recursive: true });
163
+ // Write a registry entry for the optional `HealTracerReporter`
164
+ // so it can find this test's NDJSON from the main process.
165
+ // Filesystem-based (not annotation/attachment) because
166
+ // Playwright's IPC does not flush fixture-pushed annotations
167
+ // on abrupt worker exit (OOM / SIGKILL / `process.exit()`) —
168
+ // exactly the crash cases the reporter rescues. A file
169
+ // written with writeSync before the test body runs survives
170
+ // any subsequent abrupt exit. Cleaned up in the `finally`
171
+ // block below on graceful teardown, so only crashed tests
172
+ // leave an orphan for the reporter to pick up.
173
+ const registryPath = (0, heal_reporter_1.healPendingRegistryPath)(testInfo.project.outputDir, captured.testId, captured.attempt);
174
+ fs.mkdirSync(path.dirname(registryPath), { recursive: true });
175
+ fs.writeFileSync(registryPath, JSON.stringify({
176
+ ndjsonPath,
177
+ rootDir: testDir,
178
+ executionId: captured.executionId,
179
+ playwrightOutputDir: testInfo.outputDir,
180
+ }), 'utf8');
143
181
  const tracerCtx = {
144
182
  testInfo,
145
- healDataDir,
183
+ healDataDir: testDir,
146
184
  transport: {
147
185
  testId: captured.testId,
148
186
  attempt: captured.attempt,
149
- rootDir: testInfo.outputDir,
187
+ executionId: captured.executionId,
188
+ rootDir: testDir,
189
+ healTracesFilePath: ndjsonPath,
150
190
  },
151
191
  };
192
+ // Network and console sidecar streams are on by default. A
193
+ // user can still opt out per-stream via
194
+ // `configureTracer({ network: { enabled: false }, ... })` —
195
+ // the field stays settable for tests and exceptional setups,
196
+ // but the public docs treat the streams as always-on.
197
+ const tracerConfig = (0, heal_config_1.getTracerConfig)();
198
+ const networkEnabled = tracerConfig.network?.enabled !== false;
199
+ const consoleEnabled = tracerConfig.console?.enabled !== false;
200
+ const networkPath = networkEnabled
201
+ ? layout.networkNdjsonPath(captured.testId, captured.attempt)
202
+ : undefined;
203
+ const consolePath = consoleEnabled
204
+ ? layout.consoleNdjsonPath(captured.testId, captured.attempt)
205
+ : undefined;
152
206
  // Fresh output pipeline per test: build a HealTraceExporter (default
153
207
  // NDJSON leg + any user-configured exporters), wrap it in a
154
208
  // projector, install on the recorder, then reset() — which
155
209
  // clears projector state and emits the test-header record via
156
210
  // the buildMetaEvent call inside the recorder.
157
- const output = buildHealTraceExporter(healDataDir, tracerCtx);
211
+ const output = buildHealTraceExporter(ndjsonPath, tracerCtx);
158
212
  const projector = new projectors_1.StatementProjector(output);
159
213
  (0, trace_event_recorder_runtime_1.setExporter)(projector);
160
214
  (0, trace_event_recorder_runtime_1.reset)();
161
215
  // Defensive: clear any teardown hooks that leaked from a
162
216
  // previous test that crashed before drain ran.
163
217
  (0, heal_config_1.resetTeardownHooks)();
164
- const stopScreenshots = (0, playwright_locator_screenshot_adapter_2.startLocatorScreenshotCapture)(page, healDataDir, trace_event_recorder_runtime_1.setCurrentStatementScreenshot);
218
+ const { timeouts = {} } = tracerConfig;
219
+ const screenshotTimeoutMs = timeouts.screenshotMs ?? DEFAULT_SCREENSHOT_TIMEOUT_MS;
220
+ const lifecycleTimeoutMs = timeouts.lifecycleMs ?? DEFAULT_LIFECYCLE_TIMEOUT_MS;
221
+ const stopScreenshots = (0, playwright_locator_screenshot_adapter_2.startLocatorScreenshotCapture)(page, screenshotsDir, trace_event_recorder_runtime_1.setCurrentStatementScreenshot, screenshotTimeoutMs);
165
222
  const stdoutSession = new stdout_capture_adapter_1.StdoutCaptureSession();
223
+ // Sidecar capture: instantiate sessions for whichever streams
224
+ // the user opted into, wire the test's initial context first
225
+ // (so the very first request issued by the test body is
226
+ // captured even if it races a popup) and then patch
227
+ // `browser.newContext` / `browser.newPage` so any context the
228
+ // test creates later is also wired. The patches are reverted
229
+ // by `restoreWiring()` in the finally block — `browser` is
230
+ // worker-scoped, so a stale patch would leak into the next
231
+ // test in the same worker.
232
+ const consoleSession = consoleEnabled && consolePath
233
+ ? new playwright_console_capture_adapter_1.ConsoleCaptureSession(consolePath, {
234
+ clock: trace_event_recorder_runtime_1.clock,
235
+ startedAt: (0, trace_event_recorder_runtime_1.getStartedAt)(),
236
+ getCurrentStatementSeq: trace_event_recorder_runtime_1.getCurrentStatementSeq,
237
+ getCurrentStepPath: trace_event_recorder_runtime_1.getCurrentStepPath,
238
+ }, tracerConfig.console ?? {})
239
+ : undefined;
240
+ const networkSession = networkEnabled && networkPath
241
+ ? new playwright_network_capture_adapter_1.NetworkCaptureSession(networkPath, {
242
+ clock: trace_event_recorder_runtime_1.clock,
243
+ startedAt: (0, trace_event_recorder_runtime_1.getStartedAt)(),
244
+ getCurrentStatementSeq: trace_event_recorder_runtime_1.getCurrentStatementSeq,
245
+ getCurrentStepPath: trace_event_recorder_runtime_1.getCurrentStepPath,
246
+ }, tracerConfig.network ?? {})
247
+ : undefined;
248
+ const wireableSessions = [];
249
+ if (consoleSession)
250
+ wireableSessions.push(consoleSession);
251
+ if (networkSession)
252
+ wireableSessions.push(networkSession);
253
+ let restoreWiring;
254
+ if (wireableSessions.length > 0) {
255
+ // Wire the test's primary BrowserContext + APIRequestContext
256
+ // immediately, then patch the Browser for any new contexts.
257
+ for (const s of wireableSessions)
258
+ s.attachToContext(page.context());
259
+ if (networkSession) {
260
+ networkSession.attachToApiRequestContext(request);
261
+ }
262
+ restoreWiring = (0, wire_all_pages_1.wireAllPages)(wireableSessions, {
263
+ browser,
264
+ apiRequest: test_1.request,
265
+ });
266
+ }
267
+ // Install per-statement pre-processor chain on `globalThis`. The
268
+ // Babel plugin emits `await globalThis.__heal_preprocess?.(meta)`
269
+ // inside every async-context leaf statement; with no
270
+ // pre-processors registered the slot stays `undefined` and the
271
+ // optional call is a no-op. With one or more registered, the
272
+ // installed function loops over them in declaration order and
273
+ // awaits each. Errors propagate out of the chain (and into the
274
+ // statement's own try/catch) — a pre-processor that wants to
275
+ // be defensive about its own failures has to handle them.
276
+ //
277
+ // Installed BEFORE lifecycles so a lifecycle's `setup` can
278
+ // exercise pre-processed code paths if it triggers traced
279
+ // statements (rare but cleanly defined). Uninstalled AFTER
280
+ // lifecycle teardowns for the symmetric reason.
281
+ const preProcessors = tracerConfig.preProcessors ?? [];
282
+ const preprocessCtx = {
283
+ ...tracerCtx,
284
+ browserContext: page.context(),
285
+ };
286
+ const g = globalThis;
287
+ const previousPreprocess = g[global_names_1.HEAL_PREPROCESS];
288
+ if (preProcessors.length > 0) {
289
+ g[global_names_1.HEAL_PREPROCESS] = async (meta) => {
290
+ for (const pp of preProcessors) {
291
+ await pp({ meta, ctx: preprocessCtx });
292
+ }
293
+ };
294
+ }
166
295
  // Instantiate user-configured lifecycles for this test. Each
167
296
  // factory runs fresh per test so any closure state the factory
168
297
  // declares is isolated between tests. Setup failures are
@@ -174,11 +303,11 @@ exports.test = test_1.test.extend({
174
303
  for (const factory of lifecycles) {
175
304
  try {
176
305
  const lc = factory();
177
- await lc.setup(tracerCtx);
306
+ await (0, with_timeout_1.withTimeout)(Promise.resolve(lc.setup(tracerCtx)), lifecycleTimeoutMs, 'lifecycle.setup');
178
307
  activeLifecycles.push(lc);
179
308
  }
180
309
  catch (err) {
181
- console.error('[heal-playwright-tracer] lifecycle setup failed:', err);
310
+ logger_1.log.error('lifecycle setup failed', err);
182
311
  }
183
312
  }
184
313
  try {
@@ -190,20 +319,66 @@ exports.test = test_1.test.extend({
190
319
  // still see the per-test globals a lifecycle installed, and
191
320
  // BEFORE stopping stdout capture so SDK teardown output lands
192
321
  // in the ndjson's `test-result.stdout/stderr`.
193
- await (0, heal_config_1.drainTeardownHooks)();
322
+ try {
323
+ await (0, with_timeout_1.withTimeout)((0, heal_config_1.drainTeardownHooks)(), lifecycleTimeoutMs, 'onTestTeardown hooks');
324
+ }
325
+ catch (err) {
326
+ logger_1.log.error('teardown hooks did not finish', err);
327
+ }
194
328
  // Teardown in reverse order (LIFO): the last lifecycle to set
195
329
  // up is the first to tear down, matching the mental model of
196
330
  // nested `using` blocks.
197
331
  for (let i = activeLifecycles.length - 1; i >= 0; i--) {
198
332
  try {
199
- await activeLifecycles[i].teardown();
333
+ await (0, with_timeout_1.withTimeout)(Promise.resolve(activeLifecycles[i].teardown()), lifecycleTimeoutMs, 'lifecycle.teardown');
200
334
  }
201
335
  catch (err) {
202
- console.error('[heal-playwright-tracer] lifecycle teardown failed:', err);
336
+ logger_1.log.error('lifecycle teardown failed', err);
203
337
  }
204
338
  }
339
+ // Uninstall the per-statement pre-processor chain. Restores
340
+ // whatever was on the slot before this test installed (almost
341
+ // always `undefined`) so back-to-back tests in the same worker
342
+ // don't see the prior test's `browserContext` leak.
343
+ if (preProcessors.length > 0) {
344
+ g[global_names_1.HEAL_PREPROCESS] = previousPreprocess;
345
+ }
205
346
  const capturedStdout = stdoutSession.stop();
206
347
  stopScreenshots();
348
+ // Stop sidecar capture BEFORE finalizing the projector. Order:
349
+ // 1. restore the Browser patches so any post-teardown code
350
+ // paths (e.g. Playwright internal cleanup) see a clean
351
+ // newContext/newPage;
352
+ // 2. close the console session (no async work to drain);
353
+ // 3. drain + close the network session, passing the test's
354
+ // final status so 'on-error' bodies are flushed only
355
+ // when relevant. Network last so any in-flight response
356
+ // that fires during teardown still lands in the file.
357
+ if (restoreWiring) {
358
+ try {
359
+ restoreWiring();
360
+ }
361
+ catch (err) {
362
+ logger_1.log.error('wireAllPages.restore failed', err);
363
+ }
364
+ }
365
+ if (consoleSession) {
366
+ try {
367
+ await (0, with_timeout_1.withTimeout)(consoleSession.close(), lifecycleTimeoutMs, 'console.close');
368
+ }
369
+ catch (err) {
370
+ logger_1.log.error('console.close did not finish', err);
371
+ }
372
+ }
373
+ if (networkSession) {
374
+ const failed = (testInfo.status ?? 'passed') !== 'passed';
375
+ try {
376
+ await (0, with_timeout_1.withTimeout)(networkSession.stop(failed), lifecycleTimeoutMs, 'network.stop');
377
+ }
378
+ catch (err) {
379
+ logger_1.log.error('network.stop did not finish', err);
380
+ }
381
+ }
207
382
  // Emit the final test-result record and close the output
208
383
  // exporter chain (flushes NDJSON fd, awaits in-flight
209
384
  // user-exporter I/O). The projector has its own `finalized`
@@ -216,12 +391,36 @@ exports.test = test_1.test.extend({
216
391
  // shipped from here — their attachments are populated by
217
392
  // Playwright in a later phase. Users who need them can
218
393
  // register a Playwright reporter in their `playwright.config`.
219
- await projector.finalize({
394
+ // Pass testInfo.errors[0] so any root statement whose __enter
395
+ // fired but whose __ok/__throw never did (Playwright aborted
396
+ // the hanging action on timeout before the catch block could
397
+ // run) gets flushed as `threw` with the test-level error.
398
+ const pendingError = testInfo.errors[0] ?? testInfo.error;
399
+ try {
400
+ await (0, with_timeout_1.withTimeout)(projector.finalize({
401
+ status: testInfo.status ?? 'passed',
402
+ duration: testInfo.duration,
403
+ stdout: capturedStdout.stdout.length ? capturedStdout.stdout : undefined,
404
+ stderr: capturedStdout.stderr.length ? capturedStdout.stderr : undefined,
405
+ }, pendingError), lifecycleTimeoutMs, 'projector.finalize');
406
+ }
407
+ catch (err) {
408
+ // The trace may be truncated (final test-result record
409
+ // and exporter close didn't complete in time) but the
410
+ // test itself has already finished — keep going so
411
+ // downstream registry cleanup still runs.
412
+ logger_1.log.error('projector.finalize did not finish', err);
413
+ }
414
+ new artifact_summary_printer_1.ArtifactSummaryPrinter(testDir).print({
415
+ title: testInfo.title,
220
416
  status: testInfo.status ?? 'passed',
221
- duration: testInfo.duration,
222
- stdout: capturedStdout.stdout.length ? capturedStdout.stdout : undefined,
223
- stderr: capturedStdout.stderr.length ? capturedStdout.stderr : undefined,
224
417
  });
418
+ // Registry cleanup is owned by `HealTracerReporter` — it
419
+ // runs on clean teardowns too because Playwright populates
420
+ // `result.attachments` only after this fixture's afterEach
421
+ // returns, so the reporter is the first hook with a final
422
+ // attachment list. It appends a `test-attachments` record
423
+ // and then deletes the registry entry.
225
424
  }
226
425
  },
227
426
  { auto: true },
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright: (c) Myia SAS 2026.
3
+ * This file and its contents are licensed under the AGPLv3 License.
4
+ * Please see the LICENSE file at the root of this repository
5
+ */
6
+ import type { APIRequest, APIRequestContext, Browser, BrowserContext, Page } from 'playwright';
7
+ /**
8
+ * Capture sessions implement just enough of the `Wireable`
9
+ * surface for this helper. Both `NetworkCaptureSession` and
10
+ * `ConsoleCaptureSession` already match — the typing is structural
11
+ * to avoid an import cycle between the fixture and the adapters.
12
+ */
13
+ export interface WireableContextSession {
14
+ attachToContext(ctx: BrowserContext): void;
15
+ }
16
+ export interface WireableApiSession {
17
+ attachToApiRequestContext?(api: APIRequestContext): void;
18
+ }
19
+ export type WireableSession = WireableContextSession & WireableApiSession;
20
+ export interface WireAllPagesOptions {
21
+ browser: Browser;
22
+ /**
23
+ * Optional reference to the global `request` from `@playwright/test`
24
+ * (an `APIRequest`). Pass it to also patch `request.newContext` so
25
+ * api-request contexts created inside the test body are wired.
26
+ */
27
+ apiRequest?: APIRequest;
28
+ }
29
+ /** Returns a `restore()` thunk that undoes all patches. */
30
+ export declare function wireAllPages(sessions: WireableSession[], opts: WireAllPagesOptions): () => void;
31
+ /**
32
+ * Wire a single page (and its context) eagerly. Used by the fixture
33
+ * for the test's initial `page` so the first request fired by the
34
+ * test body is captured even if it races with the `attachToContext`
35
+ * call for a sibling context.
36
+ */
37
+ export declare function wireInitialPage(sessions: WireableSession[], page: Page): void;