@trailmark/playwright 0.1.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/.trailmark/current-run.json +136 -0
- package/dist/artifacts/artifactManager.d.ts +31 -0
- package/dist/artifacts/artifactManager.d.ts.map +1 -0
- package/dist/artifacts/artifactManager.js +140 -0
- package/dist/artifacts/artifactManager.js.map +1 -0
- package/dist/artifacts/capture.d.ts +4 -0
- package/dist/artifacts/capture.d.ts.map +1 -0
- package/dist/artifacts/capture.js +16 -0
- package/dist/artifacts/capture.js.map +1 -0
- package/dist/artifacts/options.d.ts +11 -0
- package/dist/artifacts/options.d.ts.map +1 -0
- package/dist/artifacts/options.js +55 -0
- package/dist/artifacts/options.js.map +1 -0
- package/dist/artifacts/registry.d.ts +24 -0
- package/dist/artifacts/registry.d.ts.map +1 -0
- package/dist/artifacts/registry.js +99 -0
- package/dist/artifacts/registry.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -0
- package/dist/fixture.d.ts +7 -0
- package/dist/fixture.d.ts.map +1 -0
- package/dist/fixture.js +193 -0
- package/dist/fixture.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mode.d.ts +3 -0
- package/dist/mode.d.ts.map +1 -0
- package/dist/mode.js +9 -0
- package/dist/mode.js.map +1 -0
- package/dist/reporter/attachments.d.ts +4 -0
- package/dist/reporter/attachments.d.ts.map +1 -0
- package/dist/reporter/attachments.js +112 -0
- package/dist/reporter/attachments.js.map +1 -0
- package/dist/reporter/errors.d.ts +4 -0
- package/dist/reporter/errors.d.ts.map +1 -0
- package/dist/reporter/errors.js +11 -0
- package/dist/reporter/errors.js.map +1 -0
- package/dist/reporter/index.d.ts +33 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +407 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/io.d.ts +15 -0
- package/dist/reporter/io.d.ts.map +1 -0
- package/dist/reporter/io.js +34 -0
- package/dist/reporter/io.js.map +1 -0
- package/dist/reporter/normalization.d.ts +13 -0
- package/dist/reporter/normalization.d.ts.map +1 -0
- package/dist/reporter/normalization.js +91 -0
- package/dist/reporter/normalization.js.map +1 -0
- package/dist/reporter/output.d.ts +5 -0
- package/dist/reporter/output.d.ts.map +1 -0
- package/dist/reporter/output.js +90 -0
- package/dist/reporter/output.js.map +1 -0
- package/dist/reporter/run.d.ts +4 -0
- package/dist/reporter/run.d.ts.map +1 -0
- package/dist/reporter/run.js +18 -0
- package/dist/reporter/run.js.map +1 -0
- package/dist/types.d.ts +48 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/integration/app/base.html +16 -0
- package/integration/app/extra.html +17 -0
- package/integration/playwright.config.ts +44 -0
- package/integration/specs/sample.spec.ts +15 -0
- package/integration/tmp/baseline.json +46 -0
- package/integration/tmp/report.json +97 -0
- package/package.json +35 -0
- package/src/artifacts/artifactManager.ts +178 -0
- package/src/artifacts/capture.ts +18 -0
- package/src/artifacts/options.ts +79 -0
- package/src/artifacts/registry.ts +143 -0
- package/src/constants.ts +1 -0
- package/src/fixture.ts +239 -0
- package/src/index.ts +3 -0
- package/src/mode.ts +7 -0
- package/src/reporter/attachments.ts +139 -0
- package/src/reporter/errors.ts +6 -0
- package/src/reporter/index.ts +572 -0
- package/src/reporter/io.ts +33 -0
- package/src/reporter/normalization.ts +122 -0
- package/src/reporter/output.ts +103 -0
- package/src/reporter/run.ts +17 -0
- package/src/types.ts +53 -0
- package/test/artifactManager.unit.test.ts +141 -0
- package/test/reporter.integration.test.ts +153 -0
- package/test/reporter.unit.test.ts +337 -0
- package/test-results/.last-run.json +4 -0
- package/trailmark-playwright-0.1.0.tgz +0 -0
- package/tsconfig.json +8 -0
package/dist/fixture.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.expect = exports.test = void 0;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const playwright_1 = __importDefault(require("@axe-core/playwright"));
|
|
9
|
+
const test_1 = require("@playwright/test");
|
|
10
|
+
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return test_1.expect; } });
|
|
11
|
+
const core_1 = require("@trailmark/core");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const artifactManager_1 = require("./artifacts/artifactManager");
|
|
14
|
+
const options_1 = require("./artifacts/options");
|
|
15
|
+
const registry_1 = require("./artifacts/registry");
|
|
16
|
+
const mode_1 = require("./mode");
|
|
17
|
+
const reporter_1 = require("./reporter");
|
|
18
|
+
const io_1 = require("./reporter/io");
|
|
19
|
+
function cloneRun(run) {
|
|
20
|
+
return JSON.parse(JSON.stringify(run));
|
|
21
|
+
}
|
|
22
|
+
function applyAxeOptions(builder, opts) {
|
|
23
|
+
let configured = builder;
|
|
24
|
+
for (const selector of opts?.axe?.include ?? []) {
|
|
25
|
+
configured = configured.include(selector);
|
|
26
|
+
}
|
|
27
|
+
for (const selector of opts?.axe?.exclude ?? []) {
|
|
28
|
+
configured = configured.exclude(selector);
|
|
29
|
+
}
|
|
30
|
+
if (opts?.axe?.tags && opts.axe.tags.length > 0) {
|
|
31
|
+
configured = configured.withTags(opts.axe.tags);
|
|
32
|
+
}
|
|
33
|
+
const rules = {
|
|
34
|
+
...opts?.axe?.rules,
|
|
35
|
+
};
|
|
36
|
+
for (const ruleId of opts?.axe?.disableRules ?? []) {
|
|
37
|
+
rules[ruleId] = { enabled: false };
|
|
38
|
+
}
|
|
39
|
+
if (Object.keys(rules).length > 0) {
|
|
40
|
+
configured = configured.options({ rules });
|
|
41
|
+
}
|
|
42
|
+
return configured;
|
|
43
|
+
}
|
|
44
|
+
function shouldSkipScan(opts) {
|
|
45
|
+
if (opts?.enabled === false) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
const envToggle = process.env.TRAILMARK_DISABLE_SCAN;
|
|
49
|
+
return envToggle === "1" || envToggle === "true";
|
|
50
|
+
}
|
|
51
|
+
function toError(input) {
|
|
52
|
+
if (input instanceof Error) {
|
|
53
|
+
return input;
|
|
54
|
+
}
|
|
55
|
+
return new Error(typeof input === "string" ? input : "Unknown Trailmark scan failure.");
|
|
56
|
+
}
|
|
57
|
+
function loadBaselineForArtifacts(mode, artifactOptions, warnings) {
|
|
58
|
+
if (mode !== "check") {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const captureMode = artifactOptions?.capture ?? "new-only";
|
|
62
|
+
if (captureMode !== "new-only") {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const baselinePath = process.env.TRAILMARK_BASELINE_PATH ?? reporter_1.DEFAULT_BASELINE_PATH;
|
|
66
|
+
if (!(0, node_fs_1.existsSync)(baselinePath)) {
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
const { data: baseline, error, message } = (0, io_1.readBaseline)(baselinePath);
|
|
70
|
+
if (error) {
|
|
71
|
+
warnings.push(`trailmark: failed to read baseline for artifact capture decisions: ${message}. Falling back to capturing all issues.`);
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
return baseline;
|
|
75
|
+
}
|
|
76
|
+
exports.test = test_1.test.extend({
|
|
77
|
+
// oxlint-disable-next-line no-empty-pattern: First argument must use the object destructuring pattern: _fixtures https://github.com/microsoft/playwright/issues/14590
|
|
78
|
+
trailmark: async ({}, use, testInfo) => {
|
|
79
|
+
const mode = (0, mode_1.resolveMode)();
|
|
80
|
+
const artifactWarnings = [];
|
|
81
|
+
const resolvedArtifactOptions = (0, options_1.resolveArtifactOptions)(mode, undefined);
|
|
82
|
+
const artifactRunId = (0, artifactManager_1.createArtifactRunId)();
|
|
83
|
+
const artifactManager = new artifactManager_1.ArtifactManager({
|
|
84
|
+
...resolvedArtifactOptions,
|
|
85
|
+
runId: artifactRunId,
|
|
86
|
+
});
|
|
87
|
+
const artifactRegistry = new registry_1.ArtifactRegistry();
|
|
88
|
+
const baselineForCapture = loadBaselineForArtifacts(mode, resolvedArtifactOptions, artifactWarnings);
|
|
89
|
+
const captureMode = baselineForCapture ? resolvedArtifactOptions.capture : "all";
|
|
90
|
+
const captureDecision = new registry_1.CaptureDecisionRegistry(captureMode, baselineForCapture);
|
|
91
|
+
const run = (0, core_1.createEmptyRun)({
|
|
92
|
+
metadata: {
|
|
93
|
+
projectName: testInfo.project.name,
|
|
94
|
+
testFile: testInfo.file,
|
|
95
|
+
scanCount: 0,
|
|
96
|
+
skippedScanCount: 0,
|
|
97
|
+
artifactRunId,
|
|
98
|
+
artifactOptions: resolvedArtifactOptions,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
if (!Array.isArray(run.scanErrors)) {
|
|
102
|
+
run.scanErrors = [];
|
|
103
|
+
}
|
|
104
|
+
const fixture = {
|
|
105
|
+
async scan(page, opts) {
|
|
106
|
+
if (shouldSkipScan(opts)) {
|
|
107
|
+
run.metadata = {
|
|
108
|
+
...run.metadata,
|
|
109
|
+
skippedScanCount: Number(run.metadata?.skippedScanCount ?? 0) + 1,
|
|
110
|
+
};
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const meta = {
|
|
114
|
+
testId: testInfo.testId,
|
|
115
|
+
testTitle: testInfo.title,
|
|
116
|
+
testFile: testInfo.file,
|
|
117
|
+
projectName: testInfo.project.name,
|
|
118
|
+
scanLabel: opts?.scanLabel,
|
|
119
|
+
...opts?.meta,
|
|
120
|
+
};
|
|
121
|
+
const pageUrl = page.url();
|
|
122
|
+
const builder = applyAxeOptions(new playwright_1.default({ page }), opts);
|
|
123
|
+
const scanArtifactEnabled = opts?.artifacts?.enabled ?? resolvedArtifactOptions.enabled;
|
|
124
|
+
try {
|
|
125
|
+
const results = (await builder.analyze());
|
|
126
|
+
const findings = (0, core_1.normalizeAxeResults)({
|
|
127
|
+
results,
|
|
128
|
+
pageUrl,
|
|
129
|
+
urlOptions: opts?.url,
|
|
130
|
+
meta,
|
|
131
|
+
});
|
|
132
|
+
const occurredAt = new Date().toISOString();
|
|
133
|
+
const finalizedFindings = [];
|
|
134
|
+
for (const finding of findings) {
|
|
135
|
+
const { occurrenceId } = artifactRegistry.registerOccurrence(finding);
|
|
136
|
+
const withOccurrence = {
|
|
137
|
+
...finding,
|
|
138
|
+
occurrenceId,
|
|
139
|
+
occurredAt,
|
|
140
|
+
};
|
|
141
|
+
if (scanArtifactEnabled && captureDecision.shouldCaptureIssue(withOccurrence)) {
|
|
142
|
+
const captureResult = await artifactManager.captureForIssue({
|
|
143
|
+
page,
|
|
144
|
+
finding: withOccurrence,
|
|
145
|
+
});
|
|
146
|
+
artifactRegistry.registerAttachments(occurrenceId, captureResult.attachments);
|
|
147
|
+
finalizedFindings.push({
|
|
148
|
+
...withOccurrence,
|
|
149
|
+
attachments: captureResult.attachments,
|
|
150
|
+
});
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
finalizedFindings.push(withOccurrence);
|
|
154
|
+
}
|
|
155
|
+
run.findings.push(...finalizedFindings);
|
|
156
|
+
run.metadata = {
|
|
157
|
+
...run.metadata,
|
|
158
|
+
scanCount: Number(run.metadata?.scanCount ?? 0) + 1,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const normalized = toError(error);
|
|
163
|
+
run.scanErrors.push({
|
|
164
|
+
pageUrl,
|
|
165
|
+
pageKey: (0, core_1.normalizeUrlToPageKey)(pageUrl, opts?.url),
|
|
166
|
+
message: normalized.message,
|
|
167
|
+
stack: normalized.stack,
|
|
168
|
+
occurredAt: new Date().toISOString(),
|
|
169
|
+
meta,
|
|
170
|
+
});
|
|
171
|
+
if (!opts?.continueOnError) {
|
|
172
|
+
throw normalized;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
getRun() {
|
|
177
|
+
return cloneRun(run);
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
await use(fixture);
|
|
181
|
+
run.finishedAt = new Date().toISOString();
|
|
182
|
+
run.metadata = {
|
|
183
|
+
...run.metadata,
|
|
184
|
+
artifactWarnings: [...artifactWarnings, ...artifactManager.getWarnings()],
|
|
185
|
+
artifactIndex: artifactRegistry.attachmentIndex(),
|
|
186
|
+
};
|
|
187
|
+
await testInfo.attach(constants_1.TRAILMARK_ATTACHMENT_NAME, {
|
|
188
|
+
contentType: "application/json",
|
|
189
|
+
body: Buffer.from(JSON.stringify(run), "utf8"),
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../src/fixture.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AACtF,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.test = exports.expect = void 0;
|
|
4
|
+
var fixture_1 = require("./fixture");
|
|
5
|
+
Object.defineProperty(exports, "expect", { enumerable: true, get: function () { return fixture_1.expect; } });
|
|
6
|
+
Object.defineProperty(exports, "test", { enumerable: true, get: function () { return fixture_1.test; } });
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwC;AAA/B,iGAAA,MAAM,OAAA;AAAE,+FAAA,IAAI,OAAA"}
|
package/dist/mode.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAE7D,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAIzE"}
|
package/dist/mode.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveMode = resolveMode;
|
|
4
|
+
function resolveMode(options) {
|
|
5
|
+
const envMode = process.env.TRAILMARK_MODE;
|
|
6
|
+
const mode = options?.mode ?? envMode ?? "check";
|
|
7
|
+
return mode;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=mode.js.map
|
package/dist/mode.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../src/mode.ts"],"names":[],"mappings":";;AAEA,kCAIC;AAJD,SAAgB,WAAW,CAAC,OAA8B;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAA2C,CAAA;IACvE,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,IAAI,OAAO,CAAA;IAChD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/reporter/attachments.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAA8B,MAAM,iBAAiB,CAAA;AA+E1E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE,CAwDxE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readAttachmentPayload = readAttachmentPayload;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const core_1 = require("@trailmark/core");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const run_1 = require("./run");
|
|
9
|
+
function readAttachmentBody(body) {
|
|
10
|
+
if (!body) {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (typeof body === "string") {
|
|
14
|
+
return body;
|
|
15
|
+
}
|
|
16
|
+
if (node_buffer_1.Buffer.isBuffer(body) || body instanceof Uint8Array) {
|
|
17
|
+
return node_buffer_1.Buffer.from(body).toString("utf8");
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
function attachmentSignature(attachment) {
|
|
22
|
+
if (attachment.path) {
|
|
23
|
+
return `${attachment.name}|path:${attachment.path}`;
|
|
24
|
+
}
|
|
25
|
+
const body = readAttachmentBody(attachment.body);
|
|
26
|
+
if (body !== undefined) {
|
|
27
|
+
return `${attachment.name}|body:${body}`;
|
|
28
|
+
}
|
|
29
|
+
return `${attachment.name}|fallback:${typeof attachment.body}`;
|
|
30
|
+
}
|
|
31
|
+
function collectAttachments(result) {
|
|
32
|
+
const attachments = [];
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
for (const attachment of result.attachments) {
|
|
35
|
+
const signature = attachmentSignature(attachment);
|
|
36
|
+
if (seen.has(signature)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
seen.add(signature);
|
|
40
|
+
attachments.push(attachment);
|
|
41
|
+
}
|
|
42
|
+
const queue = [...result.steps];
|
|
43
|
+
while (queue.length > 0) {
|
|
44
|
+
const step = queue.pop();
|
|
45
|
+
if (!step) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
for (const attachment of step.attachments ?? []) {
|
|
49
|
+
const signature = attachmentSignature(attachment);
|
|
50
|
+
if (seen.has(signature)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
seen.add(signature);
|
|
54
|
+
attachments.push(attachment);
|
|
55
|
+
}
|
|
56
|
+
queue.push(...(step.steps ?? []));
|
|
57
|
+
}
|
|
58
|
+
return attachments;
|
|
59
|
+
}
|
|
60
|
+
function readAttachmentPayload(result) {
|
|
61
|
+
const runs = [];
|
|
62
|
+
const seenPayloadHashes = new Set();
|
|
63
|
+
for (const attachment of collectAttachments(result)) {
|
|
64
|
+
if (attachment.name !== constants_1.TRAILMARK_ATTACHMENT_NAME) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
let raw;
|
|
69
|
+
if (attachment.body) {
|
|
70
|
+
raw = readAttachmentBody(attachment.body);
|
|
71
|
+
}
|
|
72
|
+
else if (attachment.path && (0, node_fs_1.existsSync)(attachment.path)) {
|
|
73
|
+
raw = (0, node_fs_1.readFileSync)(attachment.path, "utf8");
|
|
74
|
+
}
|
|
75
|
+
if (!raw) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const parsed = JSON.parse(raw);
|
|
79
|
+
if (!Array.isArray(parsed.findings)) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const payloadHash = (0, core_1.hashObject)({
|
|
83
|
+
attachmentName: attachment.name,
|
|
84
|
+
version: parsed.version,
|
|
85
|
+
startedAt: parsed.startedAt,
|
|
86
|
+
finishedAt: parsed.finishedAt,
|
|
87
|
+
tool: parsed.tool,
|
|
88
|
+
findings: parsed.findings,
|
|
89
|
+
scanErrors: parsed.scanErrors ?? [],
|
|
90
|
+
metadata: parsed.metadata,
|
|
91
|
+
});
|
|
92
|
+
if (seenPayloadHashes.has(payloadHash)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
seenPayloadHashes.add(payloadHash);
|
|
96
|
+
const run = (0, core_1.createEmptyRun)({
|
|
97
|
+
metadata: parsed.metadata,
|
|
98
|
+
tool: parsed.tool,
|
|
99
|
+
startedAt: parsed.startedAt,
|
|
100
|
+
});
|
|
101
|
+
run.finishedAt = parsed.finishedAt;
|
|
102
|
+
run.findings.push(...parsed.findings);
|
|
103
|
+
run.scanErrors.push(...(Array.isArray(parsed.scanErrors) ? parsed.scanErrors : []));
|
|
104
|
+
runs.push((0, run_1.withRunShape)(run));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return runs;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/reporter/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/reporter/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReporterBaselineError = void 0;
|
|
4
|
+
class ReporterBaselineError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "ReporterBaselineError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.ReporterBaselineError = ReporterBaselineError;
|
|
11
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/reporter/errors.ts"],"names":[],"mappings":";;;AAAA,MAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AALD,sDAKC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FullConfig, FullResult, Reporter, TestCase, TestResult } from "@playwright/test/reporter";
|
|
2
|
+
import { TrailmarkReporterOptions } from "../types";
|
|
3
|
+
export declare const DEFAULT_BASELINE_PATH = ".trailmark/baseline.json";
|
|
4
|
+
export declare const DEFAULT_REPORT_PATH = ".trailmark/report.json";
|
|
5
|
+
export declare const CURRENT_RUN_PATH = ".trailmark/current-run.json";
|
|
6
|
+
type ReporterStatus = {
|
|
7
|
+
status: "passed" | "failed";
|
|
8
|
+
} | void;
|
|
9
|
+
export default class TrailmarkReporter implements Reporter {
|
|
10
|
+
private readonly options;
|
|
11
|
+
private config;
|
|
12
|
+
private sourceRuns;
|
|
13
|
+
private seenRunHashes;
|
|
14
|
+
private mergedRun;
|
|
15
|
+
constructor(options?: TrailmarkReporterOptions);
|
|
16
|
+
private syncFixtureEnv;
|
|
17
|
+
private createMergedRun;
|
|
18
|
+
private debug;
|
|
19
|
+
private appendRun;
|
|
20
|
+
private currentRunPayloadBase;
|
|
21
|
+
private computeConfigHash;
|
|
22
|
+
private emitCollisionWarnings;
|
|
23
|
+
private emitArtifactWarnings;
|
|
24
|
+
private handleScanErrors;
|
|
25
|
+
private runDiff;
|
|
26
|
+
private updateBaseline;
|
|
27
|
+
private reportArtifactIndex;
|
|
28
|
+
onBegin(config: FullConfig): void;
|
|
29
|
+
onTestEnd(_test: TestCase, result: TestResult): void;
|
|
30
|
+
onEnd(result: FullResult): Promise<ReporterStatus>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,MAAM,2BAA2B,CAAA;AAgBlC,OAAO,EAAiB,wBAAwB,EAAE,MAAM,UAAU,CAAA;AASlE,eAAO,MAAM,qBAAqB,6BAA6B,CAAA;AAC/D,eAAO,MAAM,mBAAmB,2BAA2B,CAAA;AAC3D,eAAO,MAAM,gBAAgB,gCAAgC,CAAA;AAc7D,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,GAAG,IAAI,CAAA;AAoH5D,MAAM,CAAC,OAAO,OAAO,iBAAkB,YAAW,QAAQ;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD,OAAO,CAAC,MAAM,CAAwB;IAEtC,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,aAAa,CAAoB;IAEzC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,OAAO,GAAE,wBAA6B;IAuBlD,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,SAAS;IAiDjB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,OAAO;IAuDf,OAAO,CAAC,cAAc;IA0EtB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAOjC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAM9C,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CA8EzD"}
|