@ubio/webvision 1.0.2 → 1.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/build/page.mjs +236 -65
- package/out/page/highlight.d.ts +5 -0
- package/out/page/highlight.js +71 -0
- package/out/page/highlight.js.map +1 -0
- package/out/page/html.d.ts +2 -0
- package/out/page/html.js +18 -0
- package/out/page/html.js.map +1 -0
- package/out/page/index.d.ts +3 -0
- package/out/page/index.js +3 -0
- package/out/page/index.js.map +1 -1
- package/out/page/render.d.ts +9 -0
- package/out/page/render.js +51 -0
- package/out/page/render.js.map +1 -0
- package/out/page/snapshot.d.ts +44 -15
- package/out/page/snapshot.js +81 -61
- package/out/page/snapshot.js.map +1 -1
- package/out/page/utils.d.ts +1 -1
- package/out/page/utils.js +3 -3
- package/out/page/utils.js.map +1 -1
- package/package.json +3 -2
package/build/page.mjs
CHANGED
|
@@ -1,3 +1,146 @@
|
|
|
1
|
+
// src/page/highlight.ts
|
|
2
|
+
function highlightSnapshot(snapshot, nodeMap) {
|
|
3
|
+
const container = getHighlightContainer();
|
|
4
|
+
container.innerHTML = "";
|
|
5
|
+
highlightRecursive(snapshot, nodeMap, container);
|
|
6
|
+
}
|
|
7
|
+
function highlightRecursive(snapshot, nodeMap, container) {
|
|
8
|
+
highlightEl(snapshot, nodeMap, container);
|
|
9
|
+
for (const child of snapshot.children ?? []) {
|
|
10
|
+
highlightRecursive(child, nodeMap, container);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function highlightEl(snapshot, nodeMap, container) {
|
|
14
|
+
const isContainerEl = !snapshot.leaf && snapshot.children?.every((child) => child.nodeType === "element");
|
|
15
|
+
if (isContainerEl) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const node = nodeMap.get(snapshot.nodeId);
|
|
19
|
+
if (!(node instanceof Element)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const color = getColor(snapshot.nodeId);
|
|
23
|
+
const rect = node.getBoundingClientRect();
|
|
24
|
+
const overlay = document.createElement("div");
|
|
25
|
+
container.appendChild(overlay);
|
|
26
|
+
overlay.style.position = "absolute";
|
|
27
|
+
overlay.style.top = `${rect.top}px`;
|
|
28
|
+
overlay.style.left = `${rect.left}px`;
|
|
29
|
+
overlay.style.width = `${rect.width}px`;
|
|
30
|
+
overlay.style.height = `${rect.height}px`;
|
|
31
|
+
overlay.style.border = `2px solid ${color}`;
|
|
32
|
+
const label = document.createElement("div");
|
|
33
|
+
overlay.appendChild(label);
|
|
34
|
+
label.style.position = "absolute";
|
|
35
|
+
label.style.bottom = `100%`;
|
|
36
|
+
label.style.left = `0`;
|
|
37
|
+
label.style.backgroundColor = color;
|
|
38
|
+
label.style.color = "white";
|
|
39
|
+
label.style.fontSize = "10px";
|
|
40
|
+
label.style.fontFamily = "monospace";
|
|
41
|
+
label.style.fontWeight = "normal";
|
|
42
|
+
label.style.fontStyle = "normal";
|
|
43
|
+
label.style.opacity = "0.8";
|
|
44
|
+
label.style.padding = "0 2px";
|
|
45
|
+
label.style.transform = "translateY(50%)";
|
|
46
|
+
label.textContent = String(snapshot.nodeId);
|
|
47
|
+
}
|
|
48
|
+
function removeHighlight() {
|
|
49
|
+
const container = getHighlightContainer();
|
|
50
|
+
document.documentElement.removeChild(container);
|
|
51
|
+
}
|
|
52
|
+
function getHighlightContainer() {
|
|
53
|
+
let container = document.querySelector("#webvision-highlight");
|
|
54
|
+
if (!container) {
|
|
55
|
+
container = document.createElement("div");
|
|
56
|
+
container.id = "webvision-highlight";
|
|
57
|
+
container.style.position = "absolute";
|
|
58
|
+
container.style.pointerEvents = "none";
|
|
59
|
+
container.style.top = "0";
|
|
60
|
+
container.style.left = "0";
|
|
61
|
+
container.style.width = "100%";
|
|
62
|
+
container.style.height = "100%";
|
|
63
|
+
container.style.zIndex = "2147483646";
|
|
64
|
+
document.documentElement.appendChild(container);
|
|
65
|
+
}
|
|
66
|
+
return container;
|
|
67
|
+
}
|
|
68
|
+
function getColor(index) {
|
|
69
|
+
const hue = index * 120 * 0.382 % 360;
|
|
70
|
+
return `hsl(${hue}, 85%, 50%)`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/page/html.ts
|
|
74
|
+
function captureAncestorHtml(el) {
|
|
75
|
+
const html = [];
|
|
76
|
+
let current = el;
|
|
77
|
+
while (current) {
|
|
78
|
+
html.push(captureHtmlLine(current));
|
|
79
|
+
current = current.parentElement;
|
|
80
|
+
}
|
|
81
|
+
return html.reverse().join("\n");
|
|
82
|
+
}
|
|
83
|
+
function captureHtmlLine(el) {
|
|
84
|
+
const html = [];
|
|
85
|
+
html.push(`${el.tagName.toLowerCase()}`);
|
|
86
|
+
for (const attr of el.attributes) {
|
|
87
|
+
html.push(`${attr.name}="${attr.value}"`);
|
|
88
|
+
}
|
|
89
|
+
return `<${html.join(" ")}>`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// src/page/render.ts
|
|
93
|
+
function renderSnapshot(snapshot, options = {}) {
|
|
94
|
+
const opts = {
|
|
95
|
+
depth: 0,
|
|
96
|
+
includeNodeId: true,
|
|
97
|
+
includeClassList: true,
|
|
98
|
+
...options
|
|
99
|
+
};
|
|
100
|
+
if (opts.maxHeight && snapshot.rect.y > opts.maxHeight) {
|
|
101
|
+
return "";
|
|
102
|
+
}
|
|
103
|
+
const buffer = [
|
|
104
|
+
renderLine(snapshot, opts)
|
|
105
|
+
];
|
|
106
|
+
for (const child of snapshot.children ?? []) {
|
|
107
|
+
const childSnapshot = renderSnapshot(child, {
|
|
108
|
+
...opts,
|
|
109
|
+
depth: opts.depth + 1
|
|
110
|
+
});
|
|
111
|
+
if (childSnapshot) {
|
|
112
|
+
buffer.push(childSnapshot);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return buffer.join("\n");
|
|
116
|
+
}
|
|
117
|
+
function renderLine(snapshot, options) {
|
|
118
|
+
const indent = " ".repeat(options.depth);
|
|
119
|
+
const components = [indent];
|
|
120
|
+
if (snapshot.nodeType === "text") {
|
|
121
|
+
return [indent, snapshot.textContent].filter(Boolean).join(" ");
|
|
122
|
+
}
|
|
123
|
+
components.push(snapshot.tagName ?? "");
|
|
124
|
+
if (options.includeNodeId) {
|
|
125
|
+
components.push(`[nodeId=${snapshot.nodeId}]`);
|
|
126
|
+
}
|
|
127
|
+
if (options.includeClassList) {
|
|
128
|
+
for (const className of snapshot.classList ?? []) {
|
|
129
|
+
components.push(`.${className}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (snapshot.src) {
|
|
133
|
+
components.push(`(${snapshot.src})`);
|
|
134
|
+
}
|
|
135
|
+
if (snapshot.href) {
|
|
136
|
+
components.push(`(${snapshot.href})`);
|
|
137
|
+
}
|
|
138
|
+
if (snapshot.textContent) {
|
|
139
|
+
components.push(" " + snapshot.textContent);
|
|
140
|
+
}
|
|
141
|
+
return components.filter(Boolean).join("");
|
|
142
|
+
}
|
|
143
|
+
|
|
1
144
|
// src/page/utils.ts
|
|
2
145
|
function isHidden(element, options = {}) {
|
|
3
146
|
const {
|
|
@@ -10,7 +153,7 @@ function isHidden(element, options = {}) {
|
|
|
10
153
|
const display = style.display;
|
|
11
154
|
const visibility = style.visibility;
|
|
12
155
|
const transform = style.transform;
|
|
13
|
-
if (display === "none" || checkOpacity && opacity
|
|
156
|
+
if (display === "none" || checkOpacity && opacity === 0 || checkVisibility && visibility === "hidden" || checkTransform && transform.includes("scale(0)")) {
|
|
14
157
|
return true;
|
|
15
158
|
}
|
|
16
159
|
if (!element.checkVisibility()) {
|
|
@@ -35,8 +178,8 @@ function deepIsHidden(element, options = {}) {
|
|
|
35
178
|
function normalizeText(str) {
|
|
36
179
|
return str.replace(/\p{Cf}/gu, " ").replace(/\s+/g, " ").trim();
|
|
37
180
|
}
|
|
38
|
-
function
|
|
39
|
-
return el.matches(
|
|
181
|
+
function containsSelector(el, selector) {
|
|
182
|
+
return el.matches(selector) || !!el.querySelector(selector);
|
|
40
183
|
}
|
|
41
184
|
function isRecursiveInline(el, ignoreTags = []) {
|
|
42
185
|
for (const child of el.childNodes) {
|
|
@@ -106,20 +249,36 @@ var DEFAULT_SEMANTIC_TAGS = [
|
|
|
106
249
|
"sub",
|
|
107
250
|
"sup"
|
|
108
251
|
];
|
|
109
|
-
|
|
110
|
-
|
|
252
|
+
function createSnapshot(root, options = {}) {
|
|
253
|
+
const opts = {
|
|
254
|
+
startId: 0,
|
|
255
|
+
skipHidden: true,
|
|
256
|
+
skipEmptyText: true,
|
|
257
|
+
skipImages: false,
|
|
258
|
+
skipIframes: false,
|
|
259
|
+
skipTags: DEFAULT_SKIP_TAGS,
|
|
260
|
+
tagPreference: DEFAULT_SEMANTIC_TAGS,
|
|
261
|
+
collapseInline: true,
|
|
262
|
+
...options
|
|
263
|
+
};
|
|
264
|
+
const counter = new Counter(opts.startId);
|
|
265
|
+
const nodeMap = /* @__PURE__ */ new Map();
|
|
266
|
+
const tree = new SnapshotTree(root, null, counter, opts);
|
|
267
|
+
tree.fillMap(nodeMap);
|
|
268
|
+
return {
|
|
269
|
+
nodeMap,
|
|
270
|
+
snapshot: tree.toJson(),
|
|
271
|
+
maxId: counter.value
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
var SnapshotTree = class _SnapshotTree {
|
|
275
|
+
constructor(node, parent, counter, options) {
|
|
111
276
|
this.node = node;
|
|
112
277
|
this.parent = parent;
|
|
278
|
+
this.counter = counter;
|
|
279
|
+
this.options = options;
|
|
113
280
|
this.children = [];
|
|
114
|
-
this.
|
|
115
|
-
skipHidden: true,
|
|
116
|
-
skipEmptyText: true,
|
|
117
|
-
skipImages: false,
|
|
118
|
-
skipTags: DEFAULT_SKIP_TAGS,
|
|
119
|
-
tagPreference: DEFAULT_SEMANTIC_TAGS,
|
|
120
|
-
collapseInline: true,
|
|
121
|
-
...options
|
|
122
|
-
};
|
|
281
|
+
this.nodeId = this.counter.next();
|
|
123
282
|
this.classList = [...this.element?.classList ?? []];
|
|
124
283
|
if (this.element) {
|
|
125
284
|
this.parseTree(this.element, this.getAcceptedChildren(this.element));
|
|
@@ -135,36 +294,25 @@ var DomSnapshot = class _DomSnapshot {
|
|
|
135
294
|
const text = this.node instanceof HTMLElement ? this.node.innerText : this.node.textContent;
|
|
136
295
|
return normalizeText(text ?? "");
|
|
137
296
|
}
|
|
138
|
-
get
|
|
139
|
-
return " ".repeat(this.depth);
|
|
140
|
-
}
|
|
141
|
-
get isLeaf() {
|
|
297
|
+
get leaf() {
|
|
142
298
|
return this.children.length === 0;
|
|
143
299
|
}
|
|
144
300
|
get tagName() {
|
|
145
|
-
return this.node instanceof Element ? this.node.tagName.toLowerCase() :
|
|
301
|
+
return this.node instanceof Element ? this.node.tagName.toLowerCase() : void 0;
|
|
146
302
|
}
|
|
147
303
|
get href() {
|
|
148
|
-
return this.node instanceof HTMLAnchorElement ? this.node.href :
|
|
304
|
+
return this.node instanceof HTMLAnchorElement ? this.node.href : void 0;
|
|
149
305
|
}
|
|
150
306
|
get src() {
|
|
151
|
-
return this.node
|
|
307
|
+
return this.node.src ?? void 0;
|
|
152
308
|
}
|
|
153
|
-
|
|
154
|
-
if (this.node instanceof
|
|
155
|
-
return this.
|
|
156
|
-
}
|
|
157
|
-
return Number(getComputedStyle(this.node).fontSize?.replace("px", ""));
|
|
158
|
-
}
|
|
159
|
-
getTextSize(rootFontSize) {
|
|
160
|
-
const ownFontSize = this.getFontSize();
|
|
161
|
-
if (ownFontSize > 1.2 * rootFontSize) {
|
|
162
|
-
return "large";
|
|
163
|
-
}
|
|
164
|
-
if (ownFontSize < 0.85 * rootFontSize) {
|
|
165
|
-
return "small";
|
|
309
|
+
get clientRect() {
|
|
310
|
+
if (this.node instanceof Element) {
|
|
311
|
+
return this.node.getBoundingClientRect();
|
|
166
312
|
}
|
|
167
|
-
|
|
313
|
+
const range = document.createRange();
|
|
314
|
+
range.selectNodeContents(this.node);
|
|
315
|
+
return range.getBoundingClientRect();
|
|
168
316
|
}
|
|
169
317
|
parseTree(el, childNodes) {
|
|
170
318
|
this.children = [];
|
|
@@ -175,7 +323,7 @@ var DomSnapshot = class _DomSnapshot {
|
|
|
175
323
|
return;
|
|
176
324
|
}
|
|
177
325
|
for (const childNode of childNodes) {
|
|
178
|
-
const snapshot = new
|
|
326
|
+
const snapshot = new _SnapshotTree(childNode, this, this.counter, this.options);
|
|
179
327
|
this.children.push(snapshot);
|
|
180
328
|
}
|
|
181
329
|
}
|
|
@@ -207,10 +355,16 @@ var DomSnapshot = class _DomSnapshot {
|
|
|
207
355
|
return false;
|
|
208
356
|
}
|
|
209
357
|
if (node instanceof Element) {
|
|
210
|
-
if (this.options.skipHidden && deepIsHidden(node
|
|
358
|
+
if (this.options.skipHidden && deepIsHidden(node)) {
|
|
211
359
|
return false;
|
|
212
360
|
}
|
|
213
|
-
if (
|
|
361
|
+
if (containsSelector(node, "input")) {
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
if (!this.options.skipIframes && containsSelector(node, "iframe")) {
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
if (!this.options.skipImages && containsSelector(node, "img")) {
|
|
214
368
|
return true;
|
|
215
369
|
}
|
|
216
370
|
if (this.options.skipTags.includes(node.tagName.toLowerCase())) {
|
|
@@ -226,43 +380,60 @@ var DomSnapshot = class _DomSnapshot {
|
|
|
226
380
|
return true;
|
|
227
381
|
});
|
|
228
382
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
this.renderLine()
|
|
232
|
-
];
|
|
383
|
+
fillMap(map) {
|
|
384
|
+
map.set(this.nodeId, this.node);
|
|
233
385
|
for (const child of this.children) {
|
|
234
|
-
|
|
386
|
+
child.fillMap(map);
|
|
235
387
|
}
|
|
236
|
-
return buffer.join("\n");
|
|
237
388
|
}
|
|
238
|
-
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
389
|
+
toJson() {
|
|
390
|
+
const { top, left, width, height } = this.clientRect;
|
|
391
|
+
return {
|
|
392
|
+
nodeId: this.nodeId,
|
|
393
|
+
nodeType: this.node instanceof Element ? "element" : "text",
|
|
394
|
+
leaf: this.leaf,
|
|
395
|
+
tagName: this.tagName,
|
|
396
|
+
rect: {
|
|
397
|
+
x: left,
|
|
398
|
+
y: top,
|
|
399
|
+
width,
|
|
400
|
+
height
|
|
401
|
+
},
|
|
402
|
+
classList: this.node instanceof Element ? this.classList : void 0,
|
|
403
|
+
textContent: this.leaf ? this.inlineText : void 0,
|
|
404
|
+
href: this.href,
|
|
405
|
+
src: this.src,
|
|
406
|
+
children: this.leaf ? void 0 : this.children.map((child) => child.toJson())
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
var Counter = class {
|
|
411
|
+
constructor(value = 0) {
|
|
412
|
+
this.value = value;
|
|
413
|
+
}
|
|
414
|
+
next() {
|
|
415
|
+
this.value += 1;
|
|
416
|
+
return this.value;
|
|
256
417
|
}
|
|
257
418
|
};
|
|
258
419
|
export {
|
|
420
|
+
Counter,
|
|
259
421
|
DEFAULT_SEMANTIC_TAGS,
|
|
260
422
|
DEFAULT_SKIP_TAGS,
|
|
261
|
-
|
|
262
|
-
|
|
423
|
+
SnapshotTree,
|
|
424
|
+
captureAncestorHtml,
|
|
425
|
+
captureHtmlLine,
|
|
426
|
+
containsSelector,
|
|
427
|
+
createSnapshot,
|
|
263
428
|
deepIsHidden,
|
|
429
|
+
getHighlightContainer,
|
|
264
430
|
hasVisibleArea,
|
|
431
|
+
highlightEl,
|
|
432
|
+
highlightSnapshot,
|
|
265
433
|
isHidden,
|
|
266
434
|
isRecursiveInline,
|
|
267
|
-
normalizeText
|
|
435
|
+
normalizeText,
|
|
436
|
+
removeHighlight,
|
|
437
|
+
renderLine,
|
|
438
|
+
renderSnapshot
|
|
268
439
|
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SnapshotItem, SnapshotNode } from './snapshot.js';
|
|
2
|
+
export declare function highlightSnapshot(snapshot: SnapshotItem, nodeMap: Map<number, SnapshotNode>): void;
|
|
3
|
+
export declare function highlightEl(snapshot: SnapshotItem, nodeMap: Map<number, SnapshotNode>, container: HTMLElement): void;
|
|
4
|
+
export declare function removeHighlight(): void;
|
|
5
|
+
export declare function getHighlightContainer(): HTMLElement;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export function highlightSnapshot(snapshot, nodeMap) {
|
|
2
|
+
const container = getHighlightContainer();
|
|
3
|
+
container.innerHTML = '';
|
|
4
|
+
highlightRecursive(snapshot, nodeMap, container);
|
|
5
|
+
}
|
|
6
|
+
function highlightRecursive(snapshot, nodeMap, container) {
|
|
7
|
+
highlightEl(snapshot, nodeMap, container);
|
|
8
|
+
for (const child of snapshot.children ?? []) {
|
|
9
|
+
highlightRecursive(child, nodeMap, container);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function highlightEl(snapshot, nodeMap, container) {
|
|
13
|
+
const isContainerEl = !snapshot.leaf && snapshot.children?.every(child => child.nodeType === 'element');
|
|
14
|
+
if (isContainerEl) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const node = nodeMap.get(snapshot.nodeId);
|
|
18
|
+
if (!(node instanceof Element)) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const color = getColor(snapshot.nodeId);
|
|
22
|
+
const rect = node.getBoundingClientRect();
|
|
23
|
+
const overlay = document.createElement('div');
|
|
24
|
+
container.appendChild(overlay);
|
|
25
|
+
overlay.style.position = 'absolute';
|
|
26
|
+
overlay.style.top = `${rect.top}px`;
|
|
27
|
+
overlay.style.left = `${rect.left}px`;
|
|
28
|
+
overlay.style.width = `${rect.width}px`;
|
|
29
|
+
overlay.style.height = `${rect.height}px`;
|
|
30
|
+
overlay.style.border = `2px solid ${color}`;
|
|
31
|
+
const label = document.createElement('div');
|
|
32
|
+
overlay.appendChild(label);
|
|
33
|
+
label.style.position = 'absolute';
|
|
34
|
+
label.style.bottom = `100%`;
|
|
35
|
+
label.style.left = `0`;
|
|
36
|
+
label.style.backgroundColor = color;
|
|
37
|
+
label.style.color = 'white';
|
|
38
|
+
label.style.fontSize = '10px';
|
|
39
|
+
label.style.fontFamily = 'monospace';
|
|
40
|
+
label.style.fontWeight = 'normal';
|
|
41
|
+
label.style.fontStyle = 'normal';
|
|
42
|
+
label.style.opacity = '0.8';
|
|
43
|
+
label.style.padding = '0 2px';
|
|
44
|
+
label.style.transform = 'translateY(50%)';
|
|
45
|
+
label.textContent = String(snapshot.nodeId);
|
|
46
|
+
}
|
|
47
|
+
export function removeHighlight() {
|
|
48
|
+
const container = getHighlightContainer();
|
|
49
|
+
document.documentElement.removeChild(container);
|
|
50
|
+
}
|
|
51
|
+
export function getHighlightContainer() {
|
|
52
|
+
let container = document.querySelector('#webvision-highlight');
|
|
53
|
+
if (!container) {
|
|
54
|
+
container = document.createElement('div');
|
|
55
|
+
container.id = 'webvision-highlight';
|
|
56
|
+
container.style.position = 'absolute';
|
|
57
|
+
container.style.pointerEvents = 'none';
|
|
58
|
+
container.style.top = '0';
|
|
59
|
+
container.style.left = '0';
|
|
60
|
+
container.style.width = '100%';
|
|
61
|
+
container.style.height = '100%';
|
|
62
|
+
container.style.zIndex = '2147483646'; // Maximum z-index value
|
|
63
|
+
document.documentElement.appendChild(container);
|
|
64
|
+
}
|
|
65
|
+
return container;
|
|
66
|
+
}
|
|
67
|
+
function getColor(index) {
|
|
68
|
+
const hue = (index * 120 * .382) % 360;
|
|
69
|
+
return `hsl(${hue}, 85%, 50%)`;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/page/highlight.ts"],"names":[],"mappings":"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"}
|
package/out/page/html.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function captureAncestorHtml(el) {
|
|
2
|
+
const html = [];
|
|
3
|
+
let current = el;
|
|
4
|
+
while (current) {
|
|
5
|
+
html.push(captureHtmlLine(current));
|
|
6
|
+
current = current.parentElement;
|
|
7
|
+
}
|
|
8
|
+
return html.reverse().join('\n');
|
|
9
|
+
}
|
|
10
|
+
export function captureHtmlLine(el) {
|
|
11
|
+
const html = [];
|
|
12
|
+
html.push(`${el.tagName.toLowerCase()}`);
|
|
13
|
+
for (const attr of el.attributes) {
|
|
14
|
+
html.push(`${attr.name}="${attr.value}"`);
|
|
15
|
+
}
|
|
16
|
+
return `<${html.join(' ')}>`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/page/html.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,EAAe;IAC/C,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAuB,EAAE,CAAC;IACrC,OAAO,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAe;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,CAAC"}
|
package/out/page/index.d.ts
CHANGED
package/out/page/index.js
CHANGED
package/out/page/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/page/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/page/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SnapshotItem } from './snapshot.js';
|
|
2
|
+
export interface SnapshotRenderOptions {
|
|
3
|
+
depth: number;
|
|
4
|
+
includeNodeId: boolean;
|
|
5
|
+
includeClassList: boolean;
|
|
6
|
+
maxHeight?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderSnapshot(snapshot: SnapshotItem, options?: Partial<SnapshotRenderOptions>): string;
|
|
9
|
+
export declare function renderLine(snapshot: SnapshotItem, options: SnapshotRenderOptions): string;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function renderSnapshot(snapshot, options = {}) {
|
|
2
|
+
const opts = {
|
|
3
|
+
depth: 0,
|
|
4
|
+
includeNodeId: true,
|
|
5
|
+
includeClassList: true,
|
|
6
|
+
...options,
|
|
7
|
+
};
|
|
8
|
+
if (opts.maxHeight && snapshot.rect.y > opts.maxHeight) {
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
const buffer = [
|
|
12
|
+
renderLine(snapshot, opts),
|
|
13
|
+
];
|
|
14
|
+
for (const child of snapshot.children ?? []) {
|
|
15
|
+
const childSnapshot = renderSnapshot(child, {
|
|
16
|
+
...opts,
|
|
17
|
+
depth: opts.depth + 1,
|
|
18
|
+
});
|
|
19
|
+
if (childSnapshot) {
|
|
20
|
+
buffer.push(childSnapshot);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return buffer.join('\n');
|
|
24
|
+
}
|
|
25
|
+
export function renderLine(snapshot, options) {
|
|
26
|
+
const indent = ' '.repeat(options.depth);
|
|
27
|
+
const components = [indent];
|
|
28
|
+
if (snapshot.nodeType === 'text') {
|
|
29
|
+
return [indent, snapshot.textContent].filter(Boolean).join(' ');
|
|
30
|
+
}
|
|
31
|
+
components.push(snapshot.tagName ?? '');
|
|
32
|
+
if (options.includeNodeId) {
|
|
33
|
+
components.push(`[nodeId=${snapshot.nodeId}]`);
|
|
34
|
+
}
|
|
35
|
+
if (options.includeClassList) {
|
|
36
|
+
for (const className of snapshot.classList ?? []) {
|
|
37
|
+
components.push(`.${className}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (snapshot.src) {
|
|
41
|
+
components.push(`(${snapshot.src})`);
|
|
42
|
+
}
|
|
43
|
+
if (snapshot.href) {
|
|
44
|
+
components.push(`(${snapshot.href})`);
|
|
45
|
+
}
|
|
46
|
+
if (snapshot.textContent) {
|
|
47
|
+
components.push(' ' + snapshot.textContent);
|
|
48
|
+
}
|
|
49
|
+
return components.filter(Boolean).join('');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/page/render.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,cAAc,CAAC,QAAsB,EAAE,UAA0C,EAAE;IAC/F,MAAM,IAAI,GAA0B;QAChC,KAAK,EAAE,CAAC;QACR,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,IAAI;QACtB,GAAG,OAAO;KACb,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG;QACX,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;KAC7B,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,EAAE;YACxC,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;SACxB,CAAC,CAAC;QACH,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAsB,EAAE,OAA8B;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC"}
|
package/out/page/snapshot.d.ts
CHANGED
|
@@ -1,31 +1,55 @@
|
|
|
1
1
|
export declare const DEFAULT_SKIP_TAGS: string[];
|
|
2
2
|
export declare const DEFAULT_SEMANTIC_TAGS: string[];
|
|
3
3
|
export type SnapshotNode = Element | Text;
|
|
4
|
-
export interface
|
|
4
|
+
export interface SnapshotOptions {
|
|
5
|
+
startId: number;
|
|
5
6
|
skipHidden: boolean;
|
|
6
7
|
skipImages: boolean;
|
|
8
|
+
skipIframes: boolean;
|
|
7
9
|
skipEmptyText: boolean;
|
|
8
10
|
skipTags: string[];
|
|
9
11
|
tagPreference: string[];
|
|
10
12
|
collapseInline: boolean;
|
|
11
13
|
}
|
|
12
|
-
export
|
|
14
|
+
export interface SnapshotItem {
|
|
15
|
+
nodeId: number;
|
|
16
|
+
nodeType: 'element' | 'text';
|
|
17
|
+
leaf: boolean;
|
|
18
|
+
rect: {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
};
|
|
24
|
+
tagName?: string;
|
|
25
|
+
classList?: string[];
|
|
26
|
+
textContent?: string;
|
|
27
|
+
href?: string;
|
|
28
|
+
src?: string;
|
|
29
|
+
children?: SnapshotItem[];
|
|
30
|
+
}
|
|
31
|
+
export declare function createSnapshot(root: SnapshotNode, options?: Partial<SnapshotOptions>): {
|
|
32
|
+
nodeMap: Map<number, SnapshotNode>;
|
|
33
|
+
snapshot: SnapshotItem;
|
|
34
|
+
maxId: number;
|
|
35
|
+
};
|
|
36
|
+
export declare class SnapshotTree {
|
|
13
37
|
node: Element | Text;
|
|
14
|
-
parent:
|
|
15
|
-
|
|
38
|
+
parent: SnapshotTree | null;
|
|
39
|
+
counter: Counter;
|
|
40
|
+
options: SnapshotOptions;
|
|
41
|
+
nodeId: number;
|
|
16
42
|
classList: string[];
|
|
17
|
-
children:
|
|
18
|
-
constructor(node: Element | Text, parent:
|
|
43
|
+
children: SnapshotTree[];
|
|
44
|
+
constructor(node: Element | Text, parent: SnapshotTree | null, counter: Counter, options: SnapshotOptions);
|
|
19
45
|
get element(): Element | null;
|
|
20
46
|
get depth(): number;
|
|
21
47
|
get inlineText(): string;
|
|
22
|
-
get
|
|
23
|
-
get
|
|
24
|
-
get
|
|
25
|
-
get
|
|
26
|
-
get
|
|
27
|
-
getFontSize(): number;
|
|
28
|
-
getTextSize(rootFontSize: number): "large" | "small" | "normal";
|
|
48
|
+
get leaf(): boolean;
|
|
49
|
+
get tagName(): string | undefined;
|
|
50
|
+
get href(): string | undefined;
|
|
51
|
+
get src(): any;
|
|
52
|
+
get clientRect(): DOMRect;
|
|
29
53
|
private parseTree;
|
|
30
54
|
/**
|
|
31
55
|
* Collapses an element with only one visible child into one.
|
|
@@ -35,6 +59,11 @@ export declare class DomSnapshot {
|
|
|
35
59
|
*/
|
|
36
60
|
private collapseWrapper;
|
|
37
61
|
private getAcceptedChildren;
|
|
38
|
-
|
|
39
|
-
|
|
62
|
+
fillMap(map: Map<number, SnapshotNode>): void;
|
|
63
|
+
toJson(): SnapshotItem;
|
|
64
|
+
}
|
|
65
|
+
export declare class Counter {
|
|
66
|
+
value: number;
|
|
67
|
+
constructor(value?: number);
|
|
68
|
+
next(): number;
|
|
40
69
|
}
|
package/out/page/snapshot.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { containsSelector, deepIsHidden, isRecursiveInline, normalizeText } from './utils.js';
|
|
2
2
|
export const DEFAULT_SKIP_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];
|
|
3
3
|
export const DEFAULT_SEMANTIC_TAGS = [
|
|
4
4
|
'a', 'button', 'label', 'section',
|
|
@@ -10,20 +10,36 @@ export const DEFAULT_SEMANTIC_TAGS = [
|
|
|
10
10
|
'form', 'input', 'textarea', 'select', 'option', 'fieldset', 'legend',
|
|
11
11
|
'strong', 'em', 'sub', 'sup',
|
|
12
12
|
];
|
|
13
|
-
export
|
|
14
|
-
|
|
13
|
+
export function createSnapshot(root, options = {}) {
|
|
14
|
+
const opts = {
|
|
15
|
+
startId: 0,
|
|
16
|
+
skipHidden: true,
|
|
17
|
+
skipEmptyText: true,
|
|
18
|
+
skipImages: false,
|
|
19
|
+
skipIframes: false,
|
|
20
|
+
skipTags: DEFAULT_SKIP_TAGS,
|
|
21
|
+
tagPreference: DEFAULT_SEMANTIC_TAGS,
|
|
22
|
+
collapseInline: true,
|
|
23
|
+
...options,
|
|
24
|
+
};
|
|
25
|
+
const counter = new Counter(opts.startId);
|
|
26
|
+
const nodeMap = new Map();
|
|
27
|
+
const tree = new SnapshotTree(root, null, counter, opts);
|
|
28
|
+
tree.fillMap(nodeMap);
|
|
29
|
+
return {
|
|
30
|
+
nodeMap,
|
|
31
|
+
snapshot: tree.toJson(),
|
|
32
|
+
maxId: counter.value,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export class SnapshotTree {
|
|
36
|
+
constructor(node, parent, counter, options) {
|
|
15
37
|
this.node = node;
|
|
16
38
|
this.parent = parent;
|
|
39
|
+
this.counter = counter;
|
|
40
|
+
this.options = options;
|
|
17
41
|
this.children = [];
|
|
18
|
-
this.
|
|
19
|
-
skipHidden: true,
|
|
20
|
-
skipEmptyText: true,
|
|
21
|
-
skipImages: false,
|
|
22
|
-
skipTags: DEFAULT_SKIP_TAGS,
|
|
23
|
-
tagPreference: DEFAULT_SEMANTIC_TAGS,
|
|
24
|
-
collapseInline: true,
|
|
25
|
-
...options,
|
|
26
|
-
};
|
|
42
|
+
this.nodeId = this.counter.next();
|
|
27
43
|
this.classList = [...(this.element?.classList ?? [])];
|
|
28
44
|
if (this.element) {
|
|
29
45
|
this.parseTree(this.element, this.getAcceptedChildren(this.element));
|
|
@@ -41,36 +57,25 @@ export class DomSnapshot {
|
|
|
41
57
|
this.node.textContent;
|
|
42
58
|
return normalizeText(text ?? '');
|
|
43
59
|
}
|
|
44
|
-
get
|
|
45
|
-
return ' '.repeat(this.depth);
|
|
46
|
-
}
|
|
47
|
-
get isLeaf() {
|
|
60
|
+
get leaf() {
|
|
48
61
|
return this.children.length === 0;
|
|
49
62
|
}
|
|
50
63
|
get tagName() {
|
|
51
|
-
return this.node instanceof Element ? this.node.tagName.toLowerCase() :
|
|
64
|
+
return this.node instanceof Element ? this.node.tagName.toLowerCase() : undefined;
|
|
52
65
|
}
|
|
53
66
|
get href() {
|
|
54
|
-
return this.node instanceof HTMLAnchorElement ? this.node.href :
|
|
67
|
+
return this.node instanceof HTMLAnchorElement ? this.node.href : undefined;
|
|
55
68
|
}
|
|
56
69
|
get src() {
|
|
57
|
-
return this.node
|
|
70
|
+
return this.node.src ?? undefined;
|
|
58
71
|
}
|
|
59
|
-
|
|
60
|
-
if (this.node instanceof
|
|
61
|
-
return this.
|
|
72
|
+
get clientRect() {
|
|
73
|
+
if (this.node instanceof Element) {
|
|
74
|
+
return this.node.getBoundingClientRect();
|
|
62
75
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const ownFontSize = this.getFontSize();
|
|
67
|
-
if (ownFontSize > 1.2 * rootFontSize) {
|
|
68
|
-
return 'large';
|
|
69
|
-
}
|
|
70
|
-
if (ownFontSize < 0.85 * rootFontSize) {
|
|
71
|
-
return 'small';
|
|
72
|
-
}
|
|
73
|
-
return 'normal';
|
|
76
|
+
const range = document.createRange();
|
|
77
|
+
range.selectNodeContents(this.node);
|
|
78
|
+
return range.getBoundingClientRect();
|
|
74
79
|
}
|
|
75
80
|
parseTree(el, childNodes) {
|
|
76
81
|
this.children = [];
|
|
@@ -82,7 +87,7 @@ export class DomSnapshot {
|
|
|
82
87
|
return;
|
|
83
88
|
}
|
|
84
89
|
for (const childNode of childNodes) {
|
|
85
|
-
const snapshot = new
|
|
90
|
+
const snapshot = new SnapshotTree(childNode, this, this.counter, this.options);
|
|
86
91
|
this.children.push(snapshot);
|
|
87
92
|
}
|
|
88
93
|
}
|
|
@@ -118,11 +123,19 @@ export class DomSnapshot {
|
|
|
118
123
|
if (node instanceof Element) {
|
|
119
124
|
// Skip hidden elements (opacity, display, visibility, etc)
|
|
120
125
|
// TODO checkOpacity breaks PDF viewer
|
|
121
|
-
if (this.options.skipHidden && deepIsHidden(node
|
|
126
|
+
if (this.options.skipHidden && deepIsHidden(node)) {
|
|
122
127
|
return false;
|
|
123
128
|
}
|
|
124
|
-
//
|
|
125
|
-
if (
|
|
129
|
+
// Always include inputs
|
|
130
|
+
if (containsSelector(node, 'input')) {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
// Always include iframes, unless explicitly skipped
|
|
134
|
+
if (!this.options.skipIframes && containsSelector(node, 'iframe')) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
// Always include images, unless explicitly skipped
|
|
138
|
+
if (!this.options.skipImages && containsSelector(node, 'img')) {
|
|
126
139
|
return true;
|
|
127
140
|
}
|
|
128
141
|
// Skip listed tags
|
|
@@ -140,33 +153,40 @@ export class DomSnapshot {
|
|
|
140
153
|
return true;
|
|
141
154
|
});
|
|
142
155
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
this.renderLine(),
|
|
146
|
-
];
|
|
156
|
+
fillMap(map) {
|
|
157
|
+
map.set(this.nodeId, this.node);
|
|
147
158
|
for (const child of this.children) {
|
|
148
|
-
|
|
159
|
+
child.fillMap(map);
|
|
149
160
|
}
|
|
150
|
-
return buffer.join('\n');
|
|
151
161
|
}
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
toJson() {
|
|
163
|
+
const { top, left, width, height } = this.clientRect;
|
|
164
|
+
return {
|
|
165
|
+
nodeId: this.nodeId,
|
|
166
|
+
nodeType: this.node instanceof Element ? 'element' : 'text',
|
|
167
|
+
leaf: this.leaf,
|
|
168
|
+
tagName: this.tagName,
|
|
169
|
+
rect: {
|
|
170
|
+
x: left,
|
|
171
|
+
y: top,
|
|
172
|
+
width,
|
|
173
|
+
height,
|
|
174
|
+
},
|
|
175
|
+
classList: this.node instanceof Element ? this.classList : undefined,
|
|
176
|
+
textContent: this.leaf ? this.inlineText : undefined,
|
|
177
|
+
href: this.href,
|
|
178
|
+
src: this.src,
|
|
179
|
+
children: this.leaf ? undefined : this.children.map(child => child.toJson()),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export class Counter {
|
|
184
|
+
constructor(value = 0) {
|
|
185
|
+
this.value = value;
|
|
186
|
+
}
|
|
187
|
+
next() {
|
|
188
|
+
this.value += 1;
|
|
189
|
+
return this.value;
|
|
170
190
|
}
|
|
171
191
|
}
|
|
172
192
|
//# sourceMappingURL=snapshot.js.map
|
package/out/page/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/page/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/page/snapshot.ts"],"names":[],"mappings":"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"}
|
package/out/page/utils.d.ts
CHANGED
|
@@ -15,5 +15,5 @@ export declare function isHidden(element: Element, options?: Partial<VisibilityO
|
|
|
15
15
|
export declare function hasVisibleArea(element: Element): boolean;
|
|
16
16
|
export declare function deepIsHidden(element: Element, options?: Partial<VisibilityOptions>): boolean;
|
|
17
17
|
export declare function normalizeText(str: string): string;
|
|
18
|
-
export declare function
|
|
18
|
+
export declare function containsSelector(el: Element, selector: string): boolean;
|
|
19
19
|
export declare function isRecursiveInline(el: Element, ignoreTags?: string[]): boolean;
|
package/out/page/utils.js
CHANGED
|
@@ -14,7 +14,7 @@ export function isHidden(element, options = {}) {
|
|
|
14
14
|
const visibility = style.visibility;
|
|
15
15
|
const transform = style.transform;
|
|
16
16
|
if (display === 'none' ||
|
|
17
|
-
(checkOpacity && opacity
|
|
17
|
+
(checkOpacity && opacity === 0) ||
|
|
18
18
|
(checkVisibility && (visibility === 'hidden')) ||
|
|
19
19
|
(checkTransform && transform.includes('scale(0)'))) {
|
|
20
20
|
return true;
|
|
@@ -44,8 +44,8 @@ export function normalizeText(str) {
|
|
|
44
44
|
.replace(/\s+/g, ' ')
|
|
45
45
|
.trim();
|
|
46
46
|
}
|
|
47
|
-
export function
|
|
48
|
-
return el.matches(
|
|
47
|
+
export function containsSelector(el, selector) {
|
|
48
|
+
return el.matches(selector) || !!el.querySelector(selector);
|
|
49
49
|
}
|
|
50
50
|
export function isRecursiveInline(el, ignoreTags = []) {
|
|
51
51
|
for (const child of el.childNodes) {
|
package/out/page/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/page/utils.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB,EAAE,UAAsC,EAAE;IAC/E,MAAM,EACF,YAAY,GAAG,IAAI,EACnB,eAAe,GAAG,IAAI,EACtB,cAAc,GAAG,IAAI,GACxB,GAAG,OAAO,CAAC;IACZ,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IACI,OAAO,KAAK,MAAM;QAClB,CAAC,YAAY,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/page/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ubio/webvision",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"main": "out/main/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
|
-
"
|
|
7
|
+
".": "./out/page/index.js",
|
|
8
|
+
"./page": "./build/page.mjs"
|
|
8
9
|
},
|
|
9
10
|
"files": [
|
|
10
11
|
"out/main",
|