@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
package/dist/infrastructure/playwright-locator-screenshot-adapter/screenshot-capture-session.js
CHANGED
|
@@ -41,16 +41,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
41
41
|
exports.ScreenshotCaptureSession = void 0;
|
|
42
42
|
// ScreenshotCaptureSession — one test's worth of locator-screenshot
|
|
43
43
|
// capture: output directory, monotonic per-test sequence, CDP cache,
|
|
44
|
-
//
|
|
45
|
-
//
|
|
44
|
+
// the callback that stamps the filename onto the active statement,
|
|
45
|
+
// and the best-effort timeout that caps every async the session
|
|
46
|
+
// awaits. The fixture creates one at test start and drops it at
|
|
46
47
|
// test teardown (via `setActiveCaptureSession`).
|
|
48
|
+
//
|
|
49
|
+
// One unified flow on every browser:
|
|
50
|
+
// 1. (optional) `scrollIntoViewIfNeeded` — caller-controlled via
|
|
51
|
+
// `scrollBeforeCapture`. Locator actions always scroll (mirrors
|
|
52
|
+
// Playwright's own actionability auto-scroll). Locator assertions
|
|
53
|
+
// scroll too, except for `toBeInViewport` / `not.toBeInViewport`
|
|
54
|
+
// where the wrapper opts out so it doesn't change the assertion
|
|
55
|
+
// outcome.
|
|
56
|
+
// 2. Measure the target's `boundingBox`.
|
|
57
|
+
// 3. Inject a `<div>` overlay at the target's document position
|
|
58
|
+
// (4px magenta border + faint translucent fill). See
|
|
59
|
+
// `overlay-helpers.ts` for the page-side draw/remove pair.
|
|
60
|
+
// 4. Take a viewport screenshot — via CDP `Page.captureScreenshot`
|
|
61
|
+
// when available (Chromium; avoids the headed-mode
|
|
62
|
+
// `Emulation.setDeviceMetricsOverride` resize that
|
|
63
|
+
// `page.screenshot` triggers), else `page.screenshot` fallback
|
|
64
|
+
// (Firefox/WebKit).
|
|
65
|
+
// 5. Return a cleanup closure that removes the overlay after the
|
|
66
|
+
// caller's action/assertion completes.
|
|
67
|
+
//
|
|
68
|
+
// CDP `Overlay.highlightNode` is *not* used. It paints box-model
|
|
69
|
+
// regions with colors and has no native "outline around the
|
|
70
|
+
// element" mode, so the highlight is invisible on elements without
|
|
71
|
+
// a CSS border at our chosen translucent alpha. Going through the
|
|
72
|
+
// `<div>` overlay produces a visible frame on every browser without
|
|
73
|
+
// caring about the element's CSS.
|
|
74
|
+
//
|
|
75
|
+
// Every async this session awaits is capped at `screenshotTimeoutMs`
|
|
76
|
+
// — `scrollIntoViewIfNeeded`, `boundingBox`, every CDP `send`,
|
|
77
|
+
// `newCDPSession`, the `page.screenshot` fallback, and the
|
|
78
|
+
// overlay's `page.evaluate` (draw / remove). Decoration must
|
|
79
|
+
// always fail-fast: the user's actionTimeout governs the action,
|
|
80
|
+
// this timeout governs the tracer.
|
|
47
81
|
const fs = __importStar(require("fs"));
|
|
48
82
|
const path = __importStar(require("path"));
|
|
49
83
|
const overlay_helpers_1 = require("./overlay-helpers");
|
|
84
|
+
const with_timeout_1 = require("../../util/with-timeout");
|
|
85
|
+
const logger_1 = require("../../util/logger");
|
|
50
86
|
class ScreenshotCaptureSession {
|
|
51
|
-
constructor(outputDir, onScreenshotWritten) {
|
|
87
|
+
constructor(outputDir, onScreenshotWritten, screenshotTimeoutMs) {
|
|
52
88
|
this.outputDir = outputDir;
|
|
53
89
|
this.onScreenshotWritten = onScreenshotWritten;
|
|
90
|
+
this.screenshotTimeoutMs = screenshotTimeoutMs;
|
|
54
91
|
this.seq = 0;
|
|
55
92
|
// Per-page CDP session cache. `page.screenshot()` in headed mode forces
|
|
56
93
|
// the configured viewport via `Emulation.setDeviceMetricsOverride`,
|
|
@@ -60,48 +97,79 @@ class ScreenshotCaptureSession {
|
|
|
60
97
|
// retrying and fall back to `page.screenshot`.
|
|
61
98
|
this.cdpSessionCache = new WeakMap();
|
|
62
99
|
}
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
async captureWithHighlight(page, target, actionName) {
|
|
100
|
+
// Returns a cleanup closure to call after the action/assertion
|
|
101
|
+
// completes (caller invokes it in `finally`), or `null` if no
|
|
102
|
+
// cleanup is needed (capture-not-attempted cases).
|
|
103
|
+
async captureWithHighlight(page, target, actionName, options) {
|
|
104
|
+
if (options.scrollBeforeCapture && typeof target.scrollIntoViewIfNeeded === 'function') {
|
|
105
|
+
try {
|
|
106
|
+
await target.scrollIntoViewIfNeeded({ timeout: this.screenshotTimeoutMs });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
// Best-effort. If this fails, the target may be off-viewport
|
|
110
|
+
// in the screenshot — but Playwright's own actionability
|
|
111
|
+
// check still runs against the user's full actionTimeout
|
|
112
|
+
// when the action proceeds, so the test is unaffected.
|
|
113
|
+
logger_1.log.warn(`scrollIntoViewIfNeeded failed before ${actionName} screenshot`, err);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const box = await this.measureBox(target);
|
|
117
|
+
if (!box)
|
|
118
|
+
return null;
|
|
119
|
+
const seq = ++this.seq;
|
|
120
|
+
const filename = `highlight-${seq}-${actionName}.png`;
|
|
121
|
+
const fullPath = path.join(this.outputDir, filename);
|
|
122
|
+
return this.drawAndScreenshot(page, seq, box, filename, fullPath);
|
|
123
|
+
}
|
|
124
|
+
async measureBox(target) {
|
|
67
125
|
if (typeof target.boundingBox !== 'function')
|
|
68
126
|
return null;
|
|
69
|
-
let box;
|
|
70
127
|
try {
|
|
71
|
-
|
|
128
|
+
return await target.boundingBox({ timeout: this.screenshotTimeoutMs });
|
|
72
129
|
}
|
|
73
|
-
catch (
|
|
130
|
+
catch (err) {
|
|
131
|
+
logger_1.log.warn('measureBox boundingBox threw — skipping highlight overlay', err);
|
|
74
132
|
return null;
|
|
75
133
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const seq = ++this.seq;
|
|
134
|
+
}
|
|
135
|
+
async drawAndScreenshot(page, seq, box, filename, fullPath) {
|
|
79
136
|
const nodeId = `_heal_draw_area_tracer_${seq}`;
|
|
80
137
|
try {
|
|
81
|
-
await (0, overlay_helpers_1.drawOverlay)(page, nodeId, box);
|
|
138
|
+
await (0, overlay_helpers_1.drawOverlay)(page, nodeId, box, this.screenshotTimeoutMs);
|
|
82
139
|
}
|
|
83
|
-
catch (
|
|
140
|
+
catch (err) {
|
|
141
|
+
logger_1.log.warn('drawOverlay threw — skipping highlight screenshot', err);
|
|
84
142
|
return null;
|
|
85
143
|
}
|
|
86
144
|
try {
|
|
87
|
-
const filename = `highlight-${seq}-${actionName}.png`;
|
|
88
|
-
const fullPath = path.join(this.outputDir, filename);
|
|
89
145
|
await this.takeScreenshot(page, fullPath);
|
|
90
146
|
this.onScreenshotWritten(filename);
|
|
91
147
|
}
|
|
92
|
-
catch (
|
|
93
|
-
// Overlay
|
|
148
|
+
catch (err) {
|
|
149
|
+
// Overlay drawn; the cleanup closure below still removes it.
|
|
150
|
+
logger_1.log.warn('takeScreenshot threw after overlay was drawn', err);
|
|
94
151
|
}
|
|
95
|
-
return nodeId;
|
|
152
|
+
return () => (0, overlay_helpers_1.removeOverlay)(page, nodeId, this.screenshotTimeoutMs);
|
|
96
153
|
}
|
|
97
154
|
async takeScreenshot(page, fullPath) {
|
|
98
155
|
const cdp = await this.getCDPSession(page);
|
|
99
156
|
if (cdp) {
|
|
100
|
-
const
|
|
101
|
-
|
|
157
|
+
const shotResp = (await this.cdpSend(cdp, 'Page.captureScreenshot', {
|
|
158
|
+
format: 'png',
|
|
159
|
+
}));
|
|
160
|
+
await fs.promises.writeFile(fullPath, Buffer.from(shotResp.data, 'base64'));
|
|
102
161
|
return;
|
|
103
162
|
}
|
|
104
|
-
await page.screenshot({ path: fullPath });
|
|
163
|
+
await page.screenshot({ path: fullPath, timeout: this.screenshotTimeoutMs });
|
|
164
|
+
}
|
|
165
|
+
// Promise.race wrapper around `cdp.send`. CDP itself has no
|
|
166
|
+
// protocol-level timeout; a wedged renderer or unhandled `alert()`
|
|
167
|
+
// would otherwise block forever. Returns `unknown` because
|
|
168
|
+
// CDPSession.send is overloaded per-command and cannot be wrapped
|
|
169
|
+
// generically without losing the per-command return shape — call
|
|
170
|
+
// sites that need typed fields cast.
|
|
171
|
+
cdpSend(cdp, method, params) {
|
|
172
|
+
return (0, with_timeout_1.withTimeout)(cdp.send.call(cdp, method, params), this.screenshotTimeoutMs, `cdp.send(${method})`);
|
|
105
173
|
}
|
|
106
174
|
async getCDPSession(page) {
|
|
107
175
|
if (this.cdpSessionCache.has(page))
|
|
@@ -112,11 +180,12 @@ class ScreenshotCaptureSession {
|
|
|
112
180
|
this.cdpSessionCache.set(page, null);
|
|
113
181
|
return null;
|
|
114
182
|
}
|
|
115
|
-
const session = await ctx.newCDPSession(page);
|
|
183
|
+
const session = await (0, with_timeout_1.withTimeout)(ctx.newCDPSession(page), this.screenshotTimeoutMs, 'newCDPSession');
|
|
116
184
|
this.cdpSessionCache.set(page, session);
|
|
117
185
|
return session;
|
|
118
186
|
}
|
|
119
|
-
catch (
|
|
187
|
+
catch (err) {
|
|
188
|
+
logger_1.log.warn('newCDPSession failed; falling back to page.screenshot for this page', err);
|
|
120
189
|
this.cdpSessionCache.set(page, null);
|
|
121
190
|
return null;
|
|
122
191
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 { NetworkBodyPreview } from '../../domain/trace-event-recorder/model/network-trace-schema';
|
|
7
|
+
export declare const DEFAULT_TEXTUAL_CONTENT_TYPES: readonly RegExp[];
|
|
8
|
+
/**
|
|
9
|
+
* Decide whether a `Content-Type` header maps to a textual body that
|
|
10
|
+
* can be safely inlined as a UTF-8 preview. Anything else (images,
|
|
11
|
+
* video, octet-stream, application/zip) returns `false`.
|
|
12
|
+
*
|
|
13
|
+
* Allowlist may be `undefined` to mean "use defaults". An empty array
|
|
14
|
+
* means "no content type is allowed" — useful for users who want
|
|
15
|
+
* `bytes`-only records.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isTextualContentType(contentType: string | undefined, allowlist: readonly RegExp[] | undefined): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Trim a `Buffer` to at most `maxBytes` and decode as UTF-8 without
|
|
20
|
+
* cutting through a multi-byte codepoint. Walks back from the cap to
|
|
21
|
+
* the most recent leading byte, then keeps the codepoint only if all
|
|
22
|
+
* of its continuation bytes fall within the slice — otherwise the
|
|
23
|
+
* codepoint is dropped entirely. Avoids the `�` replacement
|
|
24
|
+
* characters Node would emit for a mid-codepoint cut.
|
|
25
|
+
*/
|
|
26
|
+
export declare function utf8SafeSlice(buf: Buffer, maxBytes: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Build a `NetworkBodyPreview` from a `Buffer`. The buffer is
|
|
29
|
+
* truncated at `maxBodyBytes` if larger; `bytes` reports the total,
|
|
30
|
+
* `truncated` flips when the cap was hit, and `preview` carries the
|
|
31
|
+
* UTF-8 view (only when the content type was already deemed textual).
|
|
32
|
+
*
|
|
33
|
+
* `decodeAsText: false` means the caller already knows the body is
|
|
34
|
+
* binary and just wants size accounting — this returns the preview
|
|
35
|
+
* with `bytes` set and no `preview` string.
|
|
36
|
+
*/
|
|
37
|
+
export declare function previewBody(buf: Buffer, maxBodyBytes: number, decodeAsText: boolean): NetworkBodyPreview;
|
|
38
|
+
/**
|
|
39
|
+
* Helper used by the adapter when only `Content-Length` is available
|
|
40
|
+
* (e.g. body capture is `'never'`). Records the size without ever
|
|
41
|
+
* reading the buffer.
|
|
42
|
+
*/
|
|
43
|
+
export declare function bytesOnlyPreview(bytes: number | undefined): NetworkBodyPreview | undefined;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright: (c) Myia SAS 2026.
|
|
4
|
+
* This file and its contents are licensed under the AGPLv3 License.
|
|
5
|
+
* Please see the LICENSE file at the root of this repository
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DEFAULT_TEXTUAL_CONTENT_TYPES = void 0;
|
|
9
|
+
exports.isTextualContentType = isTextualContentType;
|
|
10
|
+
exports.utf8SafeSlice = utf8SafeSlice;
|
|
11
|
+
exports.previewBody = previewBody;
|
|
12
|
+
exports.bytesOnlyPreview = bytesOnlyPreview;
|
|
13
|
+
exports.DEFAULT_TEXTUAL_CONTENT_TYPES = Object.freeze([
|
|
14
|
+
/^text\//i,
|
|
15
|
+
/^application\/json\b/i,
|
|
16
|
+
/^application\/(?:[\w.+-]+\+)?xml\b/i,
|
|
17
|
+
/^application\/x-www-form-urlencoded\b/i,
|
|
18
|
+
/^application\/javascript\b/i,
|
|
19
|
+
/^application\/graphql\b/i,
|
|
20
|
+
]);
|
|
21
|
+
/**
|
|
22
|
+
* Decide whether a `Content-Type` header maps to a textual body that
|
|
23
|
+
* can be safely inlined as a UTF-8 preview. Anything else (images,
|
|
24
|
+
* video, octet-stream, application/zip) returns `false`.
|
|
25
|
+
*
|
|
26
|
+
* Allowlist may be `undefined` to mean "use defaults". An empty array
|
|
27
|
+
* means "no content type is allowed" — useful for users who want
|
|
28
|
+
* `bytes`-only records.
|
|
29
|
+
*/
|
|
30
|
+
function isTextualContentType(contentType, allowlist) {
|
|
31
|
+
if (!contentType)
|
|
32
|
+
return false;
|
|
33
|
+
const list = allowlist ?? exports.DEFAULT_TEXTUAL_CONTENT_TYPES;
|
|
34
|
+
return list.some((re) => re.test(contentType));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Trim a `Buffer` to at most `maxBytes` and decode as UTF-8 without
|
|
38
|
+
* cutting through a multi-byte codepoint. Walks back from the cap to
|
|
39
|
+
* the most recent leading byte, then keeps the codepoint only if all
|
|
40
|
+
* of its continuation bytes fall within the slice — otherwise the
|
|
41
|
+
* codepoint is dropped entirely. Avoids the `�` replacement
|
|
42
|
+
* characters Node would emit for a mid-codepoint cut.
|
|
43
|
+
*/
|
|
44
|
+
function utf8SafeSlice(buf, maxBytes) {
|
|
45
|
+
const end = Math.min(buf.length, maxBytes);
|
|
46
|
+
if (end === 0)
|
|
47
|
+
return '';
|
|
48
|
+
// Walk back to the leading byte of the last codepoint touched by
|
|
49
|
+
// the slice. Continuation bytes have the bit pattern 10xxxxxx;
|
|
50
|
+
// every other top-2-bit pattern (00, 11) is a starter.
|
|
51
|
+
let leadingIdx = end - 1;
|
|
52
|
+
while (leadingIdx > 0 && (buf[leadingIdx] & 0xc0) === 0x80) {
|
|
53
|
+
leadingIdx--;
|
|
54
|
+
}
|
|
55
|
+
const leadingByte = buf[leadingIdx];
|
|
56
|
+
let codepointBytes;
|
|
57
|
+
if ((leadingByte & 0x80) === 0) {
|
|
58
|
+
codepointBytes = 1; // 0xxxxxxx — ASCII
|
|
59
|
+
}
|
|
60
|
+
else if ((leadingByte & 0xe0) === 0xc0) {
|
|
61
|
+
codepointBytes = 2; // 110xxxxx
|
|
62
|
+
}
|
|
63
|
+
else if ((leadingByte & 0xf0) === 0xe0) {
|
|
64
|
+
codepointBytes = 3; // 1110xxxx
|
|
65
|
+
}
|
|
66
|
+
else if ((leadingByte & 0xf8) === 0xf0) {
|
|
67
|
+
codepointBytes = 4; // 11110xxx
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
codepointBytes = 1; // invalid leading byte; treat as one-byte unit
|
|
71
|
+
}
|
|
72
|
+
const codepointEnd = leadingIdx + codepointBytes;
|
|
73
|
+
// If the codepoint extends past our cap, drop it; otherwise keep
|
|
74
|
+
// every byte we have, which now includes a complete final codepoint.
|
|
75
|
+
const cut = codepointEnd <= end ? end : leadingIdx;
|
|
76
|
+
return buf.toString('utf8', 0, cut);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build a `NetworkBodyPreview` from a `Buffer`. The buffer is
|
|
80
|
+
* truncated at `maxBodyBytes` if larger; `bytes` reports the total,
|
|
81
|
+
* `truncated` flips when the cap was hit, and `preview` carries the
|
|
82
|
+
* UTF-8 view (only when the content type was already deemed textual).
|
|
83
|
+
*
|
|
84
|
+
* `decodeAsText: false` means the caller already knows the body is
|
|
85
|
+
* binary and just wants size accounting — this returns the preview
|
|
86
|
+
* with `bytes` set and no `preview` string.
|
|
87
|
+
*/
|
|
88
|
+
function previewBody(buf, maxBodyBytes, decodeAsText) {
|
|
89
|
+
const bytes = buf.length;
|
|
90
|
+
const truncated = bytes > maxBodyBytes;
|
|
91
|
+
const preview = decodeAsText ? utf8SafeSlice(buf, maxBodyBytes) : undefined;
|
|
92
|
+
return {
|
|
93
|
+
bytes,
|
|
94
|
+
truncated,
|
|
95
|
+
...(preview !== undefined ? { preview } : {}),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Helper used by the adapter when only `Content-Length` is available
|
|
100
|
+
* (e.g. body capture is `'never'`). Records the size without ever
|
|
101
|
+
* reading the buffer.
|
|
102
|
+
*/
|
|
103
|
+
function bytesOnlyPreview(bytes) {
|
|
104
|
+
if (bytes === undefined || Number.isNaN(bytes))
|
|
105
|
+
return undefined;
|
|
106
|
+
return { bytes, truncated: false };
|
|
107
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
export { NetworkCaptureSession } from './network-capture-session';
|
|
7
|
+
export type { NetworkCaptureDeps } from './network-capture-session';
|
|
8
|
+
export { NetworkCoalescer } from './network-coalescer';
|
|
9
|
+
export { redactHeaders, DEFAULT_REDACT_HEADERS } from './redaction';
|
|
10
|
+
export { isTextualContentType, previewBody, utf8SafeSlice, DEFAULT_TEXTUAL_CONTENT_TYPES, } from './body-preview';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright: (c) Myia SAS 2026.
|
|
4
|
+
* This file and its contents are licensed under the AGPLv3 License.
|
|
5
|
+
* Please see the LICENSE file at the root of this repository
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.DEFAULT_TEXTUAL_CONTENT_TYPES = exports.utf8SafeSlice = exports.previewBody = exports.isTextualContentType = exports.DEFAULT_REDACT_HEADERS = exports.redactHeaders = exports.NetworkCoalescer = exports.NetworkCaptureSession = void 0;
|
|
9
|
+
// Feature: network capture — sidecar NDJSON stream of one record per
|
|
10
|
+
// HTTP exchange that fired during a test (browser-context traffic +
|
|
11
|
+
// runner-side `playwright.request` traffic).
|
|
12
|
+
//
|
|
13
|
+
// Public surface is the `NetworkCaptureSession` class. The fixture
|
|
14
|
+
// owns construction, attachment to BrowserContexts /
|
|
15
|
+
// APIRequestContexts, and the `stop(testFailed)` call at teardown.
|
|
16
|
+
var network_capture_session_1 = require("./network-capture-session");
|
|
17
|
+
Object.defineProperty(exports, "NetworkCaptureSession", { enumerable: true, get: function () { return network_capture_session_1.NetworkCaptureSession; } });
|
|
18
|
+
var network_coalescer_1 = require("./network-coalescer");
|
|
19
|
+
Object.defineProperty(exports, "NetworkCoalescer", { enumerable: true, get: function () { return network_coalescer_1.NetworkCoalescer; } });
|
|
20
|
+
var redaction_1 = require("./redaction");
|
|
21
|
+
Object.defineProperty(exports, "redactHeaders", { enumerable: true, get: function () { return redaction_1.redactHeaders; } });
|
|
22
|
+
Object.defineProperty(exports, "DEFAULT_REDACT_HEADERS", { enumerable: true, get: function () { return redaction_1.DEFAULT_REDACT_HEADERS; } });
|
|
23
|
+
var body_preview_1 = require("./body-preview");
|
|
24
|
+
Object.defineProperty(exports, "isTextualContentType", { enumerable: true, get: function () { return body_preview_1.isTextualContentType; } });
|
|
25
|
+
Object.defineProperty(exports, "previewBody", { enumerable: true, get: function () { return body_preview_1.previewBody; } });
|
|
26
|
+
Object.defineProperty(exports, "utf8SafeSlice", { enumerable: true, get: function () { return body_preview_1.utf8SafeSlice; } });
|
|
27
|
+
Object.defineProperty(exports, "DEFAULT_TEXTUAL_CONTENT_TYPES", { enumerable: true, get: function () { return body_preview_1.DEFAULT_TEXTUAL_CONTENT_TYPES; } });
|
|
@@ -0,0 +1,55 @@
|
|
|
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 { APIRequestContext, BrowserContext } from 'playwright';
|
|
7
|
+
import type { HealTracerNetworkConfig } from '../../application/heal-config/types';
|
|
8
|
+
import type { Clock } from '../../domain/trace-event-recorder/port/clock';
|
|
9
|
+
export interface NetworkCaptureDeps {
|
|
10
|
+
clock: Clock;
|
|
11
|
+
startedAt: number;
|
|
12
|
+
getCurrentStatementSeq: () => number | undefined;
|
|
13
|
+
getCurrentStepPath: () => string[] | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare class NetworkCaptureSession {
|
|
16
|
+
private readonly ndjsonPath;
|
|
17
|
+
private readonly deps;
|
|
18
|
+
private fd;
|
|
19
|
+
private closed;
|
|
20
|
+
private readonly contexts;
|
|
21
|
+
private readonly apiContexts;
|
|
22
|
+
private readonly apiPatches;
|
|
23
|
+
private apiCounter;
|
|
24
|
+
private readonly coalescer;
|
|
25
|
+
private readonly bufferedBodies;
|
|
26
|
+
private readonly bodyMode;
|
|
27
|
+
private readonly maxBodyBytes;
|
|
28
|
+
private readonly extraDenylist;
|
|
29
|
+
private readonly contentTypeAllowlist;
|
|
30
|
+
private readonly urlFilter;
|
|
31
|
+
constructor(ndjsonPath: string, deps: NetworkCaptureDeps, config: HealTracerNetworkConfig);
|
|
32
|
+
attachToContext(ctx: BrowserContext): void;
|
|
33
|
+
attachToApiRequestContext(api: APIRequestContext): void;
|
|
34
|
+
private beginApiRecord;
|
|
35
|
+
private completeApiRecord;
|
|
36
|
+
private failApiRecord;
|
|
37
|
+
private snapshotApiCorrelation;
|
|
38
|
+
private handleRequest;
|
|
39
|
+
private handleResponse;
|
|
40
|
+
private handleRequestFinished;
|
|
41
|
+
private handleRequestFailed;
|
|
42
|
+
private snapshotCorrelation;
|
|
43
|
+
private write;
|
|
44
|
+
/**
|
|
45
|
+
* Drain any pending exchanges (writing them as-is) and, when the
|
|
46
|
+
* test ended in a failing status and `bodyMode === 'on-error'`,
|
|
47
|
+
* flush buffered bodies as `network-body` records. Idempotent.
|
|
48
|
+
*
|
|
49
|
+
* The body is currently fully synchronous (every disk write is
|
|
50
|
+
* `fs.writeSync`); the `Promise<void>` return type is preserved so
|
|
51
|
+
* the fixture can await it under `withTimeout` exactly like
|
|
52
|
+
* `projector.finalize`.
|
|
53
|
+
*/
|
|
54
|
+
stop(testFailed: boolean): Promise<void>;
|
|
55
|
+
}
|