@ubio/webvision 3.2.3 → 3.3.1

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
@@ -27,15 +27,11 @@ var WebVision = (() => {
27
27
  VX_DOM_SYMBOL: () => VX_DOM_SYMBOL,
28
28
  VX_IGNORE_SYMBOL: () => VX_IGNORE_SYMBOL,
29
29
  VX_IGNORE_TAGS: () => VX_IGNORE_TAGS,
30
- VX_LABEL_ATTRS: () => VX_LABEL_ATTRS,
31
- VX_LABEL_ATTR_PATTERNS: () => VX_LABEL_ATTR_PATTERNS,
32
30
  VX_LAST_REFS_SYMBOL: () => VX_LAST_REFS_SYMBOL,
33
31
  VX_NODE_COUNTER_SYMBOL: () => VX_NODE_COUNTER_SYMBOL,
34
32
  VX_NODE_REF_SYMBOL: () => VX_NODE_REF_SYMBOL,
35
- VX_SRC_ATTRS: () => VX_SRC_ATTRS,
36
33
  VX_TAG_PREFERENCE: () => VX_TAG_PREFERENCE,
37
34
  VX_TREE_SYMBOL: () => VX_TREE_SYMBOL,
38
- VX_VALUE_ATTRS: () => VX_VALUE_ATTRS,
39
35
  VxPageView: () => VxPageView,
40
36
  VxTreeParser: () => VxTreeParser,
41
37
  VxTreeView: () => VxTreeView,
@@ -57,7 +53,6 @@ var WebVision = (() => {
57
53
  isHidden: () => isHidden,
58
54
  isInteractive: () => isInteractive,
59
55
  isObjectEmpty: () => isObjectEmpty,
60
- isPopup: () => isPopup,
61
56
  isRandomIdentifier: () => isRandomIdentifier,
62
57
  isRectInViewport: () => isRectInViewport,
63
58
  iterate: () => iterate,
@@ -173,6 +168,9 @@ var WebVision = (() => {
173
168
  return y;
174
169
  }
175
170
  function hasVisibleArea(element) {
171
+ if (!element) {
172
+ return false;
173
+ }
176
174
  const rect = element.getBoundingClientRect();
177
175
  const area = rect.width * rect.height;
178
176
  return area > 64;
@@ -216,21 +214,6 @@ var WebVision = (() => {
216
214
  }
217
215
  return false;
218
216
  }
219
- function isPopup(el) {
220
- const style = getComputedStyle(el);
221
- const zIndex = parseInt(style.zIndex, 10);
222
- const hasPopupPosition = style.position === "fixed" || style.position === "sticky" || style.position === "absolute" && zIndex >= 1e3;
223
- if (!hasPopupPosition) {
224
- return false;
225
- }
226
- const rect = el.getBoundingClientRect();
227
- const area = rect.width * rect.height;
228
- const viewportArea = window.innerWidth * window.innerHeight;
229
- if (area <= viewportArea * 0.2) {
230
- return false;
231
- }
232
- return true;
233
- }
234
217
  function getViewportSize() {
235
218
  return {
236
219
  width: window.innerWidth,
@@ -241,6 +224,9 @@ var WebVision = (() => {
241
224
  return rect.left < viewport.width && rect.right > 0 && rect.top < viewport.height && rect.bottom > 0;
242
225
  }
243
226
  function makeOverlaysOpaque(el) {
227
+ if (!el) {
228
+ return;
229
+ }
244
230
  if (!el[ORIGINAL_STYLE_SYMBOL]) {
245
231
  el[ORIGINAL_STYLE_SYMBOL] = el.getAttribute("style");
246
232
  }
@@ -456,23 +442,14 @@ var WebVision = (() => {
456
442
  components.push("." + vxNode.classList.join("."));
457
443
  }
458
444
  }
459
- for (const meta of vxNode.meta ?? []) {
460
- components.push(`[${meta}]`);
461
- }
462
445
  const attrs = [];
463
- if (options.renderLabelAttrs) {
464
- for (const [attr, value] of Object.entries(vxNode.labelAttrs ?? {})) {
465
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
466
- }
467
- }
468
- if (options.renderValueAttrs) {
469
- for (const [attr, value] of Object.entries(vxNode.valueAttrs ?? {})) {
470
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
471
- }
472
- }
473
- if (options.renderSrcAttrs) {
474
- for (const [attr, value] of Object.entries(vxNode.srcAttrs ?? {})) {
475
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
446
+ const filterAttributes = options.filterAttributes ?? (() => true);
447
+ if (options.renderAttributes) {
448
+ for (const [attr, value] of Object.entries(vxNode.attributes ?? {})) {
449
+ if (!filterAttributes(vxNode, attr, value)) {
450
+ continue;
451
+ }
452
+ attrs.push(`${attr}="${value}"`);
476
453
  }
477
454
  }
478
455
  if (htmlStyle) {
@@ -591,24 +568,6 @@ var WebVision = (() => {
591
568
  var VX_NODE_COUNTER_SYMBOL = Symbol("vx:counter");
592
569
  var VX_IGNORE_SYMBOL = Symbol("vx:ignore");
593
570
  var VX_IGNORE_TAGS = ["svg", "script", "noscript", "style", "link", "meta"];
594
- var VX_LABEL_ATTRS = [
595
- "title",
596
- "alt",
597
- "placeholder",
598
- "aria-role",
599
- "aria-label",
600
- "aria-description",
601
- "aria-placeholder",
602
- "aria-valuetext"
603
- ];
604
- var VX_LABEL_ATTR_PATTERNS = [
605
- /^data-label/,
606
- // data-label attributes
607
- /title-/i
608
- // title-* attributes
609
- ];
610
- var VX_VALUE_ATTRS = ["role", "value", "checked", "selected", "disabled", "readonly"];
611
- var VX_SRC_ATTRS = ["src", "href"];
612
571
  var VX_TAG_PREFERENCE = [
613
572
  "a",
614
573
  "iframe",
@@ -730,18 +689,12 @@ var WebVision = (() => {
730
689
  tagName: el.tagName.toLowerCase(),
731
690
  id: isRandomIdentifier(id) ? void 0 : id,
732
691
  classList: Array.from(el.classList).filter((cls) => !isRandomIdentifier(cls)).slice(0, 4),
733
- labelAttrs: this.collectLabelAttrs(el),
734
- valueAttrs: this.collectValueAttrs(el),
735
- srcAttrs: this.collectSrcAttrs(el),
692
+ attributes: this.collectAttributes(el),
736
693
  hasVisibleArea: hasVisibleArea(parentEl),
737
694
  isInteractive: isInteractive(parentEl),
738
695
  isOutsideViewport: !isInViewport,
739
696
  isProbeHit,
740
- isKept: el.matches(VX_KEEP_SELECTOR),
741
- meta: [
742
- isPopup(parentEl) ? "popup" : null,
743
- isInViewport && !isProbeHit ? "occluded" : null
744
- ].filter((_) => _ != null)
697
+ isKept: el.matches(VX_KEEP_SELECTOR)
745
698
  });
746
699
  const children = [];
747
700
  for (const child of iterate(el.childNodes)) {
@@ -813,18 +766,8 @@ var WebVision = (() => {
813
766
  const parentRank = VX_TAG_PREFERENCE.indexOf(parent.tagName ?? "");
814
767
  const childRank = VX_TAG_PREFERENCE.indexOf(child.tagName ?? "");
815
768
  if (parentRank === -1 && childRank === -1) {
816
- const parentAttrCount = Object.keys({
817
- ...parent.labelAttrs,
818
- ...parent.valueAttrs,
819
- ...parent.srcAttrs,
820
- ...parent.meta
821
- }).length;
822
- const childAttrCount = Object.keys({
823
- ...child.labelAttrs,
824
- ...child.valueAttrs,
825
- ...child.srcAttrs,
826
- ...child.meta
827
- }).length;
769
+ const parentAttrCount = Object.keys(parent.attributes ?? {}).length;
770
+ const childAttrCount = Object.keys(child.attributes ?? {}).length;
828
771
  return parentAttrCount > childAttrCount;
829
772
  }
830
773
  return parentRank !== -1 && (childRank === -1 || parentRank < childRank);
@@ -833,9 +776,7 @@ var WebVision = (() => {
833
776
  return {
834
777
  ...b,
835
778
  ...a,
836
- labelAttrs: { ...b.labelAttrs, ...a.labelAttrs },
837
- valueAttrs: { ...b.valueAttrs, ...a.valueAttrs },
838
- srcAttrs: { ...b.srcAttrs, ...a.srcAttrs }
779
+ attributes: { ...b.attributes, ...a.attributes }
839
780
  };
840
781
  }
841
782
  shouldOmit(vxNode) {
@@ -854,7 +795,7 @@ var WebVision = (() => {
854
795
  }
855
796
  const hasText = !!vxNode.textContent;
856
797
  const hasChildren = (vxNode.children ?? []).length > 0;
857
- const hasAttrs = [vxNode.labelAttrs, vxNode.valueAttrs, vxNode.srcAttrs].some((attrs) => !isObjectEmpty(attrs ?? {}));
798
+ const hasAttrs = !isObjectEmpty(vxNode.attributes ?? {});
858
799
  if (this.options.unnestDivs) {
859
800
  const isDivOrSpan = ["div", "span"].includes(tagName);
860
801
  if (isDivOrSpan && hasChildren && !hasAttrs) {
@@ -874,41 +815,13 @@ var WebVision = (() => {
874
815
  }
875
816
  return false;
876
817
  }
877
- collectLabelAttrs(el) {
818
+ collectAttributes(el) {
878
819
  const attrs = {};
879
820
  for (const attr of iterate(el.attributes)) {
880
- const attrName = attr.name;
881
- const value = truncateAttrValue(attr.value);
882
- if (!value) {
821
+ if (["id", "class", "style"].includes(attr.name.toLowerCase())) {
883
822
  continue;
884
823
  }
885
- if (VX_LABEL_ATTRS.includes(attrName)) {
886
- attrs[attrName] = value;
887
- continue;
888
- }
889
- if (VX_LABEL_ATTR_PATTERNS.some((pattern) => pattern.test(attrName))) {
890
- attrs[attrName] = value;
891
- }
892
- }
893
- return attrs;
894
- }
895
- collectValueAttrs(el) {
896
- const attrs = {};
897
- for (const attr of VX_VALUE_ATTRS) {
898
- const value = el[attr] ?? "";
899
- if (value) {
900
- attrs[attr] = String(value);
901
- }
902
- }
903
- return attrs;
904
- }
905
- collectSrcAttrs(el) {
906
- const attrs = {};
907
- for (const attr of VX_SRC_ATTRS) {
908
- const value = truncateAttrValue(el[attr] ?? "");
909
- if (value) {
910
- attrs[attr] = value;
911
- }
824
+ attrs[attr.name] = truncateAttrValue(attr.value);
912
825
  }
913
826
  return attrs;
914
827
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/page/index.ts", "../src/page/util.ts", "../src/page/dom.ts", "../src/page/traverse.ts", "../src/page/probe.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", "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 String(ref).toLowerCase().trim()\n .replace(/ref=/gi, '')\n .replace(/[^a-z0-9]/gi, '');\n}\n\nexport function* iterate<T>(items: ArrayLike<T> | null | undefined): IterableIterator<T> {\n if (!items) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n yield item;\n }\n}\n", "import { iterate } from './util.js';\n\nconst 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 if (element.children.length === 0) {\n return true;\n }\n for (const child of iterate(element.children)) {\n if (!isDeepHidden(child)) {\n return false;\n }\n }\n return true;\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 isPopup(el: Element): boolean {\n const style = getComputedStyle(el);\n const zIndex = parseInt(style.zIndex, 10);\n const hasPopupPosition = style.position === 'fixed' ||\n style.position === 'sticky' ||\n (style.position === 'absolute' && zIndex >= 1000);\n if (!hasPopupPosition) {\n return false;\n }\n const rect = el.getBoundingClientRect();\n const area = rect.width * rect.height;\n const viewportArea = window.innerWidth * window.innerHeight;\n if (area <= viewportArea * 0.2) {\n return false;\n }\n return true;\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';\nimport { iterate } from './util.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 return;\n }\n yield element;\n for (const child of iterate(element.children)) {\n yield* traverseElements(child);\n }\n if (element.shadowRoot) {\n for (const child of iterate(element.shadowRoot.children)) {\n yield* traverseElements(child);\n }\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) {\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 { truncateAttrValue } from './dom.js';\nimport { VxNode } from './parser.js';\nimport { traverseVxNode } from './traverse.js';\n\nexport interface VxRenderOptions {\n renderStyle?: 'html' | 'text';\n renderTagNames?: boolean;\n renderIds?: boolean;\n renderClassNames?: boolean;\n renderRefs?: boolean;\n renderLabelAttrs?: boolean;\n renderValueAttrs?: boolean;\n renderSrcAttrs?: boolean;\n skipTags?: string[];\n skipNonInteractive?: boolean;\n}\n\nexport function renderVxNode(scope: VxNode, options: VxRenderOptions = {}) {\n const buffer = [];\n for (const { vxNode, depth } of traverseVxNode(scope)) {\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 if (!vxNode.tagName) {\n return [indent, vxNode.textContent].filter(Boolean).join('');\n }\n const tagLine = renderTagLine(vxNode, options);\n const htmlStyle = options.renderStyle === 'html';\n return [\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.toUpperCase());\n }\n if (options.renderRefs) {\n components.push(`[ref=${vxNode.ref}]`);\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 for (const meta of vxNode.meta ?? []) {\n components.push(`[${meta}]`);\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", "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 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 color = options.useColors ? undefined : '#060';\n highlightEl(el, ref, color);\n }\n }\n }\n\n collectRefs(leafOnly = true, filterRefs?: string[]) {\n const refs: string[] = [];\n filterRefs = filterRefs?.map(ref => normalizeRef(ref));\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, isPopup, 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, iterate } 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 = ['role', '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 meta?: string[];\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 * When true (default), open shadow roots are traversed after the host\u2019s light DOM children\n * so the tree matches a flattened view (closed shadow roots are still inaccessible).\n */\n flattenShadowDom?: 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 this.probeElements = probeViewport();\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 {\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 isProbeHit = this.isProbeHit(parentEl);\n const isInViewport = isRectInViewport(rect, this.viewport);\n const vxNode = this.makeElementNode(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: !isInViewport,\n isProbeHit,\n isKept: el.matches(VX_KEEP_SELECTOR),\n meta: [\n isPopup(parentEl) ? 'popup' : null,\n (isInViewport && !isProbeHit) ? 'occluded' : null,\n ].filter(_ => _ != null)\n });\n const children: VxNode[] = [];\n for (const child of iterate(el.childNodes)) {\n const childNode = this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\n }\n if (this.options.flattenShadowDom !== false && el.shadowRoot) {\n for (const child of iterate(el.shadowRoot.childNodes)) {\n const childNode = this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\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 makeElementNode(el: Element, spec: Omit<VxNode, 'ref'>): VxNode {\n const existingRef = (el as any)[VX_NODE_REF_SYMBOL];\n let ref;\n if (existingRef === undefined) {\n const counter = this.nextCounterValue();\n ref = `${this.frameId}${counter}`;\n this.usedCounters.add(counter);\n (el as any)[VX_NODE_COUNTER_SYMBOL] = counter;\n (el as any)[VX_NODE_REF_SYMBOL] = ref;\n } else {\n ref = existingRef;\n }\n const vxNode: VxNode = {\n ...spec,\n ref,\n };\n this.domRefMap.set(ref, el);\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 ...parent.meta,\n }).length;\n const childAttrCount = Object.keys({\n ...child.labelAttrs,\n ...child.valueAttrs,\n ...child.srcAttrs,\n ...child.meta,\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 iterate(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 iterate(node.children)) {\n this.clearRecursive(child);\n }\n if (node.shadowRoot) {\n for (const child of iterate(node.shadowRoot.children)) {\n this.clearRecursive(child);\n }\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 if (!el) {\n return;\n }\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 iterate(el.children)) {\n this.collectDomCounters(child);\n }\n if (el.shadowRoot) {\n for (const child of iterate(el.shadowRoot.children)) {\n this.collectDomCounters(child);\n }\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", "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 String(ref).toLowerCase().trim()\n .replace(/ref=/gi, '')\n .replace(/[^a-z0-9]/gi, '');\n}\n\nexport function* iterate<T>(items: ArrayLike<T> | null | undefined): IterableIterator<T> {\n if (!items) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n yield item;\n }\n}\n", "import { iterate } from './util.js';\n\nconst 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 if (!element) {\n return false;\n }\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 if (element.children.length === 0) {\n return true;\n }\n for (const child of iterate(element.children)) {\n if (!isDeepHidden(child)) {\n return false;\n }\n }\n return true;\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) {\n return;\n }\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';\nimport { iterate } from './util.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 return;\n }\n yield element;\n for (const child of iterate(element.children)) {\n yield* traverseElements(child);\n }\n if (element.shadowRoot) {\n for (const child of iterate(element.shadowRoot.children)) {\n yield* traverseElements(child);\n }\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) {\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';\nimport { traverseVxNode } from './traverse.js';\n\nexport interface VxRenderOptions {\n renderStyle?: 'html' | 'text';\n renderTagNames?: boolean;\n renderIds?: boolean;\n renderClassNames?: boolean;\n renderRefs?: boolean;\n renderAttributes?: boolean;\n filterAttributes?: (node: VxNode, k: string, v: string) => boolean;\n skipTags?: string[];\n skipNonInteractive?: boolean;\n}\n\nexport function renderVxNode(scope: VxNode, options: VxRenderOptions = {}) {\n const buffer = [];\n for (const { vxNode, depth } of traverseVxNode(scope)) {\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 if (!vxNode.tagName) {\n return [indent, vxNode.textContent].filter(Boolean).join('');\n }\n const tagLine = renderTagLine(vxNode, options);\n const htmlStyle = options.renderStyle === 'html';\n return [\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.toUpperCase());\n }\n if (options.renderRefs) {\n components.push(`[ref=${vxNode.ref}]`);\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 const attrs = [];\n const filterAttributes = options.filterAttributes ?? (() => true);\n if (options.renderAttributes) {\n for (const [attr, value] of Object.entries(vxNode.attributes ?? {})) {\n if (!filterAttributes(vxNode, attr, value)) {\n continue;\n }\n attrs.push(`${attr}=\"${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", "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 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 color = options.useColors ? undefined : '#060';\n highlightEl(el, ref, color);\n }\n }\n }\n\n collectRefs(leafOnly = true, filterRefs?: string[]) {\n const refs: string[] = [];\n filterRefs = filterRefs?.map(ref => normalizeRef(ref));\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, iterate } 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_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 attributes?: 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 * When true (default), open shadow roots are traversed after the host\u2019s light DOM children\n * so the tree matches a flattened view (closed shadow roots are still inaccessible).\n */\n flattenShadowDom?: 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 this.probeElements = probeViewport();\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 {\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 isProbeHit = this.isProbeHit(parentEl);\n const isInViewport = isRectInViewport(rect, this.viewport);\n const vxNode = this.makeElementNode(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 attributes: this.collectAttributes(el),\n hasVisibleArea: hasVisibleArea(parentEl),\n isInteractive: isInteractive(parentEl),\n isOutsideViewport: !isInViewport,\n isProbeHit,\n isKept: el.matches(VX_KEEP_SELECTOR),\n });\n const children: VxNode[] = [];\n for (const child of iterate(el.childNodes)) {\n const childNode = this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\n }\n if (this.options.flattenShadowDom !== false && el.shadowRoot) {\n for (const child of iterate(el.shadowRoot.childNodes)) {\n const childNode = this.parseNode(child, vxNode);\n if (childNode != null) {\n children.push(childNode);\n }\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 makeElementNode(el: Element, spec: Omit<VxNode, 'ref'>): VxNode {\n const existingRef = (el as any)[VX_NODE_REF_SYMBOL];\n let ref;\n if (existingRef === undefined) {\n const counter = this.nextCounterValue();\n ref = `${this.frameId}${counter}`;\n this.usedCounters.add(counter);\n (el as any)[VX_NODE_COUNTER_SYMBOL] = counter;\n (el as any)[VX_NODE_REF_SYMBOL] = ref;\n } else {\n ref = existingRef;\n }\n const vxNode: VxNode = {\n ...spec,\n ref,\n };\n this.domRefMap.set(ref, el);\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(parent.attributes ?? {}).length;\n const childAttrCount = Object.keys(child.attributes ?? {}).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 attributes: { ...b.attributes, ...a.attributes },\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 = !isObjectEmpty(vxNode.attributes ?? {});\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 collectAttributes(el: Element): Record<string, string> {\n const attrs: Record<string, string> = {};\n for (const attr of iterate(el.attributes)) {\n if (['id', 'class', 'style'].includes(attr.name.toLowerCase())) {\n continue;\n }\n attrs[attr.name] = truncateAttrValue(attr.value);\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 iterate(node.children)) {\n this.clearRecursive(child);\n }\n if (node.shadowRoot) {\n for (const child of iterate(node.shadowRoot.children)) {\n this.clearRecursive(child);\n }\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 if (!el) {\n return;\n }\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 iterate(el.children)) {\n this.collectDomCounters(child);\n }\n if (el.shadowRoot) {\n for (const child of iterate(el.shadowRoot.children)) {\n this.collectDomCounters(child);\n }\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
@@ -98,6 +98,9 @@ function getOffsetTop(node) {
98
98
  return y;
99
99
  }
100
100
  function hasVisibleArea(element) {
101
+ if (!element) {
102
+ return false;
103
+ }
101
104
  const rect = element.getBoundingClientRect();
102
105
  const area = rect.width * rect.height;
103
106
  return area > 64;
@@ -141,21 +144,6 @@ function isInteractive(el) {
141
144
  }
142
145
  return false;
143
146
  }
144
- function isPopup(el) {
145
- const style = getComputedStyle(el);
146
- const zIndex = parseInt(style.zIndex, 10);
147
- const hasPopupPosition = style.position === "fixed" || style.position === "sticky" || style.position === "absolute" && zIndex >= 1e3;
148
- if (!hasPopupPosition) {
149
- return false;
150
- }
151
- const rect = el.getBoundingClientRect();
152
- const area = rect.width * rect.height;
153
- const viewportArea = window.innerWidth * window.innerHeight;
154
- if (area <= viewportArea * 0.2) {
155
- return false;
156
- }
157
- return true;
158
- }
159
147
  function getViewportSize() {
160
148
  return {
161
149
  width: window.innerWidth,
@@ -166,6 +154,9 @@ function isRectInViewport(rect, viewport) {
166
154
  return rect.left < viewport.width && rect.right > 0 && rect.top < viewport.height && rect.bottom > 0;
167
155
  }
168
156
  function makeOverlaysOpaque(el) {
157
+ if (!el) {
158
+ return;
159
+ }
169
160
  if (!el[ORIGINAL_STYLE_SYMBOL]) {
170
161
  el[ORIGINAL_STYLE_SYMBOL] = el.getAttribute("style");
171
162
  }
@@ -381,23 +372,14 @@ function renderTagLine(vxNode, options) {
381
372
  components.push("." + vxNode.classList.join("."));
382
373
  }
383
374
  }
384
- for (const meta of vxNode.meta ?? []) {
385
- components.push(`[${meta}]`);
386
- }
387
375
  const attrs = [];
388
- if (options.renderLabelAttrs) {
389
- for (const [attr, value] of Object.entries(vxNode.labelAttrs ?? {})) {
390
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
391
- }
392
- }
393
- if (options.renderValueAttrs) {
394
- for (const [attr, value] of Object.entries(vxNode.valueAttrs ?? {})) {
395
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
396
- }
397
- }
398
- if (options.renderSrcAttrs) {
399
- for (const [attr, value] of Object.entries(vxNode.srcAttrs ?? {})) {
400
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
376
+ const filterAttributes = options.filterAttributes ?? (() => true);
377
+ if (options.renderAttributes) {
378
+ for (const [attr, value] of Object.entries(vxNode.attributes ?? {})) {
379
+ if (!filterAttributes(vxNode, attr, value)) {
380
+ continue;
381
+ }
382
+ attrs.push(`${attr}="${value}"`);
401
383
  }
402
384
  }
403
385
  if (htmlStyle) {
@@ -516,24 +498,6 @@ var VX_NODE_REF_SYMBOL = Symbol("vx:ref");
516
498
  var VX_NODE_COUNTER_SYMBOL = Symbol("vx:counter");
517
499
  var VX_IGNORE_SYMBOL = Symbol("vx:ignore");
518
500
  var VX_IGNORE_TAGS = ["svg", "script", "noscript", "style", "link", "meta"];
519
- var VX_LABEL_ATTRS = [
520
- "title",
521
- "alt",
522
- "placeholder",
523
- "aria-role",
524
- "aria-label",
525
- "aria-description",
526
- "aria-placeholder",
527
- "aria-valuetext"
528
- ];
529
- var VX_LABEL_ATTR_PATTERNS = [
530
- /^data-label/,
531
- // data-label attributes
532
- /title-/i
533
- // title-* attributes
534
- ];
535
- var VX_VALUE_ATTRS = ["role", "value", "checked", "selected", "disabled", "readonly"];
536
- var VX_SRC_ATTRS = ["src", "href"];
537
501
  var VX_TAG_PREFERENCE = [
538
502
  "a",
539
503
  "iframe",
@@ -655,18 +619,12 @@ var VxTreeParser = class {
655
619
  tagName: el.tagName.toLowerCase(),
656
620
  id: isRandomIdentifier(id) ? void 0 : id,
657
621
  classList: Array.from(el.classList).filter((cls) => !isRandomIdentifier(cls)).slice(0, 4),
658
- labelAttrs: this.collectLabelAttrs(el),
659
- valueAttrs: this.collectValueAttrs(el),
660
- srcAttrs: this.collectSrcAttrs(el),
622
+ attributes: this.collectAttributes(el),
661
623
  hasVisibleArea: hasVisibleArea(parentEl),
662
624
  isInteractive: isInteractive(parentEl),
663
625
  isOutsideViewport: !isInViewport,
664
626
  isProbeHit,
665
- isKept: el.matches(VX_KEEP_SELECTOR),
666
- meta: [
667
- isPopup(parentEl) ? "popup" : null,
668
- isInViewport && !isProbeHit ? "occluded" : null
669
- ].filter((_) => _ != null)
627
+ isKept: el.matches(VX_KEEP_SELECTOR)
670
628
  });
671
629
  const children = [];
672
630
  for (const child of iterate(el.childNodes)) {
@@ -738,18 +696,8 @@ var VxTreeParser = class {
738
696
  const parentRank = VX_TAG_PREFERENCE.indexOf(parent.tagName ?? "");
739
697
  const childRank = VX_TAG_PREFERENCE.indexOf(child.tagName ?? "");
740
698
  if (parentRank === -1 && childRank === -1) {
741
- const parentAttrCount = Object.keys({
742
- ...parent.labelAttrs,
743
- ...parent.valueAttrs,
744
- ...parent.srcAttrs,
745
- ...parent.meta
746
- }).length;
747
- const childAttrCount = Object.keys({
748
- ...child.labelAttrs,
749
- ...child.valueAttrs,
750
- ...child.srcAttrs,
751
- ...child.meta
752
- }).length;
699
+ const parentAttrCount = Object.keys(parent.attributes ?? {}).length;
700
+ const childAttrCount = Object.keys(child.attributes ?? {}).length;
753
701
  return parentAttrCount > childAttrCount;
754
702
  }
755
703
  return parentRank !== -1 && (childRank === -1 || parentRank < childRank);
@@ -758,9 +706,7 @@ var VxTreeParser = class {
758
706
  return {
759
707
  ...b,
760
708
  ...a,
761
- labelAttrs: { ...b.labelAttrs, ...a.labelAttrs },
762
- valueAttrs: { ...b.valueAttrs, ...a.valueAttrs },
763
- srcAttrs: { ...b.srcAttrs, ...a.srcAttrs }
709
+ attributes: { ...b.attributes, ...a.attributes }
764
710
  };
765
711
  }
766
712
  shouldOmit(vxNode) {
@@ -779,7 +725,7 @@ var VxTreeParser = class {
779
725
  }
780
726
  const hasText = !!vxNode.textContent;
781
727
  const hasChildren = (vxNode.children ?? []).length > 0;
782
- const hasAttrs = [vxNode.labelAttrs, vxNode.valueAttrs, vxNode.srcAttrs].some((attrs) => !isObjectEmpty(attrs ?? {}));
728
+ const hasAttrs = !isObjectEmpty(vxNode.attributes ?? {});
783
729
  if (this.options.unnestDivs) {
784
730
  const isDivOrSpan = ["div", "span"].includes(tagName);
785
731
  if (isDivOrSpan && hasChildren && !hasAttrs) {
@@ -799,41 +745,13 @@ var VxTreeParser = class {
799
745
  }
800
746
  return false;
801
747
  }
802
- collectLabelAttrs(el) {
748
+ collectAttributes(el) {
803
749
  const attrs = {};
804
750
  for (const attr of iterate(el.attributes)) {
805
- const attrName = attr.name;
806
- const value = truncateAttrValue(attr.value);
807
- if (!value) {
751
+ if (["id", "class", "style"].includes(attr.name.toLowerCase())) {
808
752
  continue;
809
753
  }
810
- if (VX_LABEL_ATTRS.includes(attrName)) {
811
- attrs[attrName] = value;
812
- continue;
813
- }
814
- if (VX_LABEL_ATTR_PATTERNS.some((pattern) => pattern.test(attrName))) {
815
- attrs[attrName] = value;
816
- }
817
- }
818
- return attrs;
819
- }
820
- collectValueAttrs(el) {
821
- const attrs = {};
822
- for (const attr of VX_VALUE_ATTRS) {
823
- const value = el[attr] ?? "";
824
- if (value) {
825
- attrs[attr] = String(value);
826
- }
827
- }
828
- return attrs;
829
- }
830
- collectSrcAttrs(el) {
831
- const attrs = {};
832
- for (const attr of VX_SRC_ATTRS) {
833
- const value = truncateAttrValue(el[attr] ?? "");
834
- if (value) {
835
- attrs[attr] = value;
836
- }
754
+ attrs[attr.name] = truncateAttrValue(attr.value);
837
755
  }
838
756
  return attrs;
839
757
  }
@@ -1032,15 +950,11 @@ export {
1032
950
  VX_DOM_SYMBOL,
1033
951
  VX_IGNORE_SYMBOL,
1034
952
  VX_IGNORE_TAGS,
1035
- VX_LABEL_ATTRS,
1036
- VX_LABEL_ATTR_PATTERNS,
1037
953
  VX_LAST_REFS_SYMBOL,
1038
954
  VX_NODE_COUNTER_SYMBOL,
1039
955
  VX_NODE_REF_SYMBOL,
1040
- VX_SRC_ATTRS,
1041
956
  VX_TAG_PREFERENCE,
1042
957
  VX_TREE_SYMBOL,
1043
- VX_VALUE_ATTRS,
1044
958
  VxPageView,
1045
959
  VxTreeParser,
1046
960
  VxTreeView,
@@ -1062,7 +976,6 @@ export {
1062
976
  isHidden,
1063
977
  isInteractive,
1064
978
  isObjectEmpty,
1065
- isPopup,
1066
979
  isRandomIdentifier,
1067
980
  isRectInViewport,
1068
981
  iterate,
@@ -1,7 +1,7 @@
1
1
  // ==UserScript==
2
2
  // @name Webvision (console)
3
3
  // @namespace https://github.com/ubio/webvision
4
- // @version 3.2.3
4
+ // @version 3.3.1
5
5
  // @description Loads Webvision from dev server into page; window.WebVision in console
6
6
  // @match *://*/*
7
7
  // @run-at document-end
package/out/page/dom.d.ts CHANGED
@@ -14,7 +14,6 @@ export declare function getOffsetTop(node: Node): number;
14
14
  export declare function hasVisibleArea(element: Element): boolean;
15
15
  export declare function isDeepHidden(element: Element): boolean;
16
16
  export declare function isInteractive(el: Element): boolean;
17
- export declare function isPopup(el: Element): boolean;
18
17
  export declare function getViewportSize(): Viewport;
19
18
  export declare function isRectInViewport(rect: DOMRect, viewport: Viewport): boolean;
20
19
  export declare function makeOverlaysOpaque(el: HTMLElement): void;
package/out/page/dom.js CHANGED
@@ -60,6 +60,9 @@ export function getOffsetTop(node) {
60
60
  return y;
61
61
  }
62
62
  export function hasVisibleArea(element) {
63
+ if (!element) {
64
+ return false;
65
+ }
63
66
  const rect = element.getBoundingClientRect();
64
67
  const area = rect.width * rect.height;
65
68
  return area > 64;
@@ -103,23 +106,6 @@ export function isInteractive(el) {
103
106
  }
104
107
  return false;
105
108
  }
106
- export function isPopup(el) {
107
- const style = getComputedStyle(el);
108
- const zIndex = parseInt(style.zIndex, 10);
109
- const hasPopupPosition = style.position === 'fixed' ||
110
- style.position === 'sticky' ||
111
- (style.position === 'absolute' && zIndex >= 1000);
112
- if (!hasPopupPosition) {
113
- return false;
114
- }
115
- const rect = el.getBoundingClientRect();
116
- const area = rect.width * rect.height;
117
- const viewportArea = window.innerWidth * window.innerHeight;
118
- if (area <= viewportArea * 0.2) {
119
- return false;
120
- }
121
- return true;
122
- }
123
109
  export function getViewportSize() {
124
110
  return {
125
111
  width: window.innerWidth,
@@ -133,6 +119,9 @@ export function isRectInViewport(rect, viewport) {
133
119
  rect.bottom > 0;
134
120
  }
135
121
  export function makeOverlaysOpaque(el) {
122
+ if (!el) {
123
+ return;
124
+ }
136
125
  if (!el[ORIGINAL_STYLE_SYMBOL]) {
137
126
  el[ORIGINAL_STYLE_SYMBOL] = el.getAttribute('style');
138
127
  }
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC7B,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;CAAC,CAAC;AAO7Q,MAAM,UAAU,QAAQ,CAAC,EAAW;IAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAW;IACzC,OAAO,aAAa,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACrC,OAAO,GAAG;SACL,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAAK,GAAG,GAAG;IACxD,IAAI,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IACzC,OAAO,KAAK;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,0BAA0B;SACjD,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,uBAAuB;SAC/C,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,uBAAuB;SAC9C,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,mBAAmB;SACzC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,sBAAsB;SAC5C,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,8BAA8B;AAC/D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAW,EAAE,QAAgB;IAC1D,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAU;IACnC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,OAAO,OAAO,EAAE,CAAC;QACb,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QAC5B,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,OAAO,IAAI,GAAG,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IACzC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAW;IACrC,MAAM,MAAM,GAAG,EAAiB,CAAC;IACjC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACnF,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO;QACH,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,MAAM,EAAE,MAAM,CAAC,WAAW;KAC7B,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa,EAAE,QAAkB;IAC9D,OAAO,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAe;IAC9C,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,OAAO;IACX,CAAC;IACD,IAAI,CAAE,EAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrC,EAAU,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IACD,6BAA6B;IAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxC,OAAO;IACX,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7D,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAClD,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC;IACjC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC3B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,kEAAkE;IAClE,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IAC/B,uEAAuE;IACvE,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,0DAA0D;IAC1D,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAe;IACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,UAAU,CAAC;QAC7B,IAAI,MAAM,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;YAC3B,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAW;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,EAAE,CAAC,aAAa,EAAE,CAAC;QACtB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;QACtB,KAAK,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -3,10 +3,6 @@ export declare const VX_NODE_REF_SYMBOL: unique symbol;
3
3
  export declare const VX_NODE_COUNTER_SYMBOL: unique symbol;
4
4
  export declare const VX_IGNORE_SYMBOL: unique symbol;
5
5
  export declare const VX_IGNORE_TAGS: string[];
6
- export declare const VX_LABEL_ATTRS: string[];
7
- export declare const VX_LABEL_ATTR_PATTERNS: RegExp[];
8
- export declare const VX_VALUE_ATTRS: string[];
9
- export declare const VX_SRC_ATTRS: string[];
10
6
  export declare const VX_TAG_PREFERENCE: string[];
11
7
  export type VxDomNode = Element | Text;
12
8
  export interface VxNode {
@@ -21,10 +17,7 @@ export interface VxNode {
21
17
  isOutsideViewport?: boolean;
22
18
  isProbeHit?: boolean;
23
19
  isKept?: boolean;
24
- meta?: string[];
25
- srcAttrs?: Record<string, string>;
26
- labelAttrs?: Record<string, string>;
27
- valueAttrs?: Record<string, string>;
20
+ attributes?: Record<string, string>;
28
21
  }
29
22
  export interface VxTreeOptions {
30
23
  frameId?: string;
@@ -64,9 +57,7 @@ export declare class VxTreeParser {
64
57
  private collapseMerge;
65
58
  private shouldOmit;
66
59
  private isProbeHit;
67
- private collectLabelAttrs;
68
- private collectValueAttrs;
69
- private collectSrcAttrs;
60
+ private collectAttributes;
70
61
  private clearRecursive;
71
62
  private nextCounterValue;
72
63
  private collectDomCounters;
@@ -1,4 +1,4 @@
1
- import { getViewportSize, hasVisibleArea, isInteractive, isPopup, isRandomIdentifier, isRectInViewport, makeOverlaysOpaque, normalizeText, 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';
@@ -7,22 +7,6 @@ export const VX_NODE_REF_SYMBOL = Symbol('vx:ref');
7
7
  export const VX_NODE_COUNTER_SYMBOL = Symbol('vx:counter');
8
8
  export const VX_IGNORE_SYMBOL = Symbol('vx:ignore');
9
9
  export const VX_IGNORE_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];
10
- export const VX_LABEL_ATTRS = [
11
- 'title',
12
- 'alt',
13
- 'placeholder',
14
- 'aria-role',
15
- 'aria-label',
16
- 'aria-description',
17
- 'aria-placeholder',
18
- 'aria-valuetext',
19
- ];
20
- export const VX_LABEL_ATTR_PATTERNS = [
21
- /^data-label/, // data-label attributes
22
- /title-/i, // title-* attributes
23
- ];
24
- export const VX_VALUE_ATTRS = ['role', 'value', 'checked', 'selected', 'disabled', 'readonly'];
25
- export const VX_SRC_ATTRS = ['src', 'href'];
26
10
  export const VX_TAG_PREFERENCE = [
27
11
  'a', 'iframe', 'input', 'button', 'select', 'textarea', 'img', 'label',
28
12
  'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
@@ -108,18 +92,12 @@ export class VxTreeParser {
108
92
  classList: Array.from(el.classList)
109
93
  .filter(cls => !isRandomIdentifier(cls))
110
94
  .slice(0, 4),
111
- labelAttrs: this.collectLabelAttrs(el),
112
- valueAttrs: this.collectValueAttrs(el),
113
- srcAttrs: this.collectSrcAttrs(el),
95
+ attributes: this.collectAttributes(el),
114
96
  hasVisibleArea: hasVisibleArea(parentEl),
115
97
  isInteractive: isInteractive(parentEl),
116
98
  isOutsideViewport: !isInViewport,
117
99
  isProbeHit,
118
100
  isKept: el.matches(VX_KEEP_SELECTOR),
119
- meta: [
120
- isPopup(parentEl) ? 'popup' : null,
121
- (isInViewport && !isProbeHit) ? 'occluded' : null,
122
- ].filter(_ => _ != null)
123
101
  });
124
102
  const children = [];
125
103
  for (const child of iterate(el.childNodes)) {
@@ -199,18 +177,8 @@ export class VxTreeParser {
199
177
  const parentRank = VX_TAG_PREFERENCE.indexOf(parent.tagName ?? '');
200
178
  const childRank = VX_TAG_PREFERENCE.indexOf(child.tagName ?? '');
201
179
  if (parentRank === -1 && childRank === -1) {
202
- const parentAttrCount = Object.keys({
203
- ...parent.labelAttrs,
204
- ...parent.valueAttrs,
205
- ...parent.srcAttrs,
206
- ...parent.meta,
207
- }).length;
208
- const childAttrCount = Object.keys({
209
- ...child.labelAttrs,
210
- ...child.valueAttrs,
211
- ...child.srcAttrs,
212
- ...child.meta,
213
- }).length;
180
+ const parentAttrCount = Object.keys(parent.attributes ?? {}).length;
181
+ const childAttrCount = Object.keys(child.attributes ?? {}).length;
214
182
  return parentAttrCount > childAttrCount;
215
183
  }
216
184
  return parentRank !== -1 && (childRank === -1 || parentRank < childRank);
@@ -219,9 +187,7 @@ export class VxTreeParser {
219
187
  return {
220
188
  ...b,
221
189
  ...a,
222
- labelAttrs: { ...b.labelAttrs, ...a.labelAttrs },
223
- valueAttrs: { ...b.valueAttrs, ...a.valueAttrs },
224
- srcAttrs: { ...b.srcAttrs, ...a.srcAttrs },
190
+ attributes: { ...b.attributes, ...a.attributes },
225
191
  };
226
192
  }
227
193
  shouldOmit(vxNode) {
@@ -240,8 +206,7 @@ export class VxTreeParser {
240
206
  }
241
207
  const hasText = !!vxNode.textContent;
242
208
  const hasChildren = (vxNode.children ?? []).length > 0;
243
- const hasAttrs = [vxNode.labelAttrs, vxNode.valueAttrs, vxNode.srcAttrs]
244
- .some(attrs => !isObjectEmpty(attrs ?? {}));
209
+ const hasAttrs = !isObjectEmpty(vxNode.attributes ?? {});
245
210
  if (this.options.unnestDivs) {
246
211
  const isDivOrSpan = ['div', 'span'].includes(tagName);
247
212
  if (isDivOrSpan && hasChildren && !hasAttrs) {
@@ -262,44 +227,13 @@ export class VxTreeParser {
262
227
  }
263
228
  return false;
264
229
  }
265
- collectLabelAttrs(el) {
230
+ collectAttributes(el) {
266
231
  const attrs = {};
267
- // Loop through all element attributes
268
232
  for (const attr of iterate(el.attributes)) {
269
- const attrName = attr.name;
270
- const value = truncateAttrValue(attr.value);
271
- if (!value) {
272
- continue; // Skip empty values
273
- }
274
- // Check for exact matches in VX_LABEL_ATTRS
275
- if (VX_LABEL_ATTRS.includes(attrName)) {
276
- attrs[attrName] = value;
233
+ if (['id', 'class', 'style'].includes(attr.name.toLowerCase())) {
277
234
  continue;
278
235
  }
279
- // Check for regex pattern matches
280
- if (VX_LABEL_ATTR_PATTERNS.some(pattern => pattern.test(attrName))) {
281
- attrs[attrName] = value;
282
- }
283
- }
284
- return attrs;
285
- }
286
- collectValueAttrs(el) {
287
- const attrs = {};
288
- for (const attr of VX_VALUE_ATTRS) {
289
- const value = el[attr] ?? '';
290
- if (value) {
291
- attrs[attr] = String(value);
292
- }
293
- }
294
- return attrs;
295
- }
296
- collectSrcAttrs(el) {
297
- const attrs = {};
298
- for (const attr of VX_SRC_ATTRS) {
299
- const value = truncateAttrValue(el[attr] ?? '');
300
- if (value) {
301
- attrs[attr] = value;
302
- }
236
+ attrs[attr.name] = truncateAttrValue(attr.value);
303
237
  }
304
238
  return attrs;
305
239
  }
@@ -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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"}
@@ -5,9 +5,8 @@ export interface VxRenderOptions {
5
5
  renderIds?: boolean;
6
6
  renderClassNames?: boolean;
7
7
  renderRefs?: boolean;
8
- renderLabelAttrs?: boolean;
9
- renderValueAttrs?: boolean;
10
- renderSrcAttrs?: boolean;
8
+ renderAttributes?: boolean;
9
+ filterAttributes?: (node: VxNode, k: string, v: string) => boolean;
11
10
  skipTags?: string[];
12
11
  skipNonInteractive?: boolean;
13
12
  }
@@ -1,4 +1,3 @@
1
- import { truncateAttrValue } from './dom.js';
2
1
  import { traverseVxNode } from './traverse.js';
3
2
  export function renderVxNode(scope, options = {}) {
4
3
  const buffer = [];
@@ -52,23 +51,14 @@ function renderTagLine(vxNode, options) {
52
51
  components.push('.' + vxNode.classList.join('.'));
53
52
  }
54
53
  }
55
- for (const meta of vxNode.meta ?? []) {
56
- components.push(`[${meta}]`);
57
- }
58
54
  const attrs = [];
59
- if (options.renderLabelAttrs) {
60
- for (const [attr, value] of Object.entries(vxNode.labelAttrs ?? {})) {
61
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
62
- }
63
- }
64
- if (options.renderValueAttrs) {
65
- for (const [attr, value] of Object.entries(vxNode.valueAttrs ?? {})) {
66
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
67
- }
68
- }
69
- if (options.renderSrcAttrs) {
70
- for (const [attr, value] of Object.entries(vxNode.srcAttrs ?? {})) {
71
- attrs.push(`${attr}="${truncateAttrValue(value)}"`);
55
+ const filterAttributes = options.filterAttributes ?? (() => true);
56
+ if (options.renderAttributes) {
57
+ for (const [attr, value] of Object.entries(vxNode.attributes ?? {})) {
58
+ if (!filterAttributes(vxNode, attr, value)) {
59
+ continue;
60
+ }
61
+ attrs.push(`${attr}="${value}"`);
72
62
  }
73
63
  }
74
64
  if (htmlStyle) {
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/page/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/page/render.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubio/webvision",
3
- "version": "3.2.3",
3
+ "version": "3.3.1",
4
4
  "main": "out/main/index.js",
5
5
  "type": "module",
6
6
  "exports": {