@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.
- package/README.md +94 -116
- package/dist/application/babel-playwright-tracer-plugin/index.js +16 -2
- package/dist/application/commander-cli-adapter/commander-cli-adapter.d.ts +24 -0
- package/dist/application/commander-cli-adapter/commander-cli-adapter.js +133 -0
- package/dist/application/heal-config/index.d.ts +1 -1
- package/dist/application/heal-config/registry.js +2 -1
- package/dist/application/heal-config/types.d.ts +187 -6
- package/dist/application/playwright-fixture/index.js +247 -48
- package/dist/application/playwright-fixture/wire-all-pages.d.ts +37 -0
- package/dist/application/playwright-fixture/wire-all-pages.js +71 -0
- package/dist/application/trace-event-recorder-runtime/index.d.ts +5 -0
- package/dist/application/trace-event-recorder-runtime/index.js +11 -1
- package/dist/bin/heal-tracer.d.ts +7 -0
- package/dist/bin/heal-tracer.js +16 -0
- package/dist/domain/code-hook-injector/service/statement-analysis/async-enclosing-function-detector.d.ts +11 -0
- package/dist/domain/code-hook-injector/service/statement-analysis/async-enclosing-function-detector.js +21 -0
- package/dist/domain/code-hook-injector/service/trace-hook/preprocess-call.d.ts +10 -0
- package/dist/domain/code-hook-injector/service/trace-hook/preprocess-call.js +17 -0
- package/dist/domain/persistence/execution-history-schema.d.ts +112 -0
- package/dist/domain/persistence/execution-history-schema.js +10 -0
- package/dist/domain/persistence/index.d.ts +7 -0
- package/dist/domain/persistence/index.js +10 -0
- package/dist/domain/persistence/test-status.d.ts +6 -0
- package/dist/domain/persistence/test-status.js +7 -0
- package/dist/domain/trace-event-recorder/model/console-trace-schema.d.ts +36 -0
- package/dist/domain/trace-event-recorder/model/console-trace-schema.js +7 -0
- package/dist/domain/trace-event-recorder/model/global-names.d.ts +1 -0
- package/dist/domain/trace-event-recorder/model/global-names.js +9 -1
- package/dist/domain/trace-event-recorder/model/network-trace-schema.d.ts +105 -0
- package/dist/domain/trace-event-recorder/model/network-trace-schema.js +7 -0
- package/dist/domain/trace-event-recorder/model/statement-trace-schema.d.ts +68 -2
- package/dist/domain/trace-event-recorder/model/statement-trace-schema.js +1 -1
- package/dist/domain/trace-event-recorder/model/trace-schema.d.ts +1 -0
- package/dist/domain/trace-event-recorder/service/projectors/statement-projector.d.ts +10 -1
- package/dist/domain/trace-event-recorder/service/projectors/statement-projector.js +39 -3
- package/dist/domain/trace-event-recorder/service/serializers/error-serializer.js +28 -10
- package/dist/domain/trace-event-recorder/service/serializers/index.d.ts +7 -0
- package/dist/domain/trace-event-recorder/service/serializers/index.js +13 -0
- package/dist/domain/trace-event-recorder/service/trace-event-recorder.d.ts +25 -0
- package/dist/domain/trace-event-recorder/service/trace-event-recorder.js +33 -0
- package/dist/index.d.ts +1 -1
- package/dist/infrastructure/artifact-summary-printer/artifact-summary-printer.d.ts +20 -0
- package/dist/infrastructure/artifact-summary-printer/artifact-summary-printer.js +24 -0
- package/dist/infrastructure/artifact-summary-printer/index.d.ts +7 -0
- package/dist/infrastructure/artifact-summary-printer/index.js +10 -0
- package/dist/infrastructure/heal-reporter/crash-error-classifier.d.ts +13 -0
- package/dist/infrastructure/heal-reporter/crash-error-classifier.js +65 -0
- package/dist/infrastructure/heal-reporter/failing-statement-finder.d.ts +14 -0
- package/dist/infrastructure/heal-reporter/failing-statement-finder.js +118 -0
- package/dist/infrastructure/heal-reporter/heal-tracer-reporter.d.ts +134 -0
- package/dist/infrastructure/heal-reporter/heal-tracer-reporter.js +537 -0
- package/dist/infrastructure/heal-reporter/index.d.ts +14 -0
- package/dist/infrastructure/heal-reporter/index.js +23 -0
- package/dist/infrastructure/heal-reporter/ndjson-tail-inspector.d.ts +8 -0
- package/dist/infrastructure/heal-reporter/ndjson-tail-inspector.js +75 -0
- package/dist/infrastructure/heal-traces-layout/execution-id-resolver.d.ts +14 -0
- package/dist/infrastructure/heal-traces-layout/execution-id-resolver.js +52 -0
- package/dist/infrastructure/heal-traces-layout/heal-traces-layout.d.ts +37 -0
- package/dist/infrastructure/heal-traces-layout/heal-traces-layout.js +116 -0
- package/dist/infrastructure/heal-traces-layout/index.d.ts +7 -0
- package/dist/infrastructure/heal-traces-layout/index.js +14 -0
- package/dist/infrastructure/local-viewer-adapter/discover-traces.d.ts +70 -0
- package/dist/infrastructure/local-viewer-adapter/discover-traces.js +280 -0
- package/dist/infrastructure/local-viewer-adapter/local-viewer-server.d.ts +44 -0
- package/dist/infrastructure/local-viewer-adapter/local-viewer-server.js +398 -0
- package/dist/infrastructure/local-viewer-adapter/ndjson-trace-loader.d.ts +25 -0
- package/dist/infrastructure/local-viewer-adapter/ndjson-trace-loader.js +74 -0
- package/dist/infrastructure/playwright-console-capture-adapter/console-capture-session.d.ts +40 -0
- package/dist/infrastructure/playwright-console-capture-adapter/console-capture-session.js +243 -0
- package/dist/infrastructure/playwright-console-capture-adapter/index.d.ts +7 -0
- package/dist/infrastructure/playwright-console-capture-adapter/index.js +20 -0
- package/dist/infrastructure/playwright-locator-screenshot-adapter/assertion-wrapper.js +22 -9
- package/dist/infrastructure/playwright-locator-screenshot-adapter/index.d.ts +1 -1
- package/dist/infrastructure/playwright-locator-screenshot-adapter/index.js +2 -2
- package/dist/infrastructure/playwright-locator-screenshot-adapter/locator-patch.js +19 -7
- package/dist/infrastructure/playwright-locator-screenshot-adapter/overlay-helpers.d.ts +2 -2
- package/dist/infrastructure/playwright-locator-screenshot-adapter/overlay-helpers.js +22 -9
- package/dist/infrastructure/playwright-locator-screenshot-adapter/screenshot-capture-session.d.ts +14 -3
- package/dist/infrastructure/playwright-locator-screenshot-adapter/screenshot-capture-session.js +94 -25
- package/dist/infrastructure/playwright-network-capture-adapter/body-preview.d.ts +43 -0
- package/dist/infrastructure/playwright-network-capture-adapter/body-preview.js +107 -0
- package/dist/infrastructure/playwright-network-capture-adapter/index.d.ts +10 -0
- package/dist/infrastructure/playwright-network-capture-adapter/index.js +27 -0
- package/dist/infrastructure/playwright-network-capture-adapter/network-capture-session.d.ts +55 -0
- package/dist/infrastructure/playwright-network-capture-adapter/network-capture-session.js +630 -0
- package/dist/infrastructure/playwright-network-capture-adapter/network-coalescer.d.ts +54 -0
- package/dist/infrastructure/playwright-network-capture-adapter/network-coalescer.js +96 -0
- package/dist/infrastructure/playwright-network-capture-adapter/redaction.d.ts +14 -0
- package/dist/infrastructure/playwright-network-capture-adapter/redaction.js +44 -0
- package/dist/infrastructure/playwright-test-context-adapter/playwright-test-context-adapter.d.ts +6 -1
- package/dist/infrastructure/playwright-test-context-adapter/playwright-test-context-adapter.js +5 -1
- package/dist/infrastructure/stdout-capture-adapter/stdout-capture-session.js +1 -1
- package/dist/util/logger.d.ts +17 -0
- package/dist/util/logger.js +60 -0
- package/dist/util/with-timeout.d.ts +6 -0
- package/dist/util/with-timeout.js +33 -0
- package/package.json +20 -3
- package/tracer-viewer-bundle/assets/abap-BdImnpbu.js +13 -0
- package/tracer-viewer-bundle/assets/abap-BdImnpbu.js.map +1 -0
- package/tracer-viewer-bundle/assets/actionscript-3-CoDkCxhg.js +13 -0
- package/tracer-viewer-bundle/assets/actionscript-3-CoDkCxhg.js.map +1 -0
- package/tracer-viewer-bundle/assets/ada-bCR0ucgS.js +13 -0
- package/tracer-viewer-bundle/assets/ada-bCR0ucgS.js.map +1 -0
- package/tracer-viewer-bundle/assets/andromeeda-C4gqWexZ.js +12 -0
- package/tracer-viewer-bundle/assets/andromeeda-C4gqWexZ.js.map +1 -0
- package/tracer-viewer-bundle/assets/angular-html-DA-rfuFy.js +41 -0
- package/tracer-viewer-bundle/assets/angular-html-DA-rfuFy.js.map +1 -0
- package/tracer-viewer-bundle/assets/angular-ts-BrjP3tb8.js +30 -0
- package/tracer-viewer-bundle/assets/angular-ts-BrjP3tb8.js.map +1 -0
- package/tracer-viewer-bundle/assets/apache-Pmp26Uib.js +13 -0
- package/tracer-viewer-bundle/assets/apache-Pmp26Uib.js.map +1 -0
- package/tracer-viewer-bundle/assets/apex-D8_7TLub.js +13 -0
- package/tracer-viewer-bundle/assets/apex-D8_7TLub.js.map +1 -0
- package/tracer-viewer-bundle/assets/apl-CORt7UWP.js +19 -0
- package/tracer-viewer-bundle/assets/apl-CORt7UWP.js.map +1 -0
- package/tracer-viewer-bundle/assets/applescript-Co6uUVPk.js +13 -0
- package/tracer-viewer-bundle/assets/applescript-Co6uUVPk.js.map +1 -0
- package/tracer-viewer-bundle/assets/ara-BRHolxvo.js +13 -0
- package/tracer-viewer-bundle/assets/ara-BRHolxvo.js.map +1 -0
- package/tracer-viewer-bundle/assets/asciidoc-Ve4PFQV2.js +13 -0
- package/tracer-viewer-bundle/assets/asciidoc-Ve4PFQV2.js.map +1 -0
- package/tracer-viewer-bundle/assets/asm-D_Q5rh1f.js +13 -0
- package/tracer-viewer-bundle/assets/asm-D_Q5rh1f.js.map +1 -0
- package/tracer-viewer-bundle/assets/astro-HNnZUWAn.js +19 -0
- package/tracer-viewer-bundle/assets/astro-HNnZUWAn.js.map +1 -0
- package/tracer-viewer-bundle/assets/aurora-x-D-2ljcwZ.js +12 -0
- package/tracer-viewer-bundle/assets/aurora-x-D-2ljcwZ.js.map +1 -0
- package/tracer-viewer-bundle/assets/awk-DMzUqQB5.js +13 -0
- package/tracer-viewer-bundle/assets/awk-DMzUqQB5.js.map +1 -0
- package/tracer-viewer-bundle/assets/ayu-dark-DYE7WIF3.js +12 -0
- package/tracer-viewer-bundle/assets/ayu-dark-DYE7WIF3.js.map +1 -0
- package/tracer-viewer-bundle/assets/ayu-light-BA47KaF1.js +12 -0
- package/tracer-viewer-bundle/assets/ayu-light-BA47KaF1.js.map +1 -0
- package/tracer-viewer-bundle/assets/ayu-mirage-32ctXXKs.js +12 -0
- package/tracer-viewer-bundle/assets/ayu-mirage-32ctXXKs.js.map +1 -0
- package/tracer-viewer-bundle/assets/ballerina-BFfxhgS-.js +13 -0
- package/tracer-viewer-bundle/assets/ballerina-BFfxhgS-.js.map +1 -0
- package/tracer-viewer-bundle/assets/bat-BkioyH1T.js +13 -0
- package/tracer-viewer-bundle/assets/bat-BkioyH1T.js.map +1 -0
- package/tracer-viewer-bundle/assets/beancount-k_qm7-4y.js +13 -0
- package/tracer-viewer-bundle/assets/beancount-k_qm7-4y.js.map +1 -0
- package/tracer-viewer-bundle/assets/berry-uYugtg8r.js +13 -0
- package/tracer-viewer-bundle/assets/berry-uYugtg8r.js.map +1 -0
- package/tracer-viewer-bundle/assets/bibtex-CHM0blh-.js +13 -0
- package/tracer-viewer-bundle/assets/bibtex-CHM0blh-.js.map +1 -0
- package/tracer-viewer-bundle/assets/bicep-Bmn6On1c.js +13 -0
- package/tracer-viewer-bundle/assets/bicep-Bmn6On1c.js.map +1 -0
- package/tracer-viewer-bundle/assets/bird2-BIv1doCn.js +13 -0
- package/tracer-viewer-bundle/assets/bird2-BIv1doCn.js.map +1 -0
- package/tracer-viewer-bundle/assets/blade-BjGOyj-B.js +21 -0
- package/tracer-viewer-bundle/assets/blade-BjGOyj-B.js.map +1 -0
- package/tracer-viewer-bundle/assets/bsl-BO_Y6i37.js +14 -0
- package/tracer-viewer-bundle/assets/bsl-BO_Y6i37.js.map +1 -0
- package/tracer-viewer-bundle/assets/c-BIGW1oBm.js +13 -0
- package/tracer-viewer-bundle/assets/c-BIGW1oBm.js.map +1 -0
- package/tracer-viewer-bundle/assets/c3-eo99z4R2.js +13 -0
- package/tracer-viewer-bundle/assets/c3-eo99z4R2.js.map +1 -0
- package/tracer-viewer-bundle/assets/cadence-Bv_4Rxtq.js +13 -0
- package/tracer-viewer-bundle/assets/cadence-Bv_4Rxtq.js.map +1 -0
- package/tracer-viewer-bundle/assets/cairo-KRGpt6FW.js +14 -0
- package/tracer-viewer-bundle/assets/cairo-KRGpt6FW.js.map +1 -0
- package/tracer-viewer-bundle/assets/catppuccin-frappe-DFWUc33u.js +12 -0
- package/tracer-viewer-bundle/assets/catppuccin-frappe-DFWUc33u.js.map +1 -0
- package/tracer-viewer-bundle/assets/catppuccin-latte-C9dUb6Cb.js +12 -0
- package/tracer-viewer-bundle/assets/catppuccin-latte-C9dUb6Cb.js.map +1 -0
- package/tracer-viewer-bundle/assets/catppuccin-macchiato-DQyhUUbL.js +12 -0
- package/tracer-viewer-bundle/assets/catppuccin-macchiato-DQyhUUbL.js.map +1 -0
- package/tracer-viewer-bundle/assets/catppuccin-mocha-D87Tk5Gz.js +12 -0
- package/tracer-viewer-bundle/assets/catppuccin-mocha-D87Tk5Gz.js.map +1 -0
- package/tracer-viewer-bundle/assets/clarity-D53aC0YG.js +13 -0
- package/tracer-viewer-bundle/assets/clarity-D53aC0YG.js.map +1 -0
- package/tracer-viewer-bundle/assets/clojure-P80f7IUj.js +13 -0
- package/tracer-viewer-bundle/assets/clojure-P80f7IUj.js.map +1 -0
- package/tracer-viewer-bundle/assets/cmake-D1j8_8rp.js +13 -0
- package/tracer-viewer-bundle/assets/cmake-D1j8_8rp.js.map +1 -0
- package/tracer-viewer-bundle/assets/cobol-nBiQ_Alo.js +17 -0
- package/tracer-viewer-bundle/assets/cobol-nBiQ_Alo.js.map +1 -0
- package/tracer-viewer-bundle/assets/codeowners-Bp6g37R7.js +13 -0
- package/tracer-viewer-bundle/assets/codeowners-Bp6g37R7.js.map +1 -0
- package/tracer-viewer-bundle/assets/codeql-DsOJ9woJ.js +13 -0
- package/tracer-viewer-bundle/assets/codeql-DsOJ9woJ.js.map +1 -0
- package/tracer-viewer-bundle/assets/coffee-Ch7k5sss.js +14 -0
- package/tracer-viewer-bundle/assets/coffee-Ch7k5sss.js.map +1 -0
- package/tracer-viewer-bundle/assets/common-lisp-Cg-RD9OK.js +13 -0
- package/tracer-viewer-bundle/assets/common-lisp-Cg-RD9OK.js.map +1 -0
- package/tracer-viewer-bundle/assets/coq-DkFqJrB1.js +13 -0
- package/tracer-viewer-bundle/assets/coq-DkFqJrB1.js.map +1 -0
- package/tracer-viewer-bundle/assets/cpp-CofmeUqb.js +23 -0
- package/tracer-viewer-bundle/assets/cpp-CofmeUqb.js.map +1 -0
- package/tracer-viewer-bundle/assets/crystal-DNxU26gB.js +19 -0
- package/tracer-viewer-bundle/assets/crystal-DNxU26gB.js.map +1 -0
- package/tracer-viewer-bundle/assets/csharp-COcwbKMJ.js +13 -0
- package/tracer-viewer-bundle/assets/csharp-COcwbKMJ.js.map +1 -0
- package/tracer-viewer-bundle/assets/css-CLj8gQPS.js +13 -0
- package/tracer-viewer-bundle/assets/css-CLj8gQPS.js.map +1 -0
- package/tracer-viewer-bundle/assets/csv-fuZLfV_i.js +13 -0
- package/tracer-viewer-bundle/assets/csv-fuZLfV_i.js.map +1 -0
- package/tracer-viewer-bundle/assets/cue-D82EKSYY.js +13 -0
- package/tracer-viewer-bundle/assets/cue-D82EKSYY.js.map +1 -0
- package/tracer-viewer-bundle/assets/cypher-COkxafJQ.js +13 -0
- package/tracer-viewer-bundle/assets/cypher-COkxafJQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/d-85-TOEBH.js +13 -0
- package/tracer-viewer-bundle/assets/d-85-TOEBH.js.map +1 -0
- package/tracer-viewer-bundle/assets/dark-plus-C3mMm8J8.js +12 -0
- package/tracer-viewer-bundle/assets/dark-plus-C3mMm8J8.js.map +1 -0
- package/tracer-viewer-bundle/assets/dart-bE4Kk8sk.js +13 -0
- package/tracer-viewer-bundle/assets/dart-bE4Kk8sk.js.map +1 -0
- package/tracer-viewer-bundle/assets/dax-CEL-wOlO.js +13 -0
- package/tracer-viewer-bundle/assets/dax-CEL-wOlO.js.map +1 -0
- package/tracer-viewer-bundle/assets/desktop-BmXAJ9_W.js +13 -0
- package/tracer-viewer-bundle/assets/desktop-BmXAJ9_W.js.map +1 -0
- package/tracer-viewer-bundle/assets/diff-D97Zzqfu.js +13 -0
- package/tracer-viewer-bundle/assets/diff-D97Zzqfu.js.map +1 -0
- package/tracer-viewer-bundle/assets/docker-BcOcwvcX.js +13 -0
- package/tracer-viewer-bundle/assets/docker-BcOcwvcX.js.map +1 -0
- package/tracer-viewer-bundle/assets/dotenv-Da5cRb03.js +13 -0
- package/tracer-viewer-bundle/assets/dotenv-Da5cRb03.js.map +1 -0
- package/tracer-viewer-bundle/assets/dracula-BzJJZx-M.js +12 -0
- package/tracer-viewer-bundle/assets/dracula-BzJJZx-M.js.map +1 -0
- package/tracer-viewer-bundle/assets/dracula-soft-BXkSAIEj.js +12 -0
- package/tracer-viewer-bundle/assets/dracula-soft-BXkSAIEj.js.map +1 -0
- package/tracer-viewer-bundle/assets/dream-maker-BtqSS_iP.js +13 -0
- package/tracer-viewer-bundle/assets/dream-maker-BtqSS_iP.js.map +1 -0
- package/tracer-viewer-bundle/assets/edge-FbVlp4U3.js +18 -0
- package/tracer-viewer-bundle/assets/edge-FbVlp4U3.js.map +1 -0
- package/tracer-viewer-bundle/assets/elixir-CkH2-t6x.js +16 -0
- package/tracer-viewer-bundle/assets/elixir-CkH2-t6x.js.map +1 -0
- package/tracer-viewer-bundle/assets/elm-DbKCFpqz.js +15 -0
- package/tracer-viewer-bundle/assets/elm-DbKCFpqz.js.map +1 -0
- package/tracer-viewer-bundle/assets/emacs-lisp-CXvaQtF9.js +13 -0
- package/tracer-viewer-bundle/assets/emacs-lisp-CXvaQtF9.js.map +1 -0
- package/tracer-viewer-bundle/assets/erb-BYCe7drp.js +32 -0
- package/tracer-viewer-bundle/assets/erb-BYCe7drp.js.map +1 -0
- package/tracer-viewer-bundle/assets/erlang-DsQrWhSR.js +14 -0
- package/tracer-viewer-bundle/assets/erlang-DsQrWhSR.js.map +1 -0
- package/tracer-viewer-bundle/assets/everforest-dark-BgDCqdQA.js +12 -0
- package/tracer-viewer-bundle/assets/everforest-dark-BgDCqdQA.js.map +1 -0
- package/tracer-viewer-bundle/assets/everforest-light-C8M2exoo.js +12 -0
- package/tracer-viewer-bundle/assets/everforest-light-C8M2exoo.js.map +1 -0
- package/tracer-viewer-bundle/assets/favicon-DRSNNJwn.svg +3 -0
- package/tracer-viewer-bundle/assets/fennel-BYunw83y.js +13 -0
- package/tracer-viewer-bundle/assets/fennel-BYunw83y.js.map +1 -0
- package/tracer-viewer-bundle/assets/fish-BvzEVeQv.js +13 -0
- package/tracer-viewer-bundle/assets/fish-BvzEVeQv.js.map +1 -0
- package/tracer-viewer-bundle/assets/fluent-C4IJs8-o.js +13 -0
- package/tracer-viewer-bundle/assets/fluent-C4IJs8-o.js.map +1 -0
- package/tracer-viewer-bundle/assets/fortran-fixed-form-CkoXwp7k.js +14 -0
- package/tracer-viewer-bundle/assets/fortran-fixed-form-CkoXwp7k.js.map +1 -0
- package/tracer-viewer-bundle/assets/fortran-free-form-BxgE0vQu.js +13 -0
- package/tracer-viewer-bundle/assets/fortran-free-form-BxgE0vQu.js.map +1 -0
- package/tracer-viewer-bundle/assets/fsharp-CXgrBDvD.js +14 -0
- package/tracer-viewer-bundle/assets/fsharp-CXgrBDvD.js.map +1 -0
- package/tracer-viewer-bundle/assets/gdresource-BOOCDP_w.js +15 -0
- package/tracer-viewer-bundle/assets/gdresource-BOOCDP_w.js.map +1 -0
- package/tracer-viewer-bundle/assets/gdscript-C5YyOfLZ.js +13 -0
- package/tracer-viewer-bundle/assets/gdscript-C5YyOfLZ.js.map +1 -0
- package/tracer-viewer-bundle/assets/gdshader-DkwncUOv.js +13 -0
- package/tracer-viewer-bundle/assets/gdshader-DkwncUOv.js.map +1 -0
- package/tracer-viewer-bundle/assets/genie-D0YGMca9.js +13 -0
- package/tracer-viewer-bundle/assets/genie-D0YGMca9.js.map +1 -0
- package/tracer-viewer-bundle/assets/gherkin-DyxjwDmM.js +13 -0
- package/tracer-viewer-bundle/assets/gherkin-DyxjwDmM.js.map +1 -0
- package/tracer-viewer-bundle/assets/git-commit-F4YmCXRG.js +14 -0
- package/tracer-viewer-bundle/assets/git-commit-F4YmCXRG.js.map +1 -0
- package/tracer-viewer-bundle/assets/git-rebase-r7XF79zn.js +14 -0
- package/tracer-viewer-bundle/assets/git-rebase-r7XF79zn.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-dark-DHJKELXO.js +12 -0
- package/tracer-viewer-bundle/assets/github-dark-DHJKELXO.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-dark-default-Cuk6v7N8.js +12 -0
- package/tracer-viewer-bundle/assets/github-dark-default-Cuk6v7N8.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-dark-dimmed-DH5Ifo-i.js +12 -0
- package/tracer-viewer-bundle/assets/github-dark-dimmed-DH5Ifo-i.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-dark-high-contrast-E3gJ1_iC.js +12 -0
- package/tracer-viewer-bundle/assets/github-dark-high-contrast-E3gJ1_iC.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-light-DAi9KRSo.js +12 -0
- package/tracer-viewer-bundle/assets/github-light-DAi9KRSo.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-light-default-D7oLnXFd.js +12 -0
- package/tracer-viewer-bundle/assets/github-light-default-D7oLnXFd.js.map +1 -0
- package/tracer-viewer-bundle/assets/github-light-high-contrast-BfjtVDDH.js +12 -0
- package/tracer-viewer-bundle/assets/github-light-high-contrast-BfjtVDDH.js.map +1 -0
- package/tracer-viewer-bundle/assets/gleam-BspZqrRM.js +13 -0
- package/tracer-viewer-bundle/assets/gleam-BspZqrRM.js.map +1 -0
- package/tracer-viewer-bundle/assets/glimmer-js-ByusRIyA.js +17 -0
- package/tracer-viewer-bundle/assets/glimmer-js-ByusRIyA.js.map +1 -0
- package/tracer-viewer-bundle/assets/glimmer-ts-BfAWNZQY.js +17 -0
- package/tracer-viewer-bundle/assets/glimmer-ts-BfAWNZQY.js.map +1 -0
- package/tracer-viewer-bundle/assets/glsl-DplSGwfg.js +14 -0
- package/tracer-viewer-bundle/assets/glsl-DplSGwfg.js.map +1 -0
- package/tracer-viewer-bundle/assets/gn-n2N0HUVH.js +13 -0
- package/tracer-viewer-bundle/assets/gn-n2N0HUVH.js.map +1 -0
- package/tracer-viewer-bundle/assets/gnuplot-DdkO51Og.js +13 -0
- package/tracer-viewer-bundle/assets/gnuplot-DdkO51Og.js.map +1 -0
- package/tracer-viewer-bundle/assets/go-C27-OAKa.js +13 -0
- package/tracer-viewer-bundle/assets/go-C27-OAKa.js.map +1 -0
- package/tracer-viewer-bundle/assets/graphql-ChdNCCLP.js +17 -0
- package/tracer-viewer-bundle/assets/graphql-ChdNCCLP.js.map +1 -0
- package/tracer-viewer-bundle/assets/groovy-gcz8RCvz.js +13 -0
- package/tracer-viewer-bundle/assets/groovy-gcz8RCvz.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-hard-CFHQjOhq.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-hard-CFHQjOhq.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-medium-GsRaNv29.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-medium-GsRaNv29.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-soft-CVdnzihN.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-dark-soft-CVdnzihN.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-hard-CH1njM8p.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-hard-CH1njM8p.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-medium-DRw_LuNl.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-medium-DRw_LuNl.js.map +1 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-soft-hJgmCMqR.js +12 -0
- package/tracer-viewer-bundle/assets/gruvbox-light-soft-hJgmCMqR.js.map +1 -0
- package/tracer-viewer-bundle/assets/hack-i7_Ulhet.js +17 -0
- package/tracer-viewer-bundle/assets/hack-i7_Ulhet.js.map +1 -0
- package/tracer-viewer-bundle/assets/haml-D5jkg6IW.js +15 -0
- package/tracer-viewer-bundle/assets/haml-D5jkg6IW.js.map +1 -0
- package/tracer-viewer-bundle/assets/handlebars-BpdQsYii.js +17 -0
- package/tracer-viewer-bundle/assets/handlebars-BpdQsYii.js.map +1 -0
- package/tracer-viewer-bundle/assets/haskell-Df6bDoY_.js +13 -0
- package/tracer-viewer-bundle/assets/haskell-Df6bDoY_.js.map +1 -0
- package/tracer-viewer-bundle/assets/haxe-CzTSHFRz.js +13 -0
- package/tracer-viewer-bundle/assets/haxe-CzTSHFRz.js.map +1 -0
- package/tracer-viewer-bundle/assets/hcl-BWvSN4gD.js +13 -0
- package/tracer-viewer-bundle/assets/hcl-BWvSN4gD.js.map +1 -0
- package/tracer-viewer-bundle/assets/hjson-D5-asLiD.js +13 -0
- package/tracer-viewer-bundle/assets/hjson-D5-asLiD.js.map +1 -0
- package/tracer-viewer-bundle/assets/hlsl-D3lLCCz7.js +13 -0
- package/tracer-viewer-bundle/assets/hlsl-D3lLCCz7.js.map +1 -0
- package/tracer-viewer-bundle/assets/horizon-BUw7H-hv.js +12 -0
- package/tracer-viewer-bundle/assets/horizon-BUw7H-hv.js.map +1 -0
- package/tracer-viewer-bundle/assets/horizon-bright-CUuTKBJd.js +12 -0
- package/tracer-viewer-bundle/assets/horizon-bright-CUuTKBJd.js.map +1 -0
- package/tracer-viewer-bundle/assets/houston-DnULxvSX.js +12 -0
- package/tracer-viewer-bundle/assets/houston-DnULxvSX.js.map +1 -0
- package/tracer-viewer-bundle/assets/html-derivative-DlHx6ybY.js +16 -0
- package/tracer-viewer-bundle/assets/html-derivative-DlHx6ybY.js.map +1 -0
- package/tracer-viewer-bundle/assets/html-pp8916En.js +15 -0
- package/tracer-viewer-bundle/assets/html-pp8916En.js.map +1 -0
- package/tracer-viewer-bundle/assets/http-jrhK8wxY.js +22 -0
- package/tracer-viewer-bundle/assets/http-jrhK8wxY.js.map +1 -0
- package/tracer-viewer-bundle/assets/hurl-irOxFIW8.js +21 -0
- package/tracer-viewer-bundle/assets/hurl-irOxFIW8.js.map +1 -0
- package/tracer-viewer-bundle/assets/hxml-Bvhsp5Yf.js +14 -0
- package/tracer-viewer-bundle/assets/hxml-Bvhsp5Yf.js.map +1 -0
- package/tracer-viewer-bundle/assets/hy-DFXneXwc.js +13 -0
- package/tracer-viewer-bundle/assets/hy-DFXneXwc.js.map +1 -0
- package/tracer-viewer-bundle/assets/imba-DGztddWO.js +13 -0
- package/tracer-viewer-bundle/assets/imba-DGztddWO.js.map +1 -0
- package/tracer-viewer-bundle/assets/index-CIRSNBm6.css +4792 -0
- package/tracer-viewer-bundle/assets/index-DS0dKIBi.js +36912 -0
- package/tracer-viewer-bundle/assets/index-DS0dKIBi.js.map +1 -0
- package/tracer-viewer-bundle/assets/ini-BEwlwnbL.js +13 -0
- package/tracer-viewer-bundle/assets/ini-BEwlwnbL.js.map +1 -0
- package/tracer-viewer-bundle/assets/java-CylS5w8V.js +13 -0
- package/tracer-viewer-bundle/assets/java-CylS5w8V.js.map +1 -0
- package/tracer-viewer-bundle/assets/javascript-wDzz0qaB.js +13 -0
- package/tracer-viewer-bundle/assets/javascript-wDzz0qaB.js.map +1 -0
- package/tracer-viewer-bundle/assets/jinja-f2NsQr07.js +22 -0
- package/tracer-viewer-bundle/assets/jinja-f2NsQr07.js.map +1 -0
- package/tracer-viewer-bundle/assets/jison-wvAkD_A8.js +14 -0
- package/tracer-viewer-bundle/assets/jison-wvAkD_A8.js.map +1 -0
- package/tracer-viewer-bundle/assets/json-Cp-IABpG.js +13 -0
- package/tracer-viewer-bundle/assets/json-Cp-IABpG.js.map +1 -0
- package/tracer-viewer-bundle/assets/json5-C9tS-k6U.js +13 -0
- package/tracer-viewer-bundle/assets/json5-C9tS-k6U.js.map +1 -0
- package/tracer-viewer-bundle/assets/jsonc-Des-eS-w.js +13 -0
- package/tracer-viewer-bundle/assets/jsonc-Des-eS-w.js.map +1 -0
- package/tracer-viewer-bundle/assets/jsonl-DcaNXYhu.js +13 -0
- package/tracer-viewer-bundle/assets/jsonl-DcaNXYhu.js.map +1 -0
- package/tracer-viewer-bundle/assets/jsonnet-DFQXde-d.js +13 -0
- package/tracer-viewer-bundle/assets/jsonnet-DFQXde-d.js.map +1 -0
- package/tracer-viewer-bundle/assets/jssm-C2t-YnRu.js +13 -0
- package/tracer-viewer-bundle/assets/jssm-C2t-YnRu.js.map +1 -0
- package/tracer-viewer-bundle/assets/jsx-g9-lgVsj.js +13 -0
- package/tracer-viewer-bundle/assets/jsx-g9-lgVsj.js.map +1 -0
- package/tracer-viewer-bundle/assets/julia-CxzCAyBv.js +21 -0
- package/tracer-viewer-bundle/assets/julia-CxzCAyBv.js.map +1 -0
- package/tracer-viewer-bundle/assets/just-VxiPbLrw.js +34 -0
- package/tracer-viewer-bundle/assets/just-VxiPbLrw.js.map +1 -0
- package/tracer-viewer-bundle/assets/kanagawa-dragon-CkXjmgJE.js +12 -0
- package/tracer-viewer-bundle/assets/kanagawa-dragon-CkXjmgJE.js.map +1 -0
- package/tracer-viewer-bundle/assets/kanagawa-lotus-CfQXZHmo.js +12 -0
- package/tracer-viewer-bundle/assets/kanagawa-lotus-CfQXZHmo.js.map +1 -0
- package/tracer-viewer-bundle/assets/kanagawa-wave-DWedfzmr.js +12 -0
- package/tracer-viewer-bundle/assets/kanagawa-wave-DWedfzmr.js.map +1 -0
- package/tracer-viewer-bundle/assets/kdl-DV7GczEv.js +13 -0
- package/tracer-viewer-bundle/assets/kdl-DV7GczEv.js.map +1 -0
- package/tracer-viewer-bundle/assets/kotlin-BdnUsdx6.js +13 -0
- package/tracer-viewer-bundle/assets/kotlin-BdnUsdx6.js.map +1 -0
- package/tracer-viewer-bundle/assets/kusto-wEQ09or8.js +13 -0
- package/tracer-viewer-bundle/assets/kusto-wEQ09or8.js.map +1 -0
- package/tracer-viewer-bundle/assets/laserwave-DUszq2jm.js +12 -0
- package/tracer-viewer-bundle/assets/laserwave-DUszq2jm.js.map +1 -0
- package/tracer-viewer-bundle/assets/latex-CWtU0Tv5.js +15 -0
- package/tracer-viewer-bundle/assets/latex-CWtU0Tv5.js.map +1 -0
- package/tracer-viewer-bundle/assets/lean-BZvkOJ9d.js +13 -0
- package/tracer-viewer-bundle/assets/lean-BZvkOJ9d.js.map +1 -0
- package/tracer-viewer-bundle/assets/less-B1dDrJ26.js +13 -0
- package/tracer-viewer-bundle/assets/less-B1dDrJ26.js.map +1 -0
- package/tracer-viewer-bundle/assets/light-plus-B7mTdjB0.js +12 -0
- package/tracer-viewer-bundle/assets/light-plus-B7mTdjB0.js.map +1 -0
- package/tracer-viewer-bundle/assets/liquid-C0sCDyMI.js +17 -0
- package/tracer-viewer-bundle/assets/liquid-C0sCDyMI.js.map +1 -0
- package/tracer-viewer-bundle/assets/llvm-DjAJT7YJ.js +13 -0
- package/tracer-viewer-bundle/assets/llvm-DjAJT7YJ.js.map +1 -0
- package/tracer-viewer-bundle/assets/log-2UxHyX5q.js +13 -0
- package/tracer-viewer-bundle/assets/log-2UxHyX5q.js.map +1 -0
- package/tracer-viewer-bundle/assets/logo-BtOb2qkB.js +13 -0
- package/tracer-viewer-bundle/assets/logo-BtOb2qkB.js.map +1 -0
- package/tracer-viewer-bundle/assets/lua-BaeVxFsk.js +14 -0
- package/tracer-viewer-bundle/assets/lua-BaeVxFsk.js.map +1 -0
- package/tracer-viewer-bundle/assets/luau-C-HG3fhB.js +13 -0
- package/tracer-viewer-bundle/assets/luau-C-HG3fhB.js.map +1 -0
- package/tracer-viewer-bundle/assets/make-CHLpvVh8.js +13 -0
- package/tracer-viewer-bundle/assets/make-CHLpvVh8.js.map +1 -0
- package/tracer-viewer-bundle/assets/markdown-Cvjx9yec.js +13 -0
- package/tracer-viewer-bundle/assets/markdown-Cvjx9yec.js.map +1 -0
- package/tracer-viewer-bundle/assets/marko-DjSrsDqO.js +17 -0
- package/tracer-viewer-bundle/assets/marko-DjSrsDqO.js.map +1 -0
- package/tracer-viewer-bundle/assets/material-theme-D5KoaKCx.js +12 -0
- package/tracer-viewer-bundle/assets/material-theme-D5KoaKCx.js.map +1 -0
- package/tracer-viewer-bundle/assets/material-theme-darker-BfHTSMKl.js +12 -0
- package/tracer-viewer-bundle/assets/material-theme-darker-BfHTSMKl.js.map +1 -0
- package/tracer-viewer-bundle/assets/material-theme-lighter-B0m2ddpp.js +12 -0
- package/tracer-viewer-bundle/assets/material-theme-lighter-B0m2ddpp.js.map +1 -0
- package/tracer-viewer-bundle/assets/material-theme-ocean-CyktbL80.js +12 -0
- package/tracer-viewer-bundle/assets/material-theme-ocean-CyktbL80.js.map +1 -0
- package/tracer-viewer-bundle/assets/material-theme-palenight-Csfq5Kiy.js +12 -0
- package/tracer-viewer-bundle/assets/material-theme-palenight-Csfq5Kiy.js.map +1 -0
- package/tracer-viewer-bundle/assets/matlab-D7o27uSR.js +13 -0
- package/tracer-viewer-bundle/assets/matlab-D7o27uSR.js.map +1 -0
- package/tracer-viewer-bundle/assets/mdc-DTYItulj.js +19 -0
- package/tracer-viewer-bundle/assets/mdc-DTYItulj.js.map +1 -0
- package/tracer-viewer-bundle/assets/mdx-Cmh6b_Ma.js +13 -0
- package/tracer-viewer-bundle/assets/mdx-Cmh6b_Ma.js.map +1 -0
- package/tracer-viewer-bundle/assets/mermaid-mWjccvbQ.js +13 -0
- package/tracer-viewer-bundle/assets/mermaid-mWjccvbQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/min-dark-CafNBF8u.js +12 -0
- package/tracer-viewer-bundle/assets/min-dark-CafNBF8u.js.map +1 -0
- package/tracer-viewer-bundle/assets/min-light-CTRr51gU.js +12 -0
- package/tracer-viewer-bundle/assets/min-light-CTRr51gU.js.map +1 -0
- package/tracer-viewer-bundle/assets/mipsasm-CKIfxQSi.js +13 -0
- package/tracer-viewer-bundle/assets/mipsasm-CKIfxQSi.js.map +1 -0
- package/tracer-viewer-bundle/assets/mojo-rZm6bMo-.js +13 -0
- package/tracer-viewer-bundle/assets/mojo-rZm6bMo-.js.map +1 -0
- package/tracer-viewer-bundle/assets/monokai-D4h5O-jR.js +12 -0
- package/tracer-viewer-bundle/assets/monokai-D4h5O-jR.js.map +1 -0
- package/tracer-viewer-bundle/assets/moonbit-_H4v1dQx.js +13 -0
- package/tracer-viewer-bundle/assets/moonbit-_H4v1dQx.js.map +1 -0
- package/tracer-viewer-bundle/assets/move-IF9eRakj.js +13 -0
- package/tracer-viewer-bundle/assets/move-IF9eRakj.js.map +1 -0
- package/tracer-viewer-bundle/assets/narrat-DRg8JJMk.js +13 -0
- package/tracer-viewer-bundle/assets/narrat-DRg8JJMk.js.map +1 -0
- package/tracer-viewer-bundle/assets/nextflow-C-mBbutL.js +14 -0
- package/tracer-viewer-bundle/assets/nextflow-C-mBbutL.js.map +1 -0
- package/tracer-viewer-bundle/assets/nextflow-groovy-vE_lwT2v.js +13 -0
- package/tracer-viewer-bundle/assets/nextflow-groovy-vE_lwT2v.js.map +1 -0
- package/tracer-viewer-bundle/assets/nginx-BpAMiNFr.js +15 -0
- package/tracer-viewer-bundle/assets/nginx-BpAMiNFr.js.map +1 -0
- package/tracer-viewer-bundle/assets/night-owl-C39BiMTA.js +12 -0
- package/tracer-viewer-bundle/assets/night-owl-C39BiMTA.js.map +1 -0
- package/tracer-viewer-bundle/assets/night-owl-light-CMTm3GFP.js +12 -0
- package/tracer-viewer-bundle/assets/night-owl-light-CMTm3GFP.js.map +1 -0
- package/tracer-viewer-bundle/assets/nim-BIad80T-.js +21 -0
- package/tracer-viewer-bundle/assets/nim-BIad80T-.js.map +1 -0
- package/tracer-viewer-bundle/assets/nix-CwoSXNpI.js +19 -0
- package/tracer-viewer-bundle/assets/nix-CwoSXNpI.js.map +1 -0
- package/tracer-viewer-bundle/assets/nord-Ddv68eIx.js +12 -0
- package/tracer-viewer-bundle/assets/nord-Ddv68eIx.js.map +1 -0
- package/tracer-viewer-bundle/assets/nushell-Cz2AlsmD.js +13 -0
- package/tracer-viewer-bundle/assets/nushell-Cz2AlsmD.js.map +1 -0
- package/tracer-viewer-bundle/assets/objective-c-DXmwc3jG.js +13 -0
- package/tracer-viewer-bundle/assets/objective-c-DXmwc3jG.js.map +1 -0
- package/tracer-viewer-bundle/assets/objective-cpp-CLxacb5B.js +13 -0
- package/tracer-viewer-bundle/assets/objective-cpp-CLxacb5B.js.map +1 -0
- package/tracer-viewer-bundle/assets/ocaml-C0hk2d4L.js +13 -0
- package/tracer-viewer-bundle/assets/ocaml-C0hk2d4L.js.map +1 -0
- package/tracer-viewer-bundle/assets/odin-BBf5iR-q.js +13 -0
- package/tracer-viewer-bundle/assets/odin-BBf5iR-q.js.map +1 -0
- package/tracer-viewer-bundle/assets/one-dark-pro-DVMEJ2y_.js +12 -0
- package/tracer-viewer-bundle/assets/one-dark-pro-DVMEJ2y_.js.map +1 -0
- package/tracer-viewer-bundle/assets/one-light-C3Wv6jpd.js +12 -0
- package/tracer-viewer-bundle/assets/one-light-C3Wv6jpd.js.map +1 -0
- package/tracer-viewer-bundle/assets/openscad-C4EeE6gA.js +13 -0
- package/tracer-viewer-bundle/assets/openscad-C4EeE6gA.js.map +1 -0
- package/tracer-viewer-bundle/assets/pascal-D93ZcfNL.js +13 -0
- package/tracer-viewer-bundle/assets/pascal-D93ZcfNL.js.map +1 -0
- package/tracer-viewer-bundle/assets/perl-NvoQZIq0.js +19 -0
- package/tracer-viewer-bundle/assets/perl-NvoQZIq0.js.map +1 -0
- package/tracer-viewer-bundle/assets/php-R6g_5hLQ.js +20 -0
- package/tracer-viewer-bundle/assets/php-R6g_5hLQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/pkl-u5AG7uiY.js +13 -0
- package/tracer-viewer-bundle/assets/pkl-u5AG7uiY.js.map +1 -0
- package/tracer-viewer-bundle/assets/plastic-3e1v2bzS.js +12 -0
- package/tracer-viewer-bundle/assets/plastic-3e1v2bzS.js.map +1 -0
- package/tracer-viewer-bundle/assets/plsql-ChMvpjG-.js +13 -0
- package/tracer-viewer-bundle/assets/plsql-ChMvpjG-.js.map +1 -0
- package/tracer-viewer-bundle/assets/po-BTJTHyun.js +13 -0
- package/tracer-viewer-bundle/assets/po-BTJTHyun.js.map +1 -0
- package/tracer-viewer-bundle/assets/poimandres-CS3Unz2-.js +12 -0
- package/tracer-viewer-bundle/assets/poimandres-CS3Unz2-.js.map +1 -0
- package/tracer-viewer-bundle/assets/polar-C0HS_06l.js +13 -0
- package/tracer-viewer-bundle/assets/polar-C0HS_06l.js.map +1 -0
- package/tracer-viewer-bundle/assets/postcss-CXtECtnM.js +13 -0
- package/tracer-viewer-bundle/assets/postcss-CXtECtnM.js.map +1 -0
- package/tracer-viewer-bundle/assets/powerquery-CEu0bR-o.js +13 -0
- package/tracer-viewer-bundle/assets/powerquery-CEu0bR-o.js.map +1 -0
- package/tracer-viewer-bundle/assets/powershell-Dpen1YoG.js +13 -0
- package/tracer-viewer-bundle/assets/powershell-Dpen1YoG.js.map +1 -0
- package/tracer-viewer-bundle/assets/prisma-Dd19v3D-.js +13 -0
- package/tracer-viewer-bundle/assets/prisma-Dd19v3D-.js.map +1 -0
- package/tracer-viewer-bundle/assets/prolog-CbFg5uaA.js +13 -0
- package/tracer-viewer-bundle/assets/prolog-CbFg5uaA.js.map +1 -0
- package/tracer-viewer-bundle/assets/proto-C7zT0LnQ.js +13 -0
- package/tracer-viewer-bundle/assets/proto-C7zT0LnQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/pug-DKIMFp6K.js +16 -0
- package/tracer-viewer-bundle/assets/pug-DKIMFp6K.js.map +1 -0
- package/tracer-viewer-bundle/assets/puppet-BMWR74SV.js +13 -0
- package/tracer-viewer-bundle/assets/puppet-BMWR74SV.js.map +1 -0
- package/tracer-viewer-bundle/assets/purescript-CklMAg4u.js +13 -0
- package/tracer-viewer-bundle/assets/purescript-CklMAg4u.js.map +1 -0
- package/tracer-viewer-bundle/assets/python-B6aJPvgy.js +13 -0
- package/tracer-viewer-bundle/assets/python-B6aJPvgy.js.map +1 -0
- package/tracer-viewer-bundle/assets/qml-3beO22l8.js +14 -0
- package/tracer-viewer-bundle/assets/qml-3beO22l8.js.map +1 -0
- package/tracer-viewer-bundle/assets/qmldir-C8lEn-DE.js +13 -0
- package/tracer-viewer-bundle/assets/qmldir-C8lEn-DE.js.map +1 -0
- package/tracer-viewer-bundle/assets/qss-IeuSbFQv.js +13 -0
- package/tracer-viewer-bundle/assets/qss-IeuSbFQv.js.map +1 -0
- package/tracer-viewer-bundle/assets/r-Dspwwk_N.js +13 -0
- package/tracer-viewer-bundle/assets/r-Dspwwk_N.js.map +1 -0
- package/tracer-viewer-bundle/assets/racket-BqYA7rlc.js +13 -0
- package/tracer-viewer-bundle/assets/racket-BqYA7rlc.js.map +1 -0
- package/tracer-viewer-bundle/assets/raku-DXvB9xmW.js +13 -0
- package/tracer-viewer-bundle/assets/raku-DXvB9xmW.js.map +1 -0
- package/tracer-viewer-bundle/assets/razor-BDqjjVU7.js +17 -0
- package/tracer-viewer-bundle/assets/razor-BDqjjVU7.js.map +1 -0
- package/tracer-viewer-bundle/assets/red-bN70gL4F.js +12 -0
- package/tracer-viewer-bundle/assets/red-bN70gL4F.js.map +1 -0
- package/tracer-viewer-bundle/assets/reg-C-SQnVFl.js +13 -0
- package/tracer-viewer-bundle/assets/reg-C-SQnVFl.js.map +1 -0
- package/tracer-viewer-bundle/assets/regexp-CDVJQ6XC.js +13 -0
- package/tracer-viewer-bundle/assets/regexp-CDVJQ6XC.js.map +1 -0
- package/tracer-viewer-bundle/assets/rel-C3B-1QV4.js +13 -0
- package/tracer-viewer-bundle/assets/rel-C3B-1QV4.js.map +1 -0
- package/tracer-viewer-bundle/assets/riscv-BM1_JUlF.js +13 -0
- package/tracer-viewer-bundle/assets/riscv-BM1_JUlF.js.map +1 -0
- package/tracer-viewer-bundle/assets/ron-D8l8udqQ.js +13 -0
- package/tracer-viewer-bundle/assets/ron-D8l8udqQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/rose-pine-dawn-DHQR4-dF.js +12 -0
- package/tracer-viewer-bundle/assets/rose-pine-dawn-DHQR4-dF.js.map +1 -0
- package/tracer-viewer-bundle/assets/rose-pine-moon-D4_iv3hh.js +12 -0
- package/tracer-viewer-bundle/assets/rose-pine-moon-D4_iv3hh.js.map +1 -0
- package/tracer-viewer-bundle/assets/rose-pine-qdsjHGoJ.js +12 -0
- package/tracer-viewer-bundle/assets/rose-pine-qdsjHGoJ.js.map +1 -0
- package/tracer-viewer-bundle/assets/rosmsg-BJDFO7_C.js +13 -0
- package/tracer-viewer-bundle/assets/rosmsg-BJDFO7_C.js.map +1 -0
- package/tracer-viewer-bundle/assets/rst-CRjBmOyv.js +35 -0
- package/tracer-viewer-bundle/assets/rst-CRjBmOyv.js.map +1 -0
- package/tracer-viewer-bundle/assets/ruby-Wjq7vjNf.js +31 -0
- package/tracer-viewer-bundle/assets/ruby-Wjq7vjNf.js.map +1 -0
- package/tracer-viewer-bundle/assets/rust-B1yitclQ.js +13 -0
- package/tracer-viewer-bundle/assets/rust-B1yitclQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/sas-cz2c8ADy.js +14 -0
- package/tracer-viewer-bundle/assets/sas-cz2c8ADy.js.map +1 -0
- package/tracer-viewer-bundle/assets/sass-Cj5Yp3dK.js +13 -0
- package/tracer-viewer-bundle/assets/sass-Cj5Yp3dK.js.map +1 -0
- package/tracer-viewer-bundle/assets/scala-C151Ov-r.js +13 -0
- package/tracer-viewer-bundle/assets/scala-C151Ov-r.js.map +1 -0
- package/tracer-viewer-bundle/assets/scheme-C98Dy4si.js +13 -0
- package/tracer-viewer-bundle/assets/scheme-C98Dy4si.js.map +1 -0
- package/tracer-viewer-bundle/assets/scss-D5BDwBP9.js +14 -0
- package/tracer-viewer-bundle/assets/scss-D5BDwBP9.js.map +1 -0
- package/tracer-viewer-bundle/assets/sdbl-DVxCFoDh.js +13 -0
- package/tracer-viewer-bundle/assets/sdbl-DVxCFoDh.js.map +1 -0
- package/tracer-viewer-bundle/assets/shaderlab-Dg9Lc6iA.js +14 -0
- package/tracer-viewer-bundle/assets/shaderlab-Dg9Lc6iA.js.map +1 -0
- package/tracer-viewer-bundle/assets/shellscript-Yzrsuije.js +13 -0
- package/tracer-viewer-bundle/assets/shellscript-Yzrsuije.js.map +1 -0
- package/tracer-viewer-bundle/assets/shellsession-BADoaaVG.js +14 -0
- package/tracer-viewer-bundle/assets/shellsession-BADoaaVG.js.map +1 -0
- package/tracer-viewer-bundle/assets/slack-dark-BthQWCQV.js +12 -0
- package/tracer-viewer-bundle/assets/slack-dark-BthQWCQV.js.map +1 -0
- package/tracer-viewer-bundle/assets/slack-ochin-DqwNpetd.js +12 -0
- package/tracer-viewer-bundle/assets/slack-ochin-DqwNpetd.js.map +1 -0
- package/tracer-viewer-bundle/assets/smalltalk-BERRCDM3.js +13 -0
- package/tracer-viewer-bundle/assets/smalltalk-BERRCDM3.js.map +1 -0
- package/tracer-viewer-bundle/assets/snazzy-light-Bw305WKR.js +12 -0
- package/tracer-viewer-bundle/assets/snazzy-light-Bw305WKR.js.map +1 -0
- package/tracer-viewer-bundle/assets/solarized-dark-DXbdFlpD.js +12 -0
- package/tracer-viewer-bundle/assets/solarized-dark-DXbdFlpD.js.map +1 -0
- package/tracer-viewer-bundle/assets/solarized-light-L9t79GZl.js +12 -0
- package/tracer-viewer-bundle/assets/solarized-light-L9t79GZl.js.map +1 -0
- package/tracer-viewer-bundle/assets/solidity-rGO070M0.js +13 -0
- package/tracer-viewer-bundle/assets/solidity-rGO070M0.js.map +1 -0
- package/tracer-viewer-bundle/assets/soy-8wufbnw4.js +16 -0
- package/tracer-viewer-bundle/assets/soy-8wufbnw4.js.map +1 -0
- package/tracer-viewer-bundle/assets/sparql-rVzFXLq3.js +14 -0
- package/tracer-viewer-bundle/assets/sparql-rVzFXLq3.js.map +1 -0
- package/tracer-viewer-bundle/assets/splunk-BtCnVYZw.js +13 -0
- package/tracer-viewer-bundle/assets/splunk-BtCnVYZw.js.map +1 -0
- package/tracer-viewer-bundle/assets/sql-BLtJtn59.js +13 -0
- package/tracer-viewer-bundle/assets/sql-BLtJtn59.js.map +1 -0
- package/tracer-viewer-bundle/assets/ssh-config-_ykCGR6B.js +13 -0
- package/tracer-viewer-bundle/assets/ssh-config-_ykCGR6B.js.map +1 -0
- package/tracer-viewer-bundle/assets/stata-BH5u7GGu.js +14 -0
- package/tracer-viewer-bundle/assets/stata-BH5u7GGu.js.map +1 -0
- package/tracer-viewer-bundle/assets/stylus-BEDo0Tqx.js +13 -0
- package/tracer-viewer-bundle/assets/stylus-BEDo0Tqx.js.map +1 -0
- package/tracer-viewer-bundle/assets/surrealql-Bq5Q-fJD.js +14 -0
- package/tracer-viewer-bundle/assets/surrealql-Bq5Q-fJD.js.map +1 -0
- package/tracer-viewer-bundle/assets/svelte-Cy7k_4gC.js +17 -0
- package/tracer-viewer-bundle/assets/svelte-Cy7k_4gC.js.map +1 -0
- package/tracer-viewer-bundle/assets/swift-D82vCrfD.js +13 -0
- package/tracer-viewer-bundle/assets/swift-D82vCrfD.js.map +1 -0
- package/tracer-viewer-bundle/assets/synthwave-84-CbfX1IO0.js +12 -0
- package/tracer-viewer-bundle/assets/synthwave-84-CbfX1IO0.js.map +1 -0
- package/tracer-viewer-bundle/assets/system-verilog-CnnmHF94.js +13 -0
- package/tracer-viewer-bundle/assets/system-verilog-CnnmHF94.js.map +1 -0
- package/tracer-viewer-bundle/assets/systemd-4A_iFExJ.js +13 -0
- package/tracer-viewer-bundle/assets/systemd-4A_iFExJ.js.map +1 -0
- package/tracer-viewer-bundle/assets/talonscript-CkByrt1z.js +13 -0
- package/tracer-viewer-bundle/assets/talonscript-CkByrt1z.js.map +1 -0
- package/tracer-viewer-bundle/assets/tasl-QIJgUcNo.js +13 -0
- package/tracer-viewer-bundle/assets/tasl-QIJgUcNo.js.map +1 -0
- package/tracer-viewer-bundle/assets/tcl-dwOrl1Do.js +13 -0
- package/tracer-viewer-bundle/assets/tcl-dwOrl1Do.js.map +1 -0
- package/tracer-viewer-bundle/assets/templ-DhtptRzy.js +16 -0
- package/tracer-viewer-bundle/assets/templ-DhtptRzy.js.map +1 -0
- package/tracer-viewer-bundle/assets/terraform-BETggiCN.js +13 -0
- package/tracer-viewer-bundle/assets/terraform-BETggiCN.js.map +1 -0
- package/tracer-viewer-bundle/assets/tex-idrVyKtj.js +14 -0
- package/tracer-viewer-bundle/assets/tex-idrVyKtj.js.map +1 -0
- package/tracer-viewer-bundle/assets/tokyo-night-hegEt444.js +12 -0
- package/tracer-viewer-bundle/assets/tokyo-night-hegEt444.js.map +1 -0
- package/tracer-viewer-bundle/assets/toml-vGWfd6FD.js +13 -0
- package/tracer-viewer-bundle/assets/toml-vGWfd6FD.js.map +1 -0
- package/tracer-viewer-bundle/assets/ts-tags-DQrlYJgV.js +52 -0
- package/tracer-viewer-bundle/assets/ts-tags-DQrlYJgV.js.map +1 -0
- package/tracer-viewer-bundle/assets/tsv-B_m7g4N7.js +13 -0
- package/tracer-viewer-bundle/assets/tsv-B_m7g4N7.js.map +1 -0
- package/tracer-viewer-bundle/assets/tsx-COt5Ahok.js +13 -0
- package/tracer-viewer-bundle/assets/tsx-COt5Ahok.js.map +1 -0
- package/tracer-viewer-bundle/assets/turtle-BsS91CYL.js +13 -0
- package/tracer-viewer-bundle/assets/turtle-BsS91CYL.js.map +1 -0
- package/tracer-viewer-bundle/assets/twig-xg9kU7Mw.js +36 -0
- package/tracer-viewer-bundle/assets/twig-xg9kU7Mw.js.map +1 -0
- package/tracer-viewer-bundle/assets/typescript-BPQ3VLAy.js +13 -0
- package/tracer-viewer-bundle/assets/typescript-BPQ3VLAy.js.map +1 -0
- package/tracer-viewer-bundle/assets/typespec-CAFt9gP4.js +13 -0
- package/tracer-viewer-bundle/assets/typespec-CAFt9gP4.js.map +1 -0
- package/tracer-viewer-bundle/assets/typst-DHCkPAjA.js +13 -0
- package/tracer-viewer-bundle/assets/typst-DHCkPAjA.js.map +1 -0
- package/tracer-viewer-bundle/assets/v-BcVCzyr7.js +13 -0
- package/tracer-viewer-bundle/assets/v-BcVCzyr7.js.map +1 -0
- package/tracer-viewer-bundle/assets/vala-CsfeWuGM.js +13 -0
- package/tracer-viewer-bundle/assets/vala-CsfeWuGM.js.map +1 -0
- package/tracer-viewer-bundle/assets/vb-D17OF-Vu.js +13 -0
- package/tracer-viewer-bundle/assets/vb-D17OF-Vu.js.map +1 -0
- package/tracer-viewer-bundle/assets/verilog-BQ8w6xss.js +13 -0
- package/tracer-viewer-bundle/assets/verilog-BQ8w6xss.js.map +1 -0
- package/tracer-viewer-bundle/assets/vesper-DU1UobuO.js +12 -0
- package/tracer-viewer-bundle/assets/vesper-DU1UobuO.js.map +1 -0
- package/tracer-viewer-bundle/assets/vhdl-CeAyd5Ju.js +13 -0
- package/tracer-viewer-bundle/assets/vhdl-CeAyd5Ju.js.map +1 -0
- package/tracer-viewer-bundle/assets/viml-CJc9bBzg.js +13 -0
- package/tracer-viewer-bundle/assets/viml-CJc9bBzg.js.map +1 -0
- package/tracer-viewer-bundle/assets/vitesse-black-Bkuqu6BP.js +12 -0
- package/tracer-viewer-bundle/assets/vitesse-black-Bkuqu6BP.js.map +1 -0
- package/tracer-viewer-bundle/assets/vitesse-dark-D0r3Knsf.js +12 -0
- package/tracer-viewer-bundle/assets/vitesse-dark-D0r3Knsf.js.map +1 -0
- package/tracer-viewer-bundle/assets/vitesse-light-CVO1_9PV.js +12 -0
- package/tracer-viewer-bundle/assets/vitesse-light-CVO1_9PV.js.map +1 -0
- package/tracer-viewer-bundle/assets/vue-D2xRrEX4.js +43 -0
- package/tracer-viewer-bundle/assets/vue-D2xRrEX4.js.map +1 -0
- package/tracer-viewer-bundle/assets/vue-html-AaS7Mt5G.js +14 -0
- package/tracer-viewer-bundle/assets/vue-html-AaS7Mt5G.js.map +1 -0
- package/tracer-viewer-bundle/assets/vue-vine-BoDAl6tE.js +19 -0
- package/tracer-viewer-bundle/assets/vue-vine-BoDAl6tE.js.map +1 -0
- package/tracer-viewer-bundle/assets/vyper-CDx5xZoG.js +13 -0
- package/tracer-viewer-bundle/assets/vyper-CDx5xZoG.js.map +1 -0
- package/tracer-viewer-bundle/assets/wasm-CG6Dc4jp.js +15 -0
- package/tracer-viewer-bundle/assets/wasm-CG6Dc4jp.js.map +1 -0
- package/tracer-viewer-bundle/assets/wasm-MzD3tlZU.js +13 -0
- package/tracer-viewer-bundle/assets/wasm-MzD3tlZU.js.map +1 -0
- package/tracer-viewer-bundle/assets/wenyan-BV7otONQ.js +13 -0
- package/tracer-viewer-bundle/assets/wenyan-BV7otONQ.js.map +1 -0
- package/tracer-viewer-bundle/assets/wgsl-Dx-B1_4e.js +13 -0
- package/tracer-viewer-bundle/assets/wgsl-Dx-B1_4e.js.map +1 -0
- package/tracer-viewer-bundle/assets/wikitext-BhOHFoWU.js +13 -0
- package/tracer-viewer-bundle/assets/wikitext-BhOHFoWU.js.map +1 -0
- package/tracer-viewer-bundle/assets/wit-5i3qLPDT.js +13 -0
- package/tracer-viewer-bundle/assets/wit-5i3qLPDT.js.map +1 -0
- package/tracer-viewer-bundle/assets/wolfram-lXgVvXCa.js +13 -0
- package/tracer-viewer-bundle/assets/wolfram-lXgVvXCa.js.map +1 -0
- package/tracer-viewer-bundle/assets/xml-sdJ4AIDG.js +14 -0
- package/tracer-viewer-bundle/assets/xml-sdJ4AIDG.js.map +1 -0
- package/tracer-viewer-bundle/assets/xsl-CtQFsRM5.js +15 -0
- package/tracer-viewer-bundle/assets/xsl-CtQFsRM5.js.map +1 -0
- package/tracer-viewer-bundle/assets/yaml-Buea-lGh.js +13 -0
- package/tracer-viewer-bundle/assets/yaml-Buea-lGh.js.map +1 -0
- package/tracer-viewer-bundle/assets/zenscript-DVFEvuxE.js +13 -0
- package/tracer-viewer-bundle/assets/zenscript-DVFEvuxE.js.map +1 -0
- package/tracer-viewer-bundle/assets/zig-VOosw3JB.js +13 -0
- package/tracer-viewer-bundle/assets/zig-VOosw3JB.js.map +1 -0
- 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
|
|
17
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
* (
|
|
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):
|
|
68
|
-
//
|
|
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
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
|
142
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|