executable-stories-formatters 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters.d.cts +1 -1
- package/dist/adapters.d.ts +1 -1
- package/dist/cli.js +11370 -150
- package/dist/cli.js.map +1 -1
- package/dist/{index-C4QO-SVT.d.cts → index-BndkylIV.d.cts} +1 -1
- package/dist/{index-C4QO-SVT.d.ts → index-BndkylIV.d.ts} +1 -1
- package/dist/index.cjs +10603 -160
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +382 -48
- package/dist/index.d.ts +382 -48
- package/dist/index.js +10595 -160
- package/dist/index.js.map +1 -1
- package/package.json +9 -6
- package/schemas/raw-run.schema.json +13 -0
- package/skills/formatters-cli/SKILL.md +252 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as StoryMeta, C as CIInfo$1, a as StoryStep, D as DocEntry,
|
|
2
|
-
export { i as DocPhase, J as JestAdapterOptions, j as JestAggregatedResult, k as JestFileResult, l as JestTestResult,
|
|
1
|
+
import { S as StoryMeta, C as CIInfo$1, a as StoryStep, D as DocEntry, O as OtelSpan, b as CIProvider, R as RawStatus, c as RawAttachment, d as RawRun, e as RawCIInfo, f as adaptJestRun, g as adaptPlaywrightRun, h as adaptVitestRun } from './index-BndkylIV.js';
|
|
2
|
+
export { i as DocPhase, J as JestAdapterOptions, j as JestAggregatedResult, k as JestFileResult, l as JestTestResult, m as OtelAttributeValue, P as PlaywrightAdapterOptions, n as PlaywrightAnnotation, o as PlaywrightAttachment, p as PlaywrightError, q as PlaywrightLocation, r as PlaywrightStatus, s as PlaywrightTestCase, t as PlaywrightTestResult, u as RawStepEvent, v as RawTestCase, w as STORY_META_KEY, x as StepKeyword, y as StepMode, z as StoryFileReport, V as VitestAdapterOptions, A as VitestSerializedError, B as VitestState, E as VitestTestCase, F as VitestTestModule, G as VitestTestResult, H as toCIInfo, I as toRawCIInfo } from './index-BndkylIV.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Canonical types for Layer 2: Anti-Corruption Layer output.
|
|
@@ -201,6 +201,8 @@ interface CanonicalizeOptions {
|
|
|
201
201
|
}
|
|
202
202
|
/** Output format for report generation */
|
|
203
203
|
type OutputFormat = "cucumber-json" | "cucumber-messages" | "cucumber-html" | "html" | "junit" | "markdown";
|
|
204
|
+
/** Sort order for test cases in reports (deterministic for diff-friendly output) */
|
|
205
|
+
type SortTestCasesMode = "id" | "source" | "none";
|
|
204
206
|
/** Output mode for report routing */
|
|
205
207
|
type OutputMode = "aggregated" | "colocated";
|
|
206
208
|
/** Colocated output style */
|
|
@@ -243,12 +245,20 @@ interface FormatterOptions {
|
|
|
243
245
|
include?: string[];
|
|
244
246
|
/** Glob patterns to exclude test cases by sourceFile (forward slashes). Applied after include. */
|
|
245
247
|
exclude?: string[];
|
|
248
|
+
/** Tags to include test cases (any match). If empty, all are considered. */
|
|
249
|
+
includeTags?: string[];
|
|
250
|
+
/** Tags to exclude test cases (any match). Applied after includeTags. */
|
|
251
|
+
excludeTags?: string[];
|
|
246
252
|
/** Output formats to generate. Default: ["cucumber-json"] */
|
|
247
253
|
formats?: OutputFormat[];
|
|
248
254
|
/** Output directory for generated reports. Default: "reports" */
|
|
249
255
|
outputDir?: string;
|
|
250
256
|
/** Base filename (without extension). Default: "test-results" */
|
|
251
257
|
outputName?: string;
|
|
258
|
+
/** Append run timestamp (UTC seconds) to output filename for before/after diffs. Default: false */
|
|
259
|
+
outputNameTimestamp?: boolean;
|
|
260
|
+
/** Sort test cases deterministically so report content order is stable across runs. Default: "none" */
|
|
261
|
+
sortTestCases?: SortTestCasesMode;
|
|
252
262
|
/** Output routing configuration */
|
|
253
263
|
output?: OutputConfig;
|
|
254
264
|
/** Cucumber JSON specific options */
|
|
@@ -274,6 +284,10 @@ interface FormatterOptions {
|
|
|
274
284
|
mermaidEnabled?: boolean;
|
|
275
285
|
/** Enable Markdown parsing for section doc entries (via marked.js CDN). Default: true */
|
|
276
286
|
markdownEnabled?: boolean;
|
|
287
|
+
/** Base URL for source permalinks. E.g., "https://github.com/user/repo/blob/main" */
|
|
288
|
+
permalinkBaseUrl?: string;
|
|
289
|
+
/** Theme name. Default: "default". Available: default, corporate, terminal, minimal, dashboard, playful */
|
|
290
|
+
theme?: string;
|
|
277
291
|
};
|
|
278
292
|
/** JUnit XML specific options */
|
|
279
293
|
junit?: {
|
|
@@ -376,9 +390,13 @@ interface MarkdownRenderers {
|
|
|
376
390
|
interface ResolvedFormatterOptions {
|
|
377
391
|
include: string[];
|
|
378
392
|
exclude: string[];
|
|
393
|
+
includeTags: string[];
|
|
394
|
+
excludeTags: string[];
|
|
379
395
|
formats: OutputFormat[];
|
|
380
396
|
outputDir: string;
|
|
381
397
|
outputName: string;
|
|
398
|
+
outputNameTimestamp: boolean;
|
|
399
|
+
sortTestCases: SortTestCasesMode;
|
|
382
400
|
output: {
|
|
383
401
|
mode: OutputMode;
|
|
384
402
|
colocatedStyle: ColocatedStyle;
|
|
@@ -406,6 +424,8 @@ interface ResolvedFormatterOptions {
|
|
|
406
424
|
syntaxHighlighting: boolean;
|
|
407
425
|
mermaidEnabled: boolean;
|
|
408
426
|
markdownEnabled: boolean;
|
|
427
|
+
permalinkBaseUrl?: string;
|
|
428
|
+
theme: string;
|
|
409
429
|
};
|
|
410
430
|
junit: {
|
|
411
431
|
suiteName: string;
|
|
@@ -431,6 +451,67 @@ interface ResolvedFormatterOptions {
|
|
|
431
451
|
};
|
|
432
452
|
}
|
|
433
453
|
|
|
454
|
+
type ScenarioChangeKind = "added" | "removed" | "regressed" | "fixed" | "changed" | "unchanged";
|
|
455
|
+
interface ScenarioChangeFlags {
|
|
456
|
+
status: boolean;
|
|
457
|
+
steps: boolean;
|
|
458
|
+
docs: boolean;
|
|
459
|
+
tags: boolean;
|
|
460
|
+
tickets: boolean;
|
|
461
|
+
source: boolean;
|
|
462
|
+
duration: boolean;
|
|
463
|
+
attachments: boolean;
|
|
464
|
+
error: boolean;
|
|
465
|
+
titlePath: boolean;
|
|
466
|
+
}
|
|
467
|
+
interface ScenarioSnapshot {
|
|
468
|
+
id: string;
|
|
469
|
+
scenario: string;
|
|
470
|
+
sourceFile: string;
|
|
471
|
+
sourceLine: number;
|
|
472
|
+
status: TestStatus;
|
|
473
|
+
durationMs: number;
|
|
474
|
+
tags: string[];
|
|
475
|
+
titlePath: string[];
|
|
476
|
+
steps: StoryStep[];
|
|
477
|
+
docs: DocEntry[];
|
|
478
|
+
tickets: string[];
|
|
479
|
+
attachments: Attachment[];
|
|
480
|
+
errorMessage?: string;
|
|
481
|
+
}
|
|
482
|
+
interface ScenarioDiff {
|
|
483
|
+
kind: ScenarioChangeKind;
|
|
484
|
+
id: string;
|
|
485
|
+
scenario: string;
|
|
486
|
+
sourceFile: string;
|
|
487
|
+
sourceLine: number;
|
|
488
|
+
baseline?: ScenarioSnapshot;
|
|
489
|
+
current?: ScenarioSnapshot;
|
|
490
|
+
flags: ScenarioChangeFlags;
|
|
491
|
+
changedFields: string[];
|
|
492
|
+
durationDeltaMs?: number;
|
|
493
|
+
}
|
|
494
|
+
interface RunDiffSummary {
|
|
495
|
+
totalBaseline: number;
|
|
496
|
+
totalCurrent: number;
|
|
497
|
+
added: number;
|
|
498
|
+
removed: number;
|
|
499
|
+
changed: number;
|
|
500
|
+
regressed: number;
|
|
501
|
+
fixed: number;
|
|
502
|
+
unchanged: number;
|
|
503
|
+
}
|
|
504
|
+
interface RunDiffResult {
|
|
505
|
+
baseline: TestRunResult;
|
|
506
|
+
current: TestRunResult;
|
|
507
|
+
summary: RunDiffSummary;
|
|
508
|
+
scenarios: ScenarioDiff[];
|
|
509
|
+
}
|
|
510
|
+
type CompareFormat = "html" | "markdown";
|
|
511
|
+
interface CompareFormatterOptions {
|
|
512
|
+
title?: string;
|
|
513
|
+
}
|
|
514
|
+
|
|
434
515
|
/**
|
|
435
516
|
* Cucumber JSON format types.
|
|
436
517
|
*
|
|
@@ -536,6 +617,248 @@ interface IJsonFeature {
|
|
|
536
617
|
uri: string;
|
|
537
618
|
}
|
|
538
619
|
|
|
620
|
+
/**
|
|
621
|
+
* Render an OTel trace waterfall (fn(args, deps)).
|
|
622
|
+
*/
|
|
623
|
+
|
|
624
|
+
interface RenderTraceViewArgs {
|
|
625
|
+
spans: OtelSpan[] | undefined;
|
|
626
|
+
}
|
|
627
|
+
interface RenderTraceViewDeps {
|
|
628
|
+
escapeHtml: (str: string) => string;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Render attachments section (fn(args, deps)).
|
|
633
|
+
*/
|
|
634
|
+
|
|
635
|
+
interface RenderAttachmentsArgs {
|
|
636
|
+
attachments: Attachment[];
|
|
637
|
+
}
|
|
638
|
+
interface RenderAttachmentsDeps {
|
|
639
|
+
escapeHtml: (str: string) => string;
|
|
640
|
+
embedScreenshots: boolean;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* Render error box (fn(args, deps)).
|
|
645
|
+
*/
|
|
646
|
+
interface RenderErrorBoxArgs {
|
|
647
|
+
message: string;
|
|
648
|
+
stack?: string;
|
|
649
|
+
}
|
|
650
|
+
interface RenderErrorBoxDeps {
|
|
651
|
+
escapeHtml: (str: string) => string;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
interface RenderStepsArgs {
|
|
655
|
+
steps: StoryStep[];
|
|
656
|
+
stepResults: StepResult[];
|
|
657
|
+
}
|
|
658
|
+
interface RenderStepsDeps {
|
|
659
|
+
escapeHtml: (str: string) => string;
|
|
660
|
+
getStatusIcon: (status: TestStatus) => string;
|
|
661
|
+
renderDocs: (docs: DocEntry[] | undefined, containerClass: string) => string;
|
|
662
|
+
highlightStepParams?: (text: string) => string;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/**
|
|
666
|
+
* Types for history tracking and test metrics.
|
|
667
|
+
*/
|
|
668
|
+
|
|
669
|
+
interface HistoryEntry {
|
|
670
|
+
runId: string;
|
|
671
|
+
timestamp: number;
|
|
672
|
+
status: "passed" | "failed" | "skipped" | "pending";
|
|
673
|
+
durationMs: number;
|
|
674
|
+
ci?: {
|
|
675
|
+
provider?: CIProvider;
|
|
676
|
+
branch?: string;
|
|
677
|
+
commitSha?: string;
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
interface TestHistory {
|
|
681
|
+
testId: string;
|
|
682
|
+
testName: string;
|
|
683
|
+
sourceFile: string;
|
|
684
|
+
sourceLine?: number;
|
|
685
|
+
entries: HistoryEntry[];
|
|
686
|
+
}
|
|
687
|
+
interface HistoryStore {
|
|
688
|
+
version: 1;
|
|
689
|
+
maxRuns: number;
|
|
690
|
+
tests: Record<string, TestHistory>;
|
|
691
|
+
lastUpdated: number;
|
|
692
|
+
}
|
|
693
|
+
type StabilityGrade = "A" | "B" | "C" | "D" | "F";
|
|
694
|
+
type FlakinessLevel = "stable" | "unstable" | "flaky";
|
|
695
|
+
type PerformanceTrend = "improving" | "stable" | "regressing";
|
|
696
|
+
interface TestMetrics {
|
|
697
|
+
testId: string;
|
|
698
|
+
flakinessLevel: FlakinessLevel;
|
|
699
|
+
flakinessScore: number;
|
|
700
|
+
failureRate: number;
|
|
701
|
+
stabilityGrade: StabilityGrade;
|
|
702
|
+
performanceTrend: PerformanceTrend;
|
|
703
|
+
avgDurationMs: number;
|
|
704
|
+
passRate: number;
|
|
705
|
+
longestPassStreak: number;
|
|
706
|
+
consecutiveFailures: number;
|
|
707
|
+
sampleSize: number;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
interface RenderScenarioArgs {
|
|
711
|
+
tc: TestCaseResult;
|
|
712
|
+
metrics?: TestMetrics;
|
|
713
|
+
}
|
|
714
|
+
interface RenderScenarioDeps {
|
|
715
|
+
escapeHtml: (str: string) => string;
|
|
716
|
+
getStatusIcon: (status: TestStatus) => string;
|
|
717
|
+
startCollapsed: boolean;
|
|
718
|
+
renderSteps: (args: RenderStepsArgs, deps: RenderStepsDeps) => string;
|
|
719
|
+
renderDocs: (docs: DocEntry[] | undefined, containerClass: string) => string;
|
|
720
|
+
renderErrorBox: (args: RenderErrorBoxArgs, deps: RenderErrorBoxDeps) => string;
|
|
721
|
+
renderAttachments: (args: RenderAttachmentsArgs, deps: RenderAttachmentsDeps) => string;
|
|
722
|
+
renderTraceView: (args: RenderTraceViewArgs, deps: RenderTraceViewDeps) => string;
|
|
723
|
+
embedScreenshots: boolean;
|
|
724
|
+
permalinkBaseUrl?: string;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
interface RenderFeatureArgs {
|
|
728
|
+
file: string;
|
|
729
|
+
testCases: TestCaseResult[];
|
|
730
|
+
metricsMap?: Map<string, TestMetrics>;
|
|
731
|
+
}
|
|
732
|
+
interface RenderFeatureDeps {
|
|
733
|
+
escapeHtml: (str: string) => string;
|
|
734
|
+
startCollapsed: boolean;
|
|
735
|
+
renderScenario: (args: RenderScenarioArgs, deps: RenderScenarioDeps) => string;
|
|
736
|
+
scenarioDeps: RenderScenarioDeps;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Render summary cards section (fn(args, deps)).
|
|
741
|
+
* No deps: pure counts to HTML.
|
|
742
|
+
*/
|
|
743
|
+
interface RenderSummaryArgs {
|
|
744
|
+
total: number;
|
|
745
|
+
passed: number;
|
|
746
|
+
failed: number;
|
|
747
|
+
skipped: number;
|
|
748
|
+
}
|
|
749
|
+
interface RenderSummaryDeps {
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Render meta info section (fn(args, deps)).
|
|
754
|
+
*/
|
|
755
|
+
interface RenderMetaInfoArgs {
|
|
756
|
+
startedAtMs: number;
|
|
757
|
+
durationMs: number;
|
|
758
|
+
packageVersion?: string;
|
|
759
|
+
gitSha?: string;
|
|
760
|
+
ciName?: string;
|
|
761
|
+
ciBranch?: string;
|
|
762
|
+
ciUrl?: string;
|
|
763
|
+
ciCommitSha?: string;
|
|
764
|
+
ciBuildNumber?: string;
|
|
765
|
+
}
|
|
766
|
+
interface RenderMetaInfoDeps {
|
|
767
|
+
escapeHtml: (str: string) => string;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
/**
|
|
771
|
+
* Render tag filter bar (fn(args, deps)).
|
|
772
|
+
* Displays a collapsible tag bar with clickable tag pills for filtering scenarios,
|
|
773
|
+
* ARIA attributes for accessibility, and a results counter.
|
|
774
|
+
*/
|
|
775
|
+
interface RenderTagBarArgs {
|
|
776
|
+
tags: string[];
|
|
777
|
+
totalScenarios: number;
|
|
778
|
+
}
|
|
779
|
+
interface RenderTagBarDeps {
|
|
780
|
+
escapeHtml: (str: string) => string;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* Render failure summary block with deep links to failed scenarios (fn(args, deps)).
|
|
785
|
+
*/
|
|
786
|
+
|
|
787
|
+
interface RenderFailureSummaryArgs {
|
|
788
|
+
failedCases: TestCaseResult[];
|
|
789
|
+
}
|
|
790
|
+
interface RenderFailureSummaryDeps {
|
|
791
|
+
escapeHtml: (str: string) => string;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
interface BuildBodyArgs {
|
|
795
|
+
run: TestRunResult;
|
|
796
|
+
metricsMap?: Map<string, TestMetrics>;
|
|
797
|
+
}
|
|
798
|
+
interface BuildBodyDeps {
|
|
799
|
+
renderMetaInfo: (args: RenderMetaInfoArgs, deps: RenderMetaInfoDeps) => string;
|
|
800
|
+
renderSummary: (args: RenderSummaryArgs, deps: RenderSummaryDeps) => string;
|
|
801
|
+
renderTagBar: (args: RenderTagBarArgs, deps: RenderTagBarDeps) => string;
|
|
802
|
+
renderFeature: (args: RenderFeatureArgs, deps: RenderFeatureDeps) => string;
|
|
803
|
+
renderFailureSummary: (args: RenderFailureSummaryArgs, deps: RenderFailureSummaryDeps) => string;
|
|
804
|
+
metaDeps: RenderMetaInfoDeps;
|
|
805
|
+
summaryDeps: RenderSummaryDeps;
|
|
806
|
+
tagBarDeps: RenderTagBarDeps;
|
|
807
|
+
featureDeps: RenderFeatureDeps;
|
|
808
|
+
failureSummaryDeps: RenderFailureSummaryDeps;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* HTML Report Template.
|
|
813
|
+
*
|
|
814
|
+
* Generates the JavaScript for interactivity (theme toggle, search, collapse).
|
|
815
|
+
*/
|
|
816
|
+
/** Options for HTML template generation */
|
|
817
|
+
interface HtmlTemplateOptions {
|
|
818
|
+
includeSearch?: boolean;
|
|
819
|
+
includeDarkMode?: boolean;
|
|
820
|
+
syntaxHighlighting?: boolean;
|
|
821
|
+
mermaidEnabled?: boolean;
|
|
822
|
+
markdownEnabled?: boolean;
|
|
823
|
+
/** Additional inline JS injected after core JS (used by themes). */
|
|
824
|
+
additionalJs?: string;
|
|
825
|
+
/** Additional ESM import statements for CDN libraries (used by themes). */
|
|
826
|
+
additionalImports?: string[];
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* HTML theme type definitions.
|
|
831
|
+
*/
|
|
832
|
+
|
|
833
|
+
/** Built-in theme names */
|
|
834
|
+
type HtmlThemeName = "default" | "corporate" | "terminal" | "minimal" | "dashboard" | "playful";
|
|
835
|
+
/** A theme definition */
|
|
836
|
+
interface HtmlTheme {
|
|
837
|
+
/** Theme identifier */
|
|
838
|
+
name: string;
|
|
839
|
+
/** Display label */
|
|
840
|
+
label: string;
|
|
841
|
+
/** Full CSS string (replaces CSS_STYLES). Must define all custom properties for both light and dark modes. */
|
|
842
|
+
css: string;
|
|
843
|
+
/** Optional: override body rendering. Receives the same (args, deps) as buildBody. */
|
|
844
|
+
buildBody?: (args: BuildBodyArgs, deps: BuildBodyDeps) => string;
|
|
845
|
+
/** Optional: override the HTML template wrapper. */
|
|
846
|
+
generateTemplate?: (title: string, styles: string, body: string, options: HtmlTemplateOptions) => string;
|
|
847
|
+
/** Optional: additional inline JS injected after core JS. */
|
|
848
|
+
additionalJs?: string;
|
|
849
|
+
/** Optional: additional ESM import statements for CDN libraries. */
|
|
850
|
+
additionalImports?: string[];
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* Theme registry — resolves theme names to theme objects.
|
|
855
|
+
*/
|
|
856
|
+
|
|
857
|
+
/** Resolve a theme by name or pass through a custom theme object. */
|
|
858
|
+
declare function resolveTheme(nameOrTheme: string | HtmlTheme): HtmlTheme;
|
|
859
|
+
/** List available built-in theme names. */
|
|
860
|
+
declare function getAvailableThemes(): string[];
|
|
861
|
+
|
|
539
862
|
/**
|
|
540
863
|
* Status mapping from raw framework statuses to canonical TestStatus.
|
|
541
864
|
*/
|
|
@@ -809,51 +1132,6 @@ declare class CucumberJsonFormatter {
|
|
|
809
1132
|
private docEntryToArgument;
|
|
810
1133
|
}
|
|
811
1134
|
|
|
812
|
-
/**
|
|
813
|
-
* Types for history tracking and test metrics.
|
|
814
|
-
*/
|
|
815
|
-
|
|
816
|
-
interface HistoryEntry {
|
|
817
|
-
runId: string;
|
|
818
|
-
timestamp: number;
|
|
819
|
-
status: "passed" | "failed" | "skipped" | "pending";
|
|
820
|
-
durationMs: number;
|
|
821
|
-
ci?: {
|
|
822
|
-
provider?: CIProvider;
|
|
823
|
-
branch?: string;
|
|
824
|
-
commitSha?: string;
|
|
825
|
-
};
|
|
826
|
-
}
|
|
827
|
-
interface TestHistory {
|
|
828
|
-
testId: string;
|
|
829
|
-
testName: string;
|
|
830
|
-
sourceFile: string;
|
|
831
|
-
sourceLine?: number;
|
|
832
|
-
entries: HistoryEntry[];
|
|
833
|
-
}
|
|
834
|
-
interface HistoryStore {
|
|
835
|
-
version: 1;
|
|
836
|
-
maxRuns: number;
|
|
837
|
-
tests: Record<string, TestHistory>;
|
|
838
|
-
lastUpdated: number;
|
|
839
|
-
}
|
|
840
|
-
type StabilityGrade = "A" | "B" | "C" | "D" | "F";
|
|
841
|
-
type FlakinessLevel = "stable" | "unstable" | "flaky";
|
|
842
|
-
type PerformanceTrend = "improving" | "stable" | "regressing";
|
|
843
|
-
interface TestMetrics {
|
|
844
|
-
testId: string;
|
|
845
|
-
flakinessLevel: FlakinessLevel;
|
|
846
|
-
flakinessScore: number;
|
|
847
|
-
failureRate: number;
|
|
848
|
-
stabilityGrade: StabilityGrade;
|
|
849
|
-
performanceTrend: PerformanceTrend;
|
|
850
|
-
avgDurationMs: number;
|
|
851
|
-
passRate: number;
|
|
852
|
-
longestPassStreak: number;
|
|
853
|
-
consecutiveFailures: number;
|
|
854
|
-
sampleSize: number;
|
|
855
|
-
}
|
|
856
|
-
|
|
857
1135
|
/**
|
|
858
1136
|
* HTML Formatter - Layer 3.
|
|
859
1137
|
*
|
|
@@ -879,6 +1157,10 @@ interface HtmlOptions {
|
|
|
879
1157
|
mermaidEnabled?: boolean;
|
|
880
1158
|
/** Enable Markdown parsing for section doc entries (via marked.js CDN). Default: true */
|
|
881
1159
|
markdownEnabled?: boolean;
|
|
1160
|
+
/** Base URL for source permalinks. E.g., "https://github.com/user/repo/blob/main" */
|
|
1161
|
+
permalinkBaseUrl?: string;
|
|
1162
|
+
/** Theme name or custom theme object. Default: "default" */
|
|
1163
|
+
theme?: string | HtmlTheme;
|
|
882
1164
|
}
|
|
883
1165
|
/**
|
|
884
1166
|
* HTML Formatter.
|
|
@@ -1386,6 +1668,30 @@ declare class CucumberHtmlFormatter {
|
|
|
1386
1668
|
formatToString(run: TestRunResult): Promise<string>;
|
|
1387
1669
|
}
|
|
1388
1670
|
|
|
1671
|
+
interface RunDiffHtmlOptions {
|
|
1672
|
+
title?: string;
|
|
1673
|
+
/** Theme name or custom theme object. Default: "default" */
|
|
1674
|
+
theme?: string | HtmlTheme;
|
|
1675
|
+
/** Enable dark mode toggle. Default: true */
|
|
1676
|
+
darkMode?: boolean;
|
|
1677
|
+
}
|
|
1678
|
+
declare class RunDiffHtmlFormatter {
|
|
1679
|
+
private title;
|
|
1680
|
+
private theme;
|
|
1681
|
+
private darkMode;
|
|
1682
|
+
constructor(options?: RunDiffHtmlOptions);
|
|
1683
|
+
format(diff: RunDiffResult): string;
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
interface RunDiffMarkdownOptions {
|
|
1687
|
+
title?: string;
|
|
1688
|
+
}
|
|
1689
|
+
declare class RunDiffMarkdownFormatter {
|
|
1690
|
+
private title;
|
|
1691
|
+
constructor(options?: RunDiffMarkdownOptions);
|
|
1692
|
+
format(diff: RunDiffResult): string;
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1389
1695
|
/**
|
|
1390
1696
|
* NDJSON-to-TestRunResult parser.
|
|
1391
1697
|
*
|
|
@@ -1800,6 +2106,22 @@ declare const MIN_FLAKINESS_SAMPLES = 3;
|
|
|
1800
2106
|
/** Check whether an array meets the minimum sample threshold. */
|
|
1801
2107
|
declare function hasSufficientHistory(entries: unknown[], min: number): boolean;
|
|
1802
2108
|
|
|
2109
|
+
/**
|
|
2110
|
+
* List scenarios from a test run (fn(args, deps) pattern).
|
|
2111
|
+
* Produces text table or JSON output.
|
|
2112
|
+
*/
|
|
2113
|
+
|
|
2114
|
+
interface ListScenariosArgs {
|
|
2115
|
+
testCases: TestCaseResult[];
|
|
2116
|
+
format: "text" | "json";
|
|
2117
|
+
}
|
|
2118
|
+
type ListScenariosDeps = Record<string, never>;
|
|
2119
|
+
declare function listScenarios(args: ListScenariosArgs, _deps: ListScenariosDeps): string;
|
|
2120
|
+
|
|
2121
|
+
declare function createPrCommentSummary(diff: RunDiffResult, maxScenarios?: number): string;
|
|
2122
|
+
|
|
2123
|
+
declare function diffRuns(baseline: TestRunResult, current: TestRunResult): RunDiffResult;
|
|
2124
|
+
|
|
1803
2125
|
/**
|
|
1804
2126
|
* @executable-stories/formatters
|
|
1805
2127
|
*
|
|
@@ -1828,6 +2150,10 @@ interface GenerateDeps {
|
|
|
1828
2150
|
}
|
|
1829
2151
|
/** Result of generate function: Map of format to array of file paths */
|
|
1830
2152
|
type GenerateResult = Map<OutputFormat, string[]>;
|
|
2153
|
+
interface GenerateCompareResult {
|
|
2154
|
+
files: string[];
|
|
2155
|
+
diff: RunDiffResult;
|
|
2156
|
+
}
|
|
1831
2157
|
/**
|
|
1832
2158
|
* High-level report generator that combines multiple formatters.
|
|
1833
2159
|
*
|
|
@@ -1869,6 +2195,14 @@ declare class ReportGenerator {
|
|
|
1869
2195
|
* Useful for testing and custom configurations.
|
|
1870
2196
|
*/
|
|
1871
2197
|
declare function createReportGenerator(options?: FormatterOptions, deps?: Partial<GenerateDeps>): ReportGenerator;
|
|
2198
|
+
declare function generateRunComparison(args: {
|
|
2199
|
+
baseline: TestRunResult;
|
|
2200
|
+
current: TestRunResult;
|
|
2201
|
+
formats: Array<"html" | "markdown">;
|
|
2202
|
+
outputDir?: string;
|
|
2203
|
+
outputName?: string;
|
|
2204
|
+
title?: string;
|
|
2205
|
+
}): Promise<GenerateCompareResult>;
|
|
1872
2206
|
|
|
1873
2207
|
/**
|
|
1874
2208
|
* Normalize Jest results to canonical TestRunResult.
|
|
@@ -1889,4 +2223,4 @@ declare function normalizeVitestResults(testModules: Parameters<typeof adaptVite
|
|
|
1889
2223
|
*/
|
|
1890
2224
|
declare function normalizePlaywrightResults(testResults: Parameters<typeof adaptPlaywrightRun>[0], adapterOptions?: Parameters<typeof adaptPlaywrightRun>[1], canonicalizeOptions?: CanonicalizeOptions): TestRunResult;
|
|
1891
2225
|
|
|
1892
|
-
export { type Attachment, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type FlakinessLevel, type FormatterOptions, type GenerateArgs, type GenerateDeps, type GenerateResult, type GenericWebhookNotifierOptions, type HistoryEntry, type HistoryStore, HtmlFormatter, type HtmlOptions, type IJsonDataTable, type IJsonDocString, type IJsonEmbedding, type IJsonFeature, type IJsonScenario, type IJsonStep, type IJsonStepArgument, type IJsonStepResult, type IJsonTableRow, type IJsonTag, JUnitFormatter, type JUnitOptions, type Logger, MIN_FLAKINESS_SAMPLES, MIN_METRIC_SAMPLES, MIN_PERF_SAMPLES, MarkdownFormatter, type MarkdownFormatterOptions, type MarkdownOptions, type MarkdownRenderers, type NotificationSummary, type NotifyCondition, type OtelTraceContext, type OutputConfig, type OutputFormat, type OutputMode, type OutputRule, type PerformanceTrend, RawAttachment, RawCIInfo, RawRun, RawStatus, ReportGenerator, type ResolvedFormatterOptions, type StabilityGrade, type StepResult, StoryMeta, StoryStep, type TestCaseAttempt, type TestCaseResult, type TestHistory, type TestMetrics, type TestRunResult, type TestStatus, CIInfo$1 as TypedCIInfo, type ValidationResult, type WebhookPayload, type WebhookSignerHmac, type WriteFile, adaptJestRun, adaptPlaywrightRun, adaptVitestRun, assertValidRun, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, findGitDir, formatDuration, generateRunId, generateTestCaseId, hasSufficientHistory, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTraceUrl, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|
|
2226
|
+
export { type Attachment, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CompareFormat, type CompareFormatterOptions, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type FlakinessLevel, type FormatterOptions, type GenerateArgs, type GenerateCompareResult, type GenerateDeps, type GenerateResult, type GenericWebhookNotifierOptions, type HistoryEntry, type HistoryStore, HtmlFormatter, type HtmlOptions, type HtmlTheme, type HtmlThemeName, type IJsonDataTable, type IJsonDocString, type IJsonEmbedding, type IJsonFeature, type IJsonScenario, type IJsonStep, type IJsonStepArgument, type IJsonStepResult, type IJsonTableRow, type IJsonTag, JUnitFormatter, type JUnitOptions, type ListScenariosArgs, type ListScenariosDeps, type Logger, MIN_FLAKINESS_SAMPLES, MIN_METRIC_SAMPLES, MIN_PERF_SAMPLES, MarkdownFormatter, type MarkdownFormatterOptions, type MarkdownOptions, type MarkdownRenderers, type NotificationSummary, type NotifyCondition, OtelSpan, type OtelTraceContext, type OutputConfig, type OutputFormat, type OutputMode, type OutputRule, type PerformanceTrend, RawAttachment, RawCIInfo, RawRun, RawStatus, ReportGenerator, type ResolvedFormatterOptions, RunDiffHtmlFormatter, type RunDiffHtmlOptions, RunDiffMarkdownFormatter, type RunDiffMarkdownOptions, type RunDiffResult, type RunDiffSummary, type ScenarioChangeFlags, type ScenarioChangeKind, type ScenarioDiff, type ScenarioSnapshot, type SortTestCasesMode, type StabilityGrade, type StepResult, StoryMeta, StoryStep, type TestCaseAttempt, type TestCaseResult, type TestHistory, type TestMetrics, type TestRunResult, type TestStatus, CIInfo$1 as TypedCIInfo, type ValidationResult, type WebhookPayload, type WebhookSignerHmac, type WriteFile, adaptJestRun, adaptPlaywrightRun, adaptVitestRun, assertValidRun, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, createPrCommentSummary, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, diffRuns, findGitDir, formatDuration, generateRunComparison, generateRunId, generateTestCaseId, getAvailableThemes, hasSufficientHistory, listScenarios, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTheme, resolveTraceUrl, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|