@vera-ci/playwright-reporter 0.2.0-beta.2 → 0.2.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/index.d.ts CHANGED
@@ -3,6 +3,4 @@ import VeraReporter from "./reporter.js";
3
3
  export default VeraReporter;
4
4
  export { veraSnapshot } from "./screenshot.js";
5
5
  export type { VeraSnapshotOptions } from "./screenshot.js";
6
- export { veraTest, veraFixtures, runAxe } from "./fixtures.js";
7
- export type { VeraAxeOptions, VeraPage } from "./fixtures.js";
8
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,eAAe,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,eAAe,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -2,5 +2,4 @@
2
2
  import VeraReporter from "./reporter.js";
3
3
  export default VeraReporter;
4
4
  export { veraSnapshot } from "./screenshot.js";
5
- export { veraTest, veraFixtures, runAxe } from "./fixtures.js";
6
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAU/B,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,eAAe,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAU/B,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,eAAe,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vera-ci/playwright-reporter",
3
- "version": "0.2.0-beta.2",
3
+ "version": "0.2.0",
4
4
  "description": "Playwright reporter for Vera CI — upload test results, screenshots, traces, and videos.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,12 +17,6 @@
17
17
  "import": "./dist/screenshot.js",
18
18
  "require": "./dist/screenshot.js",
19
19
  "default": "./dist/screenshot.js"
20
- },
21
- "./fixtures": {
22
- "types": "./dist/fixtures.d.ts",
23
- "import": "./dist/fixtures.js",
24
- "require": "./dist/fixtures.js",
25
- "default": "./dist/fixtures.js"
26
20
  }
27
21
  },
