executable-stories-formatters 0.7.8 → 0.7.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.js +1010 -78
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +725 -52
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +202 -5
- package/dist/index.d.ts +202 -5
- package/dist/index.js +722 -52
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.d.cts
CHANGED
|
@@ -172,6 +172,79 @@ interface WebhookPayload {
|
|
|
172
172
|
summary: NotificationSummary;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Confluence (ADF) Formatter — Layer 3.
|
|
177
|
+
*
|
|
178
|
+
* Emits Atlassian Document Format JSON. Suitable for Confluence pages
|
|
179
|
+
* and Jira issue descriptions via the REST API. Built directly from
|
|
180
|
+
* TestRunResult so code blocks, tables, links, and mermaid all round-trip
|
|
181
|
+
* with higher fidelity than converting markdown → ADF.
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
/** Options for ConfluenceFormatter */
|
|
185
|
+
interface ConfluenceFormatterOptions {
|
|
186
|
+
/** Page title. Default: "User Stories" */
|
|
187
|
+
title?: string;
|
|
188
|
+
/** Include status icons (emoji) in scenario headings. Default: true */
|
|
189
|
+
includeStatusIcons?: boolean;
|
|
190
|
+
/** Include metadata table (date, version). Default: true */
|
|
191
|
+
includeMetadata?: boolean;
|
|
192
|
+
/** Include summary table (counts, duration). Default: true */
|
|
193
|
+
includeSummaryTable?: boolean;
|
|
194
|
+
/** Include error details for failed scenarios. Default: true */
|
|
195
|
+
includeErrors?: boolean;
|
|
196
|
+
/** Scenario heading level (1-6). Default: 3 */
|
|
197
|
+
scenarioHeadingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
198
|
+
/** Group scenarios by. Default: "file" */
|
|
199
|
+
groupBy?: "file" | "suite" | "none";
|
|
200
|
+
/** Sort scenarios. Default: "source" */
|
|
201
|
+
sortScenarios?: "alpha" | "source" | "none";
|
|
202
|
+
/** Pretty-print JSON output. Default: true */
|
|
203
|
+
pretty?: boolean;
|
|
204
|
+
/** Base URL for source permalinks (Git). Rendered as link marks */
|
|
205
|
+
permalinkBaseUrl?: string;
|
|
206
|
+
/** URL template for ticket links. Use {ticket} as placeholder */
|
|
207
|
+
ticketUrlTemplate?: string;
|
|
208
|
+
}
|
|
209
|
+
interface AdfMark {
|
|
210
|
+
type: string;
|
|
211
|
+
attrs?: Record<string, unknown>;
|
|
212
|
+
}
|
|
213
|
+
interface AdfNode {
|
|
214
|
+
type: string;
|
|
215
|
+
attrs?: Record<string, unknown>;
|
|
216
|
+
content?: AdfNode[];
|
|
217
|
+
marks?: AdfMark[];
|
|
218
|
+
text?: string;
|
|
219
|
+
/** Only on the root doc node */
|
|
220
|
+
version?: number;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Confluence / Atlassian Document Format formatter.
|
|
224
|
+
*
|
|
225
|
+
* Emits a top-level `{ version: 1, type: "doc", content: [...] }` tree that
|
|
226
|
+
* can be posted to the Confluence or Jira REST API.
|
|
227
|
+
*/
|
|
228
|
+
declare class ConfluenceFormatter {
|
|
229
|
+
private options;
|
|
230
|
+
constructor(options?: ConfluenceFormatterOptions);
|
|
231
|
+
/** Build the ADF document tree. Returns the JS object (not stringified). */
|
|
232
|
+
formatToAdf(run: TestRunResult): AdfNode;
|
|
233
|
+
/** Format a test run as an ADF JSON string. */
|
|
234
|
+
format(run: TestRunResult): string;
|
|
235
|
+
private renderMetadataTable;
|
|
236
|
+
private renderSummaryTable;
|
|
237
|
+
private renderByFile;
|
|
238
|
+
private renderBySuite;
|
|
239
|
+
private renderFlat;
|
|
240
|
+
private renderSuiteGroups;
|
|
241
|
+
private renderScenario;
|
|
242
|
+
private renderStepsList;
|
|
243
|
+
private renderDocEntry;
|
|
244
|
+
private sortCases;
|
|
245
|
+
private sortSuiteGroups;
|
|
246
|
+
}
|
|
247
|
+
|
|
175
248
|
/**
|
|
176
249
|
* Configuration options for ACL and formatters.
|
|
177
250
|
*/
|
|
@@ -200,7 +273,7 @@ interface CanonicalizeOptions {
|
|
|
200
273
|
};
|
|
201
274
|
}
|
|
202
275
|
/** Output format for report generation */
|
|
203
|
-
type OutputFormat = "astro" | "cucumber-json" | "cucumber-messages" | "cucumber-html" | "html" | "junit" | "markdown";
|
|
276
|
+
type OutputFormat = "astro" | "confluence" | "cucumber-json" | "cucumber-messages" | "cucumber-html" | "html" | "junit" | "markdown";
|
|
204
277
|
/** Sort order for test cases in reports (deterministic for diff-friendly output) */
|
|
205
278
|
type SortTestCasesMode = "id" | "source" | "none";
|
|
206
279
|
/** Output mode for report routing */
|
|
@@ -320,6 +393,8 @@ interface FormatterOptions {
|
|
|
320
393
|
markdown?: MarkdownFormatterOptions;
|
|
321
394
|
/** Astro/Starlight specific options */
|
|
322
395
|
astro?: AstroFormatterOptions$1;
|
|
396
|
+
/** Confluence/ADF specific options */
|
|
397
|
+
confluence?: ConfluenceFormatterOptions;
|
|
323
398
|
/** History tracking options */
|
|
324
399
|
history?: {
|
|
325
400
|
/** Path to JSON history file (enables tracking) */
|
|
@@ -473,6 +548,19 @@ interface ResolvedFormatterOptions {
|
|
|
473
548
|
includeSourceLinks: boolean;
|
|
474
549
|
customRenderers?: MarkdownRenderers;
|
|
475
550
|
};
|
|
551
|
+
confluence: {
|
|
552
|
+
title: string;
|
|
553
|
+
includeStatusIcons: boolean;
|
|
554
|
+
includeMetadata: boolean;
|
|
555
|
+
includeSummaryTable: boolean;
|
|
556
|
+
includeErrors: boolean;
|
|
557
|
+
scenarioHeadingLevel: 1 | 2 | 3 | 4 | 5 | 6;
|
|
558
|
+
groupBy: "file" | "suite" | "none";
|
|
559
|
+
sortScenarios: "alpha" | "source" | "none";
|
|
560
|
+
pretty: boolean;
|
|
561
|
+
permalinkBaseUrl?: string;
|
|
562
|
+
ticketUrlTemplate?: string;
|
|
563
|
+
};
|
|
476
564
|
astro: {
|
|
477
565
|
assetsDir: string;
|
|
478
566
|
assetsBaseUrl: string;
|
|
@@ -1438,10 +1526,11 @@ declare class MarkdownFormatter {
|
|
|
1438
1526
|
}
|
|
1439
1527
|
|
|
1440
1528
|
/**
|
|
1441
|
-
* Astro
|
|
1529
|
+
* Astro Formatter - Layer 3.
|
|
1442
1530
|
*
|
|
1443
|
-
* Wraps the MarkdownFormatter to produce
|
|
1444
|
-
*
|
|
1531
|
+
* Wraps the MarkdownFormatter to produce .md files with YAML frontmatter
|
|
1532
|
+
* (title, description, sidebar.badge) for Starlight content collections.
|
|
1533
|
+
* The scaffolded docs site uses themed CSS matching the HTML report design system.
|
|
1445
1534
|
*/
|
|
1446
1535
|
|
|
1447
1536
|
interface StarlightBadge {
|
|
@@ -1461,6 +1550,114 @@ declare class AstroFormatter {
|
|
|
1461
1550
|
static computeBadge(testCases: Pick<TestCaseResult, "status">[]): StarlightBadge;
|
|
1462
1551
|
}
|
|
1463
1552
|
|
|
1553
|
+
/**
|
|
1554
|
+
* Confluence publisher.
|
|
1555
|
+
*
|
|
1556
|
+
* Pushes an ADF JSON document to a Confluence Cloud page via the REST API v2.
|
|
1557
|
+
* - If `pageId` is provided, the page is updated in place (title + body + version).
|
|
1558
|
+
* - If `spaceId` is provided instead, a new page is created (optionally under `parentId`).
|
|
1559
|
+
*
|
|
1560
|
+
* Authentication: Basic auth with an Atlassian email + API token.
|
|
1561
|
+
* Generate tokens at https://id.atlassian.com/manage-profile/security/api-tokens.
|
|
1562
|
+
*/
|
|
1563
|
+
/** HTTP fetch function (injectable for tests). Matches global fetch signature. */
|
|
1564
|
+
type FetchFn = (url: string, init: {
|
|
1565
|
+
method: string;
|
|
1566
|
+
headers: Record<string, string>;
|
|
1567
|
+
body?: string;
|
|
1568
|
+
}) => Promise<{
|
|
1569
|
+
ok: boolean;
|
|
1570
|
+
status: number;
|
|
1571
|
+
statusText: string;
|
|
1572
|
+
text(): Promise<string>;
|
|
1573
|
+
json(): Promise<unknown>;
|
|
1574
|
+
}>;
|
|
1575
|
+
interface ConfluenceAuth {
|
|
1576
|
+
/** Atlassian account email */
|
|
1577
|
+
email: string;
|
|
1578
|
+
/** Atlassian API token */
|
|
1579
|
+
token: string;
|
|
1580
|
+
}
|
|
1581
|
+
interface PublishConfluenceArgs {
|
|
1582
|
+
/** ADF document JSON string (the `{ version, type: "doc", content }` envelope) */
|
|
1583
|
+
adf: string;
|
|
1584
|
+
/** Page ID to update (mutually exclusive with spaceId for create) */
|
|
1585
|
+
pageId?: string;
|
|
1586
|
+
/** Space ID required when creating a new page */
|
|
1587
|
+
spaceId?: string;
|
|
1588
|
+
/** Parent page ID (optional, for new pages) */
|
|
1589
|
+
parentId?: string;
|
|
1590
|
+
/** Page title. Required for create; updates existing title if provided on update */
|
|
1591
|
+
title?: string;
|
|
1592
|
+
/** Base URL of the Confluence instance, e.g. https://acme.atlassian.net/wiki */
|
|
1593
|
+
baseUrl: string;
|
|
1594
|
+
}
|
|
1595
|
+
interface PublishConfluenceDeps {
|
|
1596
|
+
auth: ConfluenceAuth;
|
|
1597
|
+
/** Defaults to globalThis.fetch */
|
|
1598
|
+
fetch?: FetchFn;
|
|
1599
|
+
}
|
|
1600
|
+
interface PublishConfluenceResult {
|
|
1601
|
+
id: string;
|
|
1602
|
+
version: number;
|
|
1603
|
+
title: string;
|
|
1604
|
+
/** Canonical URL to view the page in Confluence */
|
|
1605
|
+
url: string;
|
|
1606
|
+
action: "created" | "updated";
|
|
1607
|
+
}
|
|
1608
|
+
/**
|
|
1609
|
+
* Publish an ADF document to Confluence. Creates a new page if `pageId` is
|
|
1610
|
+
* omitted, otherwise updates the existing page.
|
|
1611
|
+
*/
|
|
1612
|
+
declare function publishConfluencePage(args: PublishConfluenceArgs, deps: PublishConfluenceDeps): Promise<PublishConfluenceResult>;
|
|
1613
|
+
|
|
1614
|
+
/**
|
|
1615
|
+
* Jira publisher.
|
|
1616
|
+
*
|
|
1617
|
+
* Pushes an ADF JSON document to a Jira Cloud issue via the REST API v3.
|
|
1618
|
+
* - mode "comment" adds the ADF as a new comment (default, non-destructive)
|
|
1619
|
+
* - mode "description" replaces the issue description field with the ADF
|
|
1620
|
+
*
|
|
1621
|
+
* Authentication: Basic auth with an Atlassian email + API token (same token
|
|
1622
|
+
* system as Confluence — create one at id.atlassian.com).
|
|
1623
|
+
*
|
|
1624
|
+
* Note: unlike Confluence v2 (which expects the ADF as a stringified value),
|
|
1625
|
+
* Jira v3 accepts ADF as a native JSON object in the request body.
|
|
1626
|
+
*/
|
|
1627
|
+
|
|
1628
|
+
/** Reuses the same auth + fetch shape as the Confluence publisher */
|
|
1629
|
+
type JiraAuth = ConfluenceAuth;
|
|
1630
|
+
/** Update mode — default "comment" is non-destructive and append-only */
|
|
1631
|
+
type JiraPublishMode = "comment" | "description";
|
|
1632
|
+
interface PublishJiraArgs {
|
|
1633
|
+
/** ADF document JSON string (the `{ version, type: "doc", content }` envelope) */
|
|
1634
|
+
adf: string;
|
|
1635
|
+
/** Issue key, e.g. "PROJ-123" */
|
|
1636
|
+
issueKey: string;
|
|
1637
|
+
/** Base URL of the Jira instance, e.g. https://acme.atlassian.net */
|
|
1638
|
+
baseUrl: string;
|
|
1639
|
+
/** Defaults to "comment" */
|
|
1640
|
+
mode?: JiraPublishMode;
|
|
1641
|
+
}
|
|
1642
|
+
interface PublishJiraDeps {
|
|
1643
|
+
auth: JiraAuth;
|
|
1644
|
+
/** Defaults to globalThis.fetch */
|
|
1645
|
+
fetch?: FetchFn;
|
|
1646
|
+
}
|
|
1647
|
+
interface PublishJiraResult {
|
|
1648
|
+
issueKey: string;
|
|
1649
|
+
action: "description-updated" | "comment-added";
|
|
1650
|
+
/** Canonical URL to view the issue (and comment, if applicable) */
|
|
1651
|
+
url: string;
|
|
1652
|
+
/** Set only when mode = "comment" */
|
|
1653
|
+
commentId?: string;
|
|
1654
|
+
}
|
|
1655
|
+
/**
|
|
1656
|
+
* Publish an ADF document to a Jira issue. Defaults to adding a new comment.
|
|
1657
|
+
* Use mode: "description" to replace the issue's description field.
|
|
1658
|
+
*/
|
|
1659
|
+
declare function publishJiraIssue(args: PublishJiraArgs, deps: PublishJiraDeps): Promise<PublishJiraResult>;
|
|
1660
|
+
|
|
1464
1661
|
interface AstroAssetResult {
|
|
1465
1662
|
markdown: string;
|
|
1466
1663
|
copiedCount: number;
|
|
@@ -2364,4 +2561,4 @@ declare function normalizeVitestResults(testModules: Parameters<typeof adaptVite
|
|
|
2364
2561
|
*/
|
|
2365
2562
|
declare function normalizePlaywrightResults(testResults: Parameters<typeof adaptPlaywrightRun>[0], adapterOptions?: Parameters<typeof adaptPlaywrightRun>[1], canonicalizeOptions?: CanonicalizeOptions): TestRunResult;
|
|
2366
2563
|
|
|
2367
|
-
export { type AstroAssetResult, AstroFormatter, type AstroFormatterOptions as AstroFormatterOpts, type Attachment, type BundleOptions, type BundleResult, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CompareFormat, type CompareFormatterOptions, type CopyMarkdownAssetsOptions, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type ExecutableStoriesConfig, type FlakinessLevel, type Formatter, 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, NormalizedTicket, 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 StarlightBadge, 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, bundleAssets, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, copyMarkdownAssets, createPrCommentSummary, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, diffRuns, findGitDir, formatDuration, generateRunComparison, generateRunId, generateTestCaseId, getAvailableThemes, getCssOnlyThemes, hasSufficientHistory, listScenarios, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTheme, resolveTraceUrl, rewriteAssetPaths, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|
|
2564
|
+
export { type AstroAssetResult, AstroFormatter, type AstroFormatterOptions as AstroFormatterOpts, type Attachment, type BundleOptions, type BundleResult, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CompareFormat, type CompareFormatterOptions, type ConfluenceAuth, ConfluenceFormatter, type ConfluenceFormatterOptions as ConfluenceFormatterOpts, type CopyMarkdownAssetsOptions, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type ExecutableStoriesConfig, type FetchFn, type FlakinessLevel, type Formatter, 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 JiraAuth, type JiraPublishMode, type ListScenariosArgs, type ListScenariosDeps, type Logger, MIN_FLAKINESS_SAMPLES, MIN_METRIC_SAMPLES, MIN_PERF_SAMPLES, MarkdownFormatter, type MarkdownFormatterOptions, type MarkdownOptions, type MarkdownRenderers, NormalizedTicket, type NotificationSummary, type NotifyCondition, OtelSpan, type OtelTraceContext, type OutputConfig, type OutputFormat, type OutputMode, type OutputRule, type PerformanceTrend, type PublishConfluenceArgs, type PublishConfluenceDeps, type PublishConfluenceResult, type PublishJiraArgs, type PublishJiraDeps, type PublishJiraResult, 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 StarlightBadge, 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, bundleAssets, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, copyMarkdownAssets, createPrCommentSummary, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, diffRuns, findGitDir, formatDuration, generateRunComparison, generateRunId, generateTestCaseId, getAvailableThemes, getCssOnlyThemes, hasSufficientHistory, listScenarios, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, publishConfluencePage, publishJiraIssue, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTheme, resolveTraceUrl, rewriteAssetPaths, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|
package/dist/index.d.ts
CHANGED
|
@@ -172,6 +172,79 @@ interface WebhookPayload {
|
|
|
172
172
|
summary: NotificationSummary;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Confluence (ADF) Formatter — Layer 3.
|
|
177
|
+
*
|
|
178
|
+
* Emits Atlassian Document Format JSON. Suitable for Confluence pages
|
|
179
|
+
* and Jira issue descriptions via the REST API. Built directly from
|
|
180
|
+
* TestRunResult so code blocks, tables, links, and mermaid all round-trip
|
|
181
|
+
* with higher fidelity than converting markdown → ADF.
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
/** Options for ConfluenceFormatter */
|
|
185
|
+
interface ConfluenceFormatterOptions {
|
|
186
|
+
/** Page title. Default: "User Stories" */
|
|
187
|
+
title?: string;
|
|
188
|
+
/** Include status icons (emoji) in scenario headings. Default: true */
|
|
189
|
+
includeStatusIcons?: boolean;
|
|
190
|
+
/** Include metadata table (date, version). Default: true */
|
|
191
|
+
includeMetadata?: boolean;
|
|
192
|
+
/** Include summary table (counts, duration). Default: true */
|
|
193
|
+
includeSummaryTable?: boolean;
|
|
194
|
+
/** Include error details for failed scenarios. Default: true */
|
|
195
|
+
includeErrors?: boolean;
|
|
196
|
+
/** Scenario heading level (1-6). Default: 3 */
|
|
197
|
+
scenarioHeadingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
198
|
+
/** Group scenarios by. Default: "file" */
|
|
199
|
+
groupBy?: "file" | "suite" | "none";
|
|
200
|
+
/** Sort scenarios. Default: "source" */
|
|
201
|
+
sortScenarios?: "alpha" | "source" | "none";
|
|
202
|
+
/** Pretty-print JSON output. Default: true */
|
|
203
|
+
pretty?: boolean;
|
|
204
|
+
/** Base URL for source permalinks (Git). Rendered as link marks */
|
|
205
|
+
permalinkBaseUrl?: string;
|
|
206
|
+
/** URL template for ticket links. Use {ticket} as placeholder */
|
|
207
|
+
ticketUrlTemplate?: string;
|
|
208
|
+
}
|
|
209
|
+
interface AdfMark {
|
|
210
|
+
type: string;
|
|
211
|
+
attrs?: Record<string, unknown>;
|
|
212
|
+
}
|
|
213
|
+
interface AdfNode {
|
|
214
|
+
type: string;
|
|
215
|
+
attrs?: Record<string, unknown>;
|
|
216
|
+
content?: AdfNode[];
|
|
217
|
+
marks?: AdfMark[];
|
|
218
|
+
text?: string;
|
|
219
|
+
/** Only on the root doc node */
|
|
220
|
+
version?: number;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Confluence / Atlassian Document Format formatter.
|
|
224
|
+
*
|
|
225
|
+
* Emits a top-level `{ version: 1, type: "doc", content: [...] }` tree that
|
|
226
|
+
* can be posted to the Confluence or Jira REST API.
|
|
227
|
+
*/
|
|
228
|
+
declare class ConfluenceFormatter {
|
|
229
|
+
private options;
|
|
230
|
+
constructor(options?: ConfluenceFormatterOptions);
|
|
231
|
+
/** Build the ADF document tree. Returns the JS object (not stringified). */
|
|
232
|
+
formatToAdf(run: TestRunResult): AdfNode;
|
|
233
|
+
/** Format a test run as an ADF JSON string. */
|
|
234
|
+
format(run: TestRunResult): string;
|
|
235
|
+
private renderMetadataTable;
|
|
236
|
+
private renderSummaryTable;
|
|
237
|
+
private renderByFile;
|
|
238
|
+
private renderBySuite;
|
|
239
|
+
private renderFlat;
|
|
240
|
+
private renderSuiteGroups;
|
|
241
|
+
private renderScenario;
|
|
242
|
+
private renderStepsList;
|
|
243
|
+
private renderDocEntry;
|
|
244
|
+
private sortCases;
|
|
245
|
+
private sortSuiteGroups;
|
|
246
|
+
}
|
|
247
|
+
|
|
175
248
|
/**
|
|
176
249
|
* Configuration options for ACL and formatters.
|
|
177
250
|
*/
|
|
@@ -200,7 +273,7 @@ interface CanonicalizeOptions {
|
|
|
200
273
|
};
|
|
201
274
|
}
|
|
202
275
|
/** Output format for report generation */
|
|
203
|
-
type OutputFormat = "astro" | "cucumber-json" | "cucumber-messages" | "cucumber-html" | "html" | "junit" | "markdown";
|
|
276
|
+
type OutputFormat = "astro" | "confluence" | "cucumber-json" | "cucumber-messages" | "cucumber-html" | "html" | "junit" | "markdown";
|
|
204
277
|
/** Sort order for test cases in reports (deterministic for diff-friendly output) */
|
|
205
278
|
type SortTestCasesMode = "id" | "source" | "none";
|
|
206
279
|
/** Output mode for report routing */
|
|
@@ -320,6 +393,8 @@ interface FormatterOptions {
|
|
|
320
393
|
markdown?: MarkdownFormatterOptions;
|
|
321
394
|
/** Astro/Starlight specific options */
|
|
322
395
|
astro?: AstroFormatterOptions$1;
|
|
396
|
+
/** Confluence/ADF specific options */
|
|
397
|
+
confluence?: ConfluenceFormatterOptions;
|
|
323
398
|
/** History tracking options */
|
|
324
399
|
history?: {
|
|
325
400
|
/** Path to JSON history file (enables tracking) */
|
|
@@ -473,6 +548,19 @@ interface ResolvedFormatterOptions {
|
|
|
473
548
|
includeSourceLinks: boolean;
|
|
474
549
|
customRenderers?: MarkdownRenderers;
|
|
475
550
|
};
|
|
551
|
+
confluence: {
|
|
552
|
+
title: string;
|
|
553
|
+
includeStatusIcons: boolean;
|
|
554
|
+
includeMetadata: boolean;
|
|
555
|
+
includeSummaryTable: boolean;
|
|
556
|
+
includeErrors: boolean;
|
|
557
|
+
scenarioHeadingLevel: 1 | 2 | 3 | 4 | 5 | 6;
|
|
558
|
+
groupBy: "file" | "suite" | "none";
|
|
559
|
+
sortScenarios: "alpha" | "source" | "none";
|
|
560
|
+
pretty: boolean;
|
|
561
|
+
permalinkBaseUrl?: string;
|
|
562
|
+
ticketUrlTemplate?: string;
|
|
563
|
+
};
|
|
476
564
|
astro: {
|
|
477
565
|
assetsDir: string;
|
|
478
566
|
assetsBaseUrl: string;
|
|
@@ -1438,10 +1526,11 @@ declare class MarkdownFormatter {
|
|
|
1438
1526
|
}
|
|
1439
1527
|
|
|
1440
1528
|
/**
|
|
1441
|
-
* Astro
|
|
1529
|
+
* Astro Formatter - Layer 3.
|
|
1442
1530
|
*
|
|
1443
|
-
* Wraps the MarkdownFormatter to produce
|
|
1444
|
-
*
|
|
1531
|
+
* Wraps the MarkdownFormatter to produce .md files with YAML frontmatter
|
|
1532
|
+
* (title, description, sidebar.badge) for Starlight content collections.
|
|
1533
|
+
* The scaffolded docs site uses themed CSS matching the HTML report design system.
|
|
1445
1534
|
*/
|
|
1446
1535
|
|
|
1447
1536
|
interface StarlightBadge {
|
|
@@ -1461,6 +1550,114 @@ declare class AstroFormatter {
|
|
|
1461
1550
|
static computeBadge(testCases: Pick<TestCaseResult, "status">[]): StarlightBadge;
|
|
1462
1551
|
}
|
|
1463
1552
|
|
|
1553
|
+
/**
|
|
1554
|
+
* Confluence publisher.
|
|
1555
|
+
*
|
|
1556
|
+
* Pushes an ADF JSON document to a Confluence Cloud page via the REST API v2.
|
|
1557
|
+
* - If `pageId` is provided, the page is updated in place (title + body + version).
|
|
1558
|
+
* - If `spaceId` is provided instead, a new page is created (optionally under `parentId`).
|
|
1559
|
+
*
|
|
1560
|
+
* Authentication: Basic auth with an Atlassian email + API token.
|
|
1561
|
+
* Generate tokens at https://id.atlassian.com/manage-profile/security/api-tokens.
|
|
1562
|
+
*/
|
|
1563
|
+
/** HTTP fetch function (injectable for tests). Matches global fetch signature. */
|
|
1564
|
+
type FetchFn = (url: string, init: {
|
|
1565
|
+
method: string;
|
|
1566
|
+
headers: Record<string, string>;
|
|
1567
|
+
body?: string;
|
|
1568
|
+
}) => Promise<{
|
|
1569
|
+
ok: boolean;
|
|
1570
|
+
status: number;
|
|
1571
|
+
statusText: string;
|
|
1572
|
+
text(): Promise<string>;
|
|
1573
|
+
json(): Promise<unknown>;
|
|
1574
|
+
}>;
|
|
1575
|
+
interface ConfluenceAuth {
|
|
1576
|
+
/** Atlassian account email */
|
|
1577
|
+
email: string;
|
|
1578
|
+
/** Atlassian API token */
|
|
1579
|
+
token: string;
|
|
1580
|
+
}
|
|
1581
|
+
interface PublishConfluenceArgs {
|
|
1582
|
+
/** ADF document JSON string (the `{ version, type: "doc", content }` envelope) */
|
|
1583
|
+
adf: string;
|
|
1584
|
+
/** Page ID to update (mutually exclusive with spaceId for create) */
|
|
1585
|
+
pageId?: string;
|
|
1586
|
+
/** Space ID required when creating a new page */
|
|
1587
|
+
spaceId?: string;
|
|
1588
|
+
/** Parent page ID (optional, for new pages) */
|
|
1589
|
+
parentId?: string;
|
|
1590
|
+
/** Page title. Required for create; updates existing title if provided on update */
|
|
1591
|
+
title?: string;
|
|
1592
|
+
/** Base URL of the Confluence instance, e.g. https://acme.atlassian.net/wiki */
|
|
1593
|
+
baseUrl: string;
|
|
1594
|
+
}
|
|
1595
|
+
interface PublishConfluenceDeps {
|
|
1596
|
+
auth: ConfluenceAuth;
|
|
1597
|
+
/** Defaults to globalThis.fetch */
|
|
1598
|
+
fetch?: FetchFn;
|
|
1599
|
+
}
|
|
1600
|
+
interface PublishConfluenceResult {
|
|
1601
|
+
id: string;
|
|
1602
|
+
version: number;
|
|
1603
|
+
title: string;
|
|
1604
|
+
/** Canonical URL to view the page in Confluence */
|
|
1605
|
+
url: string;
|
|
1606
|
+
action: "created" | "updated";
|
|
1607
|
+
}
|
|
1608
|
+
/**
|
|
1609
|
+
* Publish an ADF document to Confluence. Creates a new page if `pageId` is
|
|
1610
|
+
* omitted, otherwise updates the existing page.
|
|
1611
|
+
*/
|
|
1612
|
+
declare function publishConfluencePage(args: PublishConfluenceArgs, deps: PublishConfluenceDeps): Promise<PublishConfluenceResult>;
|
|
1613
|
+
|
|
1614
|
+
/**
|
|
1615
|
+
* Jira publisher.
|
|
1616
|
+
*
|
|
1617
|
+
* Pushes an ADF JSON document to a Jira Cloud issue via the REST API v3.
|
|
1618
|
+
* - mode "comment" adds the ADF as a new comment (default, non-destructive)
|
|
1619
|
+
* - mode "description" replaces the issue description field with the ADF
|
|
1620
|
+
*
|
|
1621
|
+
* Authentication: Basic auth with an Atlassian email + API token (same token
|
|
1622
|
+
* system as Confluence — create one at id.atlassian.com).
|
|
1623
|
+
*
|
|
1624
|
+
* Note: unlike Confluence v2 (which expects the ADF as a stringified value),
|
|
1625
|
+
* Jira v3 accepts ADF as a native JSON object in the request body.
|
|
1626
|
+
*/
|
|
1627
|
+
|
|
1628
|
+
/** Reuses the same auth + fetch shape as the Confluence publisher */
|
|
1629
|
+
type JiraAuth = ConfluenceAuth;
|
|
1630
|
+
/** Update mode — default "comment" is non-destructive and append-only */
|
|
1631
|
+
type JiraPublishMode = "comment" | "description";
|
|
1632
|
+
interface PublishJiraArgs {
|
|
1633
|
+
/** ADF document JSON string (the `{ version, type: "doc", content }` envelope) */
|
|
1634
|
+
adf: string;
|
|
1635
|
+
/** Issue key, e.g. "PROJ-123" */
|
|
1636
|
+
issueKey: string;
|
|
1637
|
+
/** Base URL of the Jira instance, e.g. https://acme.atlassian.net */
|
|
1638
|
+
baseUrl: string;
|
|
1639
|
+
/** Defaults to "comment" */
|
|
1640
|
+
mode?: JiraPublishMode;
|
|
1641
|
+
}
|
|
1642
|
+
interface PublishJiraDeps {
|
|
1643
|
+
auth: JiraAuth;
|
|
1644
|
+
/** Defaults to globalThis.fetch */
|
|
1645
|
+
fetch?: FetchFn;
|
|
1646
|
+
}
|
|
1647
|
+
interface PublishJiraResult {
|
|
1648
|
+
issueKey: string;
|
|
1649
|
+
action: "description-updated" | "comment-added";
|
|
1650
|
+
/** Canonical URL to view the issue (and comment, if applicable) */
|
|
1651
|
+
url: string;
|
|
1652
|
+
/** Set only when mode = "comment" */
|
|
1653
|
+
commentId?: string;
|
|
1654
|
+
}
|
|
1655
|
+
/**
|
|
1656
|
+
* Publish an ADF document to a Jira issue. Defaults to adding a new comment.
|
|
1657
|
+
* Use mode: "description" to replace the issue's description field.
|
|
1658
|
+
*/
|
|
1659
|
+
declare function publishJiraIssue(args: PublishJiraArgs, deps: PublishJiraDeps): Promise<PublishJiraResult>;
|
|
1660
|
+
|
|
1464
1661
|
interface AstroAssetResult {
|
|
1465
1662
|
markdown: string;
|
|
1466
1663
|
copiedCount: number;
|
|
@@ -2364,4 +2561,4 @@ declare function normalizeVitestResults(testModules: Parameters<typeof adaptVite
|
|
|
2364
2561
|
*/
|
|
2365
2562
|
declare function normalizePlaywrightResults(testResults: Parameters<typeof adaptPlaywrightRun>[0], adapterOptions?: Parameters<typeof adaptPlaywrightRun>[1], canonicalizeOptions?: CanonicalizeOptions): TestRunResult;
|
|
2366
2563
|
|
|
2367
|
-
export { type AstroAssetResult, AstroFormatter, type AstroFormatterOptions as AstroFormatterOpts, type Attachment, type BundleOptions, type BundleResult, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CompareFormat, type CompareFormatterOptions, type CopyMarkdownAssetsOptions, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type ExecutableStoriesConfig, type FlakinessLevel, type Formatter, 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, NormalizedTicket, 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 StarlightBadge, 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, bundleAssets, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, copyMarkdownAssets, createPrCommentSummary, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, diffRuns, findGitDir, formatDuration, generateRunComparison, generateRunId, generateTestCaseId, getAvailableThemes, getCssOnlyThemes, hasSufficientHistory, listScenarios, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTheme, resolveTraceUrl, rewriteAssetPaths, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|
|
2564
|
+
export { type AstroAssetResult, AstroFormatter, type AstroFormatterOptions as AstroFormatterOpts, type Attachment, type BundleOptions, type BundleResult, type CIInfo, CIProvider, type CanonicalizeOptions, type ColocatedStyle, type CompareFormat, type CompareFormatterOptions, type ConfluenceAuth, ConfluenceFormatter, type ConfluenceFormatterOptions as ConfluenceFormatterOpts, type CopyMarkdownAssetsOptions, type CoverageSummary, CucumberHtmlFormatter, type CucumberHtmlOptions, CucumberJsonFormatter, type CucumberJsonOptions, CucumberMessagesFormatter, type CucumberMessagesOptions, DocEntry, type ExecutableStoriesConfig, type FetchFn, type FlakinessLevel, type Formatter, 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 JiraAuth, type JiraPublishMode, type ListScenariosArgs, type ListScenariosDeps, type Logger, MIN_FLAKINESS_SAMPLES, MIN_METRIC_SAMPLES, MIN_PERF_SAMPLES, MarkdownFormatter, type MarkdownFormatterOptions, type MarkdownOptions, type MarkdownRenderers, NormalizedTicket, type NotificationSummary, type NotifyCondition, OtelSpan, type OtelTraceContext, type OutputConfig, type OutputFormat, type OutputMode, type OutputRule, type PerformanceTrend, type PublishConfluenceArgs, type PublishConfluenceDeps, type PublishConfluenceResult, type PublishJiraArgs, type PublishJiraDeps, type PublishJiraResult, 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 StarlightBadge, 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, bundleAssets, calculateFlakiness, calculateStability, canonicalizeRun, clearVersionCache, computeTestMetrics, copyMarkdownAssets, createPrCommentSummary, createReportGenerator, deriveStepResults, detectCI, detectPerformanceTrend, diffRuns, findGitDir, formatDuration, generateRunComparison, generateRunId, generateTestCaseId, getAvailableThemes, getCssOnlyThemes, hasSufficientHistory, listScenarios, loadHistory, mergeStepResults, msToNanoseconds, nanosecondsToMs, normalizeJestResults, normalizePlaywrightResults, normalizeStatus, normalizeVitestResults, parseEnvelopes, parseNdjson, publishConfluencePage, publishJiraIssue, readBranchName, readGitSha, readPackageVersion, resolveAttachment, resolveAttachments, resolveTheme, resolveTraceUrl, rewriteAssetPaths, saveHistory, sendNotifications, sendSlackNotification, sendTeamsNotification, sendWebhookNotification, signBody, slugify, stripAnsi, tryGetActiveOtelContext, updateHistory, validateCanonicalRun };
|