@appsurify-testmap/rrweb-cypress-plugin 2.1.1-alpha.6

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.
@@ -0,0 +1,434 @@
1
+ (function (g, f) {
2
+ if ("object" == typeof exports && "object" == typeof module) {
3
+ module.exports = f();
4
+ } else if ("function" == typeof define && define.amd) {
5
+ define("rrweb-cypress-plugin", [], f);
6
+ } else if ("object" == typeof exports) {
7
+ exports["rrweb-cypress-plugin"] = f();
8
+ } else {
9
+ g["rrweb-cypress-plugin"] = f();
10
+ }
11
+ }(this, () => {
12
+ var exports = {};
13
+ var module = { exports };
14
+ "use strict";
15
+ var __defProp = Object.defineProperty;
16
+ var __defProps = Object.defineProperties;
17
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
18
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
19
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
20
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
21
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
22
+ var __spreadValues = (a, b) => {
23
+ for (var prop in b || (b = {}))
24
+ if (__hasOwnProp.call(b, prop))
25
+ __defNormalProp(a, prop, b[prop]);
26
+ if (__getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(b)) {
28
+ if (__propIsEnum.call(b, prop))
29
+ __defNormalProp(a, prop, b[prop]);
30
+ }
31
+ return a;
32
+ };
33
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
34
+ const path = require("path");
35
+ const fs = require("fs");
36
+ function _interopNamespaceDefault(e) {
37
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
38
+ if (e) {
39
+ for (const k in e) {
40
+ if (k !== "default") {
41
+ const d = Object.getOwnPropertyDescriptor(e, k);
42
+ Object.defineProperty(n, k, d.get ? d : {
43
+ enumerable: true,
44
+ get: () => e[k]
45
+ });
46
+ }
47
+ }
48
+ }
49
+ n.default = e;
50
+ return Object.freeze(n);
51
+ }
52
+ const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
53
+ const fs__namespace = /* @__PURE__ */ _interopNamespaceDefault(fs);
54
+ var EventType = /* @__PURE__ */ ((EventType2) => {
55
+ EventType2[EventType2["DomContentLoaded"] = 0] = "DomContentLoaded";
56
+ EventType2[EventType2["Load"] = 1] = "Load";
57
+ EventType2[EventType2["FullSnapshot"] = 2] = "FullSnapshot";
58
+ EventType2[EventType2["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
59
+ EventType2[EventType2["Meta"] = 4] = "Meta";
60
+ EventType2[EventType2["Custom"] = 5] = "Custom";
61
+ EventType2[EventType2["Plugin"] = 6] = "Plugin";
62
+ return EventType2;
63
+ })(EventType || {});
64
+ var IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {
65
+ IncrementalSource2[IncrementalSource2["Mutation"] = 0] = "Mutation";
66
+ IncrementalSource2[IncrementalSource2["MouseMove"] = 1] = "MouseMove";
67
+ IncrementalSource2[IncrementalSource2["MouseInteraction"] = 2] = "MouseInteraction";
68
+ IncrementalSource2[IncrementalSource2["Scroll"] = 3] = "Scroll";
69
+ IncrementalSource2[IncrementalSource2["ViewportResize"] = 4] = "ViewportResize";
70
+ IncrementalSource2[IncrementalSource2["Input"] = 5] = "Input";
71
+ IncrementalSource2[IncrementalSource2["TouchMove"] = 6] = "TouchMove";
72
+ IncrementalSource2[IncrementalSource2["MediaInteraction"] = 7] = "MediaInteraction";
73
+ IncrementalSource2[IncrementalSource2["StyleSheetRule"] = 8] = "StyleSheetRule";
74
+ IncrementalSource2[IncrementalSource2["CanvasMutation"] = 9] = "CanvasMutation";
75
+ IncrementalSource2[IncrementalSource2["Font"] = 10] = "Font";
76
+ IncrementalSource2[IncrementalSource2["Log"] = 11] = "Log";
77
+ IncrementalSource2[IncrementalSource2["Drag"] = 12] = "Drag";
78
+ IncrementalSource2[IncrementalSource2["StyleDeclaration"] = 13] = "StyleDeclaration";
79
+ IncrementalSource2[IncrementalSource2["Selection"] = 14] = "Selection";
80
+ IncrementalSource2[IncrementalSource2["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet";
81
+ IncrementalSource2[IncrementalSource2["CustomElement"] = 16] = "CustomElement";
82
+ IncrementalSource2[IncrementalSource2["VisibilityMutation"] = 17] = "VisibilityMutation";
83
+ return IncrementalSource2;
84
+ })(IncrementalSource || {});
85
+ var MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {
86
+ MouseInteractions2[MouseInteractions2["MouseUp"] = 0] = "MouseUp";
87
+ MouseInteractions2[MouseInteractions2["MouseDown"] = 1] = "MouseDown";
88
+ MouseInteractions2[MouseInteractions2["Click"] = 2] = "Click";
89
+ MouseInteractions2[MouseInteractions2["ContextMenu"] = 3] = "ContextMenu";
90
+ MouseInteractions2[MouseInteractions2["DblClick"] = 4] = "DblClick";
91
+ MouseInteractions2[MouseInteractions2["Focus"] = 5] = "Focus";
92
+ MouseInteractions2[MouseInteractions2["Blur"] = 6] = "Blur";
93
+ MouseInteractions2[MouseInteractions2["TouchStart"] = 7] = "TouchStart";
94
+ MouseInteractions2[MouseInteractions2["TouchMove_Departed"] = 8] = "TouchMove_Departed";
95
+ MouseInteractions2[MouseInteractions2["TouchEnd"] = 9] = "TouchEnd";
96
+ MouseInteractions2[MouseInteractions2["TouchCancel"] = 10] = "TouchCancel";
97
+ return MouseInteractions2;
98
+ })(MouseInteractions || {});
99
+ var MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {
100
+ MediaInteractions2[MediaInteractions2["Play"] = 0] = "Play";
101
+ MediaInteractions2[MediaInteractions2["Pause"] = 1] = "Pause";
102
+ MediaInteractions2[MediaInteractions2["Seeked"] = 2] = "Seeked";
103
+ MediaInteractions2[MediaInteractions2["VolumeChange"] = 3] = "VolumeChange";
104
+ MediaInteractions2[MediaInteractions2["RateChange"] = 4] = "RateChange";
105
+ return MediaInteractions2;
106
+ })(MediaInteractions || {});
107
+ var NodeType = /* @__PURE__ */ ((NodeType2) => {
108
+ NodeType2[NodeType2["Document"] = 0] = "Document";
109
+ NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
110
+ NodeType2[NodeType2["Element"] = 2] = "Element";
111
+ NodeType2[NodeType2["Text"] = 3] = "Text";
112
+ NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
113
+ NodeType2[NodeType2["Comment"] = 5] = "Comment";
114
+ return NodeType2;
115
+ })(NodeType || {});
116
+ function extractElementNodes(node) {
117
+ const flat = [];
118
+ function walk(n) {
119
+ var _a, _b, _c, _d, _e, _f;
120
+ if ((n == null ? void 0 : n.type) === NodeType.Element) {
121
+ flat.push({
122
+ id: n.id,
123
+ tagName: n.tagName,
124
+ xpath: (_a = n.xpath) != null ? _a : void 0,
125
+ isVisible: (_b = n.isVisible) != null ? _b : false,
126
+ isInteractive: (_c = n.isInteractive) != null ? _c : false,
127
+ selector: (_d = n.selector) != null ? _d : void 0,
128
+ attributes: (_e = n.attributes) != null ? _e : {}
129
+ });
130
+ }
131
+ for (const child of (_f = n.childNodes) != null ? _f : []) {
132
+ walk(child);
133
+ }
134
+ }
135
+ walk(node);
136
+ return flat;
137
+ }
138
+ function hasNodeId(data) {
139
+ return typeof data === "object" && data !== null && "id" in data && typeof data.id === "number";
140
+ }
141
+ function extractActionFromSnapshot(events, nodeMap) {
142
+ var _a2;
143
+ var _a, _b;
144
+ const logs = [];
145
+ for (const e of events) {
146
+ if (e.type !== EventType.IncrementalSnapshot) continue;
147
+ const eventId = e == null ? void 0 : e.id;
148
+ const data = e.data;
149
+ if (data.source === IncrementalSource.MouseMove || data.source === IncrementalSource.TouchMove) {
150
+ const positions = data.positions;
151
+ for (const pos of positions) {
152
+ const node2 = nodeMap.get(pos.id);
153
+ if (!node2) continue;
154
+ logs.push({
155
+ id: eventId,
156
+ timestamp: e.timestamp + pos.timeOffset,
157
+ source: data.source,
158
+ action: "hover",
159
+ nodeMeta: node2,
160
+ position: { x: pos.x, y: pos.y }
161
+ });
162
+ }
163
+ continue;
164
+ }
165
+ const nodeId = hasNodeId(data) ? data.id : -2;
166
+ const node = nodeMap.get(nodeId);
167
+ if (!node) continue;
168
+ let action = null;
169
+ let value;
170
+ let position;
171
+ switch (data.source) {
172
+ case IncrementalSource.MouseInteraction: {
173
+ if (data.x && data.y) {
174
+ value = `x=${data.x}, y=${data.y}`;
175
+ position = { x: data.x, y: data.y };
176
+ }
177
+ switch (data.type) {
178
+ case MouseInteractions.Click:
179
+ action = "click";
180
+ break;
181
+ case MouseInteractions.DblClick:
182
+ action = "dblclick";
183
+ break;
184
+ case MouseInteractions.ContextMenu:
185
+ action = "contextmenu";
186
+ break;
187
+ case MouseInteractions.MouseDown:
188
+ action = "mousedown";
189
+ break;
190
+ case MouseInteractions.MouseUp:
191
+ action = "mouseup";
192
+ break;
193
+ case MouseInteractions.Focus:
194
+ action = "focus";
195
+ break;
196
+ case MouseInteractions.Blur:
197
+ action = "blur";
198
+ break;
199
+ }
200
+ break;
201
+ }
202
+ case IncrementalSource.Input: {
203
+ const tag = (_a = node.tagName) == null ? void 0 : _a.toLowerCase();
204
+ const rawType = (_b = node.attributes) == null ? void 0 : _b["type"];
205
+ const type = typeof rawType === "string" ? rawType.toLowerCase() : void 0;
206
+ const isCheckboxOrRadio = tag === "input" && (type === "checkbox" || type === "radio");
207
+ const isTextLike = tag === "input" || tag === "textarea";
208
+ const isSelect = tag === "select";
209
+ if (isCheckboxOrRadio) {
210
+ action = "check";
211
+ value = data.isChecked;
212
+ } else if (isSelect) {
213
+ action = "select";
214
+ value = data.text;
215
+ } else if (isTextLike) {
216
+ action = "type";
217
+ value = data.text;
218
+ } else {
219
+ action = "type";
220
+ value = (_a2 = data.text) != null ? _a2 : data.isChecked;
221
+ }
222
+ break;
223
+ }
224
+ case IncrementalSource.Scroll: {
225
+ action = "scroll";
226
+ value = `x=${data.x}, y=${data.y}`;
227
+ position = { x: data.x, y: data.y };
228
+ break;
229
+ }
230
+ case IncrementalSource.Selection: {
231
+ action = "select";
232
+ break;
233
+ }
234
+ case IncrementalSource.MediaInteraction: {
235
+ switch (data.type) {
236
+ case MediaInteractions.Play:
237
+ action = "play";
238
+ break;
239
+ case MediaInteractions.Pause:
240
+ action = "pause";
241
+ break;
242
+ case MediaInteractions.Seeked:
243
+ action = "seek";
244
+ break;
245
+ case MediaInteractions.VolumeChange:
246
+ action = "volume";
247
+ break;
248
+ }
249
+ break;
250
+ }
251
+ default:
252
+ continue;
253
+ }
254
+ if (action) {
255
+ logs.push({
256
+ id: eventId,
257
+ timestamp: e.timestamp,
258
+ source: data.source,
259
+ action,
260
+ nodeMeta: node,
261
+ value,
262
+ position
263
+ });
264
+ }
265
+ }
266
+ return logs;
267
+ }
268
+ function generateReport({
269
+ events,
270
+ metadata
271
+ }) {
272
+ const pages = createPages(events);
273
+ return {
274
+ metadata,
275
+ pages
276
+ };
277
+ }
278
+ function createPages(events) {
279
+ const eventGroups = [];
280
+ let currentGroup = null;
281
+ for (const event of events) {
282
+ if (event.type === EventType.Meta) {
283
+ currentGroup = { meta: event, events: [] };
284
+ eventGroups.push(currentGroup);
285
+ } else if (currentGroup) {
286
+ currentGroup.events.push(event);
287
+ }
288
+ }
289
+ const pageMap = /* @__PURE__ */ new Map();
290
+ let snapshotIndex = 0;
291
+ for (const { meta, events: events2 } of eventGroups) {
292
+ const metaData = meta.data;
293
+ const href = metaData.href;
294
+ if (!pageMap.has(href)) {
295
+ pageMap.set(href, {
296
+ id: `page-${pageMap.size}`,
297
+ href,
298
+ snapshots: [],
299
+ totalElementCount: 0,
300
+ interactedElementCount: 0,
301
+ coverageRatio: 0,
302
+ coveragePercent: 0
303
+ });
304
+ }
305
+ const page = pageMap.get(href);
306
+ let buffer = [];
307
+ let currentFull = null;
308
+ for (const event of events2) {
309
+ if (event.type === EventType.FullSnapshot) {
310
+ if (currentFull && buffer.length > 0) {
311
+ const snapshotEvents = [meta, currentFull, ...buffer];
312
+ page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));
313
+ }
314
+ currentFull = event;
315
+ buffer = [];
316
+ } else {
317
+ buffer.push(event);
318
+ }
319
+ }
320
+ if (currentFull) {
321
+ const snapshotEvents = [meta, currentFull, ...buffer];
322
+ page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));
323
+ }
324
+ const allVisible = /* @__PURE__ */ new Map();
325
+ const allInteracted = /* @__PURE__ */ new Map();
326
+ for (const snap of page.snapshots) {
327
+ for (const el of snap.totalElements) {
328
+ allVisible.set(el.id, el);
329
+ }
330
+ for (const el of snap.interactedElements) {
331
+ allInteracted.set(el.id, el);
332
+ }
333
+ }
334
+ page.totalElementCount = allVisible.size;
335
+ page.interactedElementCount = allInteracted.size;
336
+ page.coverageRatio = allVisible.size > 0 ? allInteracted.size / allVisible.size : 0;
337
+ page.coveragePercent = Math.round(page.coverageRatio * 1e4) / 100;
338
+ }
339
+ return Array.from(pageMap.values());
340
+ }
341
+ function createSnapshot(events, snapshotIndex) {
342
+ var _a;
343
+ const id = `snap-${snapshotIndex}`;
344
+ const fullSnapshot = events.find((e) => e.type === EventType.FullSnapshot);
345
+ const fullDom = fullSnapshot == null ? void 0 : fullSnapshot.data.node;
346
+ const elements = fullDom ? extractElementNodes(fullDom) : [];
347
+ const visibleElements = elements.filter((n) => n == null ? void 0 : n.isVisible);
348
+ const visibleInteractiveElements = visibleElements.filter((n) => n == null ? void 0 : n.isInteractive);
349
+ const nodeMap = /* @__PURE__ */ new Map();
350
+ for (const el of visibleElements) {
351
+ if (el.id != null) {
352
+ nodeMap.set(el.id, el);
353
+ }
354
+ }
355
+ const actions = extractActionFromSnapshot(events, nodeMap);
356
+ const actionMap = /* @__PURE__ */ new Map();
357
+ for (const action of actions) {
358
+ const nodeMeta = action.nodeMeta;
359
+ if (!nodeMeta) continue;
360
+ if (!actionMap.has(nodeMeta)) actionMap.set(nodeMeta, []);
361
+ (_a = actionMap.get(nodeMeta)) == null ? void 0 : _a.push(__spreadProps(__spreadValues({}, action), {
362
+ nodeMeta: void 0
363
+ }));
364
+ }
365
+ const interactedElements = [];
366
+ actionMap.forEach((_actions, nodeMeta) => {
367
+ interactedElements.push(nodeMeta);
368
+ });
369
+ const totalCount = visibleInteractiveElements.length;
370
+ const interactedCount = interactedElements.length;
371
+ const ratio = totalCount > 0 ? interactedCount / totalCount : 0;
372
+ const percent = Math.round(ratio * 1e4) / 100;
373
+ return {
374
+ id,
375
+ events,
376
+ actions,
377
+ totalElements: visibleInteractiveElements,
378
+ interactedElements,
379
+ totalElementCount: totalCount,
380
+ interactedElementCount: interactedCount,
381
+ coverageRatio: ratio,
382
+ coveragePercent: percent
383
+ };
384
+ }
385
+ let pluginConfig = {
386
+ outputUIReportDir: "results/ui",
387
+ includeHtml: false,
388
+ compress: false,
389
+ upload: false,
390
+ uploadUrl: "",
391
+ projectId: "",
392
+ apiKey: ""
393
+ };
394
+ function sanitizeFileNamePart(name) {
395
+ return (name != null ? name : "").trim().replace(/[\s:/\\<>|"'?*]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
396
+ }
397
+ function registerRRWebReportTasks(on, config) {
398
+ pluginConfig = __spreadValues(__spreadValues({}, pluginConfig), config);
399
+ on("task", {
400
+ saveRRWebReport(testRunResult) {
401
+ var _a;
402
+ const specName = sanitizeFileNamePart(testRunResult.spec.name);
403
+ const suiteTitle = sanitizeFileNamePart((_a = testRunResult.test.suite) == null ? void 0 : _a.title);
404
+ const testTitle = sanitizeFileNamePart(testRunResult.test.title);
405
+ const jsonFileName = `${suiteTitle ? suiteTitle + "-" : ""}${testTitle}.json`;
406
+ const jsonFilePath = path__namespace.join(pluginConfig.outputUIReportDir, specName, jsonFileName);
407
+ const report = generateReport({ events: testRunResult.recorderEvents });
408
+ fs__namespace.mkdirSync(pluginConfig.outputUIReportDir, { recursive: true });
409
+ fs__namespace.mkdirSync(path__namespace.dirname(jsonFilePath), { recursive: true });
410
+ fs__namespace.writeFileSync(jsonFilePath, JSON.stringify(report, null, 2), "utf-8");
411
+ console.log(`[ui-coverage] Saved report to ${jsonFilePath}`);
412
+ return null;
413
+ }
414
+ });
415
+ }
416
+ module.exports = registerRRWebReportTasks;
417
+ if (typeof module.exports == "object" && typeof exports == "object") {
418
+ var __cp = (to, from, except, desc) => {
419
+ if ((from && typeof from === "object") || typeof from === "function") {
420
+ for (let key of Object.getOwnPropertyNames(from)) {
421
+ if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
422
+ Object.defineProperty(to, key, {
423
+ get: () => from[key],
424
+ enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
425
+ });
426
+ }
427
+ }
428
+ return to;
429
+ };
430
+ module.exports = __cp(module.exports, exports);
431
+ }
432
+ return module.exports;
433
+ }))
434
+ //# sourceMappingURL=rrweb-cypress-plugin-reporter.umd.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../rrweb-ui-report/dist/rrweb-ui-report.js", "../src/reporter.ts"],
4
+ "sourcesContent": ["var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n IncrementalSource2[IncrementalSource2[\"VisibilityMutation\"] = 17] = \"VisibilityMutation\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nfunction extractElementNodes(node) {\n const flat = [];\n function walk(n) {\n if ((n == null ? void 0 : n.type) === NodeType.Element) {\n flat.push({\n id: n.id,\n tagName: n.tagName,\n xpath: n.xpath ?? void 0,\n isVisible: n.isVisible ?? false,\n isInteractive: n.isInteractive ?? false,\n selector: n.selector ?? void 0,\n attributes: n.attributes ?? {}\n });\n }\n for (const child of n.childNodes ?? []) {\n walk(child);\n }\n }\n walk(node);\n return flat;\n}\nfunction hasNodeId(data) {\n return typeof data === \"object\" && data !== null && \"id\" in data && typeof data.id === \"number\";\n}\nfunction extractActionFromSnapshot(events, nodeMap) {\n var _a, _b;\n const logs = [];\n for (const e of events) {\n if (e.type !== EventType.IncrementalSnapshot) continue;\n const eventId = e == null ? void 0 : e.id;\n const data = e.data;\n if (data.source === IncrementalSource.MouseMove || data.source === IncrementalSource.TouchMove) {\n const positions = data.positions;\n for (const pos of positions) {\n const node2 = nodeMap.get(pos.id);\n if (!node2) continue;\n logs.push({\n id: eventId,\n timestamp: e.timestamp + pos.timeOffset,\n source: data.source,\n action: \"hover\",\n nodeMeta: node2,\n position: { x: pos.x, y: pos.y }\n });\n }\n continue;\n }\n const nodeId = hasNodeId(data) ? data.id : -2;\n const node = nodeMap.get(nodeId);\n if (!node) continue;\n let action = null;\n let value;\n let position;\n switch (data.source) {\n case IncrementalSource.MouseInteraction: {\n if (data.x && data.y) {\n value = `x=${data.x}, y=${data.y}`;\n position = { x: data.x, y: data.y };\n }\n switch (data.type) {\n case MouseInteractions.Click:\n action = \"click\";\n break;\n case MouseInteractions.DblClick:\n action = \"dblclick\";\n break;\n case MouseInteractions.ContextMenu:\n action = \"contextmenu\";\n break;\n case MouseInteractions.MouseDown:\n action = \"mousedown\";\n break;\n case MouseInteractions.MouseUp:\n action = \"mouseup\";\n break;\n case MouseInteractions.Focus:\n action = \"focus\";\n break;\n case MouseInteractions.Blur:\n action = \"blur\";\n break;\n }\n break;\n }\n case IncrementalSource.Input: {\n const tag = (_a = node.tagName) == null ? void 0 : _a.toLowerCase();\n const rawType = (_b = node.attributes) == null ? void 0 : _b[\"type\"];\n const type = typeof rawType === \"string\" ? rawType.toLowerCase() : void 0;\n const isCheckboxOrRadio = tag === \"input\" && (type === \"checkbox\" || type === \"radio\");\n const isTextLike = tag === \"input\" || tag === \"textarea\";\n const isSelect = tag === \"select\";\n if (isCheckboxOrRadio) {\n action = \"check\";\n value = data.isChecked;\n } else if (isSelect) {\n action = \"select\";\n value = data.text;\n } else if (isTextLike) {\n action = \"type\";\n value = data.text;\n } else {\n action = \"type\";\n value = data.text ?? data.isChecked;\n }\n break;\n }\n case IncrementalSource.Scroll: {\n action = \"scroll\";\n value = `x=${data.x}, y=${data.y}`;\n position = { x: data.x, y: data.y };\n break;\n }\n case IncrementalSource.Selection: {\n action = \"select\";\n break;\n }\n case IncrementalSource.MediaInteraction: {\n switch (data.type) {\n case MediaInteractions.Play:\n action = \"play\";\n break;\n case MediaInteractions.Pause:\n action = \"pause\";\n break;\n case MediaInteractions.Seeked:\n action = \"seek\";\n break;\n case MediaInteractions.VolumeChange:\n action = \"volume\";\n break;\n }\n break;\n }\n default:\n continue;\n }\n if (action) {\n logs.push({\n id: eventId,\n timestamp: e.timestamp,\n source: data.source,\n action,\n nodeMeta: node,\n value,\n position\n });\n }\n }\n return logs;\n}\nfunction generateReport({\n events,\n metadata\n}) {\n const pages = createPages(events);\n return {\n metadata,\n pages\n };\n}\nfunction createPages(events) {\n const eventGroups = [];\n let currentGroup = null;\n for (const event of events) {\n if (event.type === EventType.Meta) {\n currentGroup = { meta: event, events: [] };\n eventGroups.push(currentGroup);\n } else if (currentGroup) {\n currentGroup.events.push(event);\n }\n }\n const pageMap = /* @__PURE__ */ new Map();\n let snapshotIndex = 0;\n for (const { meta, events: events2 } of eventGroups) {\n const metaData = meta.data;\n const href = metaData.href;\n if (!pageMap.has(href)) {\n pageMap.set(href, {\n id: `page-${pageMap.size}`,\n href,\n snapshots: [],\n totalElementCount: 0,\n interactedElementCount: 0,\n coverageRatio: 0,\n coveragePercent: 0\n });\n }\n const page = pageMap.get(href);\n let buffer = [];\n let currentFull = null;\n for (const event of events2) {\n if (event.type === EventType.FullSnapshot) {\n if (currentFull && buffer.length > 0) {\n const snapshotEvents = [meta, currentFull, ...buffer];\n page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));\n }\n currentFull = event;\n buffer = [];\n } else {\n buffer.push(event);\n }\n }\n if (currentFull) {\n const snapshotEvents = [meta, currentFull, ...buffer];\n page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));\n }\n const allVisible = /* @__PURE__ */ new Map();\n const allInteracted = /* @__PURE__ */ new Map();\n for (const snap of page.snapshots) {\n for (const el of snap.totalElements) {\n allVisible.set(el.id, el);\n }\n for (const el of snap.interactedElements) {\n allInteracted.set(el.id, el);\n }\n }\n page.totalElementCount = allVisible.size;\n page.interactedElementCount = allInteracted.size;\n page.coverageRatio = allVisible.size > 0 ? allInteracted.size / allVisible.size : 0;\n page.coveragePercent = Math.round(page.coverageRatio * 1e4) / 100;\n }\n return Array.from(pageMap.values());\n}\nfunction createSnapshot(events, snapshotIndex) {\n var _a;\n const id = `snap-${snapshotIndex}`;\n const fullSnapshot = events.find((e) => e.type === EventType.FullSnapshot);\n const fullDom = fullSnapshot == null ? void 0 : fullSnapshot.data.node;\n const elements = fullDom ? extractElementNodes(fullDom) : [];\n const visibleElements = elements.filter((n) => n == null ? void 0 : n.isVisible);\n const visibleInteractiveElements = visibleElements.filter((n) => n == null ? void 0 : n.isInteractive);\n const nodeMap = /* @__PURE__ */ new Map();\n for (const el of visibleElements) {\n if (el.id != null) {\n nodeMap.set(el.id, el);\n }\n }\n const actions = extractActionFromSnapshot(events, nodeMap);\n const actionMap = /* @__PURE__ */ new Map();\n for (const action of actions) {\n const nodeMeta = action.nodeMeta;\n if (!nodeMeta) continue;\n if (!actionMap.has(nodeMeta)) actionMap.set(nodeMeta, []);\n (_a = actionMap.get(nodeMeta)) == null ? void 0 : _a.push({\n ...action,\n nodeMeta: void 0\n });\n }\n const interactedElements = [];\n actionMap.forEach((_actions, nodeMeta) => {\n interactedElements.push(nodeMeta);\n });\n const totalCount = visibleInteractiveElements.length;\n const interactedCount = interactedElements.length;\n const ratio = totalCount > 0 ? interactedCount / totalCount : 0;\n const percent = Math.round(ratio * 1e4) / 100;\n return {\n id,\n events,\n actions,\n totalElements: visibleInteractiveElements,\n interactedElements,\n totalElementCount: totalCount,\n interactedElementCount: interactedCount,\n coverageRatio: ratio,\n coveragePercent: percent\n };\n}\nexport {\n generateReport as default\n};\n//# sourceMappingURL=rrweb-ui-report.js.map\n", "/// <reference types=\"cypress\" />\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport type { TestRunResult } from \"./types\";\nimport generateReport from '@appsurify-testmap/rrweb-ui-report';\n\n\nlet pluginConfig: {\n outputUIReportDir: string;\n includeHtml: boolean;\n compress: boolean;\n upload: boolean;\n uploadUrl: string;\n projectId: string;\n apiKey: string;\n} = {\n outputUIReportDir: 'results/ui',\n includeHtml: false,\n compress: false,\n upload: false,\n uploadUrl: '',\n projectId: '',\n apiKey: ''\n};\n\nfunction sanitizeFileNamePart(name: string | undefined): string {\n return (name ?? '')\n .trim()\n .replace(/[\\s:/\\\\<>|\"'?*]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nexport default function registerRRWebReportTasks(on: Cypress.PluginEvents, config?: Partial<typeof pluginConfig>) {\n pluginConfig = { ...pluginConfig, ...config };\n\n on('task', {\n saveRRWebReport(testRunResult: TestRunResult) {\n const specName = sanitizeFileNamePart(testRunResult.spec.name);\n const suiteTitle = sanitizeFileNamePart(testRunResult.test.suite?.title);\n const testTitle = sanitizeFileNamePart(testRunResult.test.title);\n const jsonFileName = `${suiteTitle ? suiteTitle + '-' : ''}${testTitle}.json`;\n const jsonFilePath = path.join(pluginConfig.outputUIReportDir, specName, jsonFileName);\n const report = generateReport({ events: testRunResult.recorderEvents });\n fs.mkdirSync(pluginConfig.outputUIReportDir, { recursive: true });\n fs.mkdirSync(path.dirname(jsonFilePath), { recursive: true });\n fs.writeFileSync(jsonFilePath, JSON.stringify(report, null, 2), 'utf-8');\n console.log(`[ui-coverage] Saved report to ${jsonFilePath}`);\n return null;\n }\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["_a", "path", "fs"]
7
+ }
@@ -0,0 +1,32 @@
1
+ (function (g, f) {
2
+ if ("object" == typeof exports && "object" == typeof module) {
3
+ module.exports = f();
4
+ } else if ("function" == typeof define && define.amd) {
5
+ define("rrweb-cypress-plugin", [], f);
6
+ } else if ("object" == typeof exports) {
7
+ exports["rrweb-cypress-plugin"] = f();
8
+ } else {
9
+ g["rrweb-cypress-plugin"] = f();
10
+ }
11
+ }(this, () => {
12
+ var exports = {};
13
+ var module = { exports };
14
+ "use strict";var L=Object.defineProperty,$=Object.defineProperties;var O=Object.getOwnPropertyDescriptors;var R=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable;var F=(t,s,o)=>s in t?L(t,s,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[s]=o,y=(t,s)=>{for(var o in s||(s={}))A.call(s,o)&&F(t,o,s[o]);if(R)for(var o of R(s))U.call(s,o)&&F(t,o,s[o]);return t},_=(t,s)=>$(t,O(s));const S=require("path"),B=require("fs");function j(t){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const o in t)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(s,o,a.get?a:{enumerable:!0,get:()=>t[o]})}}return s.default=t,Object.freeze(s)}const E=j(S),M=j(B);var D=(t=>(t[t.DomContentLoaded=0]="DomContentLoaded",t[t.Load=1]="Load",t[t.FullSnapshot=2]="FullSnapshot",t[t.IncrementalSnapshot=3]="IncrementalSnapshot",t[t.Meta=4]="Meta",t[t.Custom=5]="Custom",t[t.Plugin=6]="Plugin",t))(D||{}),b=(t=>(t[t.Mutation=0]="Mutation",t[t.MouseMove=1]="MouseMove",t[t.MouseInteraction=2]="MouseInteraction",t[t.Scroll=3]="Scroll",t[t.ViewportResize=4]="ViewportResize",t[t.Input=5]="Input",t[t.TouchMove=6]="TouchMove",t[t.MediaInteraction=7]="MediaInteraction",t[t.StyleSheetRule=8]="StyleSheetRule",t[t.CanvasMutation=9]="CanvasMutation",t[t.Font=10]="Font",t[t.Log=11]="Log",t[t.Drag=12]="Drag",t[t.StyleDeclaration=13]="StyleDeclaration",t[t.Selection=14]="Selection",t[t.AdoptedStyleSheet=15]="AdoptedStyleSheet",t[t.CustomElement=16]="CustomElement",t[t.VisibilityMutation=17]="VisibilityMutation",t))(b||{}),C=(t=>(t[t.MouseUp=0]="MouseUp",t[t.MouseDown=1]="MouseDown",t[t.Click=2]="Click",t[t.ContextMenu=3]="ContextMenu",t[t.DblClick=4]="DblClick",t[t.Focus=5]="Focus",t[t.Blur=6]="Blur",t[t.TouchStart=7]="TouchStart",t[t.TouchMove_Departed=8]="TouchMove_Departed",t[t.TouchEnd=9]="TouchEnd",t[t.TouchCancel=10]="TouchCancel",t))(C||{}),x=(t=>(t[t.Play=0]="Play",t[t.Pause=1]="Pause",t[t.Seeked=2]="Seeked",t[t.VolumeChange=3]="VolumeChange",t[t.RateChange=4]="RateChange",t))(x||{}),z=(t=>(t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment",t))(z||{});function q(t){const s=[];function o(a){var d,n,h,g,e,l;(a==null?void 0:a.type)===z.Element&&s.push({id:a.id,tagName:a.tagName,xpath:(d=a.xpath)!=null?d:void 0,isVisible:(n=a.isVisible)!=null?n:!1,isInteractive:(h=a.isInteractive)!=null?h:!1,selector:(g=a.selector)!=null?g:void 0,attributes:(e=a.attributes)!=null?e:{}});for(const f of(l=a.childNodes)!=null?l:[])o(f)}return o(t),s}function G(t){return typeof t=="object"&&t!==null&&"id"in t&&typeof t.id=="number"}function W(t,s){var n;var o,a;const d=[];for(const h of t){if(h.type!==D.IncrementalSnapshot)continue;const g=h==null?void 0:h.id,e=h.data;if(e.source===b.MouseMove||e.source===b.TouchMove){const c=e.positions;for(const u of c){const k=s.get(u.id);k&&d.push({id:g,timestamp:h.timestamp+u.timeOffset,source:e.source,action:"hover",nodeMeta:k,position:{x:u.x,y:u.y}})}continue}const l=G(e)?e.id:-2,f=s.get(l);if(!f)continue;let i=null,r,v;switch(e.source){case b.MouseInteraction:{switch(e.x&&e.y&&(r=`x=${e.x}, y=${e.y}`,v={x:e.x,y:e.y}),e.type){case C.Click:i="click";break;case C.DblClick:i="dblclick";break;case C.ContextMenu:i="contextmenu";break;case C.MouseDown:i="mousedown";break;case C.MouseUp:i="mouseup";break;case C.Focus:i="focus";break;case C.Blur:i="blur";break}break}case b.Input:{const c=(o=f.tagName)==null?void 0:o.toLowerCase(),u=(a=f.attributes)==null?void 0:a.type,k=typeof u=="string"?u.toLowerCase():void 0;c==="input"&&(k==="checkbox"||k==="radio")?(i="check",r=e.isChecked):c==="select"?(i="select",r=e.text):c==="input"||c==="textarea"?(i="type",r=e.text):(i="type",r=(n=e.text)!=null?n:e.isChecked);break}case b.Scroll:{i="scroll",r=`x=${e.x}, y=${e.y}`,v={x:e.x,y:e.y};break}case b.Selection:{i="select";break}case b.MediaInteraction:{switch(e.type){case x.Play:i="play";break;case x.Pause:i="pause";break;case x.Seeked:i="seek";break;case x.VolumeChange:i="volume";break}break}default:continue}i&&d.push({id:g,timestamp:h.timestamp,source:e.source,action:i,nodeMeta:f,value:r,position:v})}return d}function H({events:t,metadata:s}){const o=J(t);return{metadata:s,pages:o}}function J(t){const s=[];let o=null;for(const n of t)n.type===D.Meta?(o={meta:n,events:[]},s.push(o)):o&&o.events.push(n);const a=new Map;let d=0;for(const{meta:n,events:h}of s){const e=n.data.href;a.has(e)||a.set(e,{id:`page-${a.size}`,href:e,snapshots:[],totalElementCount:0,interactedElementCount:0,coverageRatio:0,coveragePercent:0});const l=a.get(e);let f=[],i=null;for(const c of h)if(c.type===D.FullSnapshot){if(i&&f.length>0){const u=[n,i,...f];l.snapshots.push(V(u,d++))}i=c,f=[]}else f.push(c);if(i){const c=[n,i,...f];l.snapshots.push(V(c,d++))}const r=new Map,v=new Map;for(const c of l.snapshots){for(const u of c.totalElements)r.set(u.id,u);for(const u of c.interactedElements)v.set(u.id,u)}l.totalElementCount=r.size,l.interactedElementCount=v.size,l.coverageRatio=r.size>0?v.size/r.size:0,l.coveragePercent=Math.round(l.coverageRatio*1e4)/100}return Array.from(a.values())}function V(t,s){var o;const a=`snap-${s}`,d=t.find(p=>p.type===D.FullSnapshot),n=d==null?void 0:d.data.node,g=(n?q(n):[]).filter(p=>p==null?void 0:p.isVisible),e=g.filter(p=>p==null?void 0:p.isInteractive),l=new Map;for(const p of g)p.id!=null&&l.set(p.id,p);const f=W(t,l),i=new Map;for(const p of f){const m=p.nodeMeta;m&&(i.has(m)||i.set(m,[]),(o=i.get(m))==null||o.push(_(y({},p),{nodeMeta:void 0})))}const r=[];i.forEach((p,m)=>{r.push(m)});const v=e.length,c=r.length,u=v>0?c/v:0,k=Math.round(u*1e4)/100;return{id:a,events:t,actions:f,totalElements:e,interactedElements:r,totalElementCount:v,interactedElementCount:c,coverageRatio:u,coveragePercent:k}}let w={outputUIReportDir:"results/ui",includeHtml:!1,compress:!1,upload:!1,uploadUrl:"",projectId:"",apiKey:""};function P(t){return(t!=null?t:"").trim().replace(/[\s:/\\<>|"'?*]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}function K(t,s){w=y(y({},w),s),t("task",{saveRRWebReport(o){var a;const d=P(o.spec.name),n=P((a=o.test.suite)==null?void 0:a.title),h=P(o.test.title),g=`${n?n+"-":""}${h}.json`,e=E.join(w.outputUIReportDir,d,g),l=H({events:o.recorderEvents});return M.mkdirSync(w.outputUIReportDir,{recursive:!0}),M.mkdirSync(E.dirname(e),{recursive:!0}),M.writeFileSync(e,JSON.stringify(l,null,2),"utf-8"),console.log(`[ui-coverage] Saved report to ${e}`),null}})}module.exports=K;
15
+ if (typeof module.exports == "object" && typeof exports == "object") {
16
+ var __cp = (to, from, except, desc) => {
17
+ if ((from && typeof from === "object") || typeof from === "function") {
18
+ for (let key of Object.getOwnPropertyNames(from)) {
19
+ if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
20
+ Object.defineProperty(to, key, {
21
+ get: () => from[key],
22
+ enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
23
+ });
24
+ }
25
+ }
26
+ return to;
27
+ };
28
+ module.exports = __cp(module.exports, exports);
29
+ }
30
+ return module.exports;
31
+ }))
32
+ //# sourceMappingURL=rrweb-cypress-plugin-reporter.umd.min.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../rrweb-ui-report/dist/rrweb-ui-report.js", "../src/reporter.ts"],
4
+ "sourcesContent": ["var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n IncrementalSource2[IncrementalSource2[\"VisibilityMutation\"] = 17] = \"VisibilityMutation\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nfunction extractElementNodes(node) {\n const flat = [];\n function walk(n) {\n if ((n == null ? void 0 : n.type) === NodeType.Element) {\n flat.push({\n id: n.id,\n tagName: n.tagName,\n xpath: n.xpath ?? void 0,\n isVisible: n.isVisible ?? false,\n isInteractive: n.isInteractive ?? false,\n selector: n.selector ?? void 0,\n attributes: n.attributes ?? {}\n });\n }\n for (const child of n.childNodes ?? []) {\n walk(child);\n }\n }\n walk(node);\n return flat;\n}\nfunction hasNodeId(data) {\n return typeof data === \"object\" && data !== null && \"id\" in data && typeof data.id === \"number\";\n}\nfunction extractActionFromSnapshot(events, nodeMap) {\n var _a, _b;\n const logs = [];\n for (const e of events) {\n if (e.type !== EventType.IncrementalSnapshot) continue;\n const eventId = e == null ? void 0 : e.id;\n const data = e.data;\n if (data.source === IncrementalSource.MouseMove || data.source === IncrementalSource.TouchMove) {\n const positions = data.positions;\n for (const pos of positions) {\n const node2 = nodeMap.get(pos.id);\n if (!node2) continue;\n logs.push({\n id: eventId,\n timestamp: e.timestamp + pos.timeOffset,\n source: data.source,\n action: \"hover\",\n nodeMeta: node2,\n position: { x: pos.x, y: pos.y }\n });\n }\n continue;\n }\n const nodeId = hasNodeId(data) ? data.id : -2;\n const node = nodeMap.get(nodeId);\n if (!node) continue;\n let action = null;\n let value;\n let position;\n switch (data.source) {\n case IncrementalSource.MouseInteraction: {\n if (data.x && data.y) {\n value = `x=${data.x}, y=${data.y}`;\n position = { x: data.x, y: data.y };\n }\n switch (data.type) {\n case MouseInteractions.Click:\n action = \"click\";\n break;\n case MouseInteractions.DblClick:\n action = \"dblclick\";\n break;\n case MouseInteractions.ContextMenu:\n action = \"contextmenu\";\n break;\n case MouseInteractions.MouseDown:\n action = \"mousedown\";\n break;\n case MouseInteractions.MouseUp:\n action = \"mouseup\";\n break;\n case MouseInteractions.Focus:\n action = \"focus\";\n break;\n case MouseInteractions.Blur:\n action = \"blur\";\n break;\n }\n break;\n }\n case IncrementalSource.Input: {\n const tag = (_a = node.tagName) == null ? void 0 : _a.toLowerCase();\n const rawType = (_b = node.attributes) == null ? void 0 : _b[\"type\"];\n const type = typeof rawType === \"string\" ? rawType.toLowerCase() : void 0;\n const isCheckboxOrRadio = tag === \"input\" && (type === \"checkbox\" || type === \"radio\");\n const isTextLike = tag === \"input\" || tag === \"textarea\";\n const isSelect = tag === \"select\";\n if (isCheckboxOrRadio) {\n action = \"check\";\n value = data.isChecked;\n } else if (isSelect) {\n action = \"select\";\n value = data.text;\n } else if (isTextLike) {\n action = \"type\";\n value = data.text;\n } else {\n action = \"type\";\n value = data.text ?? data.isChecked;\n }\n break;\n }\n case IncrementalSource.Scroll: {\n action = \"scroll\";\n value = `x=${data.x}, y=${data.y}`;\n position = { x: data.x, y: data.y };\n break;\n }\n case IncrementalSource.Selection: {\n action = \"select\";\n break;\n }\n case IncrementalSource.MediaInteraction: {\n switch (data.type) {\n case MediaInteractions.Play:\n action = \"play\";\n break;\n case MediaInteractions.Pause:\n action = \"pause\";\n break;\n case MediaInteractions.Seeked:\n action = \"seek\";\n break;\n case MediaInteractions.VolumeChange:\n action = \"volume\";\n break;\n }\n break;\n }\n default:\n continue;\n }\n if (action) {\n logs.push({\n id: eventId,\n timestamp: e.timestamp,\n source: data.source,\n action,\n nodeMeta: node,\n value,\n position\n });\n }\n }\n return logs;\n}\nfunction generateReport({\n events,\n metadata\n}) {\n const pages = createPages(events);\n return {\n metadata,\n pages\n };\n}\nfunction createPages(events) {\n const eventGroups = [];\n let currentGroup = null;\n for (const event of events) {\n if (event.type === EventType.Meta) {\n currentGroup = { meta: event, events: [] };\n eventGroups.push(currentGroup);\n } else if (currentGroup) {\n currentGroup.events.push(event);\n }\n }\n const pageMap = /* @__PURE__ */ new Map();\n let snapshotIndex = 0;\n for (const { meta, events: events2 } of eventGroups) {\n const metaData = meta.data;\n const href = metaData.href;\n if (!pageMap.has(href)) {\n pageMap.set(href, {\n id: `page-${pageMap.size}`,\n href,\n snapshots: [],\n totalElementCount: 0,\n interactedElementCount: 0,\n coverageRatio: 0,\n coveragePercent: 0\n });\n }\n const page = pageMap.get(href);\n let buffer = [];\n let currentFull = null;\n for (const event of events2) {\n if (event.type === EventType.FullSnapshot) {\n if (currentFull && buffer.length > 0) {\n const snapshotEvents = [meta, currentFull, ...buffer];\n page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));\n }\n currentFull = event;\n buffer = [];\n } else {\n buffer.push(event);\n }\n }\n if (currentFull) {\n const snapshotEvents = [meta, currentFull, ...buffer];\n page.snapshots.push(createSnapshot(snapshotEvents, snapshotIndex++));\n }\n const allVisible = /* @__PURE__ */ new Map();\n const allInteracted = /* @__PURE__ */ new Map();\n for (const snap of page.snapshots) {\n for (const el of snap.totalElements) {\n allVisible.set(el.id, el);\n }\n for (const el of snap.interactedElements) {\n allInteracted.set(el.id, el);\n }\n }\n page.totalElementCount = allVisible.size;\n page.interactedElementCount = allInteracted.size;\n page.coverageRatio = allVisible.size > 0 ? allInteracted.size / allVisible.size : 0;\n page.coveragePercent = Math.round(page.coverageRatio * 1e4) / 100;\n }\n return Array.from(pageMap.values());\n}\nfunction createSnapshot(events, snapshotIndex) {\n var _a;\n const id = `snap-${snapshotIndex}`;\n const fullSnapshot = events.find((e) => e.type === EventType.FullSnapshot);\n const fullDom = fullSnapshot == null ? void 0 : fullSnapshot.data.node;\n const elements = fullDom ? extractElementNodes(fullDom) : [];\n const visibleElements = elements.filter((n) => n == null ? void 0 : n.isVisible);\n const visibleInteractiveElements = visibleElements.filter((n) => n == null ? void 0 : n.isInteractive);\n const nodeMap = /* @__PURE__ */ new Map();\n for (const el of visibleElements) {\n if (el.id != null) {\n nodeMap.set(el.id, el);\n }\n }\n const actions = extractActionFromSnapshot(events, nodeMap);\n const actionMap = /* @__PURE__ */ new Map();\n for (const action of actions) {\n const nodeMeta = action.nodeMeta;\n if (!nodeMeta) continue;\n if (!actionMap.has(nodeMeta)) actionMap.set(nodeMeta, []);\n (_a = actionMap.get(nodeMeta)) == null ? void 0 : _a.push({\n ...action,\n nodeMeta: void 0\n });\n }\n const interactedElements = [];\n actionMap.forEach((_actions, nodeMeta) => {\n interactedElements.push(nodeMeta);\n });\n const totalCount = visibleInteractiveElements.length;\n const interactedCount = interactedElements.length;\n const ratio = totalCount > 0 ? interactedCount / totalCount : 0;\n const percent = Math.round(ratio * 1e4) / 100;\n return {\n id,\n events,\n actions,\n totalElements: visibleInteractiveElements,\n interactedElements,\n totalElementCount: totalCount,\n interactedElementCount: interactedCount,\n coverageRatio: ratio,\n coveragePercent: percent\n };\n}\nexport {\n generateReport as default\n};\n//# sourceMappingURL=rrweb-ui-report.js.map\n", "/// <reference types=\"cypress\" />\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport type { TestRunResult } from \"./types\";\nimport generateReport from '@appsurify-testmap/rrweb-ui-report';\n\n\nlet pluginConfig: {\n outputUIReportDir: string;\n includeHtml: boolean;\n compress: boolean;\n upload: boolean;\n uploadUrl: string;\n projectId: string;\n apiKey: string;\n} = {\n outputUIReportDir: 'results/ui',\n includeHtml: false,\n compress: false,\n upload: false,\n uploadUrl: '',\n projectId: '',\n apiKey: ''\n};\n\nfunction sanitizeFileNamePart(name: string | undefined): string {\n return (name ?? '')\n .trim()\n .replace(/[\\s:/\\\\<>|\"'?*]+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n}\n\nexport default function registerRRWebReportTasks(on: Cypress.PluginEvents, config?: Partial<typeof pluginConfig>) {\n pluginConfig = { ...pluginConfig, ...config };\n\n on('task', {\n saveRRWebReport(testRunResult: TestRunResult) {\n const specName = sanitizeFileNamePart(testRunResult.spec.name);\n const suiteTitle = sanitizeFileNamePart(testRunResult.test.suite?.title);\n const testTitle = sanitizeFileNamePart(testRunResult.test.title);\n const jsonFileName = `${suiteTitle ? suiteTitle + '-' : ''}${testTitle}.json`;\n const jsonFilePath = path.join(pluginConfig.outputUIReportDir, specName, jsonFileName);\n const report = generateReport({ events: testRunResult.recorderEvents });\n fs.mkdirSync(pluginConfig.outputUIReportDir, { recursive: true });\n fs.mkdirSync(path.dirname(jsonFilePath), { recursive: true });\n fs.writeFileSync(jsonFilePath, JSON.stringify(report, null, 2), 'utf-8');\n console.log(`[ui-coverage] Saved report to ${jsonFilePath}`);\n return null;\n }\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["EventType", "EventType2", "IncrementalSource", "IncrementalSource2", "MouseInteractions", "MouseInteractions2", "MediaInteractions", "MediaInteractions2", "NodeType", "NodeType2", "extractElementNodes", "node", "flat", "walk", "n", "_a", "_b", "_c", "_d", "_e", "child", "_f", "hasNodeId", "data", "extractActionFromSnapshot", "events", "nodeMap", "logs", "e", "eventId", "positions", "pos", "node2", "nodeId", "action", "value", "position", "tag", "rawType", "type", "generateReport", "metadata", "pages", "createPages", "eventGroups", "currentGroup", "event", "pageMap", "snapshotIndex", "meta", "events2", "href", "page", "buffer", "currentFull", "snapshotEvents", "createSnapshot", "allVisible", "allInteracted", "snap", "el", "id", "fullSnapshot", "fullDom", "visibleElements", "visibleInteractiveElements", "actions", "actionMap", "nodeMeta", "__spreadProps", "__spreadValues", "interactedElements", "_actions", "totalCount", "interactedCount", "ratio", "percent", "pluginConfig", "sanitizeFileNamePart", "name", "registerRRWebReportTasks", "on", "config", "testRunResult", "specName", "suiteTitle", "testTitle", "jsonFileName", "jsonFilePath", "path", "report", "fs"]
7
+ }