28
22
  "files": [
@@ -38,11 +32,7 @@
38
32
  "peerDependencies": {
39
33
  "@playwright/test": ">=1.49.0"
40
34
  },
41
- "optionalDependencies": {
42
- "@axe-core/playwright": "^4.8.0"
43
- },
44
35
  "devDependencies": {
45
- "@axe-core/playwright": "^4.11.1",
46
36
  "@playwright/test": "^1.52.0",
47
37
  "@types/node": "^22.19.11",
48
38
  "typescript": "^5.9.3"
@@ -1,71 +0,0 @@
1
- /**
2
- * fixtures.ts — Axe accessibility scanning integration for @vera-ci/playwright-reporter
3
- *
4
- * Provides:
5
- * - runAxe() — run an axe scan on the live page and attach results as an annotation
6
- * - veraFixtures — Playwright fixture object for use with base.extend()
7
- * - veraTest — pre-extended test base (convenience re-export)
8
- *
9
- * @axe-core/playwright is an optionalDependency — it installs automatically alongside the
10
- * reporter. If somehow unavailable, axe is silently skipped without failing the test.
11
- *
12
- * Usage:
13
- *
14
- * // test-setup.ts
15
- * export { veraTest as test, expect } from '@vera-ci/playwright-reporter';
16
- *
17
- * // my-test.spec.ts
18
- * import { test } from '../test-setup';
19
- * test('homepage', async ({ page, vera }) => {
20
- * await page.goto('/');
21
- * await vera.screenshot('homepage'); // screenshot + axe in one call
22
- * await vera.runAxe('mobile'); // axe only (no screenshot)
23
- * });
24
- */
25
- import type { Page } from "@playwright/test";
26
- export interface VeraAxeOptions {
27
- /** WCAG rule tags to include. Defaults to reporter-level axe.tags, then ['wcag2a', 'wcag2aa']. */
28
- tags?: string[];
29
- /** Per-call rule overrides, e.g. { 'color-contrast': { enabled: false } } */
30
- rules?: Record<string, {
31
- enabled: boolean;
32
- }>;
33
- }
34
- /** The 'vera' fixture object exposed to tests. */
35
- export interface VeraPage {
36
- /**
37
- * Take a named screenshot and run axe on the live page.
38
- * Attaches screenshot to the test (for Vera CI upload) and axe results as an annotation.
39
- */
40
- screenshot(name: string, options?: {
41
- fullPage?: boolean;
42
- axe?: VeraAxeOptions;
43
- }): Promise<void>;
44
- /**
45
- * Run axe on the live page without taking a screenshot.
46
- * Useful for teams keeping page.screenshot() directly.
47
- */
48
- runAxe(name: string, options?: VeraAxeOptions): Promise<void>;
49
- }
50
- type VeraFixtures = {
51
- vera: VeraPage;
52
- };
53
- /**
54
- * Run an axe scan and push a 'vera:axe' annotation to the current test.
55
- * The annotation body is picked up by the ingestion pipeline when processing
56
- * the Playwright JSON report.
57
- *
58
- * @param page The Playwright Page to scan.
59
- * @param snapshotName Name used to correlate the scan with a snapshot.
60
- * @param options Per-call overrides (tags, rules).
61
- * @param defaults Project-level defaults from playwright.config.ts reporter options.
62
- */
63
- export declare function runAxe(page: Page, snapshotName: string, options?: VeraAxeOptions, defaults?: VeraAxeOptions): Promise<void>;
64
- export declare const veraFixtures: {
65
- vera: ({ page }: {
66
- page: Page;
67
- }, use: (r: VeraPage) => Promise<void>) => Promise<void>;
68
- };
69
- export declare const veraTest: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & VeraFixtures, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions>;
70
- export { expect } from "@playwright/test";
71
- //# sourceMappingURL=fixtures.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAO7C,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,cAAc,CAAA;KAAE,GACrD,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAMvC;;;;;;;;;GASG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,cAAc,EACxB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAkEf;AAMD,eAAO,MAAM,YAAY;qBAGX;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,OACnB,CAAC,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC;CAqEtC,CAAC;AAMF,eAAO,MAAM,QAAQ,4PAA8C,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/fixtures.js DELETED
@@ -1,168 +0,0 @@
1
- /**
2
- * fixtures.ts — Axe accessibility scanning integration for @vera-ci/playwright-reporter
3
- *
4
- * Provides:
5
- * - runAxe() — run an axe scan on the live page and attach results as an annotation
6
- * - veraFixtures — Playwright fixture object for use with base.extend()
7
- * - veraTest — pre-extended test base (convenience re-export)
8
- *
9
- * @axe-core/playwright is an optionalDependency — it installs automatically alongside the
10
- * reporter. If somehow unavailable, axe is silently skipped without failing the test.
11
- *
12
- * Usage:
13
- *
14
- * // test-setup.ts
15
- * export { veraTest as test, expect } from '@vera-ci/playwright-reporter';
16
- *
17
- * // my-test.spec.ts
18
- * import { test } from '../test-setup';
19
- * test('homepage', async ({ page, vera }) => {
20
- * await page.goto('/');
21
- * await vera.screenshot('homepage'); // screenshot + axe in one call
22
- * await vera.runAxe('mobile'); // axe only (no screenshot)
23
- * });
24
- */
25
- import { test as baseTest } from "@playwright/test";
26
- // ---------------------------------------------------------------------------
27
- // runAxe — runs axe on the live page and pushes annotation
28
- // ---------------------------------------------------------------------------
29
- /**
30
- * Run an axe scan and push a 'vera:axe' annotation to the current test.
31
- * The annotation body is picked up by the ingestion pipeline when processing
32
- * the Playwright JSON report.
33
- *
34
- * @param page The Playwright Page to scan.
35
- * @param snapshotName Name used to correlate the scan with a snapshot.
36
- * @param options Per-call overrides (tags, rules).
37
- * @param defaults Project-level defaults from playwright.config.ts reporter options.
38
- */
39
- export async function runAxe(page, snapshotName, options, defaults) {
40
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
- let axeModule;
42
- try {
43
- // Dynamic import so the reporter loads fine if @axe-core/playwright is not installed
44
- axeModule = await import("@axe-core/playwright");
45
- }
46
- catch {
47
- const msg = `[vera] @axe-core/playwright not available — skipping axe scan for "${snapshotName}"`;
48
- if (typeof process !== "undefined" && process.stderr) {
49
- process.stderr.write(msg + "\n");
50
- }
51
- return;
52
- }
53
- const AxeBuilder = axeModule.default ?? axeModule.AxeBuilder;
54
- if (!AxeBuilder) {
55
- process.stderr.write(`[vera] Could not find AxeBuilder in @axe-core/playwright — skipping "${snapshotName}"\n`);
56
- return;
57
- }
58
- const resolvedTags = options?.tags ?? defaults?.tags ?? ["wcag2a", "wcag2aa"];
59
- const resolvedRules = options?.rules ?? defaults?.rules;
60
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
- let builder = new AxeBuilder({ page }).withTags(resolvedTags);
62
- if (resolvedRules) {
63
- builder = builder.options({ rules: resolvedRules });
64
- }
65
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
66
- let results;
67
- try {
68
- results = await builder.analyze();
69
- }
70
- catch (err) {
71
- // Never fail the test — log and return
72
- const message = err instanceof Error ? err.message : String(err);
73
- if (typeof process !== "undefined" && process.stderr) {
74
- process.stderr.write(`[vera] Axe scan failed for "${snapshotName}": ${message}\n`);
75
- }
76
- return;
77
- }
78
- // Attach scan results as a Playwright annotation.
79
- // The Vera CI ingestion pipeline reads this when processing the report JSON.
80
- baseTest.info().annotations.push({
81
- type: "vera:axe",
82
- description: JSON.stringify({
83
- snapshotName,
84
- result: {
85
- violations: results.violations,
86
- passes: results.passes.length,
87
- incomplete: results.incomplete.length,
88
- inapplicable: results.inapplicable.length,
89
- axeVersion: results.testEngine?.version,
90
- rulesConfig: {
91
- tags: resolvedTags,
92
- ...(resolvedRules ? { rules: resolvedRules } : {}),
93
- },
94
- },
95
- }),
96
- });
97
- }
98
- // ---------------------------------------------------------------------------
99
- // veraFixtures — Playwright fixture definition
100
- // ---------------------------------------------------------------------------
101
- export const veraFixtures = {
102
- // eslint-disable-next-line no-empty-pattern
103
- vera: async ({ page }, use) => {
104
- // Track which attachment names have already been axe-scanned so the
105
- // teardown auto-scan doesn't duplicate results.
106
- const axeScannedNames = new Set();
107
- const veraPage = {
108
- async screenshot(name, options) {
109
- const { axe: axeOptions, ...screenshotOptions } = options ?? {};
110
- // Take screenshot and attach for Vera CI upload
111
- const projectName = baseTest.info().project.name;
112
- const attachmentName = projectName ? `${name}--${projectName}` : name;
113
- const screenshot = await page.screenshot({
114
- type: "png",
115
- ...screenshotOptions,
116
- });
117
- await baseTest.info().attach(attachmentName, {
118
- body: screenshot,
119
- contentType: "image/png",
120
- });
121
- // Capture accessibility tree alongside screenshot (same as veraSnapshot)
122
- try {
123
- const ariaSnapshot = await page.locator("body").ariaSnapshot();
124
- if (ariaSnapshot) {
125
- await baseTest.info().attach(`${attachmentName}.dom`, {
126
- body: Buffer.from(ariaSnapshot, "utf-8"),
127
- contentType: "text/plain",
128
- });
129
- }
130
- }
131
- catch {
132
- // Non-fatal — ariaSnapshot requires Playwright >= 1.49
133
- }
134
- // Run axe on the live page (attaches annotation).
135
- // Use attachmentName so the ingestion pipeline can correlate axe results
136
- // with the correct snapshot (attachment names include the project suffix).
137
- await runAxe(page, attachmentName, axeOptions);
138
- axeScannedNames.add(attachmentName);
139
- },
140
- async runAxe(name, options) {
141
- await runAxe(page, name, options);
142
- axeScannedNames.add(name);
143
- },
144
- };
145
- await use(veraPage);
146
- // ---------------------------------------------------------------------------
147
- // Auto-axe teardown — runs axe for any image attachments not yet scanned.
148
- // This covers tests that capture screenshots via page.screenshot() directly
149
- // without going through vera.screenshot().
150
- // ---------------------------------------------------------------------------
151
- const info = baseTest.info();
152
- if (info.status !== "skipped") {
153
- for (const attachment of info.attachments) {
154
- if (!attachment.contentType.startsWith("image/"))
155
- continue;
156
- if (axeScannedNames.has(attachment.name))
157
- continue;
158
- await runAxe(page, attachment.name);
159
- }
160
- }
161
- },
162
- };
163
- // ---------------------------------------------------------------------------
164
- // veraTest — convenience re-export
165
- // ---------------------------------------------------------------------------
166
- export const veraTest = baseTest.extend(veraFixtures);
167
- export { expect } from "@playwright/test";
168
- //# sourceMappingURL=fixtures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../src/fixtures.ts"],"names":[],"mappings":"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"}