@midscene/core 1.12.10-beta-20260920031616.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/agent/agent.mjs +103 -6
- package/dist/es/agent/agent.mjs.map +1 -1
- package/dist/es/agent/index.mjs +4 -3
- package/dist/es/agent/tasks.mjs +2 -2
- package/dist/es/agent/tasks.mjs.map +1 -1
- package/dist/es/agent/test-runner-nodes.mjs +291 -40
- package/dist/es/agent/test-runner-nodes.mjs.map +1 -1
- package/dist/es/agent/utils.mjs +1 -1
- package/dist/es/device/index.mjs +15 -2
- package/dist/es/device/index.mjs.map +1 -1
- package/dist/es/dump/html-utils.mjs +37 -4
- package/dist/es/dump/html-utils.mjs.map +1 -1
- package/dist/es/dump/screenshot-store.mjs +8 -1
- package/dist/es/dump/screenshot-store.mjs.map +1 -1
- package/dist/es/report-cli.mjs +9 -4
- package/dist/es/report-cli.mjs.map +1 -1
- package/dist/es/report-generator.mjs +117 -4
- package/dist/es/report-generator.mjs.map +1 -1
- package/dist/es/report-html-template.mjs +1 -1
- package/dist/es/report.mjs +190 -41
- package/dist/es/report.mjs.map +1 -1
- package/dist/es/test-run-report.mjs.map +1 -1
- package/dist/es/test-runner/engine/case-runner.mjs +52 -0
- package/dist/es/test-runner/engine/case-runner.mjs.map +1 -0
- package/dist/es/test-runner/engine/document-runtime.mjs +273 -0
- package/dist/es/test-runner/engine/document-runtime.mjs.map +1 -0
- package/dist/es/test-runner/engine/execute-step.mjs +177 -0
- package/dist/es/test-runner/engine/execute-step.mjs.map +1 -0
- package/dist/es/test-runner/engine/execution-failure.mjs +39 -0
- package/dist/es/test-runner/engine/execution-failure.mjs.map +1 -0
- package/dist/es/test-runner/engine/index.mjs +12 -0
- package/dist/es/test-runner/engine/project-runtime.mjs +142 -0
- package/dist/es/test-runner/engine/project-runtime.mjs.map +1 -0
- package/dist/es/test-runner/engine/registry.mjs +61 -0
- package/dist/es/test-runner/engine/registry.mjs.map +1 -0
- package/dist/es/test-runner/engine/resource-operations.mjs +211 -0
- package/dist/es/test-runner/engine/resource-operations.mjs.map +1 -0
- package/dist/es/test-runner/engine/run-collected-case.mjs +193 -0
- package/dist/es/test-runner/engine/run-collected-case.mjs.map +1 -0
- package/dist/es/test-runner/engine/run-workflow-document.mjs +155 -0
- package/dist/es/test-runner/engine/run-workflow-document.mjs.map +1 -0
- package/dist/es/test-runner/engine/scheduler.mjs +27 -0
- package/dist/es/test-runner/engine/scheduler.mjs.map +1 -0
- package/dist/es/test-runner/engine/scope-teardown.mjs +16 -0
- package/dist/es/test-runner/engine/scope-teardown.mjs.map +1 -0
- package/dist/es/test-runner/engine/types.mjs +0 -0
- package/dist/es/test-runner/errors.mjs +201 -0
- package/dist/es/test-runner/errors.mjs.map +1 -0
- package/dist/es/test-runner/execution-record.mjs +83 -0
- package/dist/es/test-runner/execution-record.mjs.map +1 -0
- package/dist/es/test-runner/index.mjs +12 -0
- package/dist/es/test-runner/node/define-node.mjs +44 -0
- package/dist/es/test-runner/node/define-node.mjs.map +1 -0
- package/dist/es/test-runner/node/index.mjs +2 -0
- package/dist/es/test-runner/node/types.mjs +0 -0
- package/dist/es/test-runner/parser/document-format.mjs +21 -0
- package/dist/es/test-runner/parser/document-format.mjs.map +1 -0
- package/dist/es/test-runner/parser/normalize.mjs +87 -0
- package/dist/es/test-runner/parser/normalize.mjs.map +1 -0
- package/dist/es/test-runner/parser/types.mjs +0 -0
- package/dist/es/test-runner/project.mjs +0 -0
- package/dist/es/test-runner/reporting/agent-report.mjs +23 -0
- package/dist/es/test-runner/reporting/agent-report.mjs.map +1 -0
- package/dist/es/test-runner/reporting/execution-record.mjs +73 -0
- package/dist/es/test-runner/reporting/execution-record.mjs.map +1 -0
- package/dist/es/test-runner/reporting/merge-report.mjs +231 -0
- package/dist/es/test-runner/reporting/merge-report.mjs.map +1 -0
- package/dist/es/test-runner/reporting/sanitize.mjs +162 -0
- package/dist/es/test-runner/reporting/sanitize.mjs.map +1 -0
- package/dist/es/test-runner/reporting/test-run-report.mjs +327 -0
- package/dist/es/test-runner/reporting/test-run-report.mjs.map +1 -0
- package/dist/es/test-runner/reporting/types.mjs +0 -0
- package/dist/es/utils.mjs +1 -1
- package/dist/es/yaml/execution-context.node.mjs +6 -0
- package/dist/es/yaml/execution-context.node.mjs.map +1 -0
- package/dist/es/yaml/execution-context.stub.mjs +8 -0
- package/dist/es/yaml/execution-context.stub.mjs.map +1 -0
- package/dist/es/yaml/execution-session.mjs +90 -0
- package/dist/es/yaml/execution-session.mjs.map +1 -0
- package/dist/es/yaml/index.mjs +2 -1
- package/dist/es/yaml/legacy-yaml-execution-record.mjs +47 -0
- package/dist/es/yaml/legacy-yaml-execution-record.mjs.map +1 -0
- package/dist/es/yaml/legacy-yaml-report.mjs +52 -0
- package/dist/es/yaml/legacy-yaml-report.mjs.map +1 -0
- package/dist/es/yaml/legacy-yaml-runtime.mjs +119 -0
- package/dist/es/yaml/legacy-yaml-runtime.mjs.map +1 -0
- package/dist/es/yaml/player-state.mjs +15 -0
- package/dist/es/yaml/player-state.mjs.map +1 -0
- package/dist/es/yaml/player.mjs +214 -348
- package/dist/es/yaml/player.mjs.map +1 -1
- package/dist/es/yaml/report-policy.mjs +7 -0
- package/dist/es/yaml/report-policy.mjs.map +1 -0
- package/dist/es/yaml/test-runner-compat.mjs +301 -0
- package/dist/es/yaml/test-runner-compat.mjs.map +1 -0
- package/dist/es/yaml/test-runner-nodes.mjs +147 -0
- package/dist/es/yaml/test-runner-nodes.mjs.map +1 -0
- package/dist/es/yaml/utils.mjs +12 -1
- package/dist/es/yaml/utils.mjs.map +1 -1
- package/dist/es/yaml-runtime.mjs +7 -0
- package/dist/es/yaml.mjs.map +1 -1
- package/dist/lib/agent/agent.js +103 -6
- package/dist/lib/agent/agent.js.map +1 -1
- package/dist/lib/agent/index.js +37 -3
- package/dist/lib/agent/tasks.js +2 -2
- package/dist/lib/agent/tasks.js.map +1 -1
- package/dist/lib/agent/test-runner-nodes.js +329 -45
- package/dist/lib/agent/test-runner-nodes.js.map +1 -1
- package/dist/lib/agent/utils.js +1 -1
- package/dist/lib/device/index.js +15 -2
- package/dist/lib/device/index.js.map +1 -1
- package/dist/lib/dump/html-utils.js +43 -4
- package/dist/lib/dump/html-utils.js.map +1 -1
- package/dist/lib/dump/screenshot-store.js +8 -1
- package/dist/lib/dump/screenshot-store.js.map +1 -1
- package/dist/lib/report-cli.js +8 -3
- package/dist/lib/report-cli.js.map +1 -1
- package/dist/lib/report-generator.js +114 -1
- package/dist/lib/report-generator.js.map +1 -1
- package/dist/lib/report-html-template.js +1 -1
- package/dist/lib/report.js +187 -38
- package/dist/lib/report.js.map +1 -1
- package/dist/lib/test-run-report.js.map +1 -1
- package/dist/lib/test-runner/engine/case-runner.js +89 -0
- package/dist/lib/test-runner/engine/case-runner.js.map +1 -0
- package/dist/lib/test-runner/engine/document-runtime.js +307 -0
- package/dist/lib/test-runner/engine/document-runtime.js.map +1 -0
- package/dist/lib/test-runner/engine/execute-step.js +211 -0
- package/dist/lib/test-runner/engine/execute-step.js.map +1 -0
- package/dist/lib/test-runner/engine/execution-failure.js +79 -0
- package/dist/lib/test-runner/engine/execution-failure.js.map +1 -0
- package/dist/lib/test-runner/engine/index.js +137 -0
- package/dist/lib/test-runner/engine/index.js.map +1 -0
- package/dist/lib/test-runner/engine/project-runtime.js +176 -0
- package/dist/lib/test-runner/engine/project-runtime.js.map +1 -0
- package/dist/lib/test-runner/engine/registry.js +95 -0
- package/dist/lib/test-runner/engine/registry.js.map +1 -0
- package/dist/lib/test-runner/engine/resource-operations.js +272 -0
- package/dist/lib/test-runner/engine/resource-operations.js.map +1 -0
- package/dist/lib/test-runner/engine/run-collected-case.js +227 -0
- package/dist/lib/test-runner/engine/run-collected-case.js.map +1 -0
- package/dist/lib/test-runner/engine/run-workflow-document.js +189 -0
- package/dist/lib/test-runner/engine/run-workflow-document.js.map +1 -0
- package/dist/lib/test-runner/engine/scheduler.js +64 -0
- package/dist/lib/test-runner/engine/scheduler.js.map +1 -0
- package/dist/lib/test-runner/engine/scope-teardown.js +50 -0
- package/dist/lib/test-runner/engine/scope-teardown.js.map +1 -0
- package/dist/lib/test-runner/engine/types.js +20 -0
- package/dist/lib/test-runner/engine/types.js.map +1 -0
- package/dist/lib/test-runner/errors.js +283 -0
- package/dist/lib/test-runner/errors.js.map +1 -0
- package/dist/lib/test-runner/execution-record.js +123 -0
- package/dist/lib/test-runner/execution-record.js.map +1 -0
- package/dist/lib/test-runner/index.js +137 -0
- package/dist/lib/test-runner/index.js.map +1 -0
- package/dist/lib/test-runner/node/define-node.js +78 -0
- package/dist/lib/test-runner/node/define-node.js.map +1 -0
- package/dist/lib/test-runner/node/index.js +67 -0
- package/dist/lib/test-runner/node/index.js.map +1 -0
- package/dist/lib/test-runner/node/types.js +20 -0
- package/dist/lib/test-runner/node/types.js.map +1 -0
- package/dist/lib/test-runner/parser/document-format.js +58 -0
- package/dist/lib/test-runner/parser/document-format.js.map +1 -0
- package/dist/lib/test-runner/parser/normalize.js +124 -0
- package/dist/lib/test-runner/parser/normalize.js.map +1 -0
- package/dist/lib/test-runner/parser/types.js +20 -0
- package/dist/lib/test-runner/parser/types.js.map +1 -0
- package/dist/lib/test-runner/project.js +20 -0
- package/dist/lib/test-runner/project.js.map +1 -0
- package/dist/lib/test-runner/reporting/agent-report.js +57 -0
- package/dist/lib/test-runner/reporting/agent-report.js.map +1 -0
- package/dist/lib/test-runner/reporting/execution-record.js +107 -0
- package/dist/lib/test-runner/reporting/execution-record.js.map +1 -0
- package/dist/lib/test-runner/reporting/merge-report.js +265 -0
- package/dist/lib/test-runner/reporting/merge-report.js.map +1 -0
- package/dist/lib/test-runner/reporting/sanitize.js +202 -0
- package/dist/lib/test-runner/reporting/sanitize.js.map +1 -0
- package/dist/lib/test-runner/reporting/test-run-report.js +364 -0
- package/dist/lib/test-runner/reporting/test-run-report.js.map +1 -0
- package/dist/lib/test-runner/reporting/types.js +20 -0
- package/dist/lib/test-runner/reporting/types.js.map +1 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/yaml/execution-context.node.js +43 -0
- package/dist/lib/yaml/execution-context.node.js.map +1 -0
- package/dist/lib/yaml/execution-context.stub.js +45 -0
- package/dist/lib/yaml/execution-context.stub.js.map +1 -0
- package/dist/lib/yaml/execution-session.js +136 -0
- package/dist/lib/yaml/execution-session.js.map +1 -0
- package/dist/lib/yaml/index.js +49 -7
- package/dist/lib/yaml/legacy-yaml-execution-record.js +81 -0
- package/dist/lib/yaml/legacy-yaml-execution-record.js.map +1 -0
- package/dist/lib/yaml/legacy-yaml-report.js +86 -0
- package/dist/lib/yaml/legacy-yaml-report.js.map +1 -0
- package/dist/lib/yaml/legacy-yaml-runtime.js +156 -0
- package/dist/lib/yaml/legacy-yaml-runtime.js.map +1 -0
- package/dist/lib/yaml/player-state.js +52 -0
- package/dist/lib/yaml/player-state.js.map +1 -0
- package/dist/lib/yaml/player.js +213 -347
- package/dist/lib/yaml/player.js.map +1 -1
- package/dist/lib/yaml/report-policy.js +41 -0
- package/dist/lib/yaml/report-policy.js.map +1 -0
- package/dist/lib/yaml/test-runner-compat.js +344 -0
- package/dist/lib/yaml/test-runner-compat.js.map +1 -0
- package/dist/lib/yaml/test-runner-nodes.js +184 -0
- package/dist/lib/yaml/test-runner-nodes.js.map +1 -0
- package/dist/lib/yaml/utils.js +18 -1
- package/dist/lib/yaml/utils.js.map +1 -1
- package/dist/lib/yaml-runtime.js +67 -0
- package/dist/lib/yaml-runtime.js.map +1 -0
- package/dist/lib/yaml.js.map +1 -1
- package/dist/types/agent/agent.d.ts +14 -1
- package/dist/types/agent/agent.d.ts.map +1 -1
- package/dist/types/agent/index.d.ts +4 -3
- package/dist/types/agent/index.d.ts.map +1 -1
- package/dist/types/agent/tasks.d.ts +1 -1
- package/dist/types/agent/tasks.d.ts.map +1 -1
- package/dist/types/agent/test-runner-nodes.d.ts +226 -0
- package/dist/types/agent/test-runner-nodes.d.ts.map +1 -1
- package/dist/types/device/index.d.ts +1 -1
- package/dist/types/device/index.d.ts.map +1 -1
- package/dist/types/dump/html-utils.d.ts +4 -0
- package/dist/types/dump/html-utils.d.ts.map +1 -1
- package/dist/types/dump/screenshot-store.d.ts +2 -1
- package/dist/types/dump/screenshot-store.d.ts.map +1 -1
- package/dist/types/report-cli.d.ts.map +1 -1
- package/dist/types/report-generator.d.ts +10 -0
- package/dist/types/report-generator.d.ts.map +1 -1
- package/dist/types/report.d.ts +3 -1
- package/dist/types/report.d.ts.map +1 -1
- package/dist/types/test-run-report.d.ts +18 -2
- package/dist/types/test-run-report.d.ts.map +1 -1
- package/dist/types/test-runner/engine/case-runner.d.ts +13 -0
- package/dist/types/test-runner/engine/case-runner.d.ts.map +1 -0
- package/dist/types/test-runner/engine/document-runtime.d.ts +4 -0
- package/dist/types/test-runner/engine/document-runtime.d.ts.map +1 -0
- package/dist/types/test-runner/engine/execute-step.d.ts +17 -0
- package/dist/types/test-runner/engine/execute-step.d.ts.map +1 -0
- package/dist/types/test-runner/engine/execution-failure.d.ts +13 -0
- package/dist/types/test-runner/engine/execution-failure.d.ts.map +1 -0
- package/dist/types/test-runner/engine/index.d.ts +13 -0
- package/dist/types/test-runner/engine/index.d.ts.map +1 -0
- package/dist/types/test-runner/engine/project-runtime.d.ts +3 -0
- package/dist/types/test-runner/engine/project-runtime.d.ts.map +1 -0
- package/dist/types/test-runner/engine/registry.d.ts +12 -0
- package/dist/types/test-runner/engine/registry.d.ts.map +1 -0
- package/dist/types/test-runner/engine/resource-operations.d.ts +32 -0
- package/dist/types/test-runner/engine/resource-operations.d.ts.map +1 -0
- package/dist/types/test-runner/engine/run-collected-case.d.ts +4 -0
- package/dist/types/test-runner/engine/run-collected-case.d.ts.map +1 -0
- package/dist/types/test-runner/engine/run-workflow-document.d.ts +4 -0
- package/dist/types/test-runner/engine/run-workflow-document.d.ts.map +1 -0
- package/dist/types/test-runner/engine/scheduler.d.ts +12 -0
- package/dist/types/test-runner/engine/scheduler.d.ts.map +1 -0
- package/dist/types/test-runner/engine/scope-teardown.d.ts +3 -0
- package/dist/types/test-runner/engine/scope-teardown.d.ts.map +1 -0
- package/dist/types/test-runner/engine/types.d.ts +226 -0
- package/dist/types/test-runner/engine/types.d.ts.map +1 -0
- package/dist/types/test-runner/errors.d.ts +79 -0
- package/dist/types/test-runner/errors.d.ts.map +1 -0
- package/dist/types/test-runner/execution-record.d.ts +43 -0
- package/dist/types/test-runner/execution-record.d.ts.map +1 -0
- package/dist/types/test-runner/index.d.ts +20 -0
- package/dist/types/test-runner/index.d.ts.map +1 -0
- package/dist/types/test-runner/node/define-node.d.ts +4 -0
- package/dist/types/test-runner/node/define-node.d.ts.map +1 -0
- package/dist/types/test-runner/node/index.d.ts +3 -0
- package/dist/types/test-runner/node/index.d.ts.map +1 -0
- package/dist/types/test-runner/node/types.d.ts +66 -0
- package/dist/types/test-runner/node/types.d.ts.map +1 -0
- package/dist/types/test-runner/parser/document-format.d.ts +8 -0
- package/dist/types/test-runner/parser/document-format.d.ts.map +1 -0
- package/dist/types/test-runner/parser/normalize.d.ts +9 -0
- package/dist/types/test-runner/parser/normalize.d.ts.map +1 -0
- package/dist/types/test-runner/parser/types.d.ts +69 -0
- package/dist/types/test-runner/parser/types.d.ts.map +1 -0
- package/dist/types/test-runner/project.d.ts +75 -0
- package/dist/types/test-runner/project.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/agent-report.d.ts +9 -0
- package/dist/types/test-runner/reporting/agent-report.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/execution-record.d.ts +9 -0
- package/dist/types/test-runner/reporting/execution-record.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/merge-report.d.ts +15 -0
- package/dist/types/test-runner/reporting/merge-report.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/sanitize.d.ts +6 -0
- package/dist/types/test-runner/reporting/sanitize.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/test-run-report.d.ts +5 -0
- package/dist/types/test-runner/reporting/test-run-report.d.ts.map +1 -0
- package/dist/types/test-runner/reporting/types.d.ts +34 -0
- package/dist/types/test-runner/reporting/types.d.ts.map +1 -0
- package/dist/types/yaml/execution-context.node.d.ts +4 -0
- package/dist/types/yaml/execution-context.node.d.ts.map +1 -0
- package/dist/types/yaml/execution-context.stub.d.ts +6 -0
- package/dist/types/yaml/execution-context.stub.d.ts.map +1 -0
- package/dist/types/yaml/execution-session.d.ts +17 -0
- package/dist/types/yaml/execution-session.d.ts.map +1 -0
- package/dist/types/yaml/index.d.ts +1 -1
- package/dist/types/yaml/index.d.ts.map +1 -1
- package/dist/types/yaml/legacy-yaml-execution-record.d.ts +24 -0
- package/dist/types/yaml/legacy-yaml-execution-record.d.ts.map +1 -0
- package/dist/types/yaml/legacy-yaml-report.d.ts +19 -0
- package/dist/types/yaml/legacy-yaml-report.d.ts.map +1 -0
- package/dist/types/yaml/legacy-yaml-runtime.d.ts +23 -0
- package/dist/types/yaml/legacy-yaml-runtime.d.ts.map +1 -0
- package/dist/types/yaml/player-state.d.ts +11 -0
- package/dist/types/yaml/player-state.d.ts.map +1 -0
- package/dist/types/yaml/player.d.ts +11 -3
- package/dist/types/yaml/player.d.ts.map +1 -1
- package/dist/types/yaml/report-policy.d.ts +4 -0
- package/dist/types/yaml/report-policy.d.ts.map +1 -0
- package/dist/types/yaml/test-runner-compat.d.ts +17 -0
- package/dist/types/yaml/test-runner-compat.d.ts.map +1 -0
- package/dist/types/yaml/test-runner-nodes.d.ts +6 -0
- package/dist/types/yaml/test-runner-nodes.d.ts.map +1 -0
- package/dist/types/yaml/utils.d.ts +9 -0
- package/dist/types/yaml/utils.d.ts.map +1 -1
- package/dist/types/yaml-runtime.d.ts +13 -0
- package/dist/types/yaml-runtime.d.ts.map +1 -0
- package/dist/types/yaml.d.ts +25 -7
- package/dist/types/yaml.d.ts.map +1 -1
- package/package.json +28 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner/reporting/merge-report.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/test-runner/reporting/merge-report.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n TestRunReportDocument,\n TestRunReportDump,\n TestRunReportMetrics,\n TestRunReportStep,\n} from '../../test-run-report';\nimport type { ReportFileAttributes } from '../../types';\n\nexport interface MergeTestRunReportSource {\n reportId: string;\n sourcePath: string;\n attributes: ReportFileAttributes;\n dump?: TestRunReportDump;\n timing?: { startedAt: string; endedAt: string; durationMs: number };\n}\n\nfunction agentReportAsTestRun(\n source: MergeTestRunReportSource,\n): Pick<TestRunReportDump, 'status' | 'summary' | 'projects'> &\n Partial<Pick<TestRunReportDump, 'startedAt' | 'endedAt' | 'diagnostics'>> {\n const { attributes, reportId } = source;\n const status =\n attributes.testStatus === 'skipped'\n ? 'not-run'\n : attributes.testStatus === 'passed'\n ? 'success'\n : 'failed';\n const failed = status === 'failed';\n return {\n status: failed ? 'failed' : 'success',\n ...source.timing,\n summary: {\n total: 1,\n passed: status === 'success' ? 1 : 0,\n failed: failed ? 1 : 0,\n notRun: status === 'not-run' ? 1 : 0,\n filtered: 0,\n collectionErrors: 0,\n documentFailures: 0,\n projectFailures: 0,\n },\n projects: [\n {\n projectId: 'agent-report',\n name: attributes.testTitle,\n platform: 'agent',\n status: failed ? 'failed' : 'success',\n retry: 0,\n collectionErrors: [],\n documents: [\n {\n documentId: 'agent-report',\n sourcePath: source.sourcePath,\n status: failed ? 'failed' : 'success',\n beforeAll: [],\n afterAll: [],\n scopeReportIds: [reportId],\n cases: [\n {\n caseId: attributes.testId,\n name: attributes.testTitle,\n caseIndex: 0,\n status,\n attempts:\n status === 'not-run' || !source.timing\n ? []\n : [\n {\n attemptId: 'agent-report',\n attemptIndex: 0,\n status,\n ...source.timing,\n beforeEach: [],\n steps: [],\n afterEach: [],\n scopeReportIds: [reportId],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n };\n}\n\nfunction retainHostFailure(\n source: MergeTestRunReportSource,\n): TestRunReportDump | undefined {\n const dump = source.dump;\n if (\n !dump ||\n dump.status === 'failed' ||\n !['failed', 'timedOut', 'interrupted'].includes(\n source.attributes.testStatus,\n )\n )\n return dump;\n\n const message = `Host test \"${source.attributes.testTitle}\" finished with status \"${source.attributes.testStatus}\".`;\n const projectIndex = dump.projects.length - 1;\n const project = dump.projects[projectIndex];\n const documentIndex = (project?.documents.length ?? 0) - 1;\n const document = project?.documents[documentIndex];\n const afterHost = <\n T extends Omit<TestRunReportDocument, 'cases' | 'attempts'>,\n >(\n value: T,\n ): T => ({\n ...value,\n status: 'failed',\n afterAll: [\n ...value.afterAll,\n {\n id: `${value.documentRunId ?? value.documentId}:host-result`,\n phase: 'afterAll',\n stepIndex: value.afterAll.length,\n node: 'runner:host-result',\n status: 'failed',\n continuedAfterError: false,\n startedAt: value.endedAt ?? dump.endedAt,\n endedAt: value.endedAt ?? dump.endedAt,\n durationMs: 0,\n error: { name: 'HostTestError', message },\n },\n ],\n });\n // The enclosing test can fail after YAML succeeds. Record that outcome at\n // the file boundary instead of changing successful actions or Case attempts.\n return {\n ...dump,\n status: 'failed',\n summary: {\n ...dump.summary,\n ...(document\n ? { documentFailures: dump.summary.documentFailures + 1 }\n : { projectFailures: dump.summary.projectFailures + 1 }),\n },\n projects: dump.projects.map((item, index) =>\n index !== projectIndex\n ? item\n : {\n ...item,\n status: 'failed',\n documents: item.documents.map((value, index) =>\n index !== documentIndex\n ? value\n : {\n ...afterHost(value),\n ...(value.attempts\n ? {\n attempts: value.attempts.map((attempt, index) =>\n index === value.attempts!.length - 1\n ? afterHost(attempt)\n : attempt,\n ),\n }\n : {}),\n },\n ),\n },\n ),\n diagnostics: [\n ...(dump.diagnostics ?? []),\n {\n level: 'error',\n code: 'run-infrastructure-error',\n message,\n },\n ],\n };\n}\n\nexport function mergeTestRunReportDumps(\n sources: readonly MergeTestRunReportSource[],\n metrics: TestRunReportMetrics,\n runId: string,\n): TestRunReportDump {\n const dumps = sources.map((source) => {\n if (\n source.dump &&\n (!Number.isFinite(Date.parse(source.dump.startedAt)) ||\n !Number.isFinite(Date.parse(source.dump.endedAt)) ||\n Date.parse(source.dump.endedAt) < Date.parse(source.dump.startedAt))\n )\n throw new Error(\n `Invalid execution timestamps in Midscene Test report: ${source.sourcePath}`,\n );\n const dump = retainHostFailure(source) ?? agentReportAsTestRun(source);\n const id = (value: string) => `${source.reportId}:${value}`;\n const scopeReports = (reportIds: string[] | undefined) =>\n reportIds?.length ? [source.reportId] : reportIds;\n const step = (value: TestRunReportStep): TestRunReportStep => ({\n ...value,\n id: id(value.id),\n ...(value.agentDetails\n ? {\n agentDetails: value.agentDetails.map((detail) => ({\n ...detail,\n reportId: source.reportId,\n })),\n }\n : {}),\n });\n const documentScope = <\n T extends Omit<TestRunReportDocument, 'cases' | 'attempts'>,\n >(\n value: T,\n ): T => ({\n ...value,\n documentId: id(value.documentId),\n ...(value.logicalDocumentId\n ? { logicalDocumentId: id(value.logicalDocumentId) }\n : {}),\n ...(value.documentRunId\n ? { documentRunId: id(value.documentRunId) }\n : {}),\n beforeAll: value.beforeAll.map(step),\n afterAll: value.afterAll.map(step),\n scopeReportIds: scopeReports(value.scopeReportIds),\n });\n // A file can already contain a merged run. Namespace hierarchy IDs while\n // keeping execution IDs stable: the latter also deduplicate shared snapshots.\n return {\n ...dump,\n projects: dump.projects.map((project) => ({\n ...project,\n projectId: id(project.projectId),\n documents: project.documents.map((document) => ({\n ...documentScope(document),\n ...(document.attempts\n ? { attempts: document.attempts.map(documentScope) }\n : {}),\n cases: document.cases.map((testCase) => ({\n ...testCase,\n caseId: id(testCase.caseId),\n attempts: testCase.attempts.map((attempt) => ({\n ...attempt,\n attemptId: id(attempt.attemptId),\n beforeEach: attempt.beforeEach.map(step),\n steps: attempt.steps.map(step),\n afterEach: attempt.afterEach.map(step),\n scopeReportIds: scopeReports(attempt.scopeReportIds),\n })),\n })),\n })),\n })),\n diagnostics: dump.diagnostics?.map((diagnostic) => ({\n ...diagnostic,\n ...(diagnostic.scopeId ? { scopeId: id(diagnostic.scopeId) } : {}),\n })),\n };\n });\n // A report without recorded timestamps contributes outcomes, not the time\n // at which an unrelated merge command happened to run.\n const recordedTimes = dumps.flatMap((dump) =>\n dump.startedAt && dump.endedAt\n ? [{ start: Date.parse(dump.startedAt), end: Date.parse(dump.endedAt) }]\n : [],\n );\n if (!recordedTimes.length)\n throw new Error(\n 'Cannot merge Midscene Test reports without recorded execution timestamps.',\n );\n const startedAt = new Date(\n Math.min(...recordedTimes.map((time) => time.start)),\n ).toISOString();\n const endedAt = new Date(\n Math.max(...recordedTimes.map((time) => time.end)),\n ).toISOString();\n const summary = {\n total: 0,\n passed: 0,\n failed: 0,\n notRun: 0,\n filtered: 0,\n collectionErrors: 0,\n documentFailures: 0,\n projectFailures: 0,\n };\n for (const dump of dumps) {\n for (const key of Object.keys(summary) as (keyof typeof summary)[])\n summary[key] += dump.summary[key];\n }\n const diagnostics = dumps.flatMap((dump) => dump.diagnostics ?? []);\n return {\n schemaVersion: 1,\n kind: 'test-runner',\n runId,\n status: dumps.some((dump) => dump.status === 'failed')\n ? 'failed'\n : 'success',\n startedAt,\n endedAt,\n durationMs: Math.max(0, Date.parse(endedAt) - Date.parse(startedAt)),\n summary,\n metrics,\n projects: dumps.flatMap((dump) => dump.projects),\n ...(diagnostics.length ? { diagnostics } : {}),\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","agentReportAsTestRun","source","attributes","reportId","status","failed","retainHostFailure","dump","message","projectIndex","project","documentIndex","document","afterHost","value","item","index","attempt","mergeTestRunReportDumps","sources","metrics","runId","dumps","Number","Date","Error","id","scopeReports","reportIds","step","detail","documentScope","testCase","diagnostic","recordedTimes","startedAt","Math","time","endedAt","summary","diagnostics"],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
sanitizeReportError: ()=>sanitizeReportError,
|
|
28
|
+
sanitizeReportText: ()=>sanitizeReportText,
|
|
29
|
+
sanitizeReportValue: ()=>sanitizeReportValue
|
|
30
|
+
});
|
|
31
|
+
const MAX_DEPTH = 6;
|
|
32
|
+
const MAX_STRING_LENGTH = 2000;
|
|
33
|
+
const MAX_ARRAY_ITEMS = 50;
|
|
34
|
+
const MAX_OBJECT_KEYS = 50;
|
|
35
|
+
const MAX_SERIALIZED_BYTES = 65536;
|
|
36
|
+
const TRUNCATED_VALUE = '[Truncated: display value exceeded 64 KiB]';
|
|
37
|
+
const normalizedSecretKeys = [
|
|
38
|
+
'password',
|
|
39
|
+
'passwd',
|
|
40
|
+
'secret',
|
|
41
|
+
'token',
|
|
42
|
+
'authorization',
|
|
43
|
+
'cookie',
|
|
44
|
+
'apikey'
|
|
45
|
+
];
|
|
46
|
+
const normalizedKey = (key)=>key.toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
47
|
+
const isSecretKey = (key)=>{
|
|
48
|
+
const normalized = normalizedKey(key);
|
|
49
|
+
return normalizedSecretKeys.some((secret)=>normalized.includes(secret));
|
|
50
|
+
};
|
|
51
|
+
const objectPath = (parent, key)=>/^[A-Za-z_$][\w$]*$/.test(key) ? `${parent}.${key}` : `${parent}[${JSON.stringify(key)}]`;
|
|
52
|
+
const stringByteLength = (value)=>new TextEncoder().encode(value).byteLength;
|
|
53
|
+
function sanitizeReportText(value, maximumLength = MAX_STRING_LENGTH) {
|
|
54
|
+
return value.length <= maximumLength ? value : `${value.slice(0, maximumLength)}… [truncated]`;
|
|
55
|
+
}
|
|
56
|
+
function sanitizeReportValue(value) {
|
|
57
|
+
const truncatedPaths = new Set();
|
|
58
|
+
const redactedPaths = new Set();
|
|
59
|
+
const ancestors = new WeakSet();
|
|
60
|
+
let remainingBytes = MAX_SERIALIZED_BYTES;
|
|
61
|
+
const consume = (path, text)=>{
|
|
62
|
+
remainingBytes -= stringByteLength(text);
|
|
63
|
+
if (remainingBytes >= 0) return true;
|
|
64
|
+
truncatedPaths.add(path);
|
|
65
|
+
return false;
|
|
66
|
+
};
|
|
67
|
+
const visit = (current, path, depth)=>{
|
|
68
|
+
if (remainingBytes <= 0) {
|
|
69
|
+
truncatedPaths.add(path);
|
|
70
|
+
return '[Truncated: size limit]';
|
|
71
|
+
}
|
|
72
|
+
if (null === current || 'boolean' == typeof current) {
|
|
73
|
+
consume(path, String(current));
|
|
74
|
+
return current;
|
|
75
|
+
}
|
|
76
|
+
if ('string' == typeof current) {
|
|
77
|
+
if (current.length > MAX_STRING_LENGTH) {
|
|
78
|
+
truncatedPaths.add(path);
|
|
79
|
+
const shortened = `${current.slice(0, MAX_STRING_LENGTH)}… [truncated]`;
|
|
80
|
+
consume(path, shortened);
|
|
81
|
+
return shortened;
|
|
82
|
+
}
|
|
83
|
+
consume(path, current);
|
|
84
|
+
return current;
|
|
85
|
+
}
|
|
86
|
+
if ('number' == typeof current) {
|
|
87
|
+
if (Number.isFinite(current)) {
|
|
88
|
+
consume(path, String(current));
|
|
89
|
+
return current;
|
|
90
|
+
}
|
|
91
|
+
truncatedPaths.add(path);
|
|
92
|
+
return `[Unsupported number: ${String(current)}]`;
|
|
93
|
+
}
|
|
94
|
+
if ('bigint' == typeof current) {
|
|
95
|
+
truncatedPaths.add(path);
|
|
96
|
+
return `[Unsupported bigint: ${String(current)}]`;
|
|
97
|
+
}
|
|
98
|
+
if (void 0 === current || 'function' == typeof current || 'symbol' == typeof current) {
|
|
99
|
+
truncatedPaths.add(path);
|
|
100
|
+
return `[Unsupported ${typeof current}]`;
|
|
101
|
+
}
|
|
102
|
+
if (depth >= MAX_DEPTH) {
|
|
103
|
+
truncatedPaths.add(path);
|
|
104
|
+
return '[Truncated: maximum depth]';
|
|
105
|
+
}
|
|
106
|
+
if (current instanceof Date) {
|
|
107
|
+
const date = Number.isNaN(current.getTime()) ? '[Invalid Date]' : current.toISOString();
|
|
108
|
+
consume(path, date);
|
|
109
|
+
return date;
|
|
110
|
+
}
|
|
111
|
+
if (ancestors.has(current)) {
|
|
112
|
+
truncatedPaths.add(path);
|
|
113
|
+
return '[Unsupported circular value]';
|
|
114
|
+
}
|
|
115
|
+
if (Array.isArray(current)) {
|
|
116
|
+
ancestors.add(current);
|
|
117
|
+
const output = [];
|
|
118
|
+
const itemCount = Math.min(current.length, MAX_ARRAY_ITEMS);
|
|
119
|
+
for(let index = 0; index < itemCount; index += 1){
|
|
120
|
+
if (remainingBytes <= 0) break;
|
|
121
|
+
output.push(visit(current[index], `${path}[${index}]`, depth + 1));
|
|
122
|
+
}
|
|
123
|
+
if (current.length > output.length) truncatedPaths.add(path);
|
|
124
|
+
ancestors.delete(current);
|
|
125
|
+
return output;
|
|
126
|
+
}
|
|
127
|
+
const prototype = Object.getPrototypeOf(current);
|
|
128
|
+
if (prototype !== Object.prototype && null !== prototype) {
|
|
129
|
+
truncatedPaths.add(path);
|
|
130
|
+
const constructorName = current.constructor?.name ?? 'object';
|
|
131
|
+
return `[Unsupported object: ${constructorName}]`;
|
|
132
|
+
}
|
|
133
|
+
ancestors.add(current);
|
|
134
|
+
const output = {};
|
|
135
|
+
const keys = Object.keys(current);
|
|
136
|
+
for (const key of keys.slice(0, MAX_OBJECT_KEYS)){
|
|
137
|
+
const childPath = objectPath(path, key);
|
|
138
|
+
if (!consume(childPath, key)) break;
|
|
139
|
+
if (isSecretKey(key)) {
|
|
140
|
+
output[key] = '[REDACTED]';
|
|
141
|
+
redactedPaths.add(childPath);
|
|
142
|
+
} else output[key] = visit(current[key], childPath, depth + 1);
|
|
143
|
+
if (remainingBytes <= 0) break;
|
|
144
|
+
}
|
|
145
|
+
if (keys.length > Object.keys(output).length) truncatedPaths.add(path);
|
|
146
|
+
ancestors.delete(current);
|
|
147
|
+
return output;
|
|
148
|
+
};
|
|
149
|
+
const sanitized = visit(value, '$', 0);
|
|
150
|
+
const serialized = JSON.stringify(sanitized);
|
|
151
|
+
if (void 0 === serialized || stringByteLength(serialized) > MAX_SERIALIZED_BYTES) return {
|
|
152
|
+
value: TRUNCATED_VALUE,
|
|
153
|
+
truncatedPaths: [
|
|
154
|
+
'$'
|
|
155
|
+
]
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
value: sanitized,
|
|
159
|
+
...truncatedPaths.size > 0 ? {
|
|
160
|
+
truncatedPaths: [
|
|
161
|
+
...truncatedPaths
|
|
162
|
+
]
|
|
163
|
+
} : {},
|
|
164
|
+
...redactedPaths.size > 0 ? {
|
|
165
|
+
redactedPaths: [
|
|
166
|
+
...redactedPaths
|
|
167
|
+
]
|
|
168
|
+
} : {}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function sanitizeReportError(error) {
|
|
172
|
+
if (error instanceof Error || 'object' == typeof error && null !== error && 'string' == typeof error.message) {
|
|
173
|
+
const workflowLike = error;
|
|
174
|
+
return {
|
|
175
|
+
name: sanitizeReportText(workflowLike.name || 'Error', 200),
|
|
176
|
+
message: sanitizeReportText(workflowLike.message || String(error)),
|
|
177
|
+
...'string' == typeof workflowLike.code ? {
|
|
178
|
+
code: sanitizeReportText(workflowLike.code, 200)
|
|
179
|
+
} : {},
|
|
180
|
+
...void 0 === workflowLike.details ? {} : {
|
|
181
|
+
details: sanitizeReportValue(workflowLike.details)
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
name: 'Error',
|
|
187
|
+
message: sanitizeReportText(String(error))
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
exports.sanitizeReportError = __webpack_exports__.sanitizeReportError;
|
|
191
|
+
exports.sanitizeReportText = __webpack_exports__.sanitizeReportText;
|
|
192
|
+
exports.sanitizeReportValue = __webpack_exports__.sanitizeReportValue;
|
|
193
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
194
|
+
"sanitizeReportError",
|
|
195
|
+
"sanitizeReportText",
|
|
196
|
+
"sanitizeReportValue"
|
|
197
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
198
|
+
Object.defineProperty(exports, '__esModule', {
|
|
199
|
+
value: true
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner/reporting/sanitize.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../../src/test-runner/reporting/sanitize.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n TestRunReportError,\n TestRunReportValue,\n} from '../../test-run-report';\n\nconst MAX_DEPTH = 6;\nconst MAX_STRING_LENGTH = 2_000;\nconst MAX_ARRAY_ITEMS = 50;\nconst MAX_OBJECT_KEYS = 50;\nconst MAX_SERIALIZED_BYTES = 64 * 1024;\nconst TRUNCATED_VALUE = '[Truncated: display value exceeded 64 KiB]';\n\nconst normalizedSecretKeys = [\n 'password',\n 'passwd',\n 'secret',\n 'token',\n 'authorization',\n 'cookie',\n 'apikey',\n];\n\nconst normalizedKey = (key: string): string =>\n key.toLowerCase().replace(/[^a-z0-9]/g, '');\n\nconst isSecretKey = (key: string): boolean => {\n const normalized = normalizedKey(key);\n return normalizedSecretKeys.some((secret) => normalized.includes(secret));\n};\n\nconst objectPath = (parent: string, key: string): string =>\n /^[A-Za-z_$][\\w$]*$/.test(key)\n ? `${parent}.${key}`\n : `${parent}[${JSON.stringify(key)}]`;\n\nconst stringByteLength = (value: string): number =>\n new TextEncoder().encode(value).byteLength;\n\nexport function sanitizeReportText(\n value: string,\n maximumLength = MAX_STRING_LENGTH,\n): string {\n return value.length <= maximumLength\n ? value\n : `${value.slice(0, maximumLength)}… [truncated]`;\n}\n\n/** Convert arbitrary Node input/output to a bounded, JSON-safe display value. */\nexport function sanitizeReportValue(value: unknown): TestRunReportValue {\n const truncatedPaths = new Set<string>();\n const redactedPaths = new Set<string>();\n const ancestors = new WeakSet<object>();\n let remainingBytes = MAX_SERIALIZED_BYTES;\n\n const consume = (path: string, text: string): boolean => {\n remainingBytes -= stringByteLength(text);\n if (remainingBytes >= 0) return true;\n truncatedPaths.add(path);\n return false;\n };\n\n const visit = (current: unknown, path: string, depth: number): unknown => {\n if (remainingBytes <= 0) {\n truncatedPaths.add(path);\n return '[Truncated: size limit]';\n }\n if (current === null || typeof current === 'boolean') {\n consume(path, String(current));\n return current;\n }\n if (typeof current === 'string') {\n if (current.length > MAX_STRING_LENGTH) {\n truncatedPaths.add(path);\n const shortened = `${current.slice(0, MAX_STRING_LENGTH)}… [truncated]`;\n consume(path, shortened);\n return shortened;\n }\n consume(path, current);\n return current;\n }\n if (typeof current === 'number') {\n if (Number.isFinite(current)) {\n consume(path, String(current));\n return current;\n }\n truncatedPaths.add(path);\n return `[Unsupported number: ${String(current)}]`;\n }\n if (typeof current === 'bigint') {\n truncatedPaths.add(path);\n return `[Unsupported bigint: ${String(current)}]`;\n }\n if (\n current === undefined ||\n typeof current === 'function' ||\n typeof current === 'symbol'\n ) {\n truncatedPaths.add(path);\n return `[Unsupported ${typeof current}]`;\n }\n if (depth >= MAX_DEPTH) {\n truncatedPaths.add(path);\n return '[Truncated: maximum depth]';\n }\n\n if (current instanceof Date) {\n const date = Number.isNaN(current.getTime())\n ? '[Invalid Date]'\n : current.toISOString();\n consume(path, date);\n return date;\n }\n if (ancestors.has(current)) {\n truncatedPaths.add(path);\n return '[Unsupported circular value]';\n }\n\n if (Array.isArray(current)) {\n ancestors.add(current);\n const output: unknown[] = [];\n const itemCount = Math.min(current.length, MAX_ARRAY_ITEMS);\n for (let index = 0; index < itemCount; index += 1) {\n if (remainingBytes <= 0) break;\n output.push(visit(current[index], `${path}[${index}]`, depth + 1));\n }\n if (current.length > output.length) truncatedPaths.add(path);\n ancestors.delete(current);\n return output;\n }\n\n const prototype = Object.getPrototypeOf(current);\n if (prototype !== Object.prototype && prototype !== null) {\n truncatedPaths.add(path);\n const constructorName =\n (current as { constructor?: { name?: string } }).constructor?.name ??\n 'object';\n return `[Unsupported object: ${constructorName}]`;\n }\n\n ancestors.add(current);\n const output: Record<string, unknown> = {};\n const keys = Object.keys(current as Record<string, unknown>);\n for (const key of keys.slice(0, MAX_OBJECT_KEYS)) {\n const childPath = objectPath(path, key);\n if (!consume(childPath, key)) break;\n if (isSecretKey(key)) {\n output[key] = '[REDACTED]';\n redactedPaths.add(childPath);\n } else {\n output[key] = visit(\n (current as Record<string, unknown>)[key],\n childPath,\n depth + 1,\n );\n }\n if (remainingBytes <= 0) break;\n }\n if (keys.length > Object.keys(output).length) truncatedPaths.add(path);\n ancestors.delete(current);\n return output;\n };\n\n const sanitized = visit(value, '$', 0);\n const serialized = JSON.stringify(sanitized);\n if (\n serialized === undefined ||\n stringByteLength(serialized) > MAX_SERIALIZED_BYTES\n ) {\n return { value: TRUNCATED_VALUE, truncatedPaths: ['$'] };\n }\n\n return {\n value: sanitized,\n ...(truncatedPaths.size > 0 ? { truncatedPaths: [...truncatedPaths] } : {}),\n ...(redactedPaths.size > 0 ? { redactedPaths: [...redactedPaths] } : {}),\n };\n}\n\nexport function sanitizeReportError(error: unknown): TestRunReportError {\n if (\n error instanceof Error ||\n (typeof error === 'object' &&\n error !== null &&\n typeof (error as { message?: unknown }).message === 'string')\n ) {\n const workflowLike = error as {\n name?: string;\n message: string;\n code?: unknown;\n details?: unknown;\n };\n return {\n name: sanitizeReportText(workflowLike.name || 'Error', 200),\n message: sanitizeReportText(workflowLike.message || String(error)),\n ...(typeof workflowLike.code === 'string'\n ? { code: sanitizeReportText(workflowLike.code, 200) }\n : {}),\n ...(workflowLike.details === undefined\n ? {}\n : { details: sanitizeReportValue(workflowLike.details) }),\n };\n }\n\n return {\n name: 'Error',\n message: sanitizeReportText(String(error)),\n };\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","MAX_DEPTH","MAX_STRING_LENGTH","MAX_ARRAY_ITEMS","MAX_OBJECT_KEYS","MAX_SERIALIZED_BYTES","TRUNCATED_VALUE","normalizedSecretKeys","normalizedKey","isSecretKey","normalized","secret","objectPath","parent","JSON","stringByteLength","value","TextEncoder","sanitizeReportText","maximumLength","sanitizeReportValue","truncatedPaths","Set","redactedPaths","ancestors","WeakSet","remainingBytes","consume","path","text","visit","current","depth","String","shortened","Number","undefined","Date","date","Array","output","itemCount","Math","index","prototype","constructorName","keys","childPath","sanitized","serialized","sanitizeReportError","error","Error","workflowLike"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;ACDA,MAAMI,YAAY;AAClB,MAAMC,oBAAoB;AAC1B,MAAMC,kBAAkB;AACxB,MAAMC,kBAAkB;AACxB,MAAMC,uBAAuB;AAC7B,MAAMC,kBAAkB;AAExB,MAAMC,uBAAuB;IAC3B;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,gBAAgB,CAACZ,MACrBA,IAAI,WAAW,GAAG,OAAO,CAAC,cAAc;AAE1C,MAAMa,cAAc,CAACb;IACnB,MAAMc,aAAaF,cAAcZ;IACjC,OAAOW,qBAAqB,IAAI,CAAC,CAACI,SAAWD,WAAW,QAAQ,CAACC;AACnE;AAEA,MAAMC,aAAa,CAACC,QAAgBjB,MAClC,qBAAqB,IAAI,CAACA,OACtB,GAAGiB,OAAO,CAAC,EAAEjB,KAAK,GAClB,GAAGiB,OAAO,CAAC,EAAEC,KAAK,SAAS,CAAClB,KAAK,CAAC,CAAC;AAEzC,MAAMmB,mBAAmB,CAACC,QACxB,IAAIC,cAAc,MAAM,CAACD,OAAO,UAAU;AAErC,SAASE,mBACdF,KAAa,EACbG,gBAAgBjB,iBAAiB;IAEjC,OAAOc,MAAM,MAAM,IAAIG,gBACnBH,QACA,GAAGA,MAAM,KAAK,CAAC,GAAGG,eAAe,aAAa,CAAC;AACrD;AAGO,SAASC,oBAAoBJ,KAAc;IAChD,MAAMK,iBAAiB,IAAIC;IAC3B,MAAMC,gBAAgB,IAAID;IAC1B,MAAME,YAAY,IAAIC;IACtB,IAAIC,iBAAiBrB;IAErB,MAAMsB,UAAU,CAACC,MAAcC;QAC7BH,kBAAkBX,iBAAiBc;QACnC,IAAIH,kBAAkB,GAAG,OAAO;QAChCL,eAAe,GAAG,CAACO;QACnB,OAAO;IACT;IAEA,MAAME,QAAQ,CAACC,SAAkBH,MAAcI;QAC7C,IAAIN,kBAAkB,GAAG;YACvBL,eAAe,GAAG,CAACO;YACnB,OAAO;QACT;QACA,IAAIG,AAAY,SAAZA,WAAoB,AAAmB,aAAnB,OAAOA,SAAuB;YACpDJ,QAAQC,MAAMK,OAAOF;YACrB,OAAOA;QACT;QACA,IAAI,AAAmB,YAAnB,OAAOA,SAAsB;YAC/B,IAAIA,QAAQ,MAAM,GAAG7B,mBAAmB;gBACtCmB,eAAe,GAAG,CAACO;gBACnB,MAAMM,YAAY,GAAGH,QAAQ,KAAK,CAAC,GAAG7B,mBAAmB,aAAa,CAAC;gBACvEyB,QAAQC,MAAMM;gBACd,OAAOA;YACT;YACAP,QAAQC,MAAMG;YACd,OAAOA;QACT;QACA,IAAI,AAAmB,YAAnB,OAAOA,SAAsB;YAC/B,IAAII,OAAO,QAAQ,CAACJ,UAAU;gBAC5BJ,QAAQC,MAAMK,OAAOF;gBACrB,OAAOA;YACT;YACAV,eAAe,GAAG,CAACO;YACnB,OAAO,CAAC,qBAAqB,EAAEK,OAAOF,SAAS,CAAC,CAAC;QACnD;QACA,IAAI,AAAmB,YAAnB,OAAOA,SAAsB;YAC/BV,eAAe,GAAG,CAACO;YACnB,OAAO,CAAC,qBAAqB,EAAEK,OAAOF,SAAS,CAAC,CAAC;QACnD;QACA,IACEA,AAAYK,WAAZL,WACA,AAAmB,cAAnB,OAAOA,WACP,AAAmB,YAAnB,OAAOA,SACP;YACAV,eAAe,GAAG,CAACO;YACnB,OAAO,CAAC,aAAa,EAAE,OAAOG,QAAQ,CAAC,CAAC;QAC1C;QACA,IAAIC,SAAS/B,WAAW;YACtBoB,eAAe,GAAG,CAACO;YACnB,OAAO;QACT;QAEA,IAAIG,mBAAmBM,MAAM;YAC3B,MAAMC,OAAOH,OAAO,KAAK,CAACJ,QAAQ,OAAO,MACrC,mBACAA,QAAQ,WAAW;YACvBJ,QAAQC,MAAMU;YACd,OAAOA;QACT;QACA,IAAId,UAAU,GAAG,CAACO,UAAU;YAC1BV,eAAe,GAAG,CAACO;YACnB,OAAO;QACT;QAEA,IAAIW,MAAM,OAAO,CAACR,UAAU;YAC1BP,UAAU,GAAG,CAACO;YACd,MAAMS,SAAoB,EAAE;YAC5B,MAAMC,YAAYC,KAAK,GAAG,CAACX,QAAQ,MAAM,EAAE5B;YAC3C,IAAK,IAAIwC,QAAQ,GAAGA,QAAQF,WAAWE,SAAS,EAAG;gBACjD,IAAIjB,kBAAkB,GAAG;gBACzBc,OAAO,IAAI,CAACV,MAAMC,OAAO,CAACY,MAAM,EAAE,GAAGf,KAAK,CAAC,EAAEe,MAAM,CAAC,CAAC,EAAEX,QAAQ;YACjE;YACA,IAAID,QAAQ,MAAM,GAAGS,OAAO,MAAM,EAAEnB,eAAe,GAAG,CAACO;YACvDJ,UAAU,MAAM,CAACO;YACjB,OAAOS;QACT;QAEA,MAAMI,YAAY/C,OAAO,cAAc,CAACkC;QACxC,IAAIa,cAAc/C,OAAO,SAAS,IAAI+C,AAAc,SAAdA,WAAoB;YACxDvB,eAAe,GAAG,CAACO;YACnB,MAAMiB,kBACHd,QAAgD,WAAW,EAAE,QAC9D;YACF,OAAO,CAAC,qBAAqB,EAAEc,gBAAgB,CAAC,CAAC;QACnD;QAEArB,UAAU,GAAG,CAACO;QACd,MAAMS,SAAkC,CAAC;QACzC,MAAMM,OAAOjD,OAAO,IAAI,CAACkC;QACzB,KAAK,MAAMnC,OAAOkD,KAAK,KAAK,CAAC,GAAG1C,iBAAkB;YAChD,MAAM2C,YAAYnC,WAAWgB,MAAMhC;YACnC,IAAI,CAAC+B,QAAQoB,WAAWnD,MAAM;YAC9B,IAAIa,YAAYb,MAAM;gBACpB4C,MAAM,CAAC5C,IAAI,GAAG;gBACd2B,cAAc,GAAG,CAACwB;YACpB,OACEP,MAAM,CAAC5C,IAAI,GAAGkC,MACXC,OAAmC,CAACnC,IAAI,EACzCmD,WACAf,QAAQ;YAGZ,IAAIN,kBAAkB,GAAG;QAC3B;QACA,IAAIoB,KAAK,MAAM,GAAGjD,OAAO,IAAI,CAAC2C,QAAQ,MAAM,EAAEnB,eAAe,GAAG,CAACO;QACjEJ,UAAU,MAAM,CAACO;QACjB,OAAOS;IACT;IAEA,MAAMQ,YAAYlB,MAAMd,OAAO,KAAK;IACpC,MAAMiC,aAAanC,KAAK,SAAS,CAACkC;IAClC,IACEC,AAAeb,WAAfa,cACAlC,iBAAiBkC,cAAc5C,sBAE/B,OAAO;QAAE,OAAOC;QAAiB,gBAAgB;YAAC;SAAI;IAAC;IAGzD,OAAO;QACL,OAAO0C;QACP,GAAI3B,eAAe,IAAI,GAAG,IAAI;YAAE,gBAAgB;mBAAIA;aAAe;QAAC,IAAI,CAAC,CAAC;QAC1E,GAAIE,cAAc,IAAI,GAAG,IAAI;YAAE,eAAe;mBAAIA;aAAc;QAAC,IAAI,CAAC,CAAC;IACzE;AACF;AAEO,SAAS2B,oBAAoBC,KAAc;IAChD,IACEA,iBAAiBC,SAChB,AAAiB,YAAjB,OAAOD,SACNA,AAAU,SAAVA,SACA,AAAoD,YAApD,OAAQA,MAAgC,OAAO,EACjD;QACA,MAAME,eAAeF;QAMrB,OAAO;YACL,MAAMjC,mBAAmBmC,aAAa,IAAI,IAAI,SAAS;YACvD,SAASnC,mBAAmBmC,aAAa,OAAO,IAAIpB,OAAOkB;YAC3D,GAAI,AAA6B,YAA7B,OAAOE,aAAa,IAAI,GACxB;gBAAE,MAAMnC,mBAAmBmC,aAAa,IAAI,EAAE;YAAK,IACnD,CAAC,CAAC;YACN,GAAIA,AAAyBjB,WAAzBiB,aAAa,OAAO,GACpB,CAAC,IACD;gBAAE,SAASjC,oBAAoBiC,aAAa,OAAO;YAAE,CAAC;QAC5D;IACF;IAEA,OAAO;QACL,MAAM;QACN,SAASnC,mBAAmBe,OAAOkB;IACrC;AACF"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
buildTestRunReportDump: ()=>buildTestRunReportDump,
|
|
28
|
+
collectTestRunReportSources: ()=>collectTestRunReportSources
|
|
29
|
+
});
|
|
30
|
+
const external_sanitize_js_namespaceObject = require("./sanitize.js");
|
|
31
|
+
const exactMidsceneDetailNodes = new Set([
|
|
32
|
+
'aiAct',
|
|
33
|
+
'aiAssert',
|
|
34
|
+
'recordToReport'
|
|
35
|
+
]);
|
|
36
|
+
const scopedExecutionKey = (scopeId, executionId)=>`${scopeId}\u0000${executionId}`;
|
|
37
|
+
const reportSourcesForScope = (context, scopeId)=>context.sourcesByScope.get(scopeId) ?? [];
|
|
38
|
+
const addDiagnostic = (context, diagnostic)=>{
|
|
39
|
+
context.diagnostics.push(diagnostic);
|
|
40
|
+
};
|
|
41
|
+
const buildStep = (step, scopeId, context, executionId)=>{
|
|
42
|
+
const details = [];
|
|
43
|
+
const unresolvedExecutionIds = [];
|
|
44
|
+
for (const trace of step.report?.traces ?? []){
|
|
45
|
+
const previousScope = context.tracedScopeByExecution.get(trace.executionId);
|
|
46
|
+
if (previousScope && previousScope !== scopeId) throw new Error(`Agent execution ${trace.executionId} was traced by multiple test scopes (${previousScope}, ${scopeId}).`);
|
|
47
|
+
context.tracedScopeByExecution.set(trace.executionId, scopeId);
|
|
48
|
+
const detail = context.detailsByScopeAndExecution.get(scopedExecutionKey(scopeId, trace.executionId));
|
|
49
|
+
if (detail) details.push(detail);
|
|
50
|
+
else unresolvedExecutionIds.push(trace.executionId);
|
|
51
|
+
}
|
|
52
|
+
let agentDetailDiagnostic;
|
|
53
|
+
if (unresolvedExecutionIds.length > 0) {
|
|
54
|
+
agentDetailDiagnostic = `Agent detail could not be resolved for ${unresolvedExecutionIds.join(', ')}.`;
|
|
55
|
+
const sources = reportSourcesForScope(context, scopeId);
|
|
56
|
+
for (const executionId of unresolvedExecutionIds)addDiagnostic(context, {
|
|
57
|
+
level: 'warning',
|
|
58
|
+
code: 'agent-detail-unresolved',
|
|
59
|
+
message: `Agent detail could not be resolved for execution ${executionId} in test scope ${scopeId}.`,
|
|
60
|
+
scopeId,
|
|
61
|
+
executionId,
|
|
62
|
+
...sources.length > 0 ? {
|
|
63
|
+
sourcePaths: sources.map((source)=>source.sourcePath)
|
|
64
|
+
} : {}
|
|
65
|
+
});
|
|
66
|
+
} else if (0 === details.length && exactMidsceneDetailNodes.has(step.node)) {
|
|
67
|
+
agentDetailDiagnostic = 'This Agent did not expose a stable execution reference for the Step.';
|
|
68
|
+
addDiagnostic(context, {
|
|
69
|
+
level: 'warning',
|
|
70
|
+
code: 'agent-detail-unavailable',
|
|
71
|
+
message: `No stable Agent execution reference was captured for ${step.node} in test scope ${scopeId}.`,
|
|
72
|
+
scopeId,
|
|
73
|
+
...reportSourcesForScope(context, scopeId).length > 0 ? {
|
|
74
|
+
sourcePaths: reportSourcesForScope(context, scopeId).map((source)=>source.sourcePath)
|
|
75
|
+
} : {}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const input = step.input;
|
|
79
|
+
const candidateTitle = input?.prompt ?? input?.script ?? input?.scenario ?? input?.title;
|
|
80
|
+
const prompt = 'string' == typeof candidateTitle ? candidateTitle : 'object' == typeof candidateTitle && null !== candidateTitle && 'prompt' in candidateTitle && 'string' == typeof candidateTitle.prompt ? candidateTitle.prompt : void 0;
|
|
81
|
+
return {
|
|
82
|
+
id: `${executionId}:${step.phase}:${step.stepIndex}`,
|
|
83
|
+
phase: step.phase,
|
|
84
|
+
stepIndex: step.stepIndex,
|
|
85
|
+
node: step.node,
|
|
86
|
+
...prompt ? {
|
|
87
|
+
title: (0, external_sanitize_js_namespaceObject.sanitizeReportText)(prompt, 240)
|
|
88
|
+
} : {},
|
|
89
|
+
status: step.status,
|
|
90
|
+
continuedAfterError: step.continuedAfterError,
|
|
91
|
+
startedAt: step.startedAt,
|
|
92
|
+
endedAt: step.endedAt,
|
|
93
|
+
durationMs: step.durationMs,
|
|
94
|
+
input: (0, external_sanitize_js_namespaceObject.sanitizeReportValue)(step.input),
|
|
95
|
+
...step.output ? {
|
|
96
|
+
output: {
|
|
97
|
+
...void 0 === step.output.summary ? {} : {
|
|
98
|
+
summary: (0, external_sanitize_js_namespaceObject.sanitizeReportText)(step.output.summary)
|
|
99
|
+
},
|
|
100
|
+
...void 0 === step.output.data ? {} : {
|
|
101
|
+
data: (0, external_sanitize_js_namespaceObject.sanitizeReportValue)(step.output.data)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
} : {},
|
|
105
|
+
...step.error ? {
|
|
106
|
+
error: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(step.error)
|
|
107
|
+
} : {},
|
|
108
|
+
...details.length > 0 ? {
|
|
109
|
+
agentDetails: details
|
|
110
|
+
} : {},
|
|
111
|
+
...agentDetailDiagnostic ? {
|
|
112
|
+
agentDetailDiagnostic
|
|
113
|
+
} : {}
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
const attemptReportScope = (attempt)=>attempt.reportScopeId ?? attempt.runId;
|
|
117
|
+
const buildAttempt = (attempt, context)=>{
|
|
118
|
+
const scopeId = attemptReportScope(attempt);
|
|
119
|
+
return {
|
|
120
|
+
attemptId: attempt.runId,
|
|
121
|
+
attemptIndex: attempt.attemptIndex,
|
|
122
|
+
status: attempt.status,
|
|
123
|
+
startedAt: attempt.startedAt,
|
|
124
|
+
endedAt: attempt.endedAt,
|
|
125
|
+
durationMs: attempt.durationMs,
|
|
126
|
+
beforeEach: attempt.beforeEach.map((step)=>buildStep(step, scopeId, context, attempt.runId)),
|
|
127
|
+
steps: attempt.steps.map((step)=>buildStep(step, scopeId, context, attempt.runId)),
|
|
128
|
+
afterEach: attempt.afterEach.map((step)=>buildStep(step, scopeId, context, attempt.runId)),
|
|
129
|
+
...attempt.executionErrors?.length ? {
|
|
130
|
+
hostErrors: attempt.executionErrors.map((error)=>({
|
|
131
|
+
phase: 'execution',
|
|
132
|
+
error: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(error)
|
|
133
|
+
}))
|
|
134
|
+
} : {},
|
|
135
|
+
...attempt.teardownErrors?.length ? {
|
|
136
|
+
teardownErrors: attempt.teardownErrors.map(external_sanitize_js_namespaceObject.sanitizeReportError)
|
|
137
|
+
} : {},
|
|
138
|
+
...reportSourcesForScope(context, scopeId).length > 0 ? {
|
|
139
|
+
scopeReportIds: reportSourcesForScope(context, scopeId).map((source)=>source.reportId)
|
|
140
|
+
} : {}
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
const buildCase = (outcome, context)=>({
|
|
144
|
+
caseId: outcome.caseId,
|
|
145
|
+
name: outcome.name,
|
|
146
|
+
caseIndex: outcome.caseIndex,
|
|
147
|
+
status: outcome.status,
|
|
148
|
+
...outcome.notRunReason ? {
|
|
149
|
+
notRunReason: outcome.notRunReason
|
|
150
|
+
} : {},
|
|
151
|
+
attempts: (outcome.attempts ?? (outcome.run ? [
|
|
152
|
+
outcome.run
|
|
153
|
+
] : [])).map((attempt)=>buildAttempt(attempt, context))
|
|
154
|
+
});
|
|
155
|
+
const documentReportScope = (document)=>document.reportScopeId ?? document.documentRunId;
|
|
156
|
+
const buildDocument = (documentId, document, cases, context)=>{
|
|
157
|
+
const sourcePath = document?.sourcePath ?? cases[0]?.sourcePath ?? '<unknown>';
|
|
158
|
+
const status = document?.status ?? (cases.some((item)=>'success' !== item.status) ? 'failed' : 'success');
|
|
159
|
+
const scopeId = document ? documentReportScope(document) : void 0;
|
|
160
|
+
return {
|
|
161
|
+
documentId,
|
|
162
|
+
...document ? {
|
|
163
|
+
logicalDocumentId: document.documentId,
|
|
164
|
+
documentRunId: document.documentRunId,
|
|
165
|
+
...void 0 === document.attemptIndex ? {} : {
|
|
166
|
+
attemptIndex: document.attemptIndex
|
|
167
|
+
}
|
|
168
|
+
} : {},
|
|
169
|
+
sourcePath,
|
|
170
|
+
status,
|
|
171
|
+
...document ? {
|
|
172
|
+
startedAt: document.startedAt,
|
|
173
|
+
endedAt: document.endedAt,
|
|
174
|
+
durationMs: document.durationMs
|
|
175
|
+
} : {},
|
|
176
|
+
beforeAll: (document?.beforeAll ?? []).map((step)=>buildStep(step, scopeId, context, document.documentRunId)),
|
|
177
|
+
cases: cases.map((outcome)=>buildCase(outcome, context)),
|
|
178
|
+
afterAll: (document?.afterAll ?? []).map((step)=>buildStep(step, scopeId, context, document.documentRunId)),
|
|
179
|
+
...document?.hostErrors?.length || document?.executionErrors?.length ? {
|
|
180
|
+
hostErrors: [
|
|
181
|
+
...document?.hostErrors ?? [],
|
|
182
|
+
...(document?.executionErrors ?? []).map((error)=>({
|
|
183
|
+
phase: 'execution',
|
|
184
|
+
error
|
|
185
|
+
}))
|
|
186
|
+
].map(({ phase, error })=>({
|
|
187
|
+
phase,
|
|
188
|
+
error: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(error)
|
|
189
|
+
}))
|
|
190
|
+
} : {},
|
|
191
|
+
...document?.teardownErrors?.length ? {
|
|
192
|
+
teardownErrors: document.teardownErrors.map(external_sanitize_js_namespaceObject.sanitizeReportError)
|
|
193
|
+
} : {},
|
|
194
|
+
...scopeId && reportSourcesForScope(context, scopeId).length > 0 ? {
|
|
195
|
+
scopeReportIds: reportSourcesForScope(context, scopeId).map((source)=>source.reportId)
|
|
196
|
+
} : {}
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
const buildProject = (project, context)=>{
|
|
200
|
+
const documentCount = new Map();
|
|
201
|
+
for (const document of project.documents)documentCount.set(document.documentId, (documentCount.get(document.documentId) ?? 0) + 1);
|
|
202
|
+
for (const outcome of project.cases)if ((documentCount.get(outcome.documentId) ?? 0) > 1 && !outcome.documentRunId) throw new Error(`Case ${outcome.caseId} must identify its documentRunId when a document has multiple attempts.`);
|
|
203
|
+
const groups = [];
|
|
204
|
+
const currentGroup = new Map();
|
|
205
|
+
for (const document of project.documents){
|
|
206
|
+
let group = currentGroup.get(document.documentId);
|
|
207
|
+
if (!group || !document.attemptIndex) {
|
|
208
|
+
group = [];
|
|
209
|
+
groups.push(group);
|
|
210
|
+
currentGroup.set(document.documentId, group);
|
|
211
|
+
}
|
|
212
|
+
group.push(document);
|
|
213
|
+
}
|
|
214
|
+
const documents = groups.map((group)=>{
|
|
215
|
+
const first = group[0];
|
|
216
|
+
const last = group.at(-1);
|
|
217
|
+
const documentId = groups.filter((item)=>item[0].documentId === first.documentId).length > 1 ? `${first.documentId}:${first.documentRunId}` : first.documentId;
|
|
218
|
+
const outcomes = new Map();
|
|
219
|
+
for (const document of group)for (const outcome of project.cases.filter((item)=>item.documentId === document.documentId && (!item.documentRunId || item.documentRunId === document.documentRunId))){
|
|
220
|
+
const previous = outcomes.get(outcome.caseId);
|
|
221
|
+
outcomes.set(outcome.caseId, {
|
|
222
|
+
...outcome,
|
|
223
|
+
attempts: [
|
|
224
|
+
...previous?.attempts ?? [],
|
|
225
|
+
...(outcome.attempts ?? (outcome.run ? [
|
|
226
|
+
outcome.run
|
|
227
|
+
] : [])).map((attempt)=>({
|
|
228
|
+
...attempt,
|
|
229
|
+
attemptIndex: document.attemptIndex ?? attempt.attemptIndex
|
|
230
|
+
}))
|
|
231
|
+
]
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
const result = buildDocument(documentId, last, [
|
|
235
|
+
...outcomes.values()
|
|
236
|
+
], context);
|
|
237
|
+
if (group.length > 1) {
|
|
238
|
+
result.startedAt = first.startedAt;
|
|
239
|
+
result.durationMs = Math.max(0, Date.parse(last.endedAt) - Date.parse(first.startedAt));
|
|
240
|
+
result.attempts = group.map((document)=>{
|
|
241
|
+
const { cases: _cases, ...attempt } = buildDocument(documentId, document, [], context);
|
|
242
|
+
return attempt;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
});
|
|
247
|
+
for (const documentId of new Set(project.cases.map((outcome)=>outcome.documentId)))if (!documentCount.has(documentId)) documents.push(buildDocument(documentId, void 0, project.cases.filter((outcome)=>outcome.documentId === documentId), context));
|
|
248
|
+
return {
|
|
249
|
+
projectId: project.projectId,
|
|
250
|
+
name: project.name,
|
|
251
|
+
platform: project.platform,
|
|
252
|
+
status: project.status,
|
|
253
|
+
retry: project.retry,
|
|
254
|
+
...project.lifecycle ? {
|
|
255
|
+
lifecycle: {
|
|
256
|
+
status: project.lifecycle.status,
|
|
257
|
+
startedAt: project.lifecycle.startedAt,
|
|
258
|
+
endedAt: project.lifecycle.endedAt,
|
|
259
|
+
durationMs: project.lifecycle.durationMs,
|
|
260
|
+
...project.lifecycle.setupError ? {
|
|
261
|
+
setupError: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(project.lifecycle.setupError)
|
|
262
|
+
} : {},
|
|
263
|
+
...project.lifecycle.teardownErrors?.length ? {
|
|
264
|
+
teardownErrors: project.lifecycle.teardownErrors.map(external_sanitize_js_namespaceObject.sanitizeReportError)
|
|
265
|
+
} : {}
|
|
266
|
+
}
|
|
267
|
+
} : {},
|
|
268
|
+
documents,
|
|
269
|
+
collectionErrors: project.collectionErrors.map((collectionError)=>({
|
|
270
|
+
sourcePath: collectionError.sourcePath,
|
|
271
|
+
error: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(collectionError.error)
|
|
272
|
+
}))
|
|
273
|
+
};
|
|
274
|
+
};
|
|
275
|
+
function collectTestRunReportSources(result) {
|
|
276
|
+
const sources = [];
|
|
277
|
+
for (const project of result.projects){
|
|
278
|
+
for (const document of project.documents){
|
|
279
|
+
for (const source of document.reportSources ?? [])sources.push({
|
|
280
|
+
...source,
|
|
281
|
+
scopeId: documentReportScope(document)
|
|
282
|
+
});
|
|
283
|
+
for (const sourcePath of (document.reportPaths ?? []).filter((path)=>!document.reportSources?.some((source)=>source.sourcePath === path)))sources.push({
|
|
284
|
+
scopeId: documentReportScope(document),
|
|
285
|
+
sourcePath
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
for (const outcome of project.cases)for (const attempt of outcome.attempts ?? (outcome.run ? [
|
|
289
|
+
outcome.run
|
|
290
|
+
] : [])){
|
|
291
|
+
for (const source of attempt.reportSources ?? [])sources.push({
|
|
292
|
+
...source,
|
|
293
|
+
scopeId: attemptReportScope(attempt)
|
|
294
|
+
});
|
|
295
|
+
for (const sourcePath of (attempt.reportPaths ?? []).filter((path)=>!attempt.reportSources?.some((source)=>source.sourcePath === path)))sources.push({
|
|
296
|
+
scopeId: attemptReportScope(attempt),
|
|
297
|
+
sourcePath
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return sources;
|
|
302
|
+
}
|
|
303
|
+
function buildTestRunReportDump(result, index) {
|
|
304
|
+
const sourcesByScope = new Map();
|
|
305
|
+
const detailsByScopeAndExecution = new Map();
|
|
306
|
+
for (const source of index.sources){
|
|
307
|
+
const scopeSources = sourcesByScope.get(source.scopeId) ?? [];
|
|
308
|
+
scopeSources.push(source);
|
|
309
|
+
sourcesByScope.set(source.scopeId, scopeSources);
|
|
310
|
+
for (const executionId of source.executionIds)detailsByScopeAndExecution.set(scopedExecutionKey(source.scopeId, executionId), {
|
|
311
|
+
reportId: source.reportId,
|
|
312
|
+
executionId
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
const context = {
|
|
316
|
+
diagnostics: [],
|
|
317
|
+
sourcesByScope,
|
|
318
|
+
detailsByScopeAndExecution,
|
|
319
|
+
tracedScopeByExecution: new Map()
|
|
320
|
+
};
|
|
321
|
+
for (const error of result.errors ?? [])addDiagnostic(context, {
|
|
322
|
+
level: 'error',
|
|
323
|
+
code: 'run-infrastructure-error',
|
|
324
|
+
message: (0, external_sanitize_js_namespaceObject.sanitizeReportError)(error).message
|
|
325
|
+
});
|
|
326
|
+
for (const source of index.sources)if (0 === source.executionIds.length) addDiagnostic(context, {
|
|
327
|
+
level: 'warning',
|
|
328
|
+
code: 'source-without-executions',
|
|
329
|
+
message: `Agent report contains no executions: ${source.sourcePath}`,
|
|
330
|
+
scopeId: source.scopeId,
|
|
331
|
+
sourcePaths: [
|
|
332
|
+
source.sourcePath
|
|
333
|
+
]
|
|
334
|
+
});
|
|
335
|
+
const projects = result.projects.map((project)=>buildProject(project, context));
|
|
336
|
+
return {
|
|
337
|
+
schemaVersion: 1,
|
|
338
|
+
kind: 'test-runner',
|
|
339
|
+
runId: result.runId,
|
|
340
|
+
status: result.status,
|
|
341
|
+
startedAt: result.startedAt,
|
|
342
|
+
endedAt: result.endedAt,
|
|
343
|
+
durationMs: result.durationMs,
|
|
344
|
+
summary: {
|
|
345
|
+
...result.summary
|
|
346
|
+
},
|
|
347
|
+
metrics: index.metrics,
|
|
348
|
+
projects,
|
|
349
|
+
...context.diagnostics.length > 0 ? {
|
|
350
|
+
diagnostics: context.diagnostics
|
|
351
|
+
} : {}
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
exports.buildTestRunReportDump = __webpack_exports__.buildTestRunReportDump;
|
|
355
|
+
exports.collectTestRunReportSources = __webpack_exports__.collectTestRunReportSources;
|
|
356
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
357
|
+
"buildTestRunReportDump",
|
|
358
|
+
"collectTestRunReportSources"
|
|
359
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
360
|
+
Object.defineProperty(exports, '__esModule', {
|
|
361
|
+
value: true
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
//# sourceMappingURL=test-run-report.js.map
|