@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 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
- VX_NODE_SYMBOL: () => VX_NODE_SYMBOL,
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(options.frameId ?? "0", options.iframeRef);
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 VX_NODE_SYMBOL = Symbol("vx:node");
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
- async parse() {
665
+ parse() {
671
666
  this.viewport = getViewportSize();
672
667
  if (this.options.probeViewport) {
673
668
  this.probeElements = probeViewport();
674
669
  }
675
- const vxRoot = await this.parseNode(document.documentElement, null);
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(frameId, iframeRef) {
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
- async parseNode(node, parent) {
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 await this.makeNode(node, {
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 await this.parseElement(node);
704
+ return this.parseElement(node);
708
705
  }
709
706
  return null;
710
707
  }
711
- async parseElement(el) {
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 = await this.makeNode(el, {
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 = await this.parseNode(child, vxNode);
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
- async makeNode(node, spec) {
748
- const isNew = !node[VX_NODE_SYMBOL];
749
- const ref = await this.createRef(node);
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[VX_NODE_SYMBOL] = vxNode;
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[VX_NODE_SYMBOL] = null;
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
- async createRef(node) {
896
- if (node instanceof Element) {
897
- const sig = serializeElement(node);
898
- const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(sig).buffer);
899
- return [...new Uint8Array(hash)].map((b) => b.toString(16).padStart(2, "0")).join("").substring(0, 8);
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
  };
@@ -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, '&amp;') // Escape ampersand first!\n .replace(/\"/g, '&quot;') // Escape double quotes\n .replace(/'/g, '&#39;') // Escape single quotes\n .replace(/</g, '&lt;') // Escape less than\n .replace(/>/g, '&gt;') // 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, '&amp;') // Escape ampersand first!\n .replace(/\"/g, '&quot;') // Escape double quotes\n .replace(/'/g, '&#39;') // Escape single quotes\n .replace(/</g, '&lt;') // Escape less than\n .replace(/>/g, '&gt;') // 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(options.frameId ?? "0", options.iframeRef);
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 VX_NODE_SYMBOL = Symbol("vx:node");
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
- async parse() {
592
+ parse() {
598
593
  this.viewport = getViewportSize();
599
594
  if (this.options.probeViewport) {
600
595
  this.probeElements = probeViewport();
601
596
  }
602
- const vxRoot = await this.parseNode(document.documentElement, null);
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(frameId, iframeRef) {
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
- async parseNode(node, parent) {
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 await this.makeNode(node, {
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 await this.parseElement(node);
631
+ return this.parseElement(node);
635
632
  }
636
633
  return null;
637
634
  }
638
- async parseElement(el) {
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 = await this.makeNode(el, {
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 = await this.parseNode(child, vxNode);
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
- async makeNode(node, spec) {
675
- const isNew = !node[VX_NODE_SYMBOL];
676
- const ref = await this.createRef(node);
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[VX_NODE_SYMBOL] = vxNode;
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[VX_NODE_SYMBOL] = null;
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
- async createRef(node) {
823
- if (node instanceof Element) {
824
- const sig = serializeElement(node);
825
- const hash = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(sig).buffer);
826
- return [...new Uint8Array(hash)].map((b) => b.toString(16).padStart(2, "0")).join("").substring(0, 8);
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
- VX_NODE_SYMBOL,
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
@@ -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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"}
@@ -1,5 +1,6 @@
1
1
  import { VxTreeView } from './tree.js';
2
- export declare const VX_NODE_SYMBOL: unique symbol;
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(): Promise<void>;
46
- getTree(frameId: string, iframeRef?: string): VxTreeView;
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 createRef;
66
+ private nextCounterValue;
67
+ private collectDomCounters;
63
68
  }
@@ -1,9 +1,10 @@
1
- import { getViewportSize, hasVisibleArea, isInteractive, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText, serializeElement, truncateAttrValue } from './dom.js';
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 VX_NODE_SYMBOL = Symbol('vx:node');
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
- async parse() {
49
+ parse() {
45
50
  this.viewport = getViewportSize();
46
51
  if (this.options.probeViewport) {
47
52
  this.probeElements = probeViewport();
48
53
  }
49
- const vxRoot = await this.parseNode(document.documentElement, null);
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(frameId, iframeRef) {
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
- async parseNode(node, parent) {
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 await this.makeNode(node, {
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 await this.parseElement(node);
90
+ return this.parseElement(node);
84
91
  }
85
92
  return null;
86
93
  }
87
- async parseElement(el) {
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 = await this.makeNode(el, {
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 = await this.parseNode(child, vxNode);
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
- async makeNode(node, spec) {
130
- const isNew = !node[VX_NODE_SYMBOL];
131
- const ref = await this.createRef(node);
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[VX_NODE_SYMBOL] = vxNode;
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[VX_NODE_SYMBOL] = null;
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
- async createRef(node) {
288
- if (node instanceof Element) {
289
- const sig = serializeElement(node);
290
- const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(sig).buffer);
291
- return [...new Uint8Array(hash)].map(b => b.toString(16).padStart(2, '0'))
292
- .join('')
293
- .substring(0, 8);
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
  }
@@ -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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"}
@@ -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(options.frameId ?? '0', options.iframeRef);
10
+ const vxTree = parser.getTree();
11
11
  globalThis[VX_DOM_SYMBOL] = domMap;
12
12
  globalThis[VX_TREE_SYMBOL] = vxTree;
13
13
  return vxTree;
@@ -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,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxE,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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubio/webvision",
3
- "version": "3.0.9",
3
+ "version": "3.1.0",
4
4
  "main": "out/main/index.js",
5
5
  "type": "module",
6
6
  "exports": {