@ubio/webvision 3.0.9 → 3.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/global.js +42 -34
- package/build/global.js.map +2 -2
- package/build/page.mjs +42 -34
- package/out/page/dom.d.ts +0 -1
- package/out/page/dom.js +0 -10
- package/out/page/dom.js.map +1 -1
- package/out/page/parser.d.ts +9 -4
- package/out/page/parser.js +40 -24
- package/out/page/parser.js.map +1 -1
- package/out/page/snapshot.js +1 -1
- package/out/page/snapshot.js.map +1 -1
- package/package.json +1 -1
package/build/global.js
CHANGED
|
@@ -30,7 +30,8 @@ var WebVision = (() => {
|
|
|
30
30
|
VX_LABEL_ATTRS: () => VX_LABEL_ATTRS,
|
|
31
31
|
VX_LABEL_ATTR_PATTERNS: () => VX_LABEL_ATTR_PATTERNS,
|
|
32
32
|
VX_LAST_REFS_SYMBOL: () => VX_LAST_REFS_SYMBOL,
|
|
33
|
-
|
|
33
|
+
VX_NODE_COUNTER_SYMBOL: () => VX_NODE_COUNTER_SYMBOL,
|
|
34
|
+
VX_NODE_REF_SYMBOL: () => VX_NODE_REF_SYMBOL,
|
|
34
35
|
VX_SRC_ATTRS: () => VX_SRC_ATTRS,
|
|
35
36
|
VX_TAG_PREFERENCE: () => VX_TAG_PREFERENCE,
|
|
36
37
|
VX_TREE_SYMBOL: () => VX_TREE_SYMBOL,
|
|
@@ -64,7 +65,6 @@ var WebVision = (() => {
|
|
|
64
65
|
probeViewport: () => probeViewport,
|
|
65
66
|
renderVxNode: () => renderVxNode,
|
|
66
67
|
resolveDomNode: () => resolveDomNode,
|
|
67
|
-
serializeElement: () => serializeElement,
|
|
68
68
|
showPoint: () => showPoint,
|
|
69
69
|
traverseElements: () => traverseElements,
|
|
70
70
|
traverseVxNode: () => traverseVxNode,
|
|
@@ -265,16 +265,6 @@ var WebVision = (() => {
|
|
|
265
265
|
}
|
|
266
266
|
return depth;
|
|
267
267
|
}
|
|
268
|
-
function serializeElement(el) {
|
|
269
|
-
const sig = [];
|
|
270
|
-
const depth = getElementDepth(el);
|
|
271
|
-
sig.push(String(depth));
|
|
272
|
-
sig.push(el.tagName);
|
|
273
|
-
for (const attr of el.attributes) {
|
|
274
|
-
sig.push(`${attr.name}=${attr.value}`);
|
|
275
|
-
}
|
|
276
|
-
return sig.join("|");
|
|
277
|
-
}
|
|
278
268
|
|
|
279
269
|
// src/page/traverse.ts
|
|
280
270
|
function* traverseVxNode(vxNode, options = {}) {
|
|
@@ -488,7 +478,7 @@ var WebVision = (() => {
|
|
|
488
478
|
const parser = new VxTreeParser(options);
|
|
489
479
|
await parser.parse();
|
|
490
480
|
const domMap = parser.getDomMap();
|
|
491
|
-
const vxTree = parser.getTree(
|
|
481
|
+
const vxTree = parser.getTree();
|
|
492
482
|
globalThis[VX_DOM_SYMBOL] = domMap;
|
|
493
483
|
globalThis[VX_TREE_SYMBOL] = vxTree;
|
|
494
484
|
return vxTree;
|
|
@@ -585,7 +575,8 @@ var WebVision = (() => {
|
|
|
585
575
|
};
|
|
586
576
|
|
|
587
577
|
// src/page/parser.ts
|
|
588
|
-
var
|
|
578
|
+
var VX_NODE_REF_SYMBOL = Symbol("vx:ref");
|
|
579
|
+
var VX_NODE_COUNTER_SYMBOL = Symbol("vx:counter");
|
|
589
580
|
var VX_IGNORE_SYMBOL = Symbol("vx:ignore");
|
|
590
581
|
var VX_IGNORE_TAGS = ["svg", "script", "noscript", "style", "link", "meta"];
|
|
591
582
|
var VX_LABEL_ATTRS = [
|
|
@@ -662,21 +653,27 @@ var WebVision = (() => {
|
|
|
662
653
|
var VxTreeParser = class {
|
|
663
654
|
constructor(options = {}) {
|
|
664
655
|
this.options = options;
|
|
656
|
+
this.frameId = "";
|
|
665
657
|
this.viewport = { width: 0, height: 0 };
|
|
666
658
|
this.vxNodes = [];
|
|
667
659
|
this.probeElements = [];
|
|
668
660
|
this.domRefMap = /* @__PURE__ */ new Map();
|
|
661
|
+
this.counter = 0;
|
|
662
|
+
this.usedCounters = /* @__PURE__ */ new Set();
|
|
663
|
+
this.frameId = options.frameId ?? "";
|
|
669
664
|
}
|
|
670
|
-
|
|
665
|
+
parse() {
|
|
671
666
|
this.viewport = getViewportSize();
|
|
672
667
|
if (this.options.probeViewport) {
|
|
673
668
|
this.probeElements = probeViewport();
|
|
674
669
|
}
|
|
675
|
-
|
|
670
|
+
this.usedCounters.clear();
|
|
671
|
+
this.collectDomCounters(document.documentElement);
|
|
672
|
+
const vxRoot = this.parseNode(document.documentElement, null);
|
|
676
673
|
this.vxNodes = this.pruneRecursive(vxRoot);
|
|
677
674
|
}
|
|
678
|
-
getTree(
|
|
679
|
-
return new VxTreeView(this.vxNodes, frameId, iframeRef);
|
|
675
|
+
getTree() {
|
|
676
|
+
return new VxTreeView(this.vxNodes, this.frameId, this.options.iframeRef);
|
|
680
677
|
}
|
|
681
678
|
getNodes() {
|
|
682
679
|
return this.vxNodes;
|
|
@@ -684,14 +681,14 @@ var WebVision = (() => {
|
|
|
684
681
|
getDomMap() {
|
|
685
682
|
return this.domRefMap;
|
|
686
683
|
}
|
|
687
|
-
|
|
684
|
+
parseNode(node, parent) {
|
|
688
685
|
if (!node || node[VX_IGNORE_SYMBOL]) {
|
|
689
686
|
return null;
|
|
690
687
|
}
|
|
691
688
|
if (node instanceof Text) {
|
|
692
689
|
const textContent = normalizeText(node.textContent ?? "");
|
|
693
690
|
if (textContent) {
|
|
694
|
-
return
|
|
691
|
+
return this.makeNode(node, {
|
|
695
692
|
textContent,
|
|
696
693
|
hasVisibleArea: parent?.hasVisibleArea,
|
|
697
694
|
isOutsideViewport: parent?.isOutsideViewport,
|
|
@@ -704,11 +701,11 @@ var WebVision = (() => {
|
|
|
704
701
|
if (this.options.opaqueOverlays) {
|
|
705
702
|
makeOverlaysOpaque(node);
|
|
706
703
|
}
|
|
707
|
-
return
|
|
704
|
+
return this.parseElement(node);
|
|
708
705
|
}
|
|
709
706
|
return null;
|
|
710
707
|
}
|
|
711
|
-
|
|
708
|
+
parseElement(el) {
|
|
712
709
|
const skip = VX_IGNORE_TAGS.includes(el.tagName.toLowerCase()) || isHidden(el);
|
|
713
710
|
if (skip) {
|
|
714
711
|
this.clearRecursive(el);
|
|
@@ -717,7 +714,7 @@ var WebVision = (() => {
|
|
|
717
714
|
const parentEl = el.matches("option, optgroup") ? el.closest("select") ?? el : el;
|
|
718
715
|
const rect = parentEl.getBoundingClientRect();
|
|
719
716
|
const id = el.getAttribute("id") ?? "";
|
|
720
|
-
const vxNode =
|
|
717
|
+
const vxNode = this.makeNode(el, {
|
|
721
718
|
tagName: el.tagName.toLowerCase(),
|
|
722
719
|
id: isRandomIdentifier(id) ? void 0 : id,
|
|
723
720
|
classList: Array.from(el.classList).filter((cls) => !isRandomIdentifier(cls)).slice(0, 4),
|
|
@@ -732,7 +729,7 @@ var WebVision = (() => {
|
|
|
732
729
|
});
|
|
733
730
|
const children = [];
|
|
734
731
|
for (const child of el.childNodes) {
|
|
735
|
-
const childNode =
|
|
732
|
+
const childNode = this.parseNode(child, vxNode);
|
|
736
733
|
if (childNode != null) {
|
|
737
734
|
children.push(childNode);
|
|
738
735
|
}
|
|
@@ -744,9 +741,10 @@ var WebVision = (() => {
|
|
|
744
741
|
}
|
|
745
742
|
return vxNode;
|
|
746
743
|
}
|
|
747
|
-
|
|
748
|
-
const isNew =
|
|
749
|
-
const
|
|
744
|
+
makeNode(node, spec) {
|
|
745
|
+
const isNew = node[VX_NODE_REF_SYMBOL] !== void 0;
|
|
746
|
+
const counter = this.nextCounterValue();
|
|
747
|
+
const ref = `${this.frameId}${counter}`;
|
|
750
748
|
const vxNode = {
|
|
751
749
|
...spec,
|
|
752
750
|
ref,
|
|
@@ -755,7 +753,8 @@ var WebVision = (() => {
|
|
|
755
753
|
if (ref) {
|
|
756
754
|
this.domRefMap.set(ref, node);
|
|
757
755
|
}
|
|
758
|
-
node[
|
|
756
|
+
node[VX_NODE_COUNTER_SYMBOL] = counter;
|
|
757
|
+
node[VX_NODE_REF_SYMBOL] = ref;
|
|
759
758
|
return vxNode;
|
|
760
759
|
}
|
|
761
760
|
pruneRecursive(vxNode) {
|
|
@@ -885,18 +884,27 @@ var WebVision = (() => {
|
|
|
885
884
|
return attrs;
|
|
886
885
|
}
|
|
887
886
|
clearRecursive(node) {
|
|
888
|
-
node[
|
|
887
|
+
delete node[VX_NODE_REF_SYMBOL];
|
|
888
|
+
delete node[VX_NODE_COUNTER_SYMBOL];
|
|
889
889
|
if (node instanceof Element) {
|
|
890
890
|
for (const child of node.children) {
|
|
891
891
|
this.clearRecursive(child);
|
|
892
892
|
}
|
|
893
893
|
}
|
|
894
894
|
}
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
895
|
+
nextCounterValue() {
|
|
896
|
+
while (this.usedCounters.has(this.counter)) {
|
|
897
|
+
this.counter += 1;
|
|
898
|
+
}
|
|
899
|
+
return this.counter;
|
|
900
|
+
}
|
|
901
|
+
collectDomCounters(el) {
|
|
902
|
+
const cnt = el[VX_NODE_COUNTER_SYMBOL];
|
|
903
|
+
if (cnt !== void 0) {
|
|
904
|
+
this.usedCounters.add(cnt);
|
|
905
|
+
}
|
|
906
|
+
for (const child of el.children ?? []) {
|
|
907
|
+
this.collectDomCounters(child);
|
|
900
908
|
}
|
|
901
909
|
}
|
|
902
910
|
};
|
package/build/global.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/page/index.ts", "../src/page/dom.ts", "../src/page/traverse.ts", "../src/page/probe.ts", "../src/page/util.ts", "../src/page/render.ts", "../src/page/snapshot.ts", "../src/page/tree.ts", "../src/page/parser.ts", "../src/page/overlay.ts", "../src/page/highlight.ts", "../src/page/page.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './dom.js';\nexport * from './highlight.js';\nexport * from './overlay.js';\nexport * from './page.js';\nexport * from './parser.js';\nexport * from './probe.js';\nexport * from './render.js';\nexport * from './snapshot.js';\nexport * from './traverse.js';\nexport * from './tree.js';\nexport * from './util.js';\n", "const ORIGINAL_STYLE_SYMBOL = Symbol('vx:originalStyle');\n\nexport const INTERACTIVE_TAGS = ['a', 'button', 'input', 'textarea', 'select', 'label', 'option', 'optgroup'];\nexport const INTERACTIVE_ROLES = [\n 'clickable', 'button', 'link', 'checkbox', 'radio', 'textbox', 'combobox', 'listbox', 'menu', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'optgroup', 'progressbar', 'scrollbar', 'slider', 'spinbutton', 'switch', 'tab', 'tablist', 'timer', 'toolbar'];\n\nexport interface Viewport {\n width: number;\n height: number;\n}\n\nexport function isHidden(el: Element) {\n const style = getComputedStyle(el);\n if (style.display === 'none') {\n return true;\n }\n if (style.visibility === 'hidden') {\n return true;\n }\n if (style.opacity === '0') {\n return true;\n }\n return false;\n}\n\nexport function getNormalizedText(el: Element): string {\n return normalizeText(el.textContent ?? '');\n}\n\nexport function normalizeText(str: string) {\n return str\n .replace(/\\p{Cf}/gu, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nexport function truncateAttrValue(value: string, limit = 100) {\n if (value.match(/^(javascript:)?void/)) {\n return '';\n }\n if (value.startsWith('data:')) {\n return '';\n }\n if (value.length > limit) {\n return value.slice(0, limit) + '\u2026';\n }\n return value;\n}\n\nexport function escapeAttribute(value: string) {\n return value\n .replace(/&/g, '&') // Escape ampersand first!\n .replace(/\"/g, '"') // Escape double quotes\n .replace(/'/g, ''') // Escape single quotes\n .replace(/</g, '<') // Escape less than\n .replace(/>/g, '>') // Escape greater than\n .replace(/\\r?\\n/g, ' '); // Replace newlines with space\n}\n\nexport function containsSelector(el: Element, selector: string): boolean {\n return el.matches(selector) || !!el.querySelector(selector);\n}\n\nexport function getOffsetTop(node: Node) {\n let y = 0;\n let current: any = node;\n while (current) {\n y += current.offsetTop ?? 0;\n current = current.offsetParent;\n }\n return y;\n}\n\nexport function hasVisibleArea(element: Element) {\n const rect = element.getBoundingClientRect();\n const area = rect.width * rect.height;\n return area > 64;\n}\n\nexport function isDeepHidden(element: Element): boolean {\n if (isHidden(element)) {\n return true;\n }\n if (!hasVisibleArea(element)) {\n return [...element.children].every(el => isDeepHidden(el));\n }\n return false;\n}\n\nexport function isInteractive(el: Element) {\n const htmlEl = el as HTMLElement;\n if (INTERACTIVE_TAGS.includes(el.tagName.toLowerCase())) {\n return true;\n }\n const tabindex = htmlEl.getAttribute('tabindex');\n if (tabindex && parseInt(tabindex) >= 0) {\n return true;\n }\n const role = htmlEl.getAttribute('role') ?? htmlEl.getAttribute('aria-role') ?? '';\n if (INTERACTIVE_ROLES.includes(role)) {\n return true;\n }\n if (htmlEl.onclick != null) {\n return true;\n }\n const styles = getComputedStyle(htmlEl);\n if (styles.cursor === 'pointer') {\n return true;\n }\n return false;\n}\n\nexport function getViewportSize(): Viewport {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nexport function isRectInViewport(rect: DOMRect, viewport: Viewport) {\n return rect.left < viewport.width &&\n rect.right > 0 &&\n rect.top < viewport.height &&\n rect.bottom > 0;\n}\n\nexport function makeOverlaysOpaque(el: HTMLElement) {\n if (!(el as any)[ORIGINAL_STYLE_SYMBOL]) {\n (el as any)[ORIGINAL_STYLE_SYMBOL] = el.getAttribute('style');\n }\n // Only apply to big elements\n const rect = el.getBoundingClientRect();\n if (rect.width < 500 || rect.height < 500) {\n return;\n }\n const style = getComputedStyle(el);\n if (style.pointerEvents === 'none') {\n return;\n }\n el.style.setProperty('animation', 'none', 'important');\n el.style.setProperty('transition', 'none', 'important');\n el.style.setProperty('backdrop-filter', 'none', 'important');\n el.style.setProperty('mix-blend-mode', 'normal', 'important');\n el.style.setProperty('opacity', '1', 'important');\n el.style.setProperty('filter', 'none', 'important');\n const bg = style.backgroundColor;\n el.style.setProperty('background-color', removeAlpha(bg));\n}\n\nfunction removeAlpha(color: string) {\n const rgba = color.match(/^rgba\\((.*)\\)$/);\n if (!rgba) {\n return color;\n }\n const [r, g, b, a] = rgba[1].split(',').map(parseFloat);\n if (a > 0 && a < 1) {\n return `rgba(${r},${g},${b},1)`;\n }\n return color;\n}\n\nexport function isRandomIdentifier(str: string) {\n const words = str.split(/[_-]/g);\n return !words.some(w => isWordLike(w)) || words.some(w => isRandomString(w));\n}\n\nfunction isWordLike(str: string) {\n if (str.length <= 2) {\n return false;\n }\n // Words don't usually have a lot of vowels or consonants in a row\n if (/[^eyuioa]{4,}/.test(str)) {\n return false;\n }\n if (/[eyuioa]{4,}/.test(str)) {\n return false;\n }\n return true;\n}\n\nfunction isRandomString(str: string) {\n // Hex strings will often consist of at least one digit and A-F letters\n if (/^[0-9a-f]+$/i.test(str) && /[0-9]/.test(str)) {\n return true;\n }\n // Digits separated by non-digits are a sign of random ids\n if (/[0-9][^0-9]+[0-9]/.test(str)) {\n return true;\n }\n return false;\n}\n\nexport function fixZIndex(el: HTMLElement) {\n const _style = getComputedStyle(el);\n const zIndex = parseInt(_style.zIndex);\n if (!isNaN(zIndex)) {\n const maxZIndex = 2147483647;\n if (zIndex > maxZIndex - 200) {\n el.style.zIndex = String(zIndex - 1);\n }\n }\n}\n\nexport function getElementDepth(el: Element) {\n let depth = 0;\n while (el.parentElement) {\n el = el.parentElement;\n depth += 1;\n }\n return depth;\n}\n\nexport function serializeElement(el: Element) {\n const sig = [];\n const depth = getElementDepth(el);\n sig.push(String(depth));\n sig.push(el.tagName);\n for (const attr of el.attributes) {\n sig.push(`${attr.name}=${attr.value}`);\n }\n return sig.join('|');\n}\n", "import { VxNode } from './parser.js';\n\nexport type TraverseSkipFunction = (vxNode: VxNode, depth: number, index: number) => boolean;\nexport type TraverseTransformFunction = (vxNode: VxNode, depth: number, index: number) => VxNode;\n\nexport interface TraverseVxNodeOptions {\n depth?: number;\n index?: number;\n transform?: TraverseTransformFunction;\n skip?: TraverseSkipFunction;\n}\n\nexport interface TraverseVxNodeResult {\n vxNode: VxNode;\n depth: number;\n index: number;\n}\n\nexport function* traverseVxNode(vxNode: VxNode, options: TraverseVxNodeOptions = {}): IterableIterator<TraverseVxNodeResult> {\n const depth = options.depth ?? 0;\n const index = options.index ?? 0;\n const transformed = options.transform ? options.transform(vxNode, depth, index) : vxNode;\n yield { vxNode: transformed, depth, index };\n for (const [index, child] of (transformed.children ?? []).entries()) {\n if (options.skip) {\n const skipping = options.skip(child, depth, index);\n if (skipping) {\n continue;\n }\n }\n yield* traverseVxNode(child, {\n ...options,\n index,\n depth: depth + 1,\n });\n }\n}\n\nexport function* traverseElements(element: Element): IterableIterator<Element> {\n if (element) {\n yield element;\n }\n for (const child of element.children) {\n yield* traverseElements(child);\n }\n}\n", "import { getViewportSize } from './dom.js';\nimport { traverseElements } from './traverse.js';\n\n/**\n * Returns elements that have at least one corner visible in the viewport\n * and not occluded by other elements.\n */\nexport function probeViewport(): Element[] {\n const { width, height } = getViewportSize();\n const points = new PointSet(width, height);\n const result = new Set<Element>();\n for (const el of traverseElements(document.body)) {\n const rect = el.getBoundingClientRect();\n points.add(rect.left, rect.top);\n points.add(rect.right, rect.top);\n points.add(rect.left, rect.bottom);\n points.add(rect.right, rect.bottom);\n points.add(rect.left + rect.width / 2, rect.top + rect.height / 2);\n }\n for (const { x, y } of points.getAll()) {\n const element = document.elementFromPoint(x, y);\n if (element && !result.has(element)) {\n result.add(element);\n }\n }\n return Array.from(result);\n}\n\nexport class PointSet {\n\n private map = new Map<number, Set<number>>();\n\n constructor(public maxX: number, public maxY: number) {}\n\n *getAll() {\n for (const [y, set] of this.map.entries()) {\n for (const x of set) {\n yield { x, y };\n }\n }\n }\n\n has(x: number, y: number): boolean {\n if (x > this.maxX || y > this.maxY) {\n return false;\n }\n const set = this.map.get(y);\n return set ? set.has(x) : false;\n }\n\n add(x: number, y: number): void {\n if (x > this.maxX || y > this.maxY) {\n return;\n }\n const set = this.map.get(y);\n if (set) {\n set.add(x);\n } else {\n this.map.set(y, new Set([x]));\n }\n }\n\n}\n", "import { VxNode } from './parser.js';\n\nexport function isContainerNode(vxNode: VxNode): boolean {\n if (vxNode.tagName === 'select') {\n return false;\n }\n const children = vxNode.children ?? [];\n const hasTextChildren = children.some(child => !child.tagName);\n return children.length > 0 && !hasTextChildren;\n}\n\nexport function isObjectEmpty(obj: Record<string, any>): boolean {\n return !Object.values(obj).some(value => !!value);\n}\n\nexport function normalizeRef(ref: string): string {\n return ref.toLowerCase().trim().replace(/[^a-z0-9]/gi, '');\n}\n", "import { truncateAttrValue } from './dom.js';\nimport { VxNode } from './parser.js';\nimport { TraverseTransformFunction, traverseVxNode } from './traverse.js';\nimport { isContainerNode } from './util.js';\n\nexport interface VxRenderOptions {\n renderStyle?: 'html' | 'text';\n renderTagNames?: boolean;\n renderIds?: boolean;\n renderClassNames?: boolean;\n renderRefs?: boolean | 'all';\n renderLabelAttrs?: boolean;\n renderValueAttrs?: boolean;\n renderSrcAttrs?: boolean;\n renderDiff?: boolean;\n skipTags?: string[];\n skipNonInteractive?: boolean;\n maxSiblingTags?: Record<string, number>;\n}\n\nexport function renderVxNode(scope: VxNode, options: VxRenderOptions = {}) {\n const buffer = [];\n const transform = createRenderTransform(options);\n for (const { vxNode, depth } of traverseVxNode(scope, { transform })) {\n if (options.skipNonInteractive && !vxNode.isInteractive) {\n continue;\n }\n if (options.skipTags && options.skipTags.includes(vxNode.tagName ?? 'text')) {\n continue;\n }\n const indent = options.skipNonInteractive ? '' : ' '.repeat(depth);\n buffer.push(renderIndentedLine(indent, vxNode, options));\n }\n return buffer.join('\\n');\n}\n\nfunction renderIndentedLine(indent: string, vxNode: VxNode, options: VxRenderOptions = {}) {\n const diffPrefix = options.renderDiff ? (vxNode.isNew ? '+ ' : ' ') : '';\n if (!vxNode.tagName) {\n return [diffPrefix, indent, vxNode.textContent].filter(Boolean).join('');\n }\n const tagLine = renderTagLine(vxNode, options);\n const htmlStyle = options.renderStyle === 'html';\n return [\n diffPrefix,\n indent,\n tagLine,\n htmlStyle ? '' : ' ',\n vxNode.textContent ?? '',\n ].join('');\n}\n\nfunction renderTagLine(vxNode: VxNode, options: VxRenderOptions) {\n const htmlStyle = options.renderStyle === 'html';\n const components: Array<string | null> = [];\n if (options.renderTagNames && vxNode.tagName) {\n components.push(vxNode.tagName);\n }\n if (options.renderIds && vxNode.id) {\n if (htmlStyle) {\n components.push(`id=\"${vxNode.id}\"`);\n } else {\n components.push(`#${vxNode.id}`);\n }\n }\n if (options.renderClassNames && vxNode.classList?.length) {\n if (htmlStyle) {\n components.push(`class=\"${vxNode.classList.join(' ')}\"`);\n } else {\n components.push('.' + vxNode.classList.join('.'));\n }\n }\n if (options.renderRefs) {\n const isRenderRef = [\n options.renderRefs === 'all',\n options.renderRefs === true && !isContainerNode(vxNode),\n ].some(Boolean);\n if (isRenderRef) {\n components.push(`[@${vxNode.ref}]`);\n }\n }\n const attrs = [];\n if (options.renderLabelAttrs) {\n for (const [attr, value] of Object.entries(vxNode.labelAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (options.renderValueAttrs) {\n for (const [attr, value] of Object.entries(vxNode.valueAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (options.renderSrcAttrs) {\n for (const [attr, value] of Object.entries(vxNode.srcAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (htmlStyle) {\n components.push(...attrs);\n } else {\n components.push(...attrs.map(attr => `[${attr}]`));\n }\n return htmlStyle ? `<${components.join(' ')}>` : components.join('');\n}\n\nfunction createRenderTransform(options: VxRenderOptions): TraverseTransformFunction {\n const { maxSiblingTags } = options;\n return (vxNode: VxNode) => {\n if (maxSiblingTags) {\n const children: VxNode[] = [];\n const counts: Record<string, number> = {};\n for (const child of vxNode.children ?? []) {\n const tagName = child.tagName ?? '';\n const count = (counts[tagName] ?? 0) + 1;\n counts[tagName] = count;\n const maxCount = maxSiblingTags[tagName] ?? Infinity;\n if (count > maxCount) {\n continue;\n }\n children.push(child);\n }\n return { ...vxNode, children };\n }\n return vxNode;\n };\n}\n", "import { VxTreeOptions, VxTreeParser } from './parser.js';\nimport { VxTreeView } from './tree.js';\nimport { normalizeRef } from './util.js';\n\nexport const VX_DOM_SYMBOL = Symbol('vx:dom');\nexport const VX_TREE_SYMBOL = Symbol('vx:tree');\nexport const VX_LAST_REFS_SYMBOL = Symbol('vx:lastRefs');\n\nexport async function captureSnapshot(options: VxTreeOptions = {}) {\n const parser = new VxTreeParser(options);\n await parser.parse();\n const domMap = parser.getDomMap();\n const vxTree = parser.getTree(options.frameId ?? '0', options.iframeRef);\n (globalThis as any)[VX_DOM_SYMBOL] = domMap;\n (globalThis as any)[VX_TREE_SYMBOL] = vxTree;\n return vxTree;\n}\n\nexport function getSnapshot(): VxTreeView {\n const vxTree = (globalThis as any)[VX_TREE_SYMBOL] as VxTreeView;\n if (!vxTree) {\n throw new Error('[VX] Snapshot not found');\n }\n return vxTree;\n}\n\nexport function resolveDomNode(ref: string): Node | null {\n const domMap = (globalThis as any)[VX_DOM_SYMBOL] as Map<string, Node>;\n if (!domMap) {\n return null;\n }\n const normalizedRef = normalizeRef(ref);\n return domMap.get(normalizedRef) ?? null;\n}\n", "import { highlightEl, VxHighlightOptions } from './highlight.js';\nimport { clearOverlay } from './overlay.js';\nimport { VxNode } from './parser.js';\nimport { renderVxNode, VxRenderOptions } from './render.js';\nimport { resolveDomNode } from './snapshot.js';\nimport { traverseVxNode, TraverseVxNodeOptions } from './traverse.js';\nimport { isContainerNode, normalizeRef } from './util.js';\n\nexport class VxTreeView {\n\n private refMap = new Map<string, VxNode>();\n\n constructor(\n public nodes: VxNode[],\n public frameId: string,\n public iframeRef?: string,\n ) {\n this.buildRefMap(nodes);\n }\n\n get nodeCount() {\n return this.refMap.size;\n }\n\n *traverse(options: TraverseVxNodeOptions = {}): IterableIterator<{ vxNode: VxNode; depth: number }> {\n for (const vxNode of this.nodes) {\n yield* traverseVxNode(vxNode, options);\n }\n }\n\n private buildRefMap(nodes: VxNode[]) {\n for (const node of nodes) {\n if (node.ref) {\n this.refMap.set(node.ref, node);\n }\n this.buildRefMap(node.children ?? []);\n }\n }\n\n hasRef(ref: string): boolean {\n const nref = normalizeRef(ref);\n return this.refMap.has(nref);\n }\n\n findNode(ref: string): VxNode | null {\n const nref = normalizeRef(ref);\n return this.refMap.get(nref) ?? null;\n }\n\n render(options: VxRenderOptions = {}) {\n return this.nodes.map(node => {\n return renderVxNode(node, options);\n }).join('\\n');\n }\n\n highlight(options: VxHighlightOptions = {}) {\n if (options.clearOverlay) {\n clearOverlay();\n }\n const leafOnly = !options.includeAll;\n const refs = this.collectRefs(leafOnly, options.filterRefs);\n this.highlightRefs(refs, options);\n }\n\n highlightRefs(refs: string[], options: VxHighlightOptions = {}) {\n for (const ref of refs) {\n const el = resolveDomNode(ref);\n if (el instanceof Element) {\n const vxNode = this.findNode(ref);\n const isNew = vxNode?.isNew ?? false;\n const color = options.useColors ? undefined : (isNew ? '#0a0' : '#060');\n highlightEl(el, ref, color);\n }\n }\n }\n\n collectRefs(leafOnly = true, filterRefs?: string[]) {\n const refs: string[] = [];\n for (const { vxNode } of this.traverse()) {\n if (!vxNode.ref) {\n continue;\n }\n if (leafOnly && isContainerNode(vxNode)) {\n continue;\n }\n if (filterRefs && !filterRefs.includes(vxNode.ref)) {\n continue;\n }\n refs.push(vxNode.ref);\n }\n return refs;\n }\n\n}\n", "import { getViewportSize, hasVisibleArea, isInteractive, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText, serializeElement, truncateAttrValue, Viewport } from './dom.js';\nimport { isHidden } from './dom.js';\nimport { probeViewport } from './probe.js';\nimport { VxTreeView } from './tree.js';\nimport { isObjectEmpty } from './util.js';\n\nexport const VX_NODE_SYMBOL = Symbol('vx:node');\nexport const VX_IGNORE_SYMBOL = Symbol('vx:ignore');\n\nexport const VX_IGNORE_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];\n\nexport const VX_LABEL_ATTRS = [\n 'title',\n 'alt',\n 'placeholder',\n 'aria-role',\n 'aria-label',\n 'aria-description',\n 'aria-placeholder',\n 'aria-valuetext',\n];\nexport const VX_LABEL_ATTR_PATTERNS = [\n /^data-label/, // data-label attributes\n /title-/i, // title-* attributes\n];\nexport const VX_VALUE_ATTRS = ['value', 'checked', 'selected', 'disabled', 'readonly'];\nexport const VX_SRC_ATTRS = ['src', 'href'];\n\nexport const VX_TAG_PREFERENCE = [\n 'a', 'iframe', 'input', 'button', 'select', 'textarea', 'img', 'label',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n 'section', 'article', 'main', 'header', 'footer', 'nav', 'aside',\n 'form', 'input', 'textarea', 'select', 'option', 'fieldset', 'legend',\n 'p', 'pre', 'code', 'blockquote', 'figure', 'figcaption',\n 'table', 'thead', 'tbody', 'tr', 'td', 'th',\n 'strong', 'em', 'sub', 'sup',\n];\n\nconst VX_KEEP_SELECTOR = 'a, button, input, textarea, select, label, iframe, option, optgroup';\n\nexport type VxDomNode = Element | Text;\n\nexport interface VxNode {\n ref?: string;\n tagName?: string;\n children?: VxNode[];\n id?: string;\n classList?: string[];\n textContent?: string;\n hasVisibleArea?: boolean;\n isInteractive?: boolean;\n isOutsideViewport?: boolean;\n isProbeHit?: boolean;\n isKept?: boolean;\n isNew?: boolean;\n srcAttrs?: Record<string, string>;\n labelAttrs?: Record<string, string>;\n valueAttrs?: Record<string, string>;\n}\n\nexport interface VxTreeOptions {\n frameId?: string;\n iframeRef?: string;\n skipImages?: boolean;\n viewportOnly?: boolean;\n probeViewport?: boolean;\n opaqueOverlays?: boolean;\n unnestDivs?: boolean;\n}\n\nexport type VxTransform = (vxNode: VxNode) => VxNode;\n\nexport class VxTreeParser {\n\n private viewport: Viewport = { width: 0, height: 0 };\n private vxNodes: VxNode[] = [];\n private probeElements: Element[] = [];\n private domRefMap = new Map<string, Node>();\n\n constructor(public options: VxTreeOptions = {}) {}\n\n async parse() {\n this.viewport = getViewportSize();\n if (this.options.probeViewport) {\n this.probeElements = probeViewport();\n }\n const vxRoot = await this.parseNode(document.documentElement, null)!;\n this.vxNodes = this.pruneRecursive(vxRoot);\n }\n\n getTree(frameId: string, iframeRef?: string): VxTreeView {\n return new VxTreeView(this.vxNodes, frameId, iframeRef);\n }\n\n getNodes(): VxNode[] {\n return this.vxNodes;\n }\n\n getDomMap() {\n return this.domRefMap;\n }\n\n private async parseNode(node: Node, parent: VxNode | null): Promise<VxNode | null> {\n if (!node || (node as any)[VX_IGNORE_SYMBOL]) {\n return null;\n }\n if (node instanceof Text) {\n // Single instances of Text nodes can only occur in \"text\"\n // (e.g. when regular text is interspersed with links and other elements)\n const textContent = normalizeText(node.textContent ?? '');\n if (textContent) {\n return await this.makeNode(node, {\n textContent,\n hasVisibleArea: parent?.hasVisibleArea,\n isOutsideViewport: parent?.isOutsideViewport,\n isProbeHit: parent?.isProbeHit,\n });\n }\n return null;\n }\n if (node instanceof Element) {\n if (this.options.opaqueOverlays) {\n makeOverlaysOpaque(node as HTMLElement);\n }\n return await this.parseElement(node);\n }\n return null;\n }\n\n private async parseElement(el: Element): Promise<VxNode | null> {\n const skip = VX_IGNORE_TAGS.includes(el.tagName.toLowerCase()) || isHidden(el);\n if (skip) {\n this.clearRecursive(el);\n return null;\n }\n // OPTION and OPTGROUP are special cases, we evaluate their rects and visibility\n // checks using their parent SELECT element\n const parentEl = el.matches('option, optgroup') ? el.closest('select') ?? el : el;\n const rect = parentEl.getBoundingClientRect();\n const id = el.getAttribute('id') ?? '';\n const vxNode = await this.makeNode(el, {\n tagName: el.tagName.toLowerCase(),\n id: isRandomIdentifier(id) ? undefined : id,\n classList: Array.from(el.classList)\n .filter(cls => !isRandomIdentifier(cls))\n .slice(0, 4),\n labelAttrs: this.collectLabelAttrs(el),\n valueAttrs: this.collectValueAttrs(el),\n srcAttrs: this.collectSrcAttrs(el),\n hasVisibleArea: hasVisibleArea(parentEl),\n isInteractive: isInteractive(parentEl),\n isOutsideViewport: !isRectInViewport(rect, this.viewport),\n isProbeHit: this.isProbeHit(parentEl),\n isKept: el.matches(VX_KEEP_SELECTOR),\n });\n const children: VxNode[] = [];\n for (const child of el.childNodes) {\n const childNode = await this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\n }\n // Special case: if the only child is a text node, return a single node with the text content\n if (children.length === 1 && !children[0]?.tagName) {\n vxNode.textContent = normalizeText(children[0].textContent ?? '');\n } else {\n vxNode.children = children;\n }\n return vxNode;\n }\n\n private async makeNode(node: Node, spec: Omit<VxNode, 'ref'>): Promise<VxNode> {\n const isNew = !(node as any)[VX_NODE_SYMBOL];\n const ref = await this.createRef(node);\n const vxNode: VxNode = {\n ...spec,\n ref,\n isNew,\n };\n if (ref) {\n this.domRefMap.set(ref, node);\n }\n (node as any)[VX_NODE_SYMBOL] = vxNode;\n return vxNode;\n }\n\n private pruneRecursive(vxNode: VxNode | null): VxNode[] {\n if (!vxNode) {\n return [];\n }\n const children = vxNode.children ?? [];\n // Recursively prune children\n const newChildren = children.flatMap(child => this.pruneRecursive(child));\n // If the node itself is omitted, replace it with children\n if (this.shouldOmit(vxNode)) {\n return newChildren;\n }\n vxNode.children = newChildren;\n // Collapse single-child elements\n if (newChildren.length === 1) {\n const child = newChildren[0];\n return this.collapseSingleChild(vxNode, child);\n }\n return [vxNode];\n }\n\n private collapseSingleChild(parent: VxNode, child: VxNode): VxNode[] {\n const preferParent = this.collapsePreferParent(parent, child);\n const merged = preferParent ?\n this.collapseMerge(parent, child) :\n this.collapseMerge(child, parent);\n return this.pruneRecursive({\n ...merged,\n children: child.children,\n textContent: child.textContent,\n });\n }\n\n private collapsePreferParent(parent: VxNode, child: VxNode) {\n const parentRank = VX_TAG_PREFERENCE.indexOf(parent.tagName ?? '');\n const childRank = VX_TAG_PREFERENCE.indexOf(child.tagName ?? '');\n if (parentRank === -1 && childRank === -1) {\n const parentAttrCount = Object.keys({\n ...parent.labelAttrs,\n ...parent.valueAttrs,\n ...parent.srcAttrs,\n }).length;\n const childAttrCount = Object.keys({\n ...child.labelAttrs,\n ...child.valueAttrs,\n ...child.srcAttrs,\n }).length;\n return parentAttrCount > childAttrCount;\n }\n return parentRank !== -1 && (childRank === -1 || parentRank < childRank);\n }\n\n private collapseMerge(a: VxNode, b: VxNode): VxNode {\n return {\n ...b,\n ...a,\n labelAttrs: { ...b.labelAttrs, ...a.labelAttrs },\n valueAttrs: { ...b.valueAttrs, ...a.valueAttrs },\n srcAttrs: { ...b.srcAttrs, ...a.srcAttrs },\n };\n }\n\n private shouldOmit(vxNode: VxNode): boolean {\n const tagName = vxNode.tagName ?? '';\n if (!vxNode.hasVisibleArea) {\n return true;\n }\n if (this.options.viewportOnly && vxNode.isOutsideViewport) {\n return true;\n }\n if (this.options.probeViewport && !vxNode.isProbeHit) {\n return true;\n }\n if (this.options.skipImages && vxNode.tagName === 'img') {\n return true;\n }\n const hasText = !!vxNode.textContent;\n const hasChildren = (vxNode.children ?? []).length > 0;\n const hasAttrs = [vxNode.labelAttrs, vxNode.valueAttrs, vxNode.srcAttrs]\n .some(attrs => !isObjectEmpty(attrs ?? {}));\n if (this.options.unnestDivs) {\n const isDivOrSpan = ['div', 'span'].includes(tagName);\n if (isDivOrSpan && hasChildren && !hasAttrs) {\n return true;\n }\n }\n if (vxNode.isKept) {\n return false;\n }\n return !hasText && !hasAttrs && !hasChildren;\n }\n\n private isProbeHit(el: Element): boolean {\n // TODO this is a bit brute-forcish, consider improving\n for (const probeEl of this.probeElements) {\n if (el.contains(probeEl)) {\n return true;\n }\n }\n return false;\n }\n\n private collectLabelAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n // Loop through all element attributes\n for (const attr of el.attributes) {\n const attrName = attr.name;\n const value = truncateAttrValue(attr.value);\n if (!value) {\n continue; // Skip empty values\n }\n // Check for exact matches in VX_LABEL_ATTRS\n if (VX_LABEL_ATTRS.includes(attrName)) {\n attrs[attrName] = value;\n continue;\n }\n // Check for regex pattern matches\n if (VX_LABEL_ATTR_PATTERNS.some(pattern => pattern.test(attrName))) {\n attrs[attrName] = value;\n }\n }\n return attrs;\n }\n\n private collectValueAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of VX_VALUE_ATTRS) {\n const value = (el as any)[attr] ?? '';\n if (value) {\n attrs[attr] = String(value);\n }\n }\n return attrs;\n }\n\n private collectSrcAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of VX_SRC_ATTRS) {\n const value = truncateAttrValue((el as any)[attr] ?? '');\n if (value) {\n attrs[attr] = value;\n }\n }\n return attrs;\n }\n\n private clearRecursive(node: Node) {\n (node as any)[VX_NODE_SYMBOL] = null;\n if (node instanceof Element) {\n for (const child of node.children) {\n this.clearRecursive(child as Element);\n }\n }\n }\n\n private async createRef(node: Node): Promise<string | undefined> {\n if (node instanceof Element) {\n const sig = serializeElement(node);\n const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(sig).buffer);\n return [...new Uint8Array(hash)].map(b => b.toString(16).padStart(2, '0'))\n .join('')\n .substring(0, 8);\n }\n }\n\n}\n", "import { VX_IGNORE_SYMBOL } from './parser.js';\n\nexport function showPoint(x: number, y: number, clear = true) {\n if (clear) {\n clearOverlay();\n }\n const point = document.createElement('div');\n point.style.position = 'absolute';\n point.style.left = `${x}px`;\n point.style.top = `${y}px`;\n point.style.width = '32px';\n point.style.height = '32px';\n point.style.transform = 'translate(-50%, -50%)';\n point.style.backgroundColor = 'red';\n point.style.borderRadius = '100%';\n point.style.opacity = '0.5';\n const container = getOverlayContainer();\n container.appendChild(point);\n}\n\nexport function clearOverlay() {\n const container = getOverlayContainer();\n container.remove();\n}\n\nexport function getOverlayContainer() {\n let container = document.querySelector('#webvision-overlay') as HTMLElement;\n if (!container) {\n container = document.createElement('div');\n (container as any)[VX_IGNORE_SYMBOL] = true;\n container.id = 'webvision-overlay';\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.bottom = '0';\n container.style.right = '0';\n container.style.zIndex = '2147483647'; // Maximum z-index value\n container.style.pointerEvents = 'none';\n document.body.appendChild(container);\n }\n return container;\n}\n", "import { getOverlayContainer } from './overlay.js';\n\nexport interface VxHighlightOptions {\n highlight?: boolean;\n clearOverlay?: boolean;\n includeAll?: boolean;\n filterRefs?: string[];\n useColors?: boolean;\n}\n\nexport function highlightEl(el: Element, ref: string, color?: string) {\n if (!(el instanceof Element)) {\n return;\n }\n if (el instanceof HTMLOptGroupElement) {\n return;\n }\n if (el instanceof HTMLOptionElement) {\n return;\n }\n const container = getOverlayContainer();\n const rect = el.getBoundingClientRect();\n const overlay = document.createElement('div');\n container.appendChild(overlay);\n overlay.style.position = 'absolute';\n overlay.style.top = `${rect.top}px`;\n overlay.style.left = `${rect.left}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n overlay.style.border = `2px solid ${color}`;\n const label = document.createElement('div');\n overlay.appendChild(label);\n label.style.position = 'absolute';\n label.style.bottom = `100%`;\n label.style.left = `0`;\n label.style.backgroundColor = color ?? getRandomColor(ref);\n label.style.color = 'white';\n label.style.fontSize = '10px';\n label.style.fontFamily = 'monospace';\n label.style.fontWeight = 'normal';\n label.style.fontStyle = 'normal';\n label.style.opacity = '0.8';\n label.style.padding = '0 2px';\n label.style.transform = 'translateY(50%)';\n label.textContent = String(ref);\n}\n\nfunction getRandomColor(ref: string) {\n const index = ref.charCodeAt(0);\n const hue = (index * 120 * .382) % 360;\n return `hsl(${hue}, 85%, 50%)`;\n}\n", "import { VxNode } from './parser.js';\nimport { VxRenderOptions } from './render.js';\nimport { VxTreeView } from './tree.js';\n\nexport class VxPageView {\n\n private vxTreeMap = new Map<string, VxTreeView>();\n\n constructor(vxTrees: VxTreeView[]) {\n for (const vxTree of vxTrees) {\n this.vxTreeMap.set(vxTree.frameId, vxTree);\n }\n }\n\n get vxTrees() {\n return [...this.vxTreeMap.values()];\n }\n\n get nodeCount() {\n return this.vxTrees.reduce((acc, vxTree) => acc + vxTree.nodeCount, 0);\n }\n\n findNodeByRef(ref: string): VxNode | null {\n const frame = this.findFrameByRef(ref);\n if (frame == null) {\n return null;\n }\n return frame.findNode(ref);\n }\n\n findFrameById(frameId: string): VxTreeView | null {\n return this.vxTreeMap.get(frameId) ?? null;\n }\n\n findFrameByRef(ref: string): VxTreeView | null {\n const frame = this.vxTrees.find(f => f.hasRef(ref));\n return frame ?? null;\n }\n\n getFrameByRef(ref: string): VxTreeView {\n const frame = this.findFrameByRef(ref);\n if (frame == null) {\n throw new Error(`[VX] Frame not found for [ref=${ref}]`);\n }\n return frame;\n }\n\n findParentFrame(frameId: string): VxTreeView | null {\n const frame = this.findFrameById(frameId);\n const iframeRef = frame?.iframeRef;\n if (iframeRef == null) {\n return null;\n }\n return this.findFrameByRef(iframeRef);\n }\n\n isFrameShown(frameId: string): boolean {\n const frame = this.findFrameById(frameId);\n if (!frame) {\n return false;\n }\n const parentFrame = this.findParentFrame(frameId);\n const { iframeRef } = frame;\n if (parentFrame == null || iframeRef == null) {\n // Top level document is always shown\n return true;\n }\n const existsInParent = !!parentFrame.findNode(iframeRef);\n return existsInParent ? this.isFrameShown(parentFrame.frameId) : false;\n }\n\n renderAll(options: VxRenderOptions) {\n return this.vxTrees.map(frame => {\n const rendered = frame?.render(options);\n return [\n `FRAME ${frame.frameId}${frame.iframeRef ? ` [@${frame.iframeRef}]` : ''}`,\n rendered,\n ].join('\\n\\n');\n }).join('\\n\\n');\n }\n\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["export * from './dom.js';\nexport * from './highlight.js';\nexport * from './overlay.js';\nexport * from './page.js';\nexport * from './parser.js';\nexport * from './probe.js';\nexport * from './render.js';\nexport * from './snapshot.js';\nexport * from './traverse.js';\nexport * from './tree.js';\nexport * from './util.js';\n", "const ORIGINAL_STYLE_SYMBOL = Symbol('vx:originalStyle');\n\nexport const INTERACTIVE_TAGS = ['a', 'button', 'input', 'textarea', 'select', 'label', 'option', 'optgroup'];\nexport const INTERACTIVE_ROLES = [\n 'clickable', 'button', 'link', 'checkbox', 'radio', 'textbox', 'combobox', 'listbox', 'menu', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'optgroup', 'progressbar', 'scrollbar', 'slider', 'spinbutton', 'switch', 'tab', 'tablist', 'timer', 'toolbar'];\n\nexport interface Viewport {\n width: number;\n height: number;\n}\n\nexport function isHidden(el: Element) {\n const style = getComputedStyle(el);\n if (style.display === 'none') {\n return true;\n }\n if (style.visibility === 'hidden') {\n return true;\n }\n if (style.opacity === '0') {\n return true;\n }\n return false;\n}\n\nexport function getNormalizedText(el: Element): string {\n return normalizeText(el.textContent ?? '');\n}\n\nexport function normalizeText(str: string) {\n return str\n .replace(/\\p{Cf}/gu, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nexport function truncateAttrValue(value: string, limit = 100) {\n if (value.match(/^(javascript:)?void/)) {\n return '';\n }\n if (value.startsWith('data:')) {\n return '';\n }\n if (value.length > limit) {\n return value.slice(0, limit) + '\u2026';\n }\n return value;\n}\n\nexport function escapeAttribute(value: string) {\n return value\n .replace(/&/g, '&') // Escape ampersand first!\n .replace(/\"/g, '"') // Escape double quotes\n .replace(/'/g, ''') // Escape single quotes\n .replace(/</g, '<') // Escape less than\n .replace(/>/g, '>') // Escape greater than\n .replace(/\\r?\\n/g, ' '); // Replace newlines with space\n}\n\nexport function containsSelector(el: Element, selector: string): boolean {\n return el.matches(selector) || !!el.querySelector(selector);\n}\n\nexport function getOffsetTop(node: Node) {\n let y = 0;\n let current: any = node;\n while (current) {\n y += current.offsetTop ?? 0;\n current = current.offsetParent;\n }\n return y;\n}\n\nexport function hasVisibleArea(element: Element) {\n const rect = element.getBoundingClientRect();\n const area = rect.width * rect.height;\n return area > 64;\n}\n\nexport function isDeepHidden(element: Element): boolean {\n if (isHidden(element)) {\n return true;\n }\n if (!hasVisibleArea(element)) {\n return [...element.children].every(el => isDeepHidden(el));\n }\n return false;\n}\n\nexport function isInteractive(el: Element) {\n const htmlEl = el as HTMLElement;\n if (INTERACTIVE_TAGS.includes(el.tagName.toLowerCase())) {\n return true;\n }\n const tabindex = htmlEl.getAttribute('tabindex');\n if (tabindex && parseInt(tabindex) >= 0) {\n return true;\n }\n const role = htmlEl.getAttribute('role') ?? htmlEl.getAttribute('aria-role') ?? '';\n if (INTERACTIVE_ROLES.includes(role)) {\n return true;\n }\n if (htmlEl.onclick != null) {\n return true;\n }\n const styles = getComputedStyle(htmlEl);\n if (styles.cursor === 'pointer') {\n return true;\n }\n return false;\n}\n\nexport function getViewportSize(): Viewport {\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nexport function isRectInViewport(rect: DOMRect, viewport: Viewport) {\n return rect.left < viewport.width &&\n rect.right > 0 &&\n rect.top < viewport.height &&\n rect.bottom > 0;\n}\n\nexport function makeOverlaysOpaque(el: HTMLElement) {\n if (!(el as any)[ORIGINAL_STYLE_SYMBOL]) {\n (el as any)[ORIGINAL_STYLE_SYMBOL] = el.getAttribute('style');\n }\n // Only apply to big elements\n const rect = el.getBoundingClientRect();\n if (rect.width < 500 || rect.height < 500) {\n return;\n }\n const style = getComputedStyle(el);\n if (style.pointerEvents === 'none') {\n return;\n }\n el.style.setProperty('animation', 'none', 'important');\n el.style.setProperty('transition', 'none', 'important');\n el.style.setProperty('backdrop-filter', 'none', 'important');\n el.style.setProperty('mix-blend-mode', 'normal', 'important');\n el.style.setProperty('opacity', '1', 'important');\n el.style.setProperty('filter', 'none', 'important');\n const bg = style.backgroundColor;\n el.style.setProperty('background-color', removeAlpha(bg));\n}\n\nfunction removeAlpha(color: string) {\n const rgba = color.match(/^rgba\\((.*)\\)$/);\n if (!rgba) {\n return color;\n }\n const [r, g, b, a] = rgba[1].split(',').map(parseFloat);\n if (a > 0 && a < 1) {\n return `rgba(${r},${g},${b},1)`;\n }\n return color;\n}\n\nexport function isRandomIdentifier(str: string) {\n const words = str.split(/[_-]/g);\n return !words.some(w => isWordLike(w)) || words.some(w => isRandomString(w));\n}\n\nfunction isWordLike(str: string) {\n if (str.length <= 2) {\n return false;\n }\n // Words don't usually have a lot of vowels or consonants in a row\n if (/[^eyuioa]{4,}/.test(str)) {\n return false;\n }\n if (/[eyuioa]{4,}/.test(str)) {\n return false;\n }\n return true;\n}\n\nfunction isRandomString(str: string) {\n // Hex strings will often consist of at least one digit and A-F letters\n if (/^[0-9a-f]+$/i.test(str) && /[0-9]/.test(str)) {\n return true;\n }\n // Digits separated by non-digits are a sign of random ids\n if (/[0-9][^0-9]+[0-9]/.test(str)) {\n return true;\n }\n return false;\n}\n\nexport function fixZIndex(el: HTMLElement) {\n const _style = getComputedStyle(el);\n const zIndex = parseInt(_style.zIndex);\n if (!isNaN(zIndex)) {\n const maxZIndex = 2147483647;\n if (zIndex > maxZIndex - 200) {\n el.style.zIndex = String(zIndex - 1);\n }\n }\n}\n\nexport function getElementDepth(el: Element) {\n let depth = 0;\n while (el.parentElement) {\n el = el.parentElement;\n depth += 1;\n }\n return depth;\n}\n", "import { VxNode } from './parser.js';\n\nexport type TraverseSkipFunction = (vxNode: VxNode, depth: number, index: number) => boolean;\nexport type TraverseTransformFunction = (vxNode: VxNode, depth: number, index: number) => VxNode;\n\nexport interface TraverseVxNodeOptions {\n depth?: number;\n index?: number;\n transform?: TraverseTransformFunction;\n skip?: TraverseSkipFunction;\n}\n\nexport interface TraverseVxNodeResult {\n vxNode: VxNode;\n depth: number;\n index: number;\n}\n\nexport function* traverseVxNode(vxNode: VxNode, options: TraverseVxNodeOptions = {}): IterableIterator<TraverseVxNodeResult> {\n const depth = options.depth ?? 0;\n const index = options.index ?? 0;\n const transformed = options.transform ? options.transform(vxNode, depth, index) : vxNode;\n yield { vxNode: transformed, depth, index };\n for (const [index, child] of (transformed.children ?? []).entries()) {\n if (options.skip) {\n const skipping = options.skip(child, depth, index);\n if (skipping) {\n continue;\n }\n }\n yield* traverseVxNode(child, {\n ...options,\n index,\n depth: depth + 1,\n });\n }\n}\n\nexport function* traverseElements(element: Element): IterableIterator<Element> {\n if (element) {\n yield element;\n }\n for (const child of element.children) {\n yield* traverseElements(child);\n }\n}\n", "import { getViewportSize } from './dom.js';\nimport { traverseElements } from './traverse.js';\n\n/**\n * Returns elements that have at least one corner visible in the viewport\n * and not occluded by other elements.\n */\nexport function probeViewport(): Element[] {\n const { width, height } = getViewportSize();\n const points = new PointSet(width, height);\n const result = new Set<Element>();\n for (const el of traverseElements(document.body)) {\n const rect = el.getBoundingClientRect();\n points.add(rect.left, rect.top);\n points.add(rect.right, rect.top);\n points.add(rect.left, rect.bottom);\n points.add(rect.right, rect.bottom);\n points.add(rect.left + rect.width / 2, rect.top + rect.height / 2);\n }\n for (const { x, y } of points.getAll()) {\n const element = document.elementFromPoint(x, y);\n if (element && !result.has(element)) {\n result.add(element);\n }\n }\n return Array.from(result);\n}\n\nexport class PointSet {\n\n private map = new Map<number, Set<number>>();\n\n constructor(public maxX: number, public maxY: number) {}\n\n *getAll() {\n for (const [y, set] of this.map.entries()) {\n for (const x of set) {\n yield { x, y };\n }\n }\n }\n\n has(x: number, y: number): boolean {\n if (x > this.maxX || y > this.maxY) {\n return false;\n }\n const set = this.map.get(y);\n return set ? set.has(x) : false;\n }\n\n add(x: number, y: number): void {\n if (x > this.maxX || y > this.maxY) {\n return;\n }\n const set = this.map.get(y);\n if (set) {\n set.add(x);\n } else {\n this.map.set(y, new Set([x]));\n }\n }\n\n}\n", "import { VxNode } from './parser.js';\n\nexport function isContainerNode(vxNode: VxNode): boolean {\n if (vxNode.tagName === 'select') {\n return false;\n }\n const children = vxNode.children ?? [];\n const hasTextChildren = children.some(child => !child.tagName);\n return children.length > 0 && !hasTextChildren;\n}\n\nexport function isObjectEmpty(obj: Record<string, any>): boolean {\n return !Object.values(obj).some(value => !!value);\n}\n\nexport function normalizeRef(ref: string): string {\n return ref.toLowerCase().trim().replace(/[^a-z0-9]/gi, '');\n}\n", "import { truncateAttrValue } from './dom.js';\nimport { VxNode } from './parser.js';\nimport { TraverseTransformFunction, traverseVxNode } from './traverse.js';\nimport { isContainerNode } from './util.js';\n\nexport interface VxRenderOptions {\n renderStyle?: 'html' | 'text';\n renderTagNames?: boolean;\n renderIds?: boolean;\n renderClassNames?: boolean;\n renderRefs?: boolean | 'all';\n renderLabelAttrs?: boolean;\n renderValueAttrs?: boolean;\n renderSrcAttrs?: boolean;\n renderDiff?: boolean;\n skipTags?: string[];\n skipNonInteractive?: boolean;\n maxSiblingTags?: Record<string, number>;\n}\n\nexport function renderVxNode(scope: VxNode, options: VxRenderOptions = {}) {\n const buffer = [];\n const transform = createRenderTransform(options);\n for (const { vxNode, depth } of traverseVxNode(scope, { transform })) {\n if (options.skipNonInteractive && !vxNode.isInteractive) {\n continue;\n }\n if (options.skipTags && options.skipTags.includes(vxNode.tagName ?? 'text')) {\n continue;\n }\n const indent = options.skipNonInteractive ? '' : ' '.repeat(depth);\n buffer.push(renderIndentedLine(indent, vxNode, options));\n }\n return buffer.join('\\n');\n}\n\nfunction renderIndentedLine(indent: string, vxNode: VxNode, options: VxRenderOptions = {}) {\n const diffPrefix = options.renderDiff ? (vxNode.isNew ? '+ ' : ' ') : '';\n if (!vxNode.tagName) {\n return [diffPrefix, indent, vxNode.textContent].filter(Boolean).join('');\n }\n const tagLine = renderTagLine(vxNode, options);\n const htmlStyle = options.renderStyle === 'html';\n return [\n diffPrefix,\n indent,\n tagLine,\n htmlStyle ? '' : ' ',\n vxNode.textContent ?? '',\n ].join('');\n}\n\nfunction renderTagLine(vxNode: VxNode, options: VxRenderOptions) {\n const htmlStyle = options.renderStyle === 'html';\n const components: Array<string | null> = [];\n if (options.renderTagNames && vxNode.tagName) {\n components.push(vxNode.tagName);\n }\n if (options.renderIds && vxNode.id) {\n if (htmlStyle) {\n components.push(`id=\"${vxNode.id}\"`);\n } else {\n components.push(`#${vxNode.id}`);\n }\n }\n if (options.renderClassNames && vxNode.classList?.length) {\n if (htmlStyle) {\n components.push(`class=\"${vxNode.classList.join(' ')}\"`);\n } else {\n components.push('.' + vxNode.classList.join('.'));\n }\n }\n if (options.renderRefs) {\n const isRenderRef = [\n options.renderRefs === 'all',\n options.renderRefs === true && !isContainerNode(vxNode),\n ].some(Boolean);\n if (isRenderRef) {\n components.push(`[@${vxNode.ref}]`);\n }\n }\n const attrs = [];\n if (options.renderLabelAttrs) {\n for (const [attr, value] of Object.entries(vxNode.labelAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (options.renderValueAttrs) {\n for (const [attr, value] of Object.entries(vxNode.valueAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (options.renderSrcAttrs) {\n for (const [attr, value] of Object.entries(vxNode.srcAttrs ?? {})) {\n attrs.push(`${attr}=\"${truncateAttrValue(value)}\"`);\n }\n }\n if (htmlStyle) {\n components.push(...attrs);\n } else {\n components.push(...attrs.map(attr => `[${attr}]`));\n }\n return htmlStyle ? `<${components.join(' ')}>` : components.join('');\n}\n\nfunction createRenderTransform(options: VxRenderOptions): TraverseTransformFunction {\n const { maxSiblingTags } = options;\n return (vxNode: VxNode) => {\n if (maxSiblingTags) {\n const children: VxNode[] = [];\n const counts: Record<string, number> = {};\n for (const child of vxNode.children ?? []) {\n const tagName = child.tagName ?? '';\n const count = (counts[tagName] ?? 0) + 1;\n counts[tagName] = count;\n const maxCount = maxSiblingTags[tagName] ?? Infinity;\n if (count > maxCount) {\n continue;\n }\n children.push(child);\n }\n return { ...vxNode, children };\n }\n return vxNode;\n };\n}\n", "import { VxTreeOptions, VxTreeParser } from './parser.js';\nimport { VxTreeView } from './tree.js';\nimport { normalizeRef } from './util.js';\n\nexport const VX_DOM_SYMBOL = Symbol('vx:dom');\nexport const VX_TREE_SYMBOL = Symbol('vx:tree');\nexport const VX_LAST_REFS_SYMBOL = Symbol('vx:lastRefs');\n\nexport async function captureSnapshot(options: VxTreeOptions = {}) {\n const parser = new VxTreeParser(options);\n await parser.parse();\n const domMap = parser.getDomMap();\n const vxTree = parser.getTree();\n (globalThis as any)[VX_DOM_SYMBOL] = domMap;\n (globalThis as any)[VX_TREE_SYMBOL] = vxTree;\n return vxTree;\n}\n\nexport function getSnapshot(): VxTreeView {\n const vxTree = (globalThis as any)[VX_TREE_SYMBOL] as VxTreeView;\n if (!vxTree) {\n throw new Error('[VX] Snapshot not found');\n }\n return vxTree;\n}\n\nexport function resolveDomNode(ref: string): Node | null {\n const domMap = (globalThis as any)[VX_DOM_SYMBOL] as Map<string, Node>;\n if (!domMap) {\n return null;\n }\n const normalizedRef = normalizeRef(ref);\n return domMap.get(normalizedRef) ?? null;\n}\n", "import { highlightEl, VxHighlightOptions } from './highlight.js';\nimport { clearOverlay } from './overlay.js';\nimport { VxNode } from './parser.js';\nimport { renderVxNode, VxRenderOptions } from './render.js';\nimport { resolveDomNode } from './snapshot.js';\nimport { traverseVxNode, TraverseVxNodeOptions } from './traverse.js';\nimport { isContainerNode, normalizeRef } from './util.js';\n\nexport class VxTreeView {\n\n private refMap = new Map<string, VxNode>();\n\n constructor(\n public nodes: VxNode[],\n public frameId: string,\n public iframeRef?: string,\n ) {\n this.buildRefMap(nodes);\n }\n\n get nodeCount() {\n return this.refMap.size;\n }\n\n *traverse(options: TraverseVxNodeOptions = {}): IterableIterator<{ vxNode: VxNode; depth: number }> {\n for (const vxNode of this.nodes) {\n yield* traverseVxNode(vxNode, options);\n }\n }\n\n private buildRefMap(nodes: VxNode[]) {\n for (const node of nodes) {\n if (node.ref) {\n this.refMap.set(node.ref, node);\n }\n this.buildRefMap(node.children ?? []);\n }\n }\n\n hasRef(ref: string): boolean {\n const nref = normalizeRef(ref);\n return this.refMap.has(nref);\n }\n\n findNode(ref: string): VxNode | null {\n const nref = normalizeRef(ref);\n return this.refMap.get(nref) ?? null;\n }\n\n render(options: VxRenderOptions = {}) {\n return this.nodes.map(node => {\n return renderVxNode(node, options);\n }).join('\\n');\n }\n\n highlight(options: VxHighlightOptions = {}) {\n if (options.clearOverlay) {\n clearOverlay();\n }\n const leafOnly = !options.includeAll;\n const refs = this.collectRefs(leafOnly, options.filterRefs);\n this.highlightRefs(refs, options);\n }\n\n highlightRefs(refs: string[], options: VxHighlightOptions = {}) {\n for (const ref of refs) {\n const el = resolveDomNode(ref);\n if (el instanceof Element) {\n const vxNode = this.findNode(ref);\n const isNew = vxNode?.isNew ?? false;\n const color = options.useColors ? undefined : (isNew ? '#0a0' : '#060');\n highlightEl(el, ref, color);\n }\n }\n }\n\n collectRefs(leafOnly = true, filterRefs?: string[]) {\n const refs: string[] = [];\n for (const { vxNode } of this.traverse()) {\n if (!vxNode.ref) {\n continue;\n }\n if (leafOnly && isContainerNode(vxNode)) {\n continue;\n }\n if (filterRefs && !filterRefs.includes(vxNode.ref)) {\n continue;\n }\n refs.push(vxNode.ref);\n }\n return refs;\n }\n\n}\n", "import { getViewportSize, hasVisibleArea, isInteractive, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText, truncateAttrValue, Viewport } from './dom.js';\nimport { isHidden } from './dom.js';\nimport { probeViewport } from './probe.js';\nimport { VxTreeView } from './tree.js';\nimport { isObjectEmpty } from './util.js';\n\nexport const VX_NODE_REF_SYMBOL = Symbol('vx:ref');\nexport const VX_NODE_COUNTER_SYMBOL = Symbol('vx:counter');\nexport const VX_IGNORE_SYMBOL = Symbol('vx:ignore');\n\nexport const VX_IGNORE_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];\n\nexport const VX_LABEL_ATTRS = [\n 'title',\n 'alt',\n 'placeholder',\n 'aria-role',\n 'aria-label',\n 'aria-description',\n 'aria-placeholder',\n 'aria-valuetext',\n];\nexport const VX_LABEL_ATTR_PATTERNS = [\n /^data-label/, // data-label attributes\n /title-/i, // title-* attributes\n];\nexport const VX_VALUE_ATTRS = ['value', 'checked', 'selected', 'disabled', 'readonly'];\nexport const VX_SRC_ATTRS = ['src', 'href'];\n\nexport const VX_TAG_PREFERENCE = [\n 'a', 'iframe', 'input', 'button', 'select', 'textarea', 'img', 'label',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n 'section', 'article', 'main', 'header', 'footer', 'nav', 'aside',\n 'form', 'input', 'textarea', 'select', 'option', 'fieldset', 'legend',\n 'p', 'pre', 'code', 'blockquote', 'figure', 'figcaption',\n 'table', 'thead', 'tbody', 'tr', 'td', 'th',\n 'strong', 'em', 'sub', 'sup',\n];\n\nconst VX_KEEP_SELECTOR = 'a, button, input, textarea, select, label, iframe, option, optgroup';\n\nexport type VxDomNode = Element | Text;\n\nexport interface VxNode {\n ref?: string;\n tagName?: string;\n children?: VxNode[];\n id?: string;\n classList?: string[];\n textContent?: string;\n hasVisibleArea?: boolean;\n isInteractive?: boolean;\n isOutsideViewport?: boolean;\n isProbeHit?: boolean;\n isKept?: boolean;\n isNew?: boolean;\n srcAttrs?: Record<string, string>;\n labelAttrs?: Record<string, string>;\n valueAttrs?: Record<string, string>;\n}\n\nexport interface VxTreeOptions {\n frameId?: string;\n iframeRef?: string;\n skipImages?: boolean;\n viewportOnly?: boolean;\n probeViewport?: boolean;\n opaqueOverlays?: boolean;\n unnestDivs?: boolean;\n}\n\nexport type VxTransform = (vxNode: VxNode) => VxNode;\n\nexport class VxTreeParser {\n\n private frameId = '';\n private viewport: Viewport = { width: 0, height: 0 };\n private vxNodes: VxNode[] = [];\n private probeElements: Element[] = [];\n private domRefMap = new Map<string, Node>();\n\n private counter = 0;\n private usedCounters = new Set<number>();\n\n constructor(public options: VxTreeOptions = {}) {\n this.frameId = options.frameId ?? '';\n }\n\n parse() {\n this.viewport = getViewportSize();\n if (this.options.probeViewport) {\n this.probeElements = probeViewport();\n }\n this.usedCounters.clear();\n this.collectDomCounters(document.documentElement);\n const vxRoot = this.parseNode(document.documentElement, null)!;\n this.vxNodes = this.pruneRecursive(vxRoot);\n }\n\n getTree(): VxTreeView {\n return new VxTreeView(this.vxNodes, this.frameId, this.options.iframeRef);\n }\n\n getNodes(): VxNode[] {\n return this.vxNodes;\n }\n\n getDomMap() {\n return this.domRefMap;\n }\n\n private parseNode(node: Node, parent: VxNode | null): VxNode | null {\n if (!node || (node as any)[VX_IGNORE_SYMBOL]) {\n return null;\n }\n if (node instanceof Text) {\n // Single instances of Text nodes can only occur in \"text\"\n // (e.g. when regular text is interspersed with links and other elements)\n const textContent = normalizeText(node.textContent ?? '');\n if (textContent) {\n return this.makeNode(node, {\n textContent,\n hasVisibleArea: parent?.hasVisibleArea,\n isOutsideViewport: parent?.isOutsideViewport,\n isProbeHit: parent?.isProbeHit,\n });\n }\n return null;\n }\n if (node instanceof Element) {\n if (this.options.opaqueOverlays) {\n makeOverlaysOpaque(node as HTMLElement);\n }\n return this.parseElement(node);\n }\n return null;\n }\n\n private parseElement(el: Element): VxNode | null {\n const skip = VX_IGNORE_TAGS.includes(el.tagName.toLowerCase()) || isHidden(el);\n if (skip) {\n this.clearRecursive(el);\n return null;\n }\n // OPTION and OPTGROUP are special cases, we evaluate their rects and visibility\n // checks using their parent SELECT element\n const parentEl = el.matches('option, optgroup') ? el.closest('select') ?? el : el;\n const rect = parentEl.getBoundingClientRect();\n const id = el.getAttribute('id') ?? '';\n const vxNode = this.makeNode(el, {\n tagName: el.tagName.toLowerCase(),\n id: isRandomIdentifier(id) ? undefined : id,\n classList: Array.from(el.classList)\n .filter(cls => !isRandomIdentifier(cls))\n .slice(0, 4),\n labelAttrs: this.collectLabelAttrs(el),\n valueAttrs: this.collectValueAttrs(el),\n srcAttrs: this.collectSrcAttrs(el),\n hasVisibleArea: hasVisibleArea(parentEl),\n isInteractive: isInteractive(parentEl),\n isOutsideViewport: !isRectInViewport(rect, this.viewport),\n isProbeHit: this.isProbeHit(parentEl),\n isKept: el.matches(VX_KEEP_SELECTOR),\n });\n const children: VxNode[] = [];\n for (const child of el.childNodes) {\n const childNode = this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\n }\n // Special case: if the only child is a text node, return a single node with the text content\n if (children.length === 1 && !children[0]?.tagName) {\n vxNode.textContent = normalizeText(children[0].textContent ?? '');\n } else {\n vxNode.children = children;\n }\n return vxNode;\n }\n\n private makeNode(node: Node, spec: Omit<VxNode, 'ref'>): VxNode {\n const isNew = (node as any)[VX_NODE_REF_SYMBOL] !== undefined;\n const counter = this.nextCounterValue();\n const ref = `${this.frameId}${counter}`;\n const vxNode: VxNode = {\n ...spec,\n ref,\n isNew,\n };\n if (ref) {\n this.domRefMap.set(ref, node);\n }\n (node as any)[VX_NODE_COUNTER_SYMBOL] = counter;\n (node as any)[VX_NODE_REF_SYMBOL] = ref;\n return vxNode;\n }\n\n private pruneRecursive(vxNode: VxNode | null): VxNode[] {\n if (!vxNode) {\n return [];\n }\n const children = vxNode.children ?? [];\n // Recursively prune children\n const newChildren = children.flatMap(child => this.pruneRecursive(child));\n // If the node itself is omitted, replace it with children\n if (this.shouldOmit(vxNode)) {\n return newChildren;\n }\n vxNode.children = newChildren;\n // Collapse single-child elements\n if (newChildren.length === 1) {\n const child = newChildren[0];\n return this.collapseSingleChild(vxNode, child);\n }\n return [vxNode];\n }\n\n private collapseSingleChild(parent: VxNode, child: VxNode): VxNode[] {\n const preferParent = this.collapsePreferParent(parent, child);\n const merged = preferParent ?\n this.collapseMerge(parent, child) :\n this.collapseMerge(child, parent);\n return this.pruneRecursive({\n ...merged,\n children: child.children,\n textContent: child.textContent,\n });\n }\n\n private collapsePreferParent(parent: VxNode, child: VxNode) {\n const parentRank = VX_TAG_PREFERENCE.indexOf(parent.tagName ?? '');\n const childRank = VX_TAG_PREFERENCE.indexOf(child.tagName ?? '');\n if (parentRank === -1 && childRank === -1) {\n const parentAttrCount = Object.keys({\n ...parent.labelAttrs,\n ...parent.valueAttrs,\n ...parent.srcAttrs,\n }).length;\n const childAttrCount = Object.keys({\n ...child.labelAttrs,\n ...child.valueAttrs,\n ...child.srcAttrs,\n }).length;\n return parentAttrCount > childAttrCount;\n }\n return parentRank !== -1 && (childRank === -1 || parentRank < childRank);\n }\n\n private collapseMerge(a: VxNode, b: VxNode): VxNode {\n return {\n ...b,\n ...a,\n labelAttrs: { ...b.labelAttrs, ...a.labelAttrs },\n valueAttrs: { ...b.valueAttrs, ...a.valueAttrs },\n srcAttrs: { ...b.srcAttrs, ...a.srcAttrs },\n };\n }\n\n private shouldOmit(vxNode: VxNode): boolean {\n const tagName = vxNode.tagName ?? '';\n if (!vxNode.hasVisibleArea) {\n return true;\n }\n if (this.options.viewportOnly && vxNode.isOutsideViewport) {\n return true;\n }\n if (this.options.probeViewport && !vxNode.isProbeHit) {\n return true;\n }\n if (this.options.skipImages && vxNode.tagName === 'img') {\n return true;\n }\n const hasText = !!vxNode.textContent;\n const hasChildren = (vxNode.children ?? []).length > 0;\n const hasAttrs = [vxNode.labelAttrs, vxNode.valueAttrs, vxNode.srcAttrs]\n .some(attrs => !isObjectEmpty(attrs ?? {}));\n if (this.options.unnestDivs) {\n const isDivOrSpan = ['div', 'span'].includes(tagName);\n if (isDivOrSpan && hasChildren && !hasAttrs) {\n return true;\n }\n }\n if (vxNode.isKept) {\n return false;\n }\n return !hasText && !hasAttrs && !hasChildren;\n }\n\n private isProbeHit(el: Element): boolean {\n // TODO this is a bit brute-forcish, consider improving\n for (const probeEl of this.probeElements) {\n if (el.contains(probeEl)) {\n return true;\n }\n }\n return false;\n }\n\n private collectLabelAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n // Loop through all element attributes\n for (const attr of el.attributes) {\n const attrName = attr.name;\n const value = truncateAttrValue(attr.value);\n if (!value) {\n continue; // Skip empty values\n }\n // Check for exact matches in VX_LABEL_ATTRS\n if (VX_LABEL_ATTRS.includes(attrName)) {\n attrs[attrName] = value;\n continue;\n }\n // Check for regex pattern matches\n if (VX_LABEL_ATTR_PATTERNS.some(pattern => pattern.test(attrName))) {\n attrs[attrName] = value;\n }\n }\n return attrs;\n }\n\n private collectValueAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of VX_VALUE_ATTRS) {\n const value = (el as any)[attr] ?? '';\n if (value) {\n attrs[attr] = String(value);\n }\n }\n return attrs;\n }\n\n private collectSrcAttrs(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of VX_SRC_ATTRS) {\n const value = truncateAttrValue((el as any)[attr] ?? '');\n if (value) {\n attrs[attr] = value;\n }\n }\n return attrs;\n }\n\n private clearRecursive(node: Node) {\n delete (node as any)[VX_NODE_REF_SYMBOL];\n delete (node as any)[VX_NODE_COUNTER_SYMBOL];\n if (node instanceof Element) {\n for (const child of node.children) {\n this.clearRecursive(child as Element);\n }\n }\n }\n\n private nextCounterValue() {\n while (this.usedCounters.has(this.counter)) {\n this.counter += 1;\n }\n return this.counter;\n }\n\n private collectDomCounters(el: Element) {\n const cnt = (el as any)[VX_NODE_COUNTER_SYMBOL];\n if (cnt !== undefined) {\n this.usedCounters.add(cnt);\n }\n for (const child of el.children ?? []) {\n this.collectDomCounters(child as Element);\n }\n }\n\n}\n", "import { VX_IGNORE_SYMBOL } from './parser.js';\n\nexport function showPoint(x: number, y: number, clear = true) {\n if (clear) {\n clearOverlay();\n }\n const point = document.createElement('div');\n point.style.position = 'absolute';\n point.style.left = `${x}px`;\n point.style.top = `${y}px`;\n point.style.width = '32px';\n point.style.height = '32px';\n point.style.transform = 'translate(-50%, -50%)';\n point.style.backgroundColor = 'red';\n point.style.borderRadius = '100%';\n point.style.opacity = '0.5';\n const container = getOverlayContainer();\n container.appendChild(point);\n}\n\nexport function clearOverlay() {\n const container = getOverlayContainer();\n container.remove();\n}\n\nexport function getOverlayContainer() {\n let container = document.querySelector('#webvision-overlay') as HTMLElement;\n if (!container) {\n container = document.createElement('div');\n (container as any)[VX_IGNORE_SYMBOL] = true;\n container.id = 'webvision-overlay';\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.bottom = '0';\n container.style.right = '0';\n container.style.zIndex = '2147483647'; // Maximum z-index value\n container.style.pointerEvents = 'none';\n document.body.appendChild(container);\n }\n return container;\n}\n", "import { getOverlayContainer } from './overlay.js';\n\nexport interface VxHighlightOptions {\n highlight?: boolean;\n clearOverlay?: boolean;\n includeAll?: boolean;\n filterRefs?: string[];\n useColors?: boolean;\n}\n\nexport function highlightEl(el: Element, ref: string, color?: string) {\n if (!(el instanceof Element)) {\n return;\n }\n if (el instanceof HTMLOptGroupElement) {\n return;\n }\n if (el instanceof HTMLOptionElement) {\n return;\n }\n const container = getOverlayContainer();\n const rect = el.getBoundingClientRect();\n const overlay = document.createElement('div');\n container.appendChild(overlay);\n overlay.style.position = 'absolute';\n overlay.style.top = `${rect.top}px`;\n overlay.style.left = `${rect.left}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n overlay.style.border = `2px solid ${color}`;\n const label = document.createElement('div');\n overlay.appendChild(label);\n label.style.position = 'absolute';\n label.style.bottom = `100%`;\n label.style.left = `0`;\n label.style.backgroundColor = color ?? getRandomColor(ref);\n label.style.color = 'white';\n label.style.fontSize = '10px';\n label.style.fontFamily = 'monospace';\n label.style.fontWeight = 'normal';\n label.style.fontStyle = 'normal';\n label.style.opacity = '0.8';\n label.style.padding = '0 2px';\n label.style.transform = 'translateY(50%)';\n label.textContent = String(ref);\n}\n\nfunction getRandomColor(ref: string) {\n const index = ref.charCodeAt(0);\n const hue = (index * 120 * .382) % 360;\n return `hsl(${hue}, 85%, 50%)`;\n}\n", "import { VxNode } from './parser.js';\nimport { VxRenderOptions } from './render.js';\nimport { VxTreeView } from './tree.js';\n\nexport class VxPageView {\n\n private vxTreeMap = new Map<string, VxTreeView>();\n\n constructor(vxTrees: VxTreeView[]) {\n for (const vxTree of vxTrees) {\n this.vxTreeMap.set(vxTree.frameId, vxTree);\n }\n }\n\n get vxTrees() {\n return [...this.vxTreeMap.values()];\n }\n\n get nodeCount() {\n return this.vxTrees.reduce((acc, vxTree) => acc + vxTree.nodeCount, 0);\n }\n\n findNodeByRef(ref: string): VxNode | null {\n const frame = this.findFrameByRef(ref);\n if (frame == null) {\n return null;\n }\n return frame.findNode(ref);\n }\n\n findFrameById(frameId: string): VxTreeView | null {\n return this.vxTreeMap.get(frameId) ?? null;\n }\n\n findFrameByRef(ref: string): VxTreeView | null {\n const frame = this.vxTrees.find(f => f.hasRef(ref));\n return frame ?? null;\n }\n\n getFrameByRef(ref: string): VxTreeView {\n const frame = this.findFrameByRef(ref);\n if (frame == null) {\n throw new Error(`[VX] Frame not found for [ref=${ref}]`);\n }\n return frame;\n }\n\n findParentFrame(frameId: string): VxTreeView | null {\n const frame = this.findFrameById(frameId);\n const iframeRef = frame?.iframeRef;\n if (iframeRef == null) {\n return null;\n }\n return this.findFrameByRef(iframeRef);\n }\n\n isFrameShown(frameId: string): boolean {\n const frame = this.findFrameById(frameId);\n if (!frame) {\n return false;\n }\n const parentFrame = this.findParentFrame(frameId);\n const { iframeRef } = frame;\n if (parentFrame == null || iframeRef == null) {\n // Top level document is always shown\n return true;\n }\n const existsInParent = !!parentFrame.findNode(iframeRef);\n return existsInParent ? this.isFrameShown(parentFrame.frameId) : false;\n }\n\n renderAll(options: VxRenderOptions) {\n return this.vxTrees.map(frame => {\n const rendered = frame?.render(options);\n return [\n `FRAME ${frame.frameId}${frame.iframeRef ? ` [@${frame.iframeRef}]` : ''}`,\n rendered,\n ].join('\\n\\n');\n }).join('\\n\\n');\n }\n\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["index"]
|
|
7
7
|
}
|
package/build/page.mjs
CHANGED
|
@@ -192,16 +192,6 @@ function getElementDepth(el) {
|
|
|
192
192
|
}
|
|
193
193
|
return depth;
|
|
194
194
|
}
|
|
195
|
-
function serializeElement(el) {
|
|
196
|
-
const sig = [];
|
|
197
|
-
const depth = getElementDepth(el);
|
|
198
|
-
sig.push(String(depth));
|
|
199
|
-
sig.push(el.tagName);
|
|
200
|
-
for (const attr of el.attributes) {
|
|
201
|
-
sig.push(`${attr.name}=${attr.value}`);
|
|
202
|
-
}
|
|
203
|
-
return sig.join("|");
|
|
204
|
-
}
|
|
205
195
|
|
|
206
196
|
// src/page/traverse.ts
|
|
207
197
|
function* traverseVxNode(vxNode, options = {}) {
|
|
@@ -415,7 +405,7 @@ async function captureSnapshot(options = {}) {
|
|
|
415
405
|
const parser = new VxTreeParser(options);
|
|
416
406
|
await parser.parse();
|
|
417
407
|
const domMap = parser.getDomMap();
|
|
418
|
-
const vxTree = parser.getTree(
|
|
408
|
+
const vxTree = parser.getTree();
|
|
419
409
|
globalThis[VX_DOM_SYMBOL] = domMap;
|
|
420
410
|
globalThis[VX_TREE_SYMBOL] = vxTree;
|
|
421
411
|
return vxTree;
|
|
@@ -512,7 +502,8 @@ var VxTreeView = class {
|
|
|
512
502
|
};
|
|
513
503
|
|
|
514
504
|
// src/page/parser.ts
|
|
515
|
-
var
|
|
505
|
+
var VX_NODE_REF_SYMBOL = Symbol("vx:ref");
|
|
506
|
+
var VX_NODE_COUNTER_SYMBOL = Symbol("vx:counter");
|
|
516
507
|
var VX_IGNORE_SYMBOL = Symbol("vx:ignore");
|
|
517
508
|
var VX_IGNORE_TAGS = ["svg", "script", "noscript", "style", "link", "meta"];
|
|
518
509
|
var VX_LABEL_ATTRS = [
|
|
@@ -589,21 +580,27 @@ var VX_KEEP_SELECTOR = "a, button, input, textarea, select, label, iframe, optio
|
|
|
589
580
|
var VxTreeParser = class {
|
|
590
581
|
constructor(options = {}) {
|
|
591
582
|
this.options = options;
|
|
583
|
+
this.frameId = "";
|
|
592
584
|
this.viewport = { width: 0, height: 0 };
|
|
593
585
|
this.vxNodes = [];
|
|
594
586
|
this.probeElements = [];
|
|
595
587
|
this.domRefMap = /* @__PURE__ */ new Map();
|
|
588
|
+
this.counter = 0;
|
|
589
|
+
this.usedCounters = /* @__PURE__ */ new Set();
|
|
590
|
+
this.frameId = options.frameId ?? "";
|
|
596
591
|
}
|
|
597
|
-
|
|
592
|
+
parse() {
|
|
598
593
|
this.viewport = getViewportSize();
|
|
599
594
|
if (this.options.probeViewport) {
|
|
600
595
|
this.probeElements = probeViewport();
|
|
601
596
|
}
|
|
602
|
-
|
|
597
|
+
this.usedCounters.clear();
|
|
598
|
+
this.collectDomCounters(document.documentElement);
|
|
599
|
+
const vxRoot = this.parseNode(document.documentElement, null);
|
|
603
600
|
this.vxNodes = this.pruneRecursive(vxRoot);
|
|
604
601
|
}
|
|
605
|
-
getTree(
|
|
606
|
-
return new VxTreeView(this.vxNodes, frameId, iframeRef);
|
|
602
|
+
getTree() {
|
|
603
|
+
return new VxTreeView(this.vxNodes, this.frameId, this.options.iframeRef);
|
|
607
604
|
}
|
|
608
605
|
getNodes() {
|
|
609
606
|
return this.vxNodes;
|
|
@@ -611,14 +608,14 @@ var VxTreeParser = class {
|
|
|
611
608
|
getDomMap() {
|
|
612
609
|
return this.domRefMap;
|
|
613
610
|
}
|
|
614
|
-
|
|
611
|
+
parseNode(node, parent) {
|
|
615
612
|
if (!node || node[VX_IGNORE_SYMBOL]) {
|
|
616
613
|
return null;
|
|
617
614
|
}
|
|
618
615
|
if (node instanceof Text) {
|
|
619
616
|
const textContent = normalizeText(node.textContent ?? "");
|
|
620
617
|
if (textContent) {
|
|
621
|
-
return
|
|
618
|
+
return this.makeNode(node, {
|
|
622
619
|
textContent,
|
|
623
620
|
hasVisibleArea: parent?.hasVisibleArea,
|
|
624
621
|
isOutsideViewport: parent?.isOutsideViewport,
|
|
@@ -631,11 +628,11 @@ var VxTreeParser = class {
|
|
|
631
628
|
if (this.options.opaqueOverlays) {
|
|
632
629
|
makeOverlaysOpaque(node);
|
|
633
630
|
}
|
|
634
|
-
return
|
|
631
|
+
return this.parseElement(node);
|
|
635
632
|
}
|
|
636
633
|
return null;
|
|
637
634
|
}
|
|
638
|
-
|
|
635
|
+
parseElement(el) {
|
|
639
636
|
const skip = VX_IGNORE_TAGS.includes(el.tagName.toLowerCase()) || isHidden(el);
|
|
640
637
|
if (skip) {
|
|
641
638
|
this.clearRecursive(el);
|
|
@@ -644,7 +641,7 @@ var VxTreeParser = class {
|
|
|
644
641
|
const parentEl = el.matches("option, optgroup") ? el.closest("select") ?? el : el;
|
|
645
642
|
const rect = parentEl.getBoundingClientRect();
|
|
646
643
|
const id = el.getAttribute("id") ?? "";
|
|
647
|
-
const vxNode =
|
|
644
|
+
const vxNode = this.makeNode(el, {
|
|
648
645
|
tagName: el.tagName.toLowerCase(),
|
|
649
646
|
id: isRandomIdentifier(id) ? void 0 : id,
|
|
650
647
|
classList: Array.from(el.classList).filter((cls) => !isRandomIdentifier(cls)).slice(0, 4),
|
|
@@ -659,7 +656,7 @@ var VxTreeParser = class {
|
|
|
659
656
|
});
|
|
660
657
|
const children = [];
|
|
661
658
|
for (const child of el.childNodes) {
|
|
662
|
-
const childNode =
|
|
659
|
+
const childNode = this.parseNode(child, vxNode);
|
|
663
660
|
if (childNode != null) {
|
|
664
661
|
children.push(childNode);
|
|
665
662
|
}
|
|
@@ -671,9 +668,10 @@ var VxTreeParser = class {
|
|
|
671
668
|
}
|
|
672
669
|
return vxNode;
|
|
673
670
|
}
|
|
674
|
-
|
|
675
|
-
const isNew =
|
|
676
|
-
const
|
|
671
|
+
makeNode(node, spec) {
|
|
672
|
+
const isNew = node[VX_NODE_REF_SYMBOL] !== void 0;
|
|
673
|
+
const counter = this.nextCounterValue();
|
|
674
|
+
const ref = `${this.frameId}${counter}`;
|
|
677
675
|
const vxNode = {
|
|
678
676
|
...spec,
|
|
679
677
|
ref,
|
|
@@ -682,7 +680,8 @@ var VxTreeParser = class {
|
|
|
682
680
|
if (ref) {
|
|
683
681
|
this.domRefMap.set(ref, node);
|
|
684
682
|
}
|
|
685
|
-
node[
|
|
683
|
+
node[VX_NODE_COUNTER_SYMBOL] = counter;
|
|
684
|
+
node[VX_NODE_REF_SYMBOL] = ref;
|
|
686
685
|
return vxNode;
|
|
687
686
|
}
|
|
688
687
|
pruneRecursive(vxNode) {
|
|
@@ -812,18 +811,27 @@ var VxTreeParser = class {
|
|
|
812
811
|
return attrs;
|
|
813
812
|
}
|
|
814
813
|
clearRecursive(node) {
|
|
815
|
-
node[
|
|
814
|
+
delete node[VX_NODE_REF_SYMBOL];
|
|
815
|
+
delete node[VX_NODE_COUNTER_SYMBOL];
|
|
816
816
|
if (node instanceof Element) {
|
|
817
817
|
for (const child of node.children) {
|
|
818
818
|
this.clearRecursive(child);
|
|
819
819
|
}
|
|
820
820
|
}
|
|
821
821
|
}
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
822
|
+
nextCounterValue() {
|
|
823
|
+
while (this.usedCounters.has(this.counter)) {
|
|
824
|
+
this.counter += 1;
|
|
825
|
+
}
|
|
826
|
+
return this.counter;
|
|
827
|
+
}
|
|
828
|
+
collectDomCounters(el) {
|
|
829
|
+
const cnt = el[VX_NODE_COUNTER_SYMBOL];
|
|
830
|
+
if (cnt !== void 0) {
|
|
831
|
+
this.usedCounters.add(cnt);
|
|
832
|
+
}
|
|
833
|
+
for (const child of el.children ?? []) {
|
|
834
|
+
this.collectDomCounters(child);
|
|
827
835
|
}
|
|
828
836
|
}
|
|
829
837
|
};
|
|
@@ -987,7 +995,8 @@ export {
|
|
|
987
995
|
VX_LABEL_ATTRS,
|
|
988
996
|
VX_LABEL_ATTR_PATTERNS,
|
|
989
997
|
VX_LAST_REFS_SYMBOL,
|
|
990
|
-
|
|
998
|
+
VX_NODE_COUNTER_SYMBOL,
|
|
999
|
+
VX_NODE_REF_SYMBOL,
|
|
991
1000
|
VX_SRC_ATTRS,
|
|
992
1001
|
VX_TAG_PREFERENCE,
|
|
993
1002
|
VX_TREE_SYMBOL,
|
|
@@ -1021,7 +1030,6 @@ export {
|
|
|
1021
1030
|
probeViewport,
|
|
1022
1031
|
renderVxNode,
|
|
1023
1032
|
resolveDomNode,
|
|
1024
|
-
serializeElement,
|
|
1025
1033
|
showPoint,
|
|
1026
1034
|
traverseElements,
|
|
1027
1035
|
traverseVxNode,
|
package/out/page/dom.d.ts
CHANGED
|
@@ -20,4 +20,3 @@ export declare function makeOverlaysOpaque(el: HTMLElement): void;
|
|
|
20
20
|
export declare function isRandomIdentifier(str: string): boolean;
|
|
21
21
|
export declare function fixZIndex(el: HTMLElement): void;
|
|
22
22
|
export declare function getElementDepth(el: Element): number;
|
|
23
|
-
export declare function serializeElement(el: Element): string;
|
package/out/page/dom.js
CHANGED
|
@@ -185,14 +185,4 @@ export function getElementDepth(el) {
|
|
|
185
185
|
}
|
|
186
186
|
return depth;
|
|
187
187
|
}
|
|
188
|
-
export function serializeElement(el) {
|
|
189
|
-
const sig = [];
|
|
190
|
-
const depth = getElementDepth(el);
|
|
191
|
-
sig.push(String(depth));
|
|
192
|
-
sig.push(el.tagName);
|
|
193
|
-
for (const attr of el.attributes) {
|
|
194
|
-
sig.push(`${attr.name}=${attr.value}`);
|
|
195
|
-
}
|
|
196
|
-
return sig.join('|');
|
|
197
|
-
}
|
|
198
188
|
//# sourceMappingURL=dom.js.map
|
package/out/page/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/page/dom.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/page/dom.ts"],"names":[],"mappings":"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"}
|
package/out/page/parser.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { VxTreeView } from './tree.js';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const VX_NODE_REF_SYMBOL: unique symbol;
|
|
3
|
+
export declare const VX_NODE_COUNTER_SYMBOL: unique symbol;
|
|
3
4
|
export declare const VX_IGNORE_SYMBOL: unique symbol;
|
|
4
5
|
export declare const VX_IGNORE_TAGS: string[];
|
|
5
6
|
export declare const VX_LABEL_ATTRS: string[];
|
|
@@ -37,13 +38,16 @@ export interface VxTreeOptions {
|
|
|
37
38
|
export type VxTransform = (vxNode: VxNode) => VxNode;
|
|
38
39
|
export declare class VxTreeParser {
|
|
39
40
|
options: VxTreeOptions;
|
|
41
|
+
private frameId;
|
|
40
42
|
private viewport;
|
|
41
43
|
private vxNodes;
|
|
42
44
|
private probeElements;
|
|
43
45
|
private domRefMap;
|
|
46
|
+
private counter;
|
|
47
|
+
private usedCounters;
|
|
44
48
|
constructor(options?: VxTreeOptions);
|
|
45
|
-
parse():
|
|
46
|
-
getTree(
|
|
49
|
+
parse(): void;
|
|
50
|
+
getTree(): VxTreeView;
|
|
47
51
|
getNodes(): VxNode[];
|
|
48
52
|
getDomMap(): Map<string, Node>;
|
|
49
53
|
private parseNode;
|
|
@@ -59,5 +63,6 @@ export declare class VxTreeParser {
|
|
|
59
63
|
private collectValueAttrs;
|
|
60
64
|
private collectSrcAttrs;
|
|
61
65
|
private clearRecursive;
|
|
62
|
-
private
|
|
66
|
+
private nextCounterValue;
|
|
67
|
+
private collectDomCounters;
|
|
63
68
|
}
|
package/out/page/parser.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { getViewportSize, hasVisibleArea, isInteractive, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText,
|
|
1
|
+
import { getViewportSize, hasVisibleArea, isInteractive, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText, truncateAttrValue } from './dom.js';
|
|
2
2
|
import { isHidden } from './dom.js';
|
|
3
3
|
import { probeViewport } from './probe.js';
|
|
4
4
|
import { VxTreeView } from './tree.js';
|
|
5
5
|
import { isObjectEmpty } from './util.js';
|
|
6
|
-
export const
|
|
6
|
+
export const VX_NODE_REF_SYMBOL = Symbol('vx:ref');
|
|
7
|
+
export const VX_NODE_COUNTER_SYMBOL = Symbol('vx:counter');
|
|
7
8
|
export const VX_IGNORE_SYMBOL = Symbol('vx:ignore');
|
|
8
9
|
export const VX_IGNORE_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];
|
|
9
10
|
export const VX_LABEL_ATTRS = [
|
|
@@ -36,21 +37,27 @@ const VX_KEEP_SELECTOR = 'a, button, input, textarea, select, label, iframe, opt
|
|
|
36
37
|
export class VxTreeParser {
|
|
37
38
|
constructor(options = {}) {
|
|
38
39
|
this.options = options;
|
|
40
|
+
this.frameId = '';
|
|
39
41
|
this.viewport = { width: 0, height: 0 };
|
|
40
42
|
this.vxNodes = [];
|
|
41
43
|
this.probeElements = [];
|
|
42
44
|
this.domRefMap = new Map();
|
|
45
|
+
this.counter = 0;
|
|
46
|
+
this.usedCounters = new Set();
|
|
47
|
+
this.frameId = options.frameId ?? '';
|
|
43
48
|
}
|
|
44
|
-
|
|
49
|
+
parse() {
|
|
45
50
|
this.viewport = getViewportSize();
|
|
46
51
|
if (this.options.probeViewport) {
|
|
47
52
|
this.probeElements = probeViewport();
|
|
48
53
|
}
|
|
49
|
-
|
|
54
|
+
this.usedCounters.clear();
|
|
55
|
+
this.collectDomCounters(document.documentElement);
|
|
56
|
+
const vxRoot = this.parseNode(document.documentElement, null);
|
|
50
57
|
this.vxNodes = this.pruneRecursive(vxRoot);
|
|
51
58
|
}
|
|
52
|
-
getTree(
|
|
53
|
-
return new VxTreeView(this.vxNodes, frameId, iframeRef);
|
|
59
|
+
getTree() {
|
|
60
|
+
return new VxTreeView(this.vxNodes, this.frameId, this.options.iframeRef);
|
|
54
61
|
}
|
|
55
62
|
getNodes() {
|
|
56
63
|
return this.vxNodes;
|
|
@@ -58,7 +65,7 @@ export class VxTreeParser {
|
|
|
58
65
|
getDomMap() {
|
|
59
66
|
return this.domRefMap;
|
|
60
67
|
}
|
|
61
|
-
|
|
68
|
+
parseNode(node, parent) {
|
|
62
69
|
if (!node || node[VX_IGNORE_SYMBOL]) {
|
|
63
70
|
return null;
|
|
64
71
|
}
|
|
@@ -67,7 +74,7 @@ export class VxTreeParser {
|
|
|
67
74
|
// (e.g. when regular text is interspersed with links and other elements)
|
|
68
75
|
const textContent = normalizeText(node.textContent ?? '');
|
|
69
76
|
if (textContent) {
|
|
70
|
-
return
|
|
77
|
+
return this.makeNode(node, {
|
|
71
78
|
textContent,
|
|
72
79
|
hasVisibleArea: parent?.hasVisibleArea,
|
|
73
80
|
isOutsideViewport: parent?.isOutsideViewport,
|
|
@@ -80,11 +87,11 @@ export class VxTreeParser {
|
|
|
80
87
|
if (this.options.opaqueOverlays) {
|
|
81
88
|
makeOverlaysOpaque(node);
|
|
82
89
|
}
|
|
83
|
-
return
|
|
90
|
+
return this.parseElement(node);
|
|
84
91
|
}
|
|
85
92
|
return null;
|
|
86
93
|
}
|
|
87
|
-
|
|
94
|
+
parseElement(el) {
|
|
88
95
|
const skip = VX_IGNORE_TAGS.includes(el.tagName.toLowerCase()) || isHidden(el);
|
|
89
96
|
if (skip) {
|
|
90
97
|
this.clearRecursive(el);
|
|
@@ -95,7 +102,7 @@ export class VxTreeParser {
|
|
|
95
102
|
const parentEl = el.matches('option, optgroup') ? el.closest('select') ?? el : el;
|
|
96
103
|
const rect = parentEl.getBoundingClientRect();
|
|
97
104
|
const id = el.getAttribute('id') ?? '';
|
|
98
|
-
const vxNode =
|
|
105
|
+
const vxNode = this.makeNode(el, {
|
|
99
106
|
tagName: el.tagName.toLowerCase(),
|
|
100
107
|
id: isRandomIdentifier(id) ? undefined : id,
|
|
101
108
|
classList: Array.from(el.classList)
|
|
@@ -112,7 +119,7 @@ export class VxTreeParser {
|
|
|
112
119
|
});
|
|
113
120
|
const children = [];
|
|
114
121
|
for (const child of el.childNodes) {
|
|
115
|
-
const childNode =
|
|
122
|
+
const childNode = this.parseNode(child, vxNode);
|
|
116
123
|
if (childNode != null) {
|
|
117
124
|
children.push(childNode);
|
|
118
125
|
}
|
|
@@ -126,9 +133,10 @@ export class VxTreeParser {
|
|
|
126
133
|
}
|
|
127
134
|
return vxNode;
|
|
128
135
|
}
|
|
129
|
-
|
|
130
|
-
const isNew =
|
|
131
|
-
const
|
|
136
|
+
makeNode(node, spec) {
|
|
137
|
+
const isNew = node[VX_NODE_REF_SYMBOL] !== undefined;
|
|
138
|
+
const counter = this.nextCounterValue();
|
|
139
|
+
const ref = `${this.frameId}${counter}`;
|
|
132
140
|
const vxNode = {
|
|
133
141
|
...spec,
|
|
134
142
|
ref,
|
|
@@ -137,7 +145,8 @@ export class VxTreeParser {
|
|
|
137
145
|
if (ref) {
|
|
138
146
|
this.domRefMap.set(ref, node);
|
|
139
147
|
}
|
|
140
|
-
node[
|
|
148
|
+
node[VX_NODE_COUNTER_SYMBOL] = counter;
|
|
149
|
+
node[VX_NODE_REF_SYMBOL] = ref;
|
|
141
150
|
return vxNode;
|
|
142
151
|
}
|
|
143
152
|
pruneRecursive(vxNode) {
|
|
@@ -277,20 +286,27 @@ export class VxTreeParser {
|
|
|
277
286
|
return attrs;
|
|
278
287
|
}
|
|
279
288
|
clearRecursive(node) {
|
|
280
|
-
node[
|
|
289
|
+
delete node[VX_NODE_REF_SYMBOL];
|
|
290
|
+
delete node[VX_NODE_COUNTER_SYMBOL];
|
|
281
291
|
if (node instanceof Element) {
|
|
282
292
|
for (const child of node.children) {
|
|
283
293
|
this.clearRecursive(child);
|
|
284
294
|
}
|
|
285
295
|
}
|
|
286
296
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
297
|
+
nextCounterValue() {
|
|
298
|
+
while (this.usedCounters.has(this.counter)) {
|
|
299
|
+
this.counter += 1;
|
|
300
|
+
}
|
|
301
|
+
return this.counter;
|
|
302
|
+
}
|
|
303
|
+
collectDomCounters(el) {
|
|
304
|
+
const cnt = el[VX_NODE_COUNTER_SYMBOL];
|
|
305
|
+
if (cnt !== undefined) {
|
|
306
|
+
this.usedCounters.add(cnt);
|
|
307
|
+
}
|
|
308
|
+
for (const child of el.children ?? []) {
|
|
309
|
+
this.collectDomCounters(child);
|
|
294
310
|
}
|
|
295
311
|
}
|
|
296
312
|
}
|
package/out/page/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/page/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/page/parser.ts"],"names":[],"mappings":"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"}
|
package/out/page/snapshot.js
CHANGED
|
@@ -7,7 +7,7 @@ export async function captureSnapshot(options = {}) {
|
|
|
7
7
|
const parser = new VxTreeParser(options);
|
|
8
8
|
await parser.parse();
|
|
9
9
|
const domMap = parser.getDomMap();
|
|
10
|
-
const vxTree = parser.getTree(
|
|
10
|
+
const vxTree = parser.getTree();
|
|
11
11
|
globalThis[VX_DOM_SYMBOL] = domMap;
|
|
12
12
|
globalThis[VX_TREE_SYMBOL] = vxTree;
|
|
13
13
|
return vxTree;
|
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,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAyB,EAAE;IAC7D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/page/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAyB,EAAE;IAC7D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,UAAkB,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;IAC3C,UAAkB,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;IAC7C,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,MAAM,MAAM,GAAI,UAAkB,CAAC,cAAc,CAAe,CAAC;IACjE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACtC,MAAM,MAAM,GAAI,UAAkB,CAAC,aAAa,CAAsB,CAAC;IACvE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;AAC7C,CAAC"}
|