@flanksource/clicky-ui 0.3.58 → 0.3.60
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/NOTICE.md +58 -0
- package/dist/clicky.cjs +3 -1
- package/dist/clicky.d.ts +1 -0
- package/dist/clicky.d.ts.map +1 -1
- package/dist/clicky.js +3 -1
- package/dist/data/Clicky.cjs +23 -270
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +5 -29
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +11 -259
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/PromptBanner.model.cjs +10 -0
- package/dist/data/PromptBanner.model.cjs.map +1 -1
- package/dist/data/PromptBanner.model.d.ts +2 -0
- package/dist/data/PromptBanner.model.d.ts.map +1 -1
- package/dist/data/PromptBanner.model.js +10 -1
- package/dist/data/PromptBanner.model.js.map +1 -1
- package/dist/data/PromptDialog.cjs +16 -49
- package/dist/data/PromptDialog.cjs.map +1 -1
- package/dist/data/PromptDialog.d.ts +7 -1
- package/dist/data/PromptDialog.d.ts.map +1 -1
- package/dist/data/PromptDialog.js +17 -50
- package/dist/data/PromptDialog.js.map +1 -1
- package/dist/data/PromptForm.cjs +79 -0
- package/dist/data/PromptForm.cjs.map +1 -0
- package/dist/data/PromptForm.d.ts +26 -0
- package/dist/data/PromptForm.d.ts.map +1 -0
- package/dist/data/PromptForm.js +79 -0
- package/dist/data/PromptForm.js.map +1 -0
- package/dist/data/PromptIndicator.cjs +82 -0
- package/dist/data/PromptIndicator.cjs.map +1 -0
- package/dist/data/PromptIndicator.d.ts +19 -0
- package/dist/data/PromptIndicator.d.ts.map +1 -0
- package/dist/data/PromptIndicator.js +82 -0
- package/dist/data/PromptIndicator.js.map +1 -0
- package/dist/data/PromptList.cjs +67 -0
- package/dist/data/PromptList.cjs.map +1 -0
- package/dist/data/PromptList.d.ts +13 -0
- package/dist/data/PromptList.d.ts.map +1 -0
- package/dist/data/PromptList.js +67 -0
- package/dist/data/PromptList.js.map +1 -0
- package/dist/data/clicky-download.cjs +251 -0
- package/dist/data/clicky-download.cjs.map +1 -0
- package/dist/data/clicky-download.d.ts +55 -0
- package/dist/data/clicky-download.d.ts.map +1 -0
- package/dist/data/clicky-download.js +244 -0
- package/dist/data/clicky-download.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +11 -4
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +2 -35
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +11 -4
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/GitLink.cjs +13 -0
- package/dist/data/git/GitLink.cjs.map +1 -0
- package/dist/data/git/GitLink.d.ts +8 -0
- package/dist/data/git/GitLink.d.ts.map +1 -0
- package/dist/data/git/GitLink.js +13 -0
- package/dist/data/git/GitLink.js.map +1 -0
- package/dist/data/git/git-links.cjs +54 -0
- package/dist/data/git/git-links.cjs.map +1 -0
- package/dist/data/git/git-links.d.ts +4 -0
- package/dist/data/git/git-links.d.ts.map +1 -0
- package/dist/data/git/git-links.js +53 -0
- package/dist/data/git/git-links.js.map +1 -0
- package/dist/data/git/index.d.ts +3 -0
- package/dist/data/git/index.d.ts.map +1 -1
- package/dist/data/git/types.d.ts +54 -0
- package/dist/data/git/types.d.ts.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +4 -3
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +7 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +4 -3
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +1 -1
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestTree.cjs +1 -1
- package/dist/data/test-runner/TestTree.cjs.map +1 -1
- package/dist/data/test-runner/TestTree.js +1 -1
- package/dist/data/test-runner/TestTree.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +2 -2
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +2 -2
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +7 -0
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +7 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +7 -0
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +1 -1
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +3 -3
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.js +3 -3
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/test-runner/matrix-marks.cjs +12 -3
- package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
- package/dist/data/test-runner/matrix-marks.d.ts +13 -0
- package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.js +12 -3
- package/dist/data/test-runner/matrix-marks.js.map +1 -1
- package/dist/data/test-runner/status.cjs +1 -1
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.js +1 -1
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/traces/index.d.ts +2 -0
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.cjs +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +6 -2
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceDetail.js +102 -78
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.cjs +43 -7
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.d.ts +14 -3
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -1
- package/dist/data/traces/otel/OtelTraceTable.js +44 -8
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -1
- package/dist/data/traces/otel/profile-listing.cjs +61 -0
- package/dist/data/traces/otel/profile-listing.cjs.map +1 -0
- package/dist/data/traces/otel/profile-listing.d.ts +23 -0
- package/dist/data/traces/otel/profile-listing.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-listing.js +60 -0
- package/dist/data/traces/otel/profile-listing.js.map +1 -0
- package/dist/data/traces/otel/profile-spans.cjs +22 -0
- package/dist/data/traces/otel/profile-spans.cjs.map +1 -0
- package/dist/data/traces/otel/profile-spans.d.ts +4 -0
- package/dist/data/traces/otel/profile-spans.d.ts.map +1 -0
- package/dist/data/traces/otel/profile-spans.js +22 -0
- package/dist/data/traces/otel/profile-spans.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +7 -1
- package/dist/data/traces/otel/span-traces.cjs.map +1 -1
- package/dist/data/traces/otel/span-traces.d.ts +2 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -1
- package/dist/data/traces/otel/span-traces.js +7 -2
- package/dist/data/traces/otel/span-traces.js.map +1 -1
- package/dist/data/useClickyTableMenu.cjs +33 -0
- package/dist/data/useClickyTableMenu.cjs.map +1 -0
- package/dist/data/useClickyTableMenu.d.ts +17 -0
- package/dist/data/useClickyTableMenu.d.ts.map +1 -0
- package/dist/data/useClickyTableMenu.js +33 -0
- package/dist/data/useClickyTableMenu.js.map +1 -0
- package/dist/data/verification/adapterViews.cjs +3 -1
- package/dist/data/verification/adapterViews.cjs.map +1 -1
- package/dist/data/verification/adapterViews.d.ts +5 -2
- package/dist/data/verification/adapterViews.d.ts.map +1 -1
- package/dist/data/verification/adapterViews.js +4 -2
- package/dist/data/verification/adapterViews.js.map +1 -1
- package/dist/data/verification/adapters.cjs +28 -7
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts +7 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +28 -7
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/verification/stepKind.cjs +1 -0
- package/dist/data/verification/stepKind.cjs.map +1 -1
- package/dist/data/verification/stepKind.d.ts.map +1 -1
- package/dist/data/verification/stepKind.js +1 -0
- package/dist/data/verification/stepKind.js.map +1 -1
- package/dist/data/verification/stepKindViews.cjs +17 -0
- package/dist/data/verification/stepKindViews.cjs.map +1 -1
- package/dist/data/verification/stepKindViews.d.ts +4 -0
- package/dist/data/verification/stepKindViews.d.ts.map +1 -1
- package/dist/data/verification/stepKindViews.js +17 -1
- package/dist/data/verification/stepKindViews.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +121 -2
- package/dist/data.d.ts +3 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +55 -3
- package/dist/git.cjs +6 -0
- package/dist/git.d.ts +4 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +3 -0
- package/dist/hooks/use-prompts.cjs +18 -11
- package/dist/hooks/use-prompts.cjs.map +1 -1
- package/dist/hooks/use-prompts.d.ts.map +1 -1
- package/dist/hooks/use-prompts.js +18 -11
- package/dist/hooks/use-prompts.js.map +1 -1
- package/dist/icons/components/UiApi.cjs +37 -0
- package/dist/icons/components/UiApi.cjs.map +1 -0
- package/dist/icons/components/UiApi.d.ts +9 -0
- package/dist/icons/components/UiApi.d.ts.map +1 -0
- package/dist/icons/components/UiApi.js +35 -0
- package/dist/icons/components/UiApi.js.map +1 -0
- package/dist/icons/components/UiApiBridge.cjs +38 -0
- package/dist/icons/components/UiApiBridge.cjs.map +1 -0
- package/dist/icons/components/UiApiBridge.d.ts +9 -0
- package/dist/icons/components/UiApiBridge.d.ts.map +1 -0
- package/dist/icons/components/UiApiBridge.js +36 -0
- package/dist/icons/components/UiApiBridge.js.map +1 -0
- package/dist/icons/components/UiApiGateway.cjs +33 -0
- package/dist/icons/components/UiApiGateway.cjs.map +1 -0
- package/dist/icons/components/UiApiGateway.d.ts +9 -0
- package/dist/icons/components/UiApiGateway.d.ts.map +1 -0
- package/dist/icons/components/UiApiGateway.js +31 -0
- package/dist/icons/components/UiApiGateway.js.map +1 -0
- package/dist/icons/components/UiApiRequest.cjs +37 -0
- package/dist/icons/components/UiApiRequest.cjs.map +1 -0
- package/dist/icons/components/UiApiRequest.d.ts +9 -0
- package/dist/icons/components/UiApiRequest.d.ts.map +1 -0
- package/dist/icons/components/UiApiRequest.js +35 -0
- package/dist/icons/components/UiApiRequest.js.map +1 -0
- package/dist/icons/components/UiArrowDecision.cjs +51 -0
- package/dist/icons/components/UiArrowDecision.cjs.map +1 -0
- package/dist/icons/components/UiArrowDecision.d.ts +15 -0
- package/dist/icons/components/UiArrowDecision.d.ts.map +1 -0
- package/dist/icons/components/UiArrowDecision.js +48 -0
- package/dist/icons/components/UiArrowDecision.js.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.cjs +51 -0
- package/dist/icons/components/UiArrowSquareIn.cjs.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.d.ts +15 -0
- package/dist/icons/components/UiArrowSquareIn.d.ts.map +1 -0
- package/dist/icons/components/UiArrowSquareIn.js +48 -0
- package/dist/icons/components/UiArrowSquareIn.js.map +1 -0
- package/dist/icons/components/UiBatchCheck.cjs +55 -0
- package/dist/icons/components/UiBatchCheck.cjs.map +1 -0
- package/dist/icons/components/UiBatchCheck.d.ts +15 -0
- package/dist/icons/components/UiBatchCheck.d.ts.map +1 -0
- package/dist/icons/components/UiBatchCheck.js +52 -0
- package/dist/icons/components/UiBatchCheck.js.map +1 -0
- package/dist/icons/components/UiBatchJob.cjs +39 -0
- package/dist/icons/components/UiBatchJob.cjs.map +1 -0
- package/dist/icons/components/UiBatchJob.d.ts +9 -0
- package/dist/icons/components/UiBatchJob.d.ts.map +1 -0
- package/dist/icons/components/UiBatchJob.js +37 -0
- package/dist/icons/components/UiBatchJob.js.map +1 -0
- package/dist/icons/components/UiBatchRequest.cjs +39 -0
- package/dist/icons/components/UiBatchRequest.cjs.map +1 -0
- package/dist/icons/components/UiBatchRequest.d.ts +9 -0
- package/dist/icons/components/UiBatchRequest.d.ts.map +1 -0
- package/dist/icons/components/UiBatchRequest.js +37 -0
- package/dist/icons/components/UiBatchRequest.js.map +1 -0
- package/dist/icons/components/UiBpmnConditional.cjs +29 -0
- package/dist/icons/components/UiBpmnConditional.cjs.map +1 -0
- package/dist/icons/components/UiBpmnConditional.d.ts +9 -0
- package/dist/icons/components/UiBpmnConditional.d.ts.map +1 -0
- package/dist/icons/components/UiBpmnConditional.js +27 -0
- package/dist/icons/components/UiBpmnConditional.js.map +1 -0
- package/dist/icons/components/UiBranchFlow.cjs +33 -0
- package/dist/icons/components/UiBranchFlow.cjs.map +1 -0
- package/dist/icons/components/UiBranchFlow.d.ts +9 -0
- package/dist/icons/components/UiBranchFlow.d.ts.map +1 -0
- package/dist/icons/components/UiBranchFlow.js +31 -0
- package/dist/icons/components/UiBranchFlow.js.map +1 -0
- package/dist/icons/components/UiClassicBatch.cjs +29 -0
- package/dist/icons/components/UiClassicBatch.cjs.map +1 -0
- package/dist/icons/components/UiClassicBatch.d.ts +9 -0
- package/dist/icons/components/UiClassicBatch.d.ts.map +1 -0
- package/dist/icons/components/UiClassicBatch.js +27 -0
- package/dist/icons/components/UiClassicBatch.js.map +1 -0
- package/dist/icons/components/UiCodeFile.cjs +29 -0
- package/dist/icons/components/UiCodeFile.cjs.map +1 -0
- package/dist/icons/components/UiCodeFile.d.ts +9 -0
- package/dist/icons/components/UiCodeFile.d.ts.map +1 -0
- package/dist/icons/components/UiCodeFile.js +27 -0
- package/dist/icons/components/UiCodeFile.js.map +1 -0
- package/dist/icons/components/UiColumnsLayout.cjs +29 -0
- package/dist/icons/components/UiColumnsLayout.cjs.map +1 -0
- package/dist/icons/components/UiColumnsLayout.d.ts +9 -0
- package/dist/icons/components/UiColumnsLayout.d.ts.map +1 -0
- package/dist/icons/components/UiColumnsLayout.js +27 -0
- package/dist/icons/components/UiColumnsLayout.js.map +1 -0
- package/dist/icons/components/UiCondition.cjs +37 -0
- package/dist/icons/components/UiCondition.cjs.map +1 -0
- package/dist/icons/components/UiCondition.d.ts +9 -0
- package/dist/icons/components/UiCondition.d.ts.map +1 -0
- package/dist/icons/components/UiCondition.js +35 -0
- package/dist/icons/components/UiCondition.js.map +1 -0
- package/dist/icons/components/UiConditions.cjs +29 -0
- package/dist/icons/components/UiConditions.cjs.map +1 -0
- package/dist/icons/components/UiConditions.d.ts +9 -0
- package/dist/icons/components/UiConditions.d.ts.map +1 -0
- package/dist/icons/components/UiConditions.js +27 -0
- package/dist/icons/components/UiConditions.js.map +1 -0
- package/dist/icons/components/UiDelayQueue.cjs +40 -0
- package/dist/icons/components/UiDelayQueue.cjs.map +1 -0
- package/dist/icons/components/UiDelayQueue.d.ts +9 -0
- package/dist/icons/components/UiDelayQueue.d.ts.map +1 -0
- package/dist/icons/components/UiDelayQueue.js +38 -0
- package/dist/icons/components/UiDelayQueue.js.map +1 -0
- package/dist/icons/components/UiDynamicForm.cjs +51 -0
- package/dist/icons/components/UiDynamicForm.cjs.map +1 -0
- package/dist/icons/components/UiDynamicForm.d.ts +15 -0
- package/dist/icons/components/UiDynamicForm.d.ts.map +1 -0
- package/dist/icons/components/UiDynamicForm.js +48 -0
- package/dist/icons/components/UiDynamicForm.js.map +1 -0
- package/dist/icons/components/UiFlowArrow.cjs +51 -0
- package/dist/icons/components/UiFlowArrow.cjs.map +1 -0
- package/dist/icons/components/UiFlowArrow.d.ts +15 -0
- package/dist/icons/components/UiFlowArrow.d.ts.map +1 -0
- package/dist/icons/components/UiFlowArrow.js +48 -0
- package/dist/icons/components/UiFlowArrow.js.map +1 -0
- package/dist/icons/components/UiFormFields.cjs +33 -0
- package/dist/icons/components/UiFormFields.cjs.map +1 -0
- package/dist/icons/components/UiFormFields.d.ts +9 -0
- package/dist/icons/components/UiFormFields.d.ts.map +1 -0
- package/dist/icons/components/UiFormFields.js +31 -0
- package/dist/icons/components/UiFormFields.js.map +1 -0
- package/dist/icons/components/UiFormStep.cjs +38 -0
- package/dist/icons/components/UiFormStep.cjs.map +1 -0
- package/dist/icons/components/UiFormStep.d.ts +9 -0
- package/dist/icons/components/UiFormStep.d.ts.map +1 -0
- package/dist/icons/components/UiFormStep.js +36 -0
- package/dist/icons/components/UiFormStep.js.map +1 -0
- package/dist/icons/components/UiGatewayApi.cjs +32 -0
- package/dist/icons/components/UiGatewayApi.cjs.map +1 -0
- package/dist/icons/components/UiGatewayApi.d.ts +9 -0
- package/dist/icons/components/UiGatewayApi.d.ts.map +1 -0
- package/dist/icons/components/UiGatewayApi.js +30 -0
- package/dist/icons/components/UiGatewayApi.js.map +1 -0
- package/dist/icons/components/UiImportArrow.cjs +29 -0
- package/dist/icons/components/UiImportArrow.cjs.map +1 -0
- package/dist/icons/components/UiImportArrow.d.ts +9 -0
- package/dist/icons/components/UiImportArrow.d.ts.map +1 -0
- package/dist/icons/components/UiImportArrow.js +27 -0
- package/dist/icons/components/UiImportArrow.js.map +1 -0
- package/dist/icons/components/UiInputField.cjs +33 -0
- package/dist/icons/components/UiInputField.cjs.map +1 -0
- package/dist/icons/components/UiInputField.d.ts +9 -0
- package/dist/icons/components/UiInputField.d.ts.map +1 -0
- package/dist/icons/components/UiInputField.js +31 -0
- package/dist/icons/components/UiInputField.js.map +1 -0
- package/dist/icons/components/UiInsertTable.cjs +29 -0
- package/dist/icons/components/UiInsertTable.cjs.map +1 -0
- package/dist/icons/components/UiInsertTable.d.ts +9 -0
- package/dist/icons/components/UiInsertTable.d.ts.map +1 -0
- package/dist/icons/components/UiInsertTable.js +27 -0
- package/dist/icons/components/UiInsertTable.js.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.cjs +32 -0
- package/dist/icons/components/UiLayoutTemplate.cjs.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.d.ts +9 -0
- package/dist/icons/components/UiLayoutTemplate.d.ts.map +1 -0
- package/dist/icons/components/UiLayoutTemplate.js +30 -0
- package/dist/icons/components/UiLayoutTemplate.js.map +1 -0
- package/dist/icons/components/UiLayoutWindow.cjs +56 -0
- package/dist/icons/components/UiLayoutWindow.cjs.map +1 -0
- package/dist/icons/components/UiLayoutWindow.d.ts +15 -0
- package/dist/icons/components/UiLayoutWindow.d.ts.map +1 -0
- package/dist/icons/components/UiLayoutWindow.js +53 -0
- package/dist/icons/components/UiLayoutWindow.js.map +1 -0
- package/dist/icons/components/UiListEnd.cjs +33 -0
- package/dist/icons/components/UiListEnd.cjs.map +1 -0
- package/dist/icons/components/UiListEnd.d.ts +9 -0
- package/dist/icons/components/UiListEnd.d.ts.map +1 -0
- package/dist/icons/components/UiListEnd.js +31 -0
- package/dist/icons/components/UiListEnd.js.map +1 -0
- package/dist/icons/components/UiListEndLine.cjs +51 -0
- package/dist/icons/components/UiListEndLine.cjs.map +1 -0
- package/dist/icons/components/UiListEndLine.d.ts +15 -0
- package/dist/icons/components/UiListEndLine.d.ts.map +1 -0
- package/dist/icons/components/UiListEndLine.js +48 -0
- package/dist/icons/components/UiListEndLine.js.map +1 -0
- package/dist/icons/components/UiListNumbers.cjs +51 -0
- package/dist/icons/components/UiListNumbers.cjs.map +1 -0
- package/dist/icons/components/UiListNumbers.d.ts +15 -0
- package/dist/icons/components/UiListNumbers.d.ts.map +1 -0
- package/dist/icons/components/UiListNumbers.js +48 -0
- package/dist/icons/components/UiListNumbers.js.map +1 -0
- package/dist/icons/components/UiLowPriority.cjs +29 -0
- package/dist/icons/components/UiLowPriority.cjs.map +1 -0
- package/dist/icons/components/UiLowPriority.d.ts +9 -0
- package/dist/icons/components/UiLowPriority.d.ts.map +1 -0
- package/dist/icons/components/UiLowPriority.js +27 -0
- package/dist/icons/components/UiLowPriority.js.map +1 -0
- package/dist/icons/components/UiMergeQueue.cjs +38 -0
- package/dist/icons/components/UiMergeQueue.cjs.map +1 -0
- package/dist/icons/components/UiMergeQueue.d.ts +9 -0
- package/dist/icons/components/UiMergeQueue.d.ts.map +1 -0
- package/dist/icons/components/UiMergeQueue.js +36 -0
- package/dist/icons/components/UiMergeQueue.js.map +1 -0
- package/dist/icons/components/UiPipelineStage.cjs +33 -0
- package/dist/icons/components/UiPipelineStage.cjs.map +1 -0
- package/dist/icons/components/UiPipelineStage.d.ts +9 -0
- package/dist/icons/components/UiPipelineStage.d.ts.map +1 -0
- package/dist/icons/components/UiPipelineStage.js +31 -0
- package/dist/icons/components/UiPipelineStage.js.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.cjs +29 -0
- package/dist/icons/components/UiPlaylistRemove.cjs.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.d.ts +9 -0
- package/dist/icons/components/UiPlaylistRemove.d.ts.map +1 -0
- package/dist/icons/components/UiPlaylistRemove.js +27 -0
- package/dist/icons/components/UiPlaylistRemove.js.map +1 -0
- package/dist/icons/components/UiReportForms.cjs +51 -0
- package/dist/icons/components/UiReportForms.cjs.map +1 -0
- package/dist/icons/components/UiReportForms.d.ts +15 -0
- package/dist/icons/components/UiReportForms.d.ts.map +1 -0
- package/dist/icons/components/UiReportForms.js +48 -0
- package/dist/icons/components/UiReportForms.js.map +1 -0
- package/dist/icons/components/UiScreenTemplate.cjs +29 -0
- package/dist/icons/components/UiScreenTemplate.cjs.map +1 -0
- package/dist/icons/components/UiScreenTemplate.d.ts +9 -0
- package/dist/icons/components/UiScreenTemplate.d.ts.map +1 -0
- package/dist/icons/components/UiScreenTemplate.js +27 -0
- package/dist/icons/components/UiScreenTemplate.js.map +1 -0
- package/dist/icons/components/UiServices.cjs +29 -0
- package/dist/icons/components/UiServices.cjs.map +1 -0
- package/dist/icons/components/UiServices.d.ts +9 -0
- package/dist/icons/components/UiServices.d.ts.map +1 -0
- package/dist/icons/components/UiServices.js +27 -0
- package/dist/icons/components/UiServices.js.map +1 -0
- package/dist/icons/components/UiSkipCircle.cjs +51 -0
- package/dist/icons/components/UiSkipCircle.cjs.map +1 -0
- package/dist/icons/components/UiSkipCircle.d.ts +15 -0
- package/dist/icons/components/UiSkipCircle.d.ts.map +1 -0
- package/dist/icons/components/UiSkipCircle.js +48 -0
- package/dist/icons/components/UiSkipCircle.js.map +1 -0
- package/dist/icons/components/UiTaskBatch.cjs +33 -0
- package/dist/icons/components/UiTaskBatch.cjs.map +1 -0
- package/dist/icons/components/UiTaskBatch.d.ts +9 -0
- package/dist/icons/components/UiTaskBatch.d.ts.map +1 -0
- package/dist/icons/components/UiTaskBatch.js +31 -0
- package/dist/icons/components/UiTaskBatch.js.map +1 -0
- package/dist/icons/components/UiTodoList.cjs +29 -0
- package/dist/icons/components/UiTodoList.cjs.map +1 -0
- package/dist/icons/components/UiTodoList.d.ts +9 -0
- package/dist/icons/components/UiTodoList.d.ts.map +1 -0
- package/dist/icons/components/UiTodoList.js +27 -0
- package/dist/icons/components/UiTodoList.js.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.cjs +51 -0
- package/dist/icons/components/UiTrayArrowDown.cjs.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.d.ts +15 -0
- package/dist/icons/components/UiTrayArrowDown.d.ts.map +1 -0
- package/dist/icons/components/UiTrayArrowDown.js +48 -0
- package/dist/icons/components/UiTrayArrowDown.js.map +1 -0
- package/dist/icons/components/UiVault.cjs +51 -0
- package/dist/icons/components/UiVault.cjs.map +1 -0
- package/dist/icons/components/UiVault.d.ts +15 -0
- package/dist/icons/components/UiVault.d.ts.map +1 -0
- package/dist/icons/components/UiVault.js +48 -0
- package/dist/icons/components/UiVault.js.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.cjs +39 -0
- package/dist/icons/components/UiWebServiceDefinition.cjs.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.d.ts +9 -0
- package/dist/icons/components/UiWebServiceDefinition.d.ts.map +1 -0
- package/dist/icons/components/UiWebServiceDefinition.js +37 -0
- package/dist/icons/components/UiWebServiceDefinition.js.map +1 -0
- package/dist/icons/components/UiWebhook.cjs +29 -0
- package/dist/icons/components/UiWebhook.cjs.map +1 -0
- package/dist/icons/components/UiWebhook.d.ts +9 -0
- package/dist/icons/components/UiWebhook.d.ts.map +1 -0
- package/dist/icons/components/UiWebhook.js +27 -0
- package/dist/icons/components/UiWebhook.js.map +1 -0
- package/dist/icons/components/UiWebhookLine.cjs +51 -0
- package/dist/icons/components/UiWebhookLine.cjs.map +1 -0
- package/dist/icons/components/UiWebhookLine.d.ts +15 -0
- package/dist/icons/components/UiWebhookLine.d.ts.map +1 -0
- package/dist/icons/components/UiWebhookLine.js +48 -0
- package/dist/icons/components/UiWebhookLine.js.map +1 -0
- package/dist/icons/index.d.ts +58 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +90 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +90 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +103 -0
- package/dist/icons.js +46 -1
- package/dist/index.cjs +128 -3
- package/dist/index.js +59 -4
- package/dist/overlay/DropdownMenu.cjs +17 -14
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +1 -0
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +18 -15
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +49 -12
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +10 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +51 -14
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/EntitySurface.cjs +38 -0
- package/dist/rpc/EntitySurface.cjs.map +1 -0
- package/dist/rpc/EntitySurface.d.ts +17 -0
- package/dist/rpc/EntitySurface.d.ts.map +1 -0
- package/dist/rpc/EntitySurface.js +38 -0
- package/dist/rpc/EntitySurface.js.map +1 -0
- package/dist/rpc/ExplorerNav.cjs +48 -0
- package/dist/rpc/ExplorerNav.cjs.map +1 -0
- package/dist/rpc/ExplorerNav.d.ts +12 -0
- package/dist/rpc/ExplorerNav.d.ts.map +1 -0
- package/dist/rpc/ExplorerNav.js +48 -0
- package/dist/rpc/ExplorerNav.js.map +1 -0
- package/dist/rpc/explorer-nav-context.cjs +5 -0
- package/dist/rpc/explorer-nav-context.cjs.map +1 -0
- package/dist/rpc/explorer-nav-context.d.ts +11 -0
- package/dist/rpc/explorer-nav-context.d.ts.map +1 -0
- package/dist/rpc/explorer-nav-context.js +6 -0
- package/dist/rpc/explorer-nav-context.js.map +1 -0
- package/dist/rpc.cjs +4 -0
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -5,6 +5,7 @@ const require_UiCircleOutline = require("../../icons/components/UiCircleOutline.
|
|
|
5
5
|
const require_UiLoader = require("../../icons/components/UiLoader.cjs");
|
|
6
6
|
const require_UiPass = require("../../icons/components/UiPass.cjs");
|
|
7
7
|
const require_UiSkipForward = require("../../icons/components/UiSkipForward.cjs");
|
|
8
|
+
const require_UiSkipCircle = require("../../icons/components/UiSkipCircle.cjs");
|
|
8
9
|
const require_UiHourglass = require("../../icons/components/UiHourglass.cjs");
|
|
9
10
|
const require_UiProhibit = require("../../icons/components/UiProhibit.cjs");
|
|
10
11
|
// src/data/test-runner/matrix-marks.ts
|
|
@@ -39,9 +40,9 @@ var MATRIX_MARKS = {
|
|
|
39
40
|
spin: true
|
|
40
41
|
},
|
|
41
42
|
aborted: {
|
|
42
|
-
icon:
|
|
43
|
-
tone: "text-
|
|
44
|
-
bar: "bg-
|
|
43
|
+
icon: require_UiSkipCircle.UiSkipCircle,
|
|
44
|
+
tone: "text-muted-foreground",
|
|
45
|
+
bar: "bg-slate-300 dark:bg-slate-600",
|
|
45
46
|
label: "aborted",
|
|
46
47
|
attention: true
|
|
47
48
|
},
|
|
@@ -72,6 +73,14 @@ var MATRIX_MARKS = {
|
|
|
72
73
|
tone: "text-muted-foreground/60",
|
|
73
74
|
label: "not in this run",
|
|
74
75
|
attention: false
|
|
76
|
+
},
|
|
77
|
+
/** A plan or case its country does not apply to: not run here, by design. */
|
|
78
|
+
na: {
|
|
79
|
+
icon: require_UiProhibit.UiProhibit,
|
|
80
|
+
tone: "text-muted-foreground/60",
|
|
81
|
+
label: "N/A",
|
|
82
|
+
legend: "N/A · not for this country",
|
|
83
|
+
attention: false
|
|
75
84
|
}
|
|
76
85
|
};
|
|
77
86
|
var MATRIX_ORDER = Object.keys(MATRIX_MARKS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-marks.cjs","names":["UiPass","UiWarningCircle","UiSkipForward","UiLoader","
|
|
1
|
+
{"version":3,"file":"matrix-marks.cjs","names":["UiPass","UiWarningCircle","UiSkipForward","UiLoader","UiSkipCircle","UiCircleX","UiWarningTriangleFilled","UiHourglass","UiCircleOutline","UiProhibit"],"sources":["../../../src/data/test-runner/matrix-marks.ts"],"sourcesContent":["// The glyph vocabulary of a bulk test matrix (plans × environments): plan\n// cells, sub-steps, the environment header's verdict row and the legend all\n// read MATRIX_MARKS, in this order. The live web matrix and its printed report\n// draw from this one table. MatrixMarks.tsx renders it; this file holds only\n// the tokens and pure helpers (react/only-export-components).\n\nimport {\n UiCircleOutline,\n UiCircleX,\n UiHourglass,\n UiLoader,\n UiPass,\n UiProhibit,\n UiSkipCircle,\n UiSkipForward,\n UiWarningCircle,\n UiWarningTriangleFilled,\n type IconComponent,\n} from \"../../icons\";\n\nexport type MatrixMarkToken = {\n icon: IconComponent;\n tone: string;\n /** Progress-bar fill; absent for states a bar leaves as its track. */\n bar?: string;\n label: string;\n legend?: string;\n /** Whether a sub-step spells the outcome out beside its glyph. */\n attention: boolean;\n spin?: boolean;\n};\n\nexport const MATRIX_MARKS = {\n passed: { icon: UiPass, tone: \"text-emerald-600 dark:text-emerald-400\", bar: \"bg-emerald-500\", label: \"passed\", attention: false },\n warned: { icon: UiWarningCircle, tone: \"text-amber-600 dark:text-amber-400\", bar: \"bg-amber-400\", label: \"warned\", attention: true },\n skipped: { icon: UiSkipForward, tone: \"text-slate-400 dark:text-slate-500\", bar: \"bg-slate-300 dark:bg-slate-600\", label: \"skipped\", attention: false },\n running: { icon: UiLoader, tone: \"text-blue-600 dark:text-blue-400\", bar: \"bg-blue-500 animate-pulse\", label: \"running\", attention: true, spin: true },\n aborted: { icon: UiSkipCircle, tone: \"text-muted-foreground\", bar: \"bg-slate-300 dark:bg-slate-600\", label: \"aborted\", attention: true },\n failed: { icon: UiCircleX, tone: \"text-red-600 dark:text-red-400\", bar: \"bg-red-600\", label: \"failed\", attention: true },\n error: { icon: UiWarningTriangleFilled, tone: \"text-red-600 dark:text-red-400\", bar: \"bg-red-800\", label: \"error\", legend: \"error · never started\", attention: true },\n pending: { icon: UiHourglass, tone: \"text-muted-foreground\", label: \"pending\", legend: \"pending · queued\", attention: false },\n absent: { icon: UiCircleOutline, tone: \"text-muted-foreground/60\", label: \"not in this run\", attention: false },\n /** A plan or case its country does not apply to: not run here, by design. */\n na: { icon: UiProhibit, tone: \"text-muted-foreground/60\", label: \"N/A\", legend: \"N/A · not for this country\", attention: false },\n} satisfies Record<string, MatrixMarkToken>;\n\nexport type MatrixMarkKey = keyof typeof MATRIX_MARKS;\nexport type MatrixCounts = Partial<Record<MatrixMarkKey, number>>;\n\nexport const MATRIX_ORDER = Object.keys(MATRIX_MARKS) as readonly MatrixMarkKey[];\n\n/** One environment's plan totals, as its matrix column header reads them. */\nexport type MatrixEnvCounts = {\n passed: number;\n warned: number;\n failed: number;\n error: number;\n running: number;\n queued: number;\n total: number;\n};\n\nexport function matrixMarkKey(outcome: string): MatrixMarkKey {\n if (!Object.hasOwn(MATRIX_MARKS, outcome)) throw new Error(`matrix has no mark for outcome \"${outcome}\"`);\n return outcome as MatrixMarkKey;\n}\n\n/**\n * Whether a mix holds only the outcome a mark beside it already shows, so\n * drawing both would repeat the glyph.\n */\nexport function repeatsMark(counts: MatrixCounts, mark: MatrixMarkKey): boolean {\n const nonZero = MATRIX_ORDER.filter((key) => (counts[key] ?? 0) > 0);\n return nonZero.length === 1 && nonZero[0] === mark;\n}\n\n/** A mark's progress-bar fill, the muted track for one with none; static (print) drops its animate-* classes. */\nexport function matrixBarClass(mark: MatrixMarkKey, isStatic: boolean): string {\n const bar: string = (MATRIX_MARKS[mark] as MatrixMarkToken).bar ?? \"bg-muted\";\n return isStatic ? bar.split(\" \").filter((c) => !c.startsWith(\"animate-\")).join(\" \") : bar;\n}\n\n/** The matrix's one duration format: 42s, 4m 12s, 1h 03m. */\nexport function formatMatrixDuration(ms: number): string {\n const s = Math.round(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ${String(s % 60).padStart(2, \"0\")}s`;\n return `${Math.floor(m / 60)}h ${String(m % 60).padStart(2, \"0\")}m`;\n}\n"],"mappings":";;;;;;;;;;;AAgCA,IAAa,eAAe;CAC1B,QAAQ;EAAE,MAAMA,eAAAA;EAAQ,MAAM;EAA0C,KAAK;EAAkB,OAAO;EAAU,WAAW;CAAM;CACjI,QAAQ;EAAE,MAAMC,wBAAAA;EAAiB,MAAM;EAAsC,KAAK;EAAgB,OAAO;EAAU,WAAW;CAAK;CACnI,SAAS;EAAE,MAAMC,sBAAAA;EAAe,MAAM;EAAsC,KAAK;EAAkC,OAAO;EAAW,WAAW;CAAM;CACtJ,SAAS;EAAE,MAAMC,iBAAAA;EAAU,MAAM;EAAoC,KAAK;EAA6B,OAAO;EAAW,WAAW;EAAM,MAAM;CAAK;CACrJ,SAAS;EAAE,MAAMC,qBAAAA;EAAc,MAAM;EAAyB,KAAK;EAAkC,OAAO;EAAW,WAAW;CAAK;CACvI,QAAQ;EAAE,MAAMC,kBAAAA;EAAW,MAAM;EAAkC,KAAK;EAAc,OAAO;EAAU,WAAW;CAAK;CACvH,OAAO;EAAE,MAAMC,0BAAAA;EAAyB,MAAM;EAAkC,KAAK;EAAc,OAAO;EAAS,QAAQ;EAAyB,WAAW;CAAK;CACpK,SAAS;EAAE,MAAMC,oBAAAA;EAAa,MAAM;EAAyB,OAAO;EAAW,QAAQ;EAAoB,WAAW;CAAM;CAC5H,QAAQ;EAAE,MAAMC,wBAAAA;EAAiB,MAAM;EAA4B,OAAO;EAAmB,WAAW;CAAM;;CAE9G,IAAI;EAAE,MAAMC,mBAAAA;EAAY,MAAM;EAA4B,OAAO;EAAO,QAAQ;EAA8B,WAAW;CAAM;AACjI;AAKA,IAAa,eAAe,OAAO,KAAK,YAAY;AAapD,SAAgB,cAAc,SAAgC;CAC5D,IAAI,CAAC,OAAO,OAAO,cAAc,OAAO,GAAG,MAAM,IAAI,MAAM,mCAAmC,QAAQ,EAAE;CACxG,OAAO;AACT;;;;;AAMA,SAAgB,YAAY,QAAsB,MAA8B;CAC9E,MAAM,UAAU,aAAa,QAAQ,SAAS,OAAO,QAAQ,KAAK,CAAC;CACnE,OAAO,QAAQ,WAAW,KAAK,QAAQ,OAAO;AAChD;;AAGA,SAAgB,eAAe,MAAqB,UAA2B;CAC7E,MAAM,MAAe,aAAa,KAAK,CAAqB,OAAO;CACnE,OAAO,WAAW,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,EAAE,WAAW,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;AACxF;;AAGA,SAAgB,qBAAqB,IAAoB;CACvD,MAAM,IAAI,KAAK,MAAM,KAAK,GAAI;CAC9B,IAAI,IAAI,IAAI,OAAO,GAAG,EAAE;CACxB,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE;CAC3B,IAAI,IAAI,IAAI,OAAO,GAAG,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;CAC5D,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;AACnE"}
|
|
@@ -125,6 +125,19 @@ export declare const MATRIX_MARKS: {
|
|
|
125
125
|
label: string;
|
|
126
126
|
attention: false;
|
|
127
127
|
};
|
|
128
|
+
/** A plan or case its country does not apply to: not run here, by design. */
|
|
129
|
+
na: {
|
|
130
|
+
icon: import('react').FC<import('../../icons.js').IconProps> & {
|
|
131
|
+
__source: string;
|
|
132
|
+
__viewBox: string;
|
|
133
|
+
__group: string;
|
|
134
|
+
__consumerName: string;
|
|
135
|
+
};
|
|
136
|
+
tone: string;
|
|
137
|
+
label: string;
|
|
138
|
+
legend: string;
|
|
139
|
+
attention: false;
|
|
140
|
+
};
|
|
128
141
|
};
|
|
129
142
|
export type MatrixMarkKey = keyof typeof MATRIX_MARKS;
|
|
130
143
|
export type MatrixCounts = Partial<Record<MatrixMarkKey, number>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-marks.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/matrix-marks.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"matrix-marks.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/matrix-marks.ts"],"names":[],"mappings":"AAMA,OAAO,EAWL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAUvB,6EAA6E;;;;;;;;;;;;;CAEpC,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE,eAAO,MAAM,YAAY,EAAgC,SAAS,aAAa,EAAE,CAAC;AAElF,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAG5D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAG9E;AAED,iHAAiH;AACjH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAG7E;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMvD"}
|
|
@@ -5,6 +5,7 @@ import { UiCircleOutline } from "../../icons/components/UiCircleOutline.js";
|
|
|
5
5
|
import { UiLoader } from "../../icons/components/UiLoader.js";
|
|
6
6
|
import { UiPass } from "../../icons/components/UiPass.js";
|
|
7
7
|
import { UiSkipForward } from "../../icons/components/UiSkipForward.js";
|
|
8
|
+
import { UiSkipCircle } from "../../icons/components/UiSkipCircle.js";
|
|
8
9
|
import { UiHourglass } from "../../icons/components/UiHourglass.js";
|
|
9
10
|
import { UiProhibit } from "../../icons/components/UiProhibit.js";
|
|
10
11
|
// src/data/test-runner/matrix-marks.ts
|
|
@@ -39,9 +40,9 @@ var MATRIX_MARKS = {
|
|
|
39
40
|
spin: true
|
|
40
41
|
},
|
|
41
42
|
aborted: {
|
|
42
|
-
icon:
|
|
43
|
-
tone: "text-
|
|
44
|
-
bar: "bg-
|
|
43
|
+
icon: UiSkipCircle,
|
|
44
|
+
tone: "text-muted-foreground",
|
|
45
|
+
bar: "bg-slate-300 dark:bg-slate-600",
|
|
45
46
|
label: "aborted",
|
|
46
47
|
attention: true
|
|
47
48
|
},
|
|
@@ -72,6 +73,14 @@ var MATRIX_MARKS = {
|
|
|
72
73
|
tone: "text-muted-foreground/60",
|
|
73
74
|
label: "not in this run",
|
|
74
75
|
attention: false
|
|
76
|
+
},
|
|
77
|
+
/** A plan or case its country does not apply to: not run here, by design. */
|
|
78
|
+
na: {
|
|
79
|
+
icon: UiProhibit,
|
|
80
|
+
tone: "text-muted-foreground/60",
|
|
81
|
+
label: "N/A",
|
|
82
|
+
legend: "N/A · not for this country",
|
|
83
|
+
attention: false
|
|
75
84
|
}
|
|
76
85
|
};
|
|
77
86
|
var MATRIX_ORDER = Object.keys(MATRIX_MARKS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-marks.js","names":[],"sources":["../../../src/data/test-runner/matrix-marks.ts"],"sourcesContent":["// The glyph vocabulary of a bulk test matrix (plans × environments): plan\n// cells, sub-steps, the environment header's verdict row and the legend all\n// read MATRIX_MARKS, in this order. The live web matrix and its printed report\n// draw from this one table. MatrixMarks.tsx renders it; this file holds only\n// the tokens and pure helpers (react/only-export-components).\n\nimport {\n UiCircleOutline,\n UiCircleX,\n UiHourglass,\n UiLoader,\n UiPass,\n UiProhibit,\n UiSkipForward,\n UiWarningCircle,\n UiWarningTriangleFilled,\n type IconComponent,\n} from \"../../icons\";\n\nexport type MatrixMarkToken = {\n icon: IconComponent;\n tone: string;\n /** Progress-bar fill; absent for states a bar leaves as its track. */\n bar?: string;\n label: string;\n legend?: string;\n /** Whether a sub-step spells the outcome out beside its glyph. */\n attention: boolean;\n spin?: boolean;\n};\n\nexport const MATRIX_MARKS = {\n passed: { icon: UiPass, tone: \"text-emerald-600 dark:text-emerald-400\", bar: \"bg-emerald-500\", label: \"passed\", attention: false },\n warned: { icon: UiWarningCircle, tone: \"text-amber-600 dark:text-amber-400\", bar: \"bg-amber-400\", label: \"warned\", attention: true },\n skipped: { icon: UiSkipForward, tone: \"text-slate-400 dark:text-slate-500\", bar: \"bg-slate-300 dark:bg-slate-600\", label: \"skipped\", attention: false },\n running: { icon: UiLoader, tone: \"text-blue-600 dark:text-blue-400\", bar: \"bg-blue-500 animate-pulse\", label: \"running\", attention: true, spin: true },\n aborted: { icon:
|
|
1
|
+
{"version":3,"file":"matrix-marks.js","names":[],"sources":["../../../src/data/test-runner/matrix-marks.ts"],"sourcesContent":["// The glyph vocabulary of a bulk test matrix (plans × environments): plan\n// cells, sub-steps, the environment header's verdict row and the legend all\n// read MATRIX_MARKS, in this order. The live web matrix and its printed report\n// draw from this one table. MatrixMarks.tsx renders it; this file holds only\n// the tokens and pure helpers (react/only-export-components).\n\nimport {\n UiCircleOutline,\n UiCircleX,\n UiHourglass,\n UiLoader,\n UiPass,\n UiProhibit,\n UiSkipCircle,\n UiSkipForward,\n UiWarningCircle,\n UiWarningTriangleFilled,\n type IconComponent,\n} from \"../../icons\";\n\nexport type MatrixMarkToken = {\n icon: IconComponent;\n tone: string;\n /** Progress-bar fill; absent for states a bar leaves as its track. */\n bar?: string;\n label: string;\n legend?: string;\n /** Whether a sub-step spells the outcome out beside its glyph. */\n attention: boolean;\n spin?: boolean;\n};\n\nexport const MATRIX_MARKS = {\n passed: { icon: UiPass, tone: \"text-emerald-600 dark:text-emerald-400\", bar: \"bg-emerald-500\", label: \"passed\", attention: false },\n warned: { icon: UiWarningCircle, tone: \"text-amber-600 dark:text-amber-400\", bar: \"bg-amber-400\", label: \"warned\", attention: true },\n skipped: { icon: UiSkipForward, tone: \"text-slate-400 dark:text-slate-500\", bar: \"bg-slate-300 dark:bg-slate-600\", label: \"skipped\", attention: false },\n running: { icon: UiLoader, tone: \"text-blue-600 dark:text-blue-400\", bar: \"bg-blue-500 animate-pulse\", label: \"running\", attention: true, spin: true },\n aborted: { icon: UiSkipCircle, tone: \"text-muted-foreground\", bar: \"bg-slate-300 dark:bg-slate-600\", label: \"aborted\", attention: true },\n failed: { icon: UiCircleX, tone: \"text-red-600 dark:text-red-400\", bar: \"bg-red-600\", label: \"failed\", attention: true },\n error: { icon: UiWarningTriangleFilled, tone: \"text-red-600 dark:text-red-400\", bar: \"bg-red-800\", label: \"error\", legend: \"error · never started\", attention: true },\n pending: { icon: UiHourglass, tone: \"text-muted-foreground\", label: \"pending\", legend: \"pending · queued\", attention: false },\n absent: { icon: UiCircleOutline, tone: \"text-muted-foreground/60\", label: \"not in this run\", attention: false },\n /** A plan or case its country does not apply to: not run here, by design. */\n na: { icon: UiProhibit, tone: \"text-muted-foreground/60\", label: \"N/A\", legend: \"N/A · not for this country\", attention: false },\n} satisfies Record<string, MatrixMarkToken>;\n\nexport type MatrixMarkKey = keyof typeof MATRIX_MARKS;\nexport type MatrixCounts = Partial<Record<MatrixMarkKey, number>>;\n\nexport const MATRIX_ORDER = Object.keys(MATRIX_MARKS) as readonly MatrixMarkKey[];\n\n/** One environment's plan totals, as its matrix column header reads them. */\nexport type MatrixEnvCounts = {\n passed: number;\n warned: number;\n failed: number;\n error: number;\n running: number;\n queued: number;\n total: number;\n};\n\nexport function matrixMarkKey(outcome: string): MatrixMarkKey {\n if (!Object.hasOwn(MATRIX_MARKS, outcome)) throw new Error(`matrix has no mark for outcome \"${outcome}\"`);\n return outcome as MatrixMarkKey;\n}\n\n/**\n * Whether a mix holds only the outcome a mark beside it already shows, so\n * drawing both would repeat the glyph.\n */\nexport function repeatsMark(counts: MatrixCounts, mark: MatrixMarkKey): boolean {\n const nonZero = MATRIX_ORDER.filter((key) => (counts[key] ?? 0) > 0);\n return nonZero.length === 1 && nonZero[0] === mark;\n}\n\n/** A mark's progress-bar fill, the muted track for one with none; static (print) drops its animate-* classes. */\nexport function matrixBarClass(mark: MatrixMarkKey, isStatic: boolean): string {\n const bar: string = (MATRIX_MARKS[mark] as MatrixMarkToken).bar ?? \"bg-muted\";\n return isStatic ? bar.split(\" \").filter((c) => !c.startsWith(\"animate-\")).join(\" \") : bar;\n}\n\n/** The matrix's one duration format: 42s, 4m 12s, 1h 03m. */\nexport function formatMatrixDuration(ms: number): string {\n const s = Math.round(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ${String(s % 60).padStart(2, \"0\")}s`;\n return `${Math.floor(m / 60)}h ${String(m % 60).padStart(2, \"0\")}m`;\n}\n"],"mappings":";;;;;;;;;;;AAgCA,IAAa,eAAe;CAC1B,QAAQ;EAAE,MAAM;EAAQ,MAAM;EAA0C,KAAK;EAAkB,OAAO;EAAU,WAAW;CAAM;CACjI,QAAQ;EAAE,MAAM;EAAiB,MAAM;EAAsC,KAAK;EAAgB,OAAO;EAAU,WAAW;CAAK;CACnI,SAAS;EAAE,MAAM;EAAe,MAAM;EAAsC,KAAK;EAAkC,OAAO;EAAW,WAAW;CAAM;CACtJ,SAAS;EAAE,MAAM;EAAU,MAAM;EAAoC,KAAK;EAA6B,OAAO;EAAW,WAAW;EAAM,MAAM;CAAK;CACrJ,SAAS;EAAE,MAAM;EAAc,MAAM;EAAyB,KAAK;EAAkC,OAAO;EAAW,WAAW;CAAK;CACvI,QAAQ;EAAE,MAAM;EAAW,MAAM;EAAkC,KAAK;EAAc,OAAO;EAAU,WAAW;CAAK;CACvH,OAAO;EAAE,MAAM;EAAyB,MAAM;EAAkC,KAAK;EAAc,OAAO;EAAS,QAAQ;EAAyB,WAAW;CAAK;CACpK,SAAS;EAAE,MAAM;EAAa,MAAM;EAAyB,OAAO;EAAW,QAAQ;EAAoB,WAAW;CAAM;CAC5H,QAAQ;EAAE,MAAM;EAAiB,MAAM;EAA4B,OAAO;EAAmB,WAAW;CAAM;;CAE9G,IAAI;EAAE,MAAM;EAAY,MAAM;EAA4B,OAAO;EAAO,QAAQ;EAA8B,WAAW;CAAM;AACjI;AAKA,IAAa,eAAe,OAAO,KAAK,YAAY;AAapD,SAAgB,cAAc,SAAgC;CAC5D,IAAI,CAAC,OAAO,OAAO,cAAc,OAAO,GAAG,MAAM,IAAI,MAAM,mCAAmC,QAAQ,EAAE;CACxG,OAAO;AACT;;;;;AAMA,SAAgB,YAAY,QAAsB,MAA8B;CAC9E,MAAM,UAAU,aAAa,QAAQ,SAAS,OAAO,QAAQ,KAAK,CAAC;CACnE,OAAO,QAAQ,WAAW,KAAK,QAAQ,OAAO;AAChD;;AAGA,SAAgB,eAAe,MAAqB,UAA2B;CAC7E,MAAM,MAAe,aAAa,KAAK,CAAqB,OAAO;CACnE,OAAO,WAAW,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,MAAM,CAAC,EAAE,WAAW,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI;AACxF;;AAGA,SAAgB,qBAAqB,IAAoB;CACvD,MAAM,IAAI,KAAK,MAAM,KAAK,GAAI;CAC9B,IAAI,IAAI,IAAI,OAAO,GAAG,EAAE;CACxB,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE;CAC3B,IAAI,IAAI,IAAI,OAAO,GAAG,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;CAC5D,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;AACnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.cjs","names":["matchesFilterState"],"sources":["../../../src/data/test-runner/status.ts"],"sourcesContent":["// Pure status/roll-up helpers for the test runner — ported from Gavel's\n// utils.ts (Tests-only subset). No JSX here. `outcomeFor` resolves the outcome\n// marks.tsx draws; `statusToneFor` maps it to a semantic Badge tone.\n\nimport type { BadgeTone } from \"../Badge\";\nimport type { Test, TestSummary } from \"./types\";\nimport { matchesFilterState, type FilterState } from \"./filterState\";\n\n// --- roll-up counts ------------------------------------------------------\n\n/**\n * Tallied verdict breakdown a `Test` subtree rolls up to. `warned` is amber and\n * orthogonal to a real failure — a warned-only leaf counts in total + warned,\n * never in failed.\n */\nexport type StatusCounts = {\n total: number;\n passed: number;\n failed: number;\n warned: number;\n /** Never ran because the run stopped after an earlier failure; not an intentional skip. */\n aborted: number;\n skipped: number;\n pending: number;\n running: number;\n timedout: number;\n};\n\nconst emptyCounts = (): StatusCounts => ({\n total: 0,\n passed: 0,\n failed: 0,\n warned: 0,\n aborted: 0,\n skipped: 0,\n pending: 0,\n running: 0,\n timedout: 0,\n});\n\nconst addCounts = (r: StatusCounts, s: StatusCounts) => {\n r.total += s.total;\n r.passed += s.passed;\n r.failed += s.failed;\n r.warned += s.warned;\n r.aborted += s.aborted;\n r.skipped += s.skipped;\n r.pending += s.pending;\n r.running += s.running;\n r.timedout += s.timedout;\n};\n\nconst countsFromSummary = (summary: TestSummary): StatusCounts => ({\n total: summary.Total,\n passed: summary.Passed,\n failed: summary.Failed,\n warned: summary.Warned || 0,\n aborted: summary.Aborted || 0,\n skipped: summary.Skipped,\n pending: summary.Pending || 0,\n running: summary.Running || 0,\n timedout: summary.Timedout || 0,\n});\n\nconst countsFromLeaf = (t: Test): StatusCounts => {\n const isTimedOut = !!t.timed_out;\n const counted =\n isTimedOut ||\n t.passed ||\n t.failed ||\n t.warned ||\n t.aborted ||\n t.skipped ||\n t.pending ||\n t.running;\n return {\n total: counted ? 1 : 0,\n passed: !isTimedOut && t.passed ? 1 : 0,\n failed: !isTimedOut && t.failed ? 1 : 0,\n warned: !isTimedOut && t.warned ? 1 : 0,\n aborted: !isTimedOut && t.aborted ? 1 : 0,\n skipped: !isTimedOut && !t.aborted && t.skipped ? 1 : 0,\n pending: !isTimedOut && t.pending ? 1 : 0,\n running: !isTimedOut && t.running ? 1 : 0,\n timedout: isTimedOut ? 1 : 0,\n };\n};\n\nexport function sum(t: Test): StatusCounts {\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sum(c));\n return r;\n}\n\n/** Roll up a forest's non-task status counts. Shared by `TestRunner`'s filter\n * bar and `TestRunSummary`'s chips so both read the same tally. */\nexport function aggregateStatusCounts(tests: Test[]): StatusCounts {\n const r = emptyCounts();\n for (const t of tests) addCounts(r, sumNonTaskTests(t));\n return r;\n}\n\n/** Ordered status key → label list, driving both the filter bar's pills and a\n * host's status filter option list, so the seven rows aren't hand-duplicated. */\nexport const STATUS_LABELS: { key: keyof StatusCounts; label: string }[] = [\n { key: \"failed\", label: \"Failed\" },\n { key: \"warned\", label: \"Warned\" },\n { key: \"aborted\", label: \"Aborted\" },\n { key: \"timedout\", label: \"Timed out\" },\n { key: \"passed\", label: \"Passed\" },\n { key: \"skipped\", label: \"Skipped\" },\n { key: \"running\", label: \"Running\" },\n { key: \"pending\", label: \"Queued\" },\n];\n\n/** Like {@link sum} but excludes `task`-framework pseudo-nodes from the tally. */\nexport function sumNonTaskTests(t: Test): StatusCounts {\n if (t.framework === \"task\") {\n const r = emptyCounts();\n for (const c of t.children || []) addCounts(r, sumNonTaskTests(c));\n return r;\n }\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sumNonTaskTests(c));\n return r;\n}\n\nexport function hasFailed(t: Test): boolean {\n if (t.failed) return true;\n return (t.children || []).some(hasFailed);\n}\n\nexport function hasPending(t: Test): boolean {\n if (t.pending) return true;\n return (t.children || []).some(hasPending);\n}\n\nfunction hasTimedOutDescendant(t: Test): boolean {\n if (t.timed_out) return true;\n return (t.children || []).some(hasTimedOutDescendant);\n}\n\nexport function totalDuration(t: Test): number {\n if (t.duration && t.duration > 0) return t.duration;\n let d = 0;\n for (const c of t.children || []) d += totalDuration(c);\n return d;\n}\n\n// --- status classification ----------------------------------------------\n\nexport type TestStatus =\n | \"passed\"\n | \"failed\"\n | \"warned\"\n | \"aborted\"\n | \"skipped\"\n | \"pending\"\n | \"running\"\n | \"timedout\";\n\n/** Resolve a leaf node's single status, or null for a status-less container. */\nexport function testStatus(t: Test): TestStatus | null {\n if (t.timed_out) return \"timedout\";\n if (t.running) return \"running\";\n if (t.pending) return \"pending\";\n if (t.failed) return \"failed\";\n if (t.warned) return \"warned\";\n if (t.aborted) return \"aborted\";\n if (t.skipped) return \"skipped\";\n if (t.passed) return \"passed\";\n return null;\n}\n\n/**\n * A test or lint result's outcome. `errored` is a result the runner could not\n * produce at all (the engine crashed, the child run never reported) — distinct\n * from a test that ran and failed.\n */\nexport type TestOutcome = TestStatus | \"errored\";\n\n/**\n * Resolve a node's outcome, rolling a container up to its worst child: a\n * timeout anywhere, then failed, warned, running, queued, else passed. Null for\n * a status-less leaf.\n */\nexport function outcomeFor(t: Test): TestOutcome | null {\n const own = testStatus(t);\n if (own) return own;\n if (!t.children?.length) return null;\n const s = sum(t);\n if (hasTimedOutDescendant(t)) return \"timedout\";\n if (s.failed > 0) return \"failed\";\n if (s.warned > 0) return \"warned\";\n if (s.aborted > 0) return \"aborted\";\n if (s.running > 0) return \"running\";\n if (s.pending > 0) return \"pending\";\n if (s.total > 0 && s.skipped === s.total) return \"skipped\";\n return \"passed\";\n}\n\n/** Map a node's status to a semantic Badge tone, rolling up container state. */\nexport function statusToneFor(t: Test): BadgeTone {\n const outcome = outcomeFor(t);\n return outcome ? OUTCOME_TONE[outcome] : \"neutral\";\n}\n\nconst OUTCOME_TONE: Record<TestOutcome, BadgeTone> = {\n failed: \"danger\",\n errored: \"danger\",\n timedout: \"warning\",\n warned: \"warning\",\n aborted: \"danger\",\n skipped: \"neutral\",\n running: \"info\",\n pending: \"neutral\",\n passed: \"success\",\n};\n\n// --- formatting ----------------------------------------------------------\n\n/**\n * Format a nanosecond duration as \"123ms\" or \"1.2s\". Empty for non-positive.\n * Named distinctly from clicky's ms/s `formatDuration` (lib/format) since the\n * test-runner wire format is nanoseconds.\n */\nexport function formatTestDuration(ns: number): string {\n if (ns <= 0) return \"\";\n const ms = ns / 1e6;\n if (ms < 1000) return `${ms.toFixed(0)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction compactWithUnit(value: number, unit: string): string {\n const rounded =\n Math.abs(value) >= 10 ? Math.round(value).toString() : value.toFixed(1).replace(/\\.0$/, \"\");\n return `${rounded}${unit}`;\n}\n\n/** Compact integer counts: <1000 raw, then \"k\", then \"M\". */\nexport function formatCount(n: number): string {\n const abs = Math.abs(n);\n if (abs < 1000) return String(n);\n if (abs < 1_000_000) return compactWithUnit(n / 1000, \"k\");\n return compactWithUnit(n / 1_000_000, \"M\");\n}\n\n/** Strip Go's `Test` prefix and split CamelCase / subtest names into words. */\nexport function humanizeName(name: string, framework?: string): string {\n if (!name) return \"\";\n if (framework !== \"go test\") return name;\n if (name.endsWith(\"/\")) return name;\n return name\n .split(\"/\")\n .map((p, i) => {\n if (i === 0) {\n return p.replace(/^Test/, \"\").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n }\n return p.replace(/_/g, \" \");\n })\n .join(\" / \");\n}\n\n// --- tree transforms -----------------------------------------------------\n\n/** Unique non-task frameworks present in the forest, sorted. */\nexport function collectFrameworks(tests: Test[]): string[] {\n const set = new Set<string>();\n const walk = (t: Test) => {\n if (t.framework && t.framework !== \"task\") set.add(t.framework);\n (t.children || []).forEach(walk);\n };\n tests.forEach(walk);\n return Array.from(set).sort();\n}\n\nfunction joinChainNames(parent: string | undefined, child: string | undefined): string {\n const p = (parent ?? \"\").trim();\n const c = (child ?? \"\").trim();\n if (!p) return c;\n if (!c) return p;\n return `${p} > ${c}`;\n}\n\nfunction isCollapsibleContainer(t: Test): boolean {\n return !(t.passed || t.failed || t.aborted || t.skipped || t.pending);\n}\n\n// Re-deriving a collapsed/filtered node invalidates any cached summary; drop it\n// so callers re-roll-up from the surviving children.\nfunction withoutSummary(t: Test): Omit<Test, \"summary\"> & { summary?: never } {\n const { summary: _summary, ...rest } = t;\n return rest;\n}\n\nfunction collapseNode(t: Test): Test {\n const children = t.children ?? [];\n if (children.length === 0) return t;\n\n const collapsedChildren = children.map(collapseNode);\n\n const onlyChild = collapsedChildren.length === 1 ? collapsedChildren[0] : undefined;\n if (onlyChild && isCollapsibleContainer(t)) {\n return { ...withoutSummary(onlyChild), name: joinChainNames(t.name, onlyChild.name) };\n }\n\n return { ...t, children: collapsedChildren };\n}\n\n/**\n * Compress any status-less container with exactly one child into that child,\n * joining names with \" > \". Recursive, so chains collapse into a single row.\n */\nexport function collapseSingleChildChains(tests: Test[]): Test[] {\n return tests.map(collapseNode);\n}\n\nfunction matchesLeaf(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): boolean {\n const s = testStatus(t);\n if (s === null) return false;\n return matchesFilterState(s, statusFilter) && matchesFilterState(t.framework, frameworkFilter);\n}\n\nfunction filterNode(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test | null {\n if (t.children && t.children.length > 0) {\n const filtered = t.children\n .map((c) => filterNode(c, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n if (filtered.length === 0) return null;\n return { ...withoutSummary(t), children: filtered };\n }\n return matchesLeaf(t, statusFilter, frameworkFilter) ? t : null;\n}\n\n/** Prune leaves not matching the status/framework filters; drop empty branches. */\nexport function filterTests(\n tests: Test[],\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test[] {\n if (statusFilter.size === 0 && frameworkFilter.size === 0) return tests;\n return tests\n .map((t) => filterNode(t, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"status.cjs","names":["matchesFilterState"],"sources":["../../../src/data/test-runner/status.ts"],"sourcesContent":["// Pure status/roll-up helpers for the test runner — ported from Gavel's\n// utils.ts (Tests-only subset). No JSX here. `outcomeFor` resolves the outcome\n// marks.tsx draws; `statusToneFor` maps it to a semantic Badge tone.\n\nimport type { BadgeTone } from \"../Badge\";\nimport type { Test, TestSummary } from \"./types\";\nimport { matchesFilterState, type FilterState } from \"./filterState\";\n\n// --- roll-up counts ------------------------------------------------------\n\n/**\n * Tallied verdict breakdown a `Test` subtree rolls up to. `warned` is amber and\n * orthogonal to a real failure — a warned-only leaf counts in total + warned,\n * never in failed.\n */\nexport type StatusCounts = {\n total: number;\n passed: number;\n failed: number;\n warned: number;\n /** Never ran because the run stopped after an earlier failure; not an intentional skip. */\n aborted: number;\n skipped: number;\n pending: number;\n running: number;\n timedout: number;\n};\n\nconst emptyCounts = (): StatusCounts => ({\n total: 0,\n passed: 0,\n failed: 0,\n warned: 0,\n aborted: 0,\n skipped: 0,\n pending: 0,\n running: 0,\n timedout: 0,\n});\n\nconst addCounts = (r: StatusCounts, s: StatusCounts) => {\n r.total += s.total;\n r.passed += s.passed;\n r.failed += s.failed;\n r.warned += s.warned;\n r.aborted += s.aborted;\n r.skipped += s.skipped;\n r.pending += s.pending;\n r.running += s.running;\n r.timedout += s.timedout;\n};\n\nconst countsFromSummary = (summary: TestSummary): StatusCounts => ({\n total: summary.Total,\n passed: summary.Passed,\n failed: summary.Failed,\n warned: summary.Warned || 0,\n aborted: summary.Aborted || 0,\n skipped: summary.Skipped,\n pending: summary.Pending || 0,\n running: summary.Running || 0,\n timedout: summary.Timedout || 0,\n});\n\nconst countsFromLeaf = (t: Test): StatusCounts => {\n const isTimedOut = !!t.timed_out;\n const counted =\n isTimedOut ||\n t.passed ||\n t.failed ||\n t.warned ||\n t.aborted ||\n t.skipped ||\n t.pending ||\n t.running;\n return {\n total: counted ? 1 : 0,\n passed: !isTimedOut && t.passed ? 1 : 0,\n failed: !isTimedOut && t.failed ? 1 : 0,\n warned: !isTimedOut && t.warned ? 1 : 0,\n aborted: !isTimedOut && t.aborted ? 1 : 0,\n skipped: !isTimedOut && !t.aborted && t.skipped ? 1 : 0,\n pending: !isTimedOut && t.pending ? 1 : 0,\n running: !isTimedOut && t.running ? 1 : 0,\n timedout: isTimedOut ? 1 : 0,\n };\n};\n\nexport function sum(t: Test): StatusCounts {\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sum(c));\n return r;\n}\n\n/** Roll up a forest's non-task status counts. Shared by `TestRunner`'s filter\n * bar and `TestRunSummary`'s chips so both read the same tally. */\nexport function aggregateStatusCounts(tests: Test[]): StatusCounts {\n const r = emptyCounts();\n for (const t of tests) addCounts(r, sumNonTaskTests(t));\n return r;\n}\n\n/** Ordered status key → label list, driving both the filter bar's pills and a\n * host's status filter option list, so the seven rows aren't hand-duplicated. */\nexport const STATUS_LABELS: { key: keyof StatusCounts; label: string }[] = [\n { key: \"failed\", label: \"Failed\" },\n { key: \"warned\", label: \"Warned\" },\n { key: \"aborted\", label: \"Aborted\" },\n { key: \"timedout\", label: \"Timed out\" },\n { key: \"passed\", label: \"Passed\" },\n { key: \"skipped\", label: \"Skipped\" },\n { key: \"running\", label: \"Running\" },\n { key: \"pending\", label: \"Queued\" },\n];\n\n/** Like {@link sum} but excludes `task`-framework pseudo-nodes from the tally. */\nexport function sumNonTaskTests(t: Test): StatusCounts {\n if (t.framework === \"task\") {\n const r = emptyCounts();\n for (const c of t.children || []) addCounts(r, sumNonTaskTests(c));\n return r;\n }\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sumNonTaskTests(c));\n return r;\n}\n\nexport function hasFailed(t: Test): boolean {\n if (t.failed) return true;\n return (t.children || []).some(hasFailed);\n}\n\nexport function hasPending(t: Test): boolean {\n if (t.pending) return true;\n return (t.children || []).some(hasPending);\n}\n\nfunction hasTimedOutDescendant(t: Test): boolean {\n if (t.timed_out) return true;\n return (t.children || []).some(hasTimedOutDescendant);\n}\n\nexport function totalDuration(t: Test): number {\n if (t.duration && t.duration > 0) return t.duration;\n let d = 0;\n for (const c of t.children || []) d += totalDuration(c);\n return d;\n}\n\n// --- status classification ----------------------------------------------\n\nexport type TestStatus =\n | \"passed\"\n | \"failed\"\n | \"warned\"\n | \"aborted\"\n | \"skipped\"\n | \"pending\"\n | \"running\"\n | \"timedout\";\n\n/** Resolve a leaf node's single status, or null for a status-less container. */\nexport function testStatus(t: Test): TestStatus | null {\n if (t.timed_out) return \"timedout\";\n if (t.running) return \"running\";\n if (t.pending) return \"pending\";\n if (t.failed) return \"failed\";\n if (t.warned) return \"warned\";\n if (t.aborted) return \"aborted\";\n if (t.skipped) return \"skipped\";\n if (t.passed) return \"passed\";\n return null;\n}\n\n/**\n * A test or lint result's outcome. `errored` is a result the runner could not\n * produce at all (the engine crashed, the child run never reported) — distinct\n * from a test that ran and failed.\n */\nexport type TestOutcome = TestStatus | \"errored\";\n\n/**\n * Resolve a node's outcome, rolling a container up to its worst child: a\n * timeout anywhere, then failed, warned, running, queued, else passed. Null for\n * a status-less leaf.\n */\nexport function outcomeFor(t: Test): TestOutcome | null {\n const own = testStatus(t);\n if (own) return own;\n if (!t.children?.length) return null;\n const s = sum(t);\n if (hasTimedOutDescendant(t)) return \"timedout\";\n if (s.failed > 0) return \"failed\";\n if (s.warned > 0) return \"warned\";\n if (s.aborted > 0) return \"aborted\";\n if (s.running > 0) return \"running\";\n if (s.pending > 0) return \"pending\";\n if (s.total > 0 && s.skipped === s.total) return \"skipped\";\n return \"passed\";\n}\n\n/** Map a node's status to a semantic Badge tone, rolling up container state. */\nexport function statusToneFor(t: Test): BadgeTone {\n const outcome = outcomeFor(t);\n return outcome ? OUTCOME_TONE[outcome] : \"neutral\";\n}\n\nconst OUTCOME_TONE: Record<TestOutcome, BadgeTone> = {\n failed: \"danger\",\n errored: \"danger\",\n timedout: \"warning\",\n warned: \"warning\",\n aborted: \"neutral\",\n skipped: \"neutral\",\n running: \"info\",\n pending: \"neutral\",\n passed: \"success\",\n};\n\n// --- formatting ----------------------------------------------------------\n\n/**\n * Format a nanosecond duration as \"123ms\" or \"1.2s\". Empty for non-positive.\n * Named distinctly from clicky's ms/s `formatDuration` (lib/format) since the\n * test-runner wire format is nanoseconds.\n */\nexport function formatTestDuration(ns: number): string {\n if (ns <= 0) return \"\";\n const ms = ns / 1e6;\n if (ms < 1000) return `${ms.toFixed(0)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction compactWithUnit(value: number, unit: string): string {\n const rounded =\n Math.abs(value) >= 10 ? Math.round(value).toString() : value.toFixed(1).replace(/\\.0$/, \"\");\n return `${rounded}${unit}`;\n}\n\n/** Compact integer counts: <1000 raw, then \"k\", then \"M\". */\nexport function formatCount(n: number): string {\n const abs = Math.abs(n);\n if (abs < 1000) return String(n);\n if (abs < 1_000_000) return compactWithUnit(n / 1000, \"k\");\n return compactWithUnit(n / 1_000_000, \"M\");\n}\n\n/** Strip Go's `Test` prefix and split CamelCase / subtest names into words. */\nexport function humanizeName(name: string, framework?: string): string {\n if (!name) return \"\";\n if (framework !== \"go test\") return name;\n if (name.endsWith(\"/\")) return name;\n return name\n .split(\"/\")\n .map((p, i) => {\n if (i === 0) {\n return p.replace(/^Test/, \"\").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n }\n return p.replace(/_/g, \" \");\n })\n .join(\" / \");\n}\n\n// --- tree transforms -----------------------------------------------------\n\n/** Unique non-task frameworks present in the forest, sorted. */\nexport function collectFrameworks(tests: Test[]): string[] {\n const set = new Set<string>();\n const walk = (t: Test) => {\n if (t.framework && t.framework !== \"task\") set.add(t.framework);\n (t.children || []).forEach(walk);\n };\n tests.forEach(walk);\n return Array.from(set).sort();\n}\n\nfunction joinChainNames(parent: string | undefined, child: string | undefined): string {\n const p = (parent ?? \"\").trim();\n const c = (child ?? \"\").trim();\n if (!p) return c;\n if (!c) return p;\n return `${p} > ${c}`;\n}\n\nfunction isCollapsibleContainer(t: Test): boolean {\n return !(t.passed || t.failed || t.aborted || t.skipped || t.pending);\n}\n\n// Re-deriving a collapsed/filtered node invalidates any cached summary; drop it\n// so callers re-roll-up from the surviving children.\nfunction withoutSummary(t: Test): Omit<Test, \"summary\"> & { summary?: never } {\n const { summary: _summary, ...rest } = t;\n return rest;\n}\n\nfunction collapseNode(t: Test): Test {\n const children = t.children ?? [];\n if (children.length === 0) return t;\n\n const collapsedChildren = children.map(collapseNode);\n\n const onlyChild = collapsedChildren.length === 1 ? collapsedChildren[0] : undefined;\n if (onlyChild && isCollapsibleContainer(t)) {\n return { ...withoutSummary(onlyChild), name: joinChainNames(t.name, onlyChild.name) };\n }\n\n return { ...t, children: collapsedChildren };\n}\n\n/**\n * Compress any status-less container with exactly one child into that child,\n * joining names with \" > \". Recursive, so chains collapse into a single row.\n */\nexport function collapseSingleChildChains(tests: Test[]): Test[] {\n return tests.map(collapseNode);\n}\n\nfunction matchesLeaf(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): boolean {\n const s = testStatus(t);\n if (s === null) return false;\n return matchesFilterState(s, statusFilter) && matchesFilterState(t.framework, frameworkFilter);\n}\n\nfunction filterNode(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test | null {\n if (t.children && t.children.length > 0) {\n const filtered = t.children\n .map((c) => filterNode(c, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n if (filtered.length === 0) return null;\n return { ...withoutSummary(t), children: filtered };\n }\n return matchesLeaf(t, statusFilter, frameworkFilter) ? t : null;\n}\n\n/** Prune leaves not matching the status/framework filters; drop empty branches. */\nexport function filterTests(\n tests: Test[],\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test[] {\n if (statusFilter.size === 0 && frameworkFilter.size === 0) return tests;\n return tests\n .map((t) => filterNode(t, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","names":[],"sources":["../../../src/data/test-runner/status.ts"],"sourcesContent":["// Pure status/roll-up helpers for the test runner — ported from Gavel's\n// utils.ts (Tests-only subset). No JSX here. `outcomeFor` resolves the outcome\n// marks.tsx draws; `statusToneFor` maps it to a semantic Badge tone.\n\nimport type { BadgeTone } from \"../Badge\";\nimport type { Test, TestSummary } from \"./types\";\nimport { matchesFilterState, type FilterState } from \"./filterState\";\n\n// --- roll-up counts ------------------------------------------------------\n\n/**\n * Tallied verdict breakdown a `Test` subtree rolls up to. `warned` is amber and\n * orthogonal to a real failure — a warned-only leaf counts in total + warned,\n * never in failed.\n */\nexport type StatusCounts = {\n total: number;\n passed: number;\n failed: number;\n warned: number;\n /** Never ran because the run stopped after an earlier failure; not an intentional skip. */\n aborted: number;\n skipped: number;\n pending: number;\n running: number;\n timedout: number;\n};\n\nconst emptyCounts = (): StatusCounts => ({\n total: 0,\n passed: 0,\n failed: 0,\n warned: 0,\n aborted: 0,\n skipped: 0,\n pending: 0,\n running: 0,\n timedout: 0,\n});\n\nconst addCounts = (r: StatusCounts, s: StatusCounts) => {\n r.total += s.total;\n r.passed += s.passed;\n r.failed += s.failed;\n r.warned += s.warned;\n r.aborted += s.aborted;\n r.skipped += s.skipped;\n r.pending += s.pending;\n r.running += s.running;\n r.timedout += s.timedout;\n};\n\nconst countsFromSummary = (summary: TestSummary): StatusCounts => ({\n total: summary.Total,\n passed: summary.Passed,\n failed: summary.Failed,\n warned: summary.Warned || 0,\n aborted: summary.Aborted || 0,\n skipped: summary.Skipped,\n pending: summary.Pending || 0,\n running: summary.Running || 0,\n timedout: summary.Timedout || 0,\n});\n\nconst countsFromLeaf = (t: Test): StatusCounts => {\n const isTimedOut = !!t.timed_out;\n const counted =\n isTimedOut ||\n t.passed ||\n t.failed ||\n t.warned ||\n t.aborted ||\n t.skipped ||\n t.pending ||\n t.running;\n return {\n total: counted ? 1 : 0,\n passed: !isTimedOut && t.passed ? 1 : 0,\n failed: !isTimedOut && t.failed ? 1 : 0,\n warned: !isTimedOut && t.warned ? 1 : 0,\n aborted: !isTimedOut && t.aborted ? 1 : 0,\n skipped: !isTimedOut && !t.aborted && t.skipped ? 1 : 0,\n pending: !isTimedOut && t.pending ? 1 : 0,\n running: !isTimedOut && t.running ? 1 : 0,\n timedout: isTimedOut ? 1 : 0,\n };\n};\n\nexport function sum(t: Test): StatusCounts {\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sum(c));\n return r;\n}\n\n/** Roll up a forest's non-task status counts. Shared by `TestRunner`'s filter\n * bar and `TestRunSummary`'s chips so both read the same tally. */\nexport function aggregateStatusCounts(tests: Test[]): StatusCounts {\n const r = emptyCounts();\n for (const t of tests) addCounts(r, sumNonTaskTests(t));\n return r;\n}\n\n/** Ordered status key → label list, driving both the filter bar's pills and a\n * host's status filter option list, so the seven rows aren't hand-duplicated. */\nexport const STATUS_LABELS: { key: keyof StatusCounts; label: string }[] = [\n { key: \"failed\", label: \"Failed\" },\n { key: \"warned\", label: \"Warned\" },\n { key: \"aborted\", label: \"Aborted\" },\n { key: \"timedout\", label: \"Timed out\" },\n { key: \"passed\", label: \"Passed\" },\n { key: \"skipped\", label: \"Skipped\" },\n { key: \"running\", label: \"Running\" },\n { key: \"pending\", label: \"Queued\" },\n];\n\n/** Like {@link sum} but excludes `task`-framework pseudo-nodes from the tally. */\nexport function sumNonTaskTests(t: Test): StatusCounts {\n if (t.framework === \"task\") {\n const r = emptyCounts();\n for (const c of t.children || []) addCounts(r, sumNonTaskTests(c));\n return r;\n }\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sumNonTaskTests(c));\n return r;\n}\n\nexport function hasFailed(t: Test): boolean {\n if (t.failed) return true;\n return (t.children || []).some(hasFailed);\n}\n\nexport function hasPending(t: Test): boolean {\n if (t.pending) return true;\n return (t.children || []).some(hasPending);\n}\n\nfunction hasTimedOutDescendant(t: Test): boolean {\n if (t.timed_out) return true;\n return (t.children || []).some(hasTimedOutDescendant);\n}\n\nexport function totalDuration(t: Test): number {\n if (t.duration && t.duration > 0) return t.duration;\n let d = 0;\n for (const c of t.children || []) d += totalDuration(c);\n return d;\n}\n\n// --- status classification ----------------------------------------------\n\nexport type TestStatus =\n | \"passed\"\n | \"failed\"\n | \"warned\"\n | \"aborted\"\n | \"skipped\"\n | \"pending\"\n | \"running\"\n | \"timedout\";\n\n/** Resolve a leaf node's single status, or null for a status-less container. */\nexport function testStatus(t: Test): TestStatus | null {\n if (t.timed_out) return \"timedout\";\n if (t.running) return \"running\";\n if (t.pending) return \"pending\";\n if (t.failed) return \"failed\";\n if (t.warned) return \"warned\";\n if (t.aborted) return \"aborted\";\n if (t.skipped) return \"skipped\";\n if (t.passed) return \"passed\";\n return null;\n}\n\n/**\n * A test or lint result's outcome. `errored` is a result the runner could not\n * produce at all (the engine crashed, the child run never reported) — distinct\n * from a test that ran and failed.\n */\nexport type TestOutcome = TestStatus | \"errored\";\n\n/**\n * Resolve a node's outcome, rolling a container up to its worst child: a\n * timeout anywhere, then failed, warned, running, queued, else passed. Null for\n * a status-less leaf.\n */\nexport function outcomeFor(t: Test): TestOutcome | null {\n const own = testStatus(t);\n if (own) return own;\n if (!t.children?.length) return null;\n const s = sum(t);\n if (hasTimedOutDescendant(t)) return \"timedout\";\n if (s.failed > 0) return \"failed\";\n if (s.warned > 0) return \"warned\";\n if (s.aborted > 0) return \"aborted\";\n if (s.running > 0) return \"running\";\n if (s.pending > 0) return \"pending\";\n if (s.total > 0 && s.skipped === s.total) return \"skipped\";\n return \"passed\";\n}\n\n/** Map a node's status to a semantic Badge tone, rolling up container state. */\nexport function statusToneFor(t: Test): BadgeTone {\n const outcome = outcomeFor(t);\n return outcome ? OUTCOME_TONE[outcome] : \"neutral\";\n}\n\nconst OUTCOME_TONE: Record<TestOutcome, BadgeTone> = {\n failed: \"danger\",\n errored: \"danger\",\n timedout: \"warning\",\n warned: \"warning\",\n aborted: \"danger\",\n skipped: \"neutral\",\n running: \"info\",\n pending: \"neutral\",\n passed: \"success\",\n};\n\n// --- formatting ----------------------------------------------------------\n\n/**\n * Format a nanosecond duration as \"123ms\" or \"1.2s\". Empty for non-positive.\n * Named distinctly from clicky's ms/s `formatDuration` (lib/format) since the\n * test-runner wire format is nanoseconds.\n */\nexport function formatTestDuration(ns: number): string {\n if (ns <= 0) return \"\";\n const ms = ns / 1e6;\n if (ms < 1000) return `${ms.toFixed(0)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction compactWithUnit(value: number, unit: string): string {\n const rounded =\n Math.abs(value) >= 10 ? Math.round(value).toString() : value.toFixed(1).replace(/\\.0$/, \"\");\n return `${rounded}${unit}`;\n}\n\n/** Compact integer counts: <1000 raw, then \"k\", then \"M\". */\nexport function formatCount(n: number): string {\n const abs = Math.abs(n);\n if (abs < 1000) return String(n);\n if (abs < 1_000_000) return compactWithUnit(n / 1000, \"k\");\n return compactWithUnit(n / 1_000_000, \"M\");\n}\n\n/** Strip Go's `Test` prefix and split CamelCase / subtest names into words. */\nexport function humanizeName(name: string, framework?: string): string {\n if (!name) return \"\";\n if (framework !== \"go test\") return name;\n if (name.endsWith(\"/\")) return name;\n return name\n .split(\"/\")\n .map((p, i) => {\n if (i === 0) {\n return p.replace(/^Test/, \"\").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n }\n return p.replace(/_/g, \" \");\n })\n .join(\" / \");\n}\n\n// --- tree transforms -----------------------------------------------------\n\n/** Unique non-task frameworks present in the forest, sorted. */\nexport function collectFrameworks(tests: Test[]): string[] {\n const set = new Set<string>();\n const walk = (t: Test) => {\n if (t.framework && t.framework !== \"task\") set.add(t.framework);\n (t.children || []).forEach(walk);\n };\n tests.forEach(walk);\n return Array.from(set).sort();\n}\n\nfunction joinChainNames(parent: string | undefined, child: string | undefined): string {\n const p = (parent ?? \"\").trim();\n const c = (child ?? \"\").trim();\n if (!p) return c;\n if (!c) return p;\n return `${p} > ${c}`;\n}\n\nfunction isCollapsibleContainer(t: Test): boolean {\n return !(t.passed || t.failed || t.aborted || t.skipped || t.pending);\n}\n\n// Re-deriving a collapsed/filtered node invalidates any cached summary; drop it\n// so callers re-roll-up from the surviving children.\nfunction withoutSummary(t: Test): Omit<Test, \"summary\"> & { summary?: never } {\n const { summary: _summary, ...rest } = t;\n return rest;\n}\n\nfunction collapseNode(t: Test): Test {\n const children = t.children ?? [];\n if (children.length === 0) return t;\n\n const collapsedChildren = children.map(collapseNode);\n\n const onlyChild = collapsedChildren.length === 1 ? collapsedChildren[0] : undefined;\n if (onlyChild && isCollapsibleContainer(t)) {\n return { ...withoutSummary(onlyChild), name: joinChainNames(t.name, onlyChild.name) };\n }\n\n return { ...t, children: collapsedChildren };\n}\n\n/**\n * Compress any status-less container with exactly one child into that child,\n * joining names with \" > \". Recursive, so chains collapse into a single row.\n */\nexport function collapseSingleChildChains(tests: Test[]): Test[] {\n return tests.map(collapseNode);\n}\n\nfunction matchesLeaf(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): boolean {\n const s = testStatus(t);\n if (s === null) return false;\n return matchesFilterState(s, statusFilter) && matchesFilterState(t.framework, frameworkFilter);\n}\n\nfunction filterNode(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test | null {\n if (t.children && t.children.length > 0) {\n const filtered = t.children\n .map((c) => filterNode(c, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n if (filtered.length === 0) return null;\n return { ...withoutSummary(t), children: filtered };\n }\n return matchesLeaf(t, statusFilter, frameworkFilter) ? t : null;\n}\n\n/** Prune leaves not matching the status/framework filters; drop empty branches. */\nexport function filterTests(\n tests: Test[],\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test[] {\n if (statusFilter.size === 0 && frameworkFilter.size === 0) return tests;\n return tests\n .map((t) => filterNode(t, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"status.js","names":[],"sources":["../../../src/data/test-runner/status.ts"],"sourcesContent":["// Pure status/roll-up helpers for the test runner — ported from Gavel's\n// utils.ts (Tests-only subset). No JSX here. `outcomeFor` resolves the outcome\n// marks.tsx draws; `statusToneFor` maps it to a semantic Badge tone.\n\nimport type { BadgeTone } from \"../Badge\";\nimport type { Test, TestSummary } from \"./types\";\nimport { matchesFilterState, type FilterState } from \"./filterState\";\n\n// --- roll-up counts ------------------------------------------------------\n\n/**\n * Tallied verdict breakdown a `Test` subtree rolls up to. `warned` is amber and\n * orthogonal to a real failure — a warned-only leaf counts in total + warned,\n * never in failed.\n */\nexport type StatusCounts = {\n total: number;\n passed: number;\n failed: number;\n warned: number;\n /** Never ran because the run stopped after an earlier failure; not an intentional skip. */\n aborted: number;\n skipped: number;\n pending: number;\n running: number;\n timedout: number;\n};\n\nconst emptyCounts = (): StatusCounts => ({\n total: 0,\n passed: 0,\n failed: 0,\n warned: 0,\n aborted: 0,\n skipped: 0,\n pending: 0,\n running: 0,\n timedout: 0,\n});\n\nconst addCounts = (r: StatusCounts, s: StatusCounts) => {\n r.total += s.total;\n r.passed += s.passed;\n r.failed += s.failed;\n r.warned += s.warned;\n r.aborted += s.aborted;\n r.skipped += s.skipped;\n r.pending += s.pending;\n r.running += s.running;\n r.timedout += s.timedout;\n};\n\nconst countsFromSummary = (summary: TestSummary): StatusCounts => ({\n total: summary.Total,\n passed: summary.Passed,\n failed: summary.Failed,\n warned: summary.Warned || 0,\n aborted: summary.Aborted || 0,\n skipped: summary.Skipped,\n pending: summary.Pending || 0,\n running: summary.Running || 0,\n timedout: summary.Timedout || 0,\n});\n\nconst countsFromLeaf = (t: Test): StatusCounts => {\n const isTimedOut = !!t.timed_out;\n const counted =\n isTimedOut ||\n t.passed ||\n t.failed ||\n t.warned ||\n t.aborted ||\n t.skipped ||\n t.pending ||\n t.running;\n return {\n total: counted ? 1 : 0,\n passed: !isTimedOut && t.passed ? 1 : 0,\n failed: !isTimedOut && t.failed ? 1 : 0,\n warned: !isTimedOut && t.warned ? 1 : 0,\n aborted: !isTimedOut && t.aborted ? 1 : 0,\n skipped: !isTimedOut && !t.aborted && t.skipped ? 1 : 0,\n pending: !isTimedOut && t.pending ? 1 : 0,\n running: !isTimedOut && t.running ? 1 : 0,\n timedout: isTimedOut ? 1 : 0,\n };\n};\n\nexport function sum(t: Test): StatusCounts {\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sum(c));\n return r;\n}\n\n/** Roll up a forest's non-task status counts. Shared by `TestRunner`'s filter\n * bar and `TestRunSummary`'s chips so both read the same tally. */\nexport function aggregateStatusCounts(tests: Test[]): StatusCounts {\n const r = emptyCounts();\n for (const t of tests) addCounts(r, sumNonTaskTests(t));\n return r;\n}\n\n/** Ordered status key → label list, driving both the filter bar's pills and a\n * host's status filter option list, so the seven rows aren't hand-duplicated. */\nexport const STATUS_LABELS: { key: keyof StatusCounts; label: string }[] = [\n { key: \"failed\", label: \"Failed\" },\n { key: \"warned\", label: \"Warned\" },\n { key: \"aborted\", label: \"Aborted\" },\n { key: \"timedout\", label: \"Timed out\" },\n { key: \"passed\", label: \"Passed\" },\n { key: \"skipped\", label: \"Skipped\" },\n { key: \"running\", label: \"Running\" },\n { key: \"pending\", label: \"Queued\" },\n];\n\n/** Like {@link sum} but excludes `task`-framework pseudo-nodes from the tally. */\nexport function sumNonTaskTests(t: Test): StatusCounts {\n if (t.framework === \"task\") {\n const r = emptyCounts();\n for (const c of t.children || []) addCounts(r, sumNonTaskTests(c));\n return r;\n }\n if (t.summary) return countsFromSummary(t.summary);\n if (!t.children || t.children.length === 0) return countsFromLeaf(t);\n const r = emptyCounts();\n for (const c of t.children) addCounts(r, sumNonTaskTests(c));\n return r;\n}\n\nexport function hasFailed(t: Test): boolean {\n if (t.failed) return true;\n return (t.children || []).some(hasFailed);\n}\n\nexport function hasPending(t: Test): boolean {\n if (t.pending) return true;\n return (t.children || []).some(hasPending);\n}\n\nfunction hasTimedOutDescendant(t: Test): boolean {\n if (t.timed_out) return true;\n return (t.children || []).some(hasTimedOutDescendant);\n}\n\nexport function totalDuration(t: Test): number {\n if (t.duration && t.duration > 0) return t.duration;\n let d = 0;\n for (const c of t.children || []) d += totalDuration(c);\n return d;\n}\n\n// --- status classification ----------------------------------------------\n\nexport type TestStatus =\n | \"passed\"\n | \"failed\"\n | \"warned\"\n | \"aborted\"\n | \"skipped\"\n | \"pending\"\n | \"running\"\n | \"timedout\";\n\n/** Resolve a leaf node's single status, or null for a status-less container. */\nexport function testStatus(t: Test): TestStatus | null {\n if (t.timed_out) return \"timedout\";\n if (t.running) return \"running\";\n if (t.pending) return \"pending\";\n if (t.failed) return \"failed\";\n if (t.warned) return \"warned\";\n if (t.aborted) return \"aborted\";\n if (t.skipped) return \"skipped\";\n if (t.passed) return \"passed\";\n return null;\n}\n\n/**\n * A test or lint result's outcome. `errored` is a result the runner could not\n * produce at all (the engine crashed, the child run never reported) — distinct\n * from a test that ran and failed.\n */\nexport type TestOutcome = TestStatus | \"errored\";\n\n/**\n * Resolve a node's outcome, rolling a container up to its worst child: a\n * timeout anywhere, then failed, warned, running, queued, else passed. Null for\n * a status-less leaf.\n */\nexport function outcomeFor(t: Test): TestOutcome | null {\n const own = testStatus(t);\n if (own) return own;\n if (!t.children?.length) return null;\n const s = sum(t);\n if (hasTimedOutDescendant(t)) return \"timedout\";\n if (s.failed > 0) return \"failed\";\n if (s.warned > 0) return \"warned\";\n if (s.aborted > 0) return \"aborted\";\n if (s.running > 0) return \"running\";\n if (s.pending > 0) return \"pending\";\n if (s.total > 0 && s.skipped === s.total) return \"skipped\";\n return \"passed\";\n}\n\n/** Map a node's status to a semantic Badge tone, rolling up container state. */\nexport function statusToneFor(t: Test): BadgeTone {\n const outcome = outcomeFor(t);\n return outcome ? OUTCOME_TONE[outcome] : \"neutral\";\n}\n\nconst OUTCOME_TONE: Record<TestOutcome, BadgeTone> = {\n failed: \"danger\",\n errored: \"danger\",\n timedout: \"warning\",\n warned: \"warning\",\n aborted: \"neutral\",\n skipped: \"neutral\",\n running: \"info\",\n pending: \"neutral\",\n passed: \"success\",\n};\n\n// --- formatting ----------------------------------------------------------\n\n/**\n * Format a nanosecond duration as \"123ms\" or \"1.2s\". Empty for non-positive.\n * Named distinctly from clicky's ms/s `formatDuration` (lib/format) since the\n * test-runner wire format is nanoseconds.\n */\nexport function formatTestDuration(ns: number): string {\n if (ns <= 0) return \"\";\n const ms = ns / 1e6;\n if (ms < 1000) return `${ms.toFixed(0)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\nfunction compactWithUnit(value: number, unit: string): string {\n const rounded =\n Math.abs(value) >= 10 ? Math.round(value).toString() : value.toFixed(1).replace(/\\.0$/, \"\");\n return `${rounded}${unit}`;\n}\n\n/** Compact integer counts: <1000 raw, then \"k\", then \"M\". */\nexport function formatCount(n: number): string {\n const abs = Math.abs(n);\n if (abs < 1000) return String(n);\n if (abs < 1_000_000) return compactWithUnit(n / 1000, \"k\");\n return compactWithUnit(n / 1_000_000, \"M\");\n}\n\n/** Strip Go's `Test` prefix and split CamelCase / subtest names into words. */\nexport function humanizeName(name: string, framework?: string): string {\n if (!name) return \"\";\n if (framework !== \"go test\") return name;\n if (name.endsWith(\"/\")) return name;\n return name\n .split(\"/\")\n .map((p, i) => {\n if (i === 0) {\n return p.replace(/^Test/, \"\").replace(/([a-z0-9])([A-Z])/g, \"$1 $2\");\n }\n return p.replace(/_/g, \" \");\n })\n .join(\" / \");\n}\n\n// --- tree transforms -----------------------------------------------------\n\n/** Unique non-task frameworks present in the forest, sorted. */\nexport function collectFrameworks(tests: Test[]): string[] {\n const set = new Set<string>();\n const walk = (t: Test) => {\n if (t.framework && t.framework !== \"task\") set.add(t.framework);\n (t.children || []).forEach(walk);\n };\n tests.forEach(walk);\n return Array.from(set).sort();\n}\n\nfunction joinChainNames(parent: string | undefined, child: string | undefined): string {\n const p = (parent ?? \"\").trim();\n const c = (child ?? \"\").trim();\n if (!p) return c;\n if (!c) return p;\n return `${p} > ${c}`;\n}\n\nfunction isCollapsibleContainer(t: Test): boolean {\n return !(t.passed || t.failed || t.aborted || t.skipped || t.pending);\n}\n\n// Re-deriving a collapsed/filtered node invalidates any cached summary; drop it\n// so callers re-roll-up from the surviving children.\nfunction withoutSummary(t: Test): Omit<Test, \"summary\"> & { summary?: never } {\n const { summary: _summary, ...rest } = t;\n return rest;\n}\n\nfunction collapseNode(t: Test): Test {\n const children = t.children ?? [];\n if (children.length === 0) return t;\n\n const collapsedChildren = children.map(collapseNode);\n\n const onlyChild = collapsedChildren.length === 1 ? collapsedChildren[0] : undefined;\n if (onlyChild && isCollapsibleContainer(t)) {\n return { ...withoutSummary(onlyChild), name: joinChainNames(t.name, onlyChild.name) };\n }\n\n return { ...t, children: collapsedChildren };\n}\n\n/**\n * Compress any status-less container with exactly one child into that child,\n * joining names with \" > \". Recursive, so chains collapse into a single row.\n */\nexport function collapseSingleChildChains(tests: Test[]): Test[] {\n return tests.map(collapseNode);\n}\n\nfunction matchesLeaf(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): boolean {\n const s = testStatus(t);\n if (s === null) return false;\n return matchesFilterState(s, statusFilter) && matchesFilterState(t.framework, frameworkFilter);\n}\n\nfunction filterNode(\n t: Test,\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test | null {\n if (t.children && t.children.length > 0) {\n const filtered = t.children\n .map((c) => filterNode(c, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n if (filtered.length === 0) return null;\n return { ...withoutSummary(t), children: filtered };\n }\n return matchesLeaf(t, statusFilter, frameworkFilter) ? t : null;\n}\n\n/** Prune leaves not matching the status/framework filters; drop empty branches. */\nexport function filterTests(\n tests: Test[],\n statusFilter: FilterState<string>,\n frameworkFilter: FilterState<string>,\n): Test[] {\n if (statusFilter.size === 0 && frameworkFilter.size === 0) return tests;\n return tests\n .map((t) => filterNode(t, statusFilter, frameworkFilter))\n .filter(Boolean) as Test[];\n}\n"],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ export interface Test {
|
|
|
34
34
|
* and pending with a static hollow icon.
|
|
35
35
|
*/
|
|
36
36
|
running?: boolean;
|
|
37
|
+
/** A running node blocked on a person answering a form (gavel's fixture `form` step). */
|
|
38
|
+
waiting?: boolean;
|
|
37
39
|
timed_out?: boolean;
|
|
38
40
|
task_id?: string;
|
|
39
41
|
can_stop?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/test-runner/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,8 @@ export type { HttpExchangeRequest, HttpExchangeResponse, GoProfileRecord, HttpEx
|
|
|
19
19
|
export { OtelTraceDetail } from './otel/OtelTraceDetail.js';
|
|
20
20
|
export { OtelTraceSearch } from './otel/OtelTraceSearch.js';
|
|
21
21
|
export { OtelTraceTable, type OtelTraceTableProps } from './otel/OtelTraceTable.js';
|
|
22
|
+
export { profileSpans } from './otel/profile-spans.js';
|
|
23
|
+
export { profileListingSort, profileTraceListing } from './otel/profile-listing.js';
|
|
22
24
|
export { searchParams as otelSearchParams, readSearchValues as readOtelSearchValues } from './otel/api.js';
|
|
23
25
|
export { durationOf as otelDurationOf } from './otel/query.js';
|
|
24
26
|
export type { Span as OtelSpan, Summary as OtelSummary, SearchForm as OtelSearchForm } from './otel/api.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/traces/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/traces/index.ts"],"names":[],"mappings":"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"}
|