@ubio/webvision 1.2.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/build/page.mjs +723 -355
  2. package/out/page/counter.d.ts +6 -0
  3. package/out/page/counter.js +13 -0
  4. package/out/page/counter.js.map +1 -0
  5. package/out/page/dom.d.ts +21 -0
  6. package/out/page/dom.js +172 -0
  7. package/out/page/dom.js.map +1 -0
  8. package/out/page/index.d.ts +8 -4
  9. package/out/page/index.js +8 -4
  10. package/out/page/index.js.map +1 -1
  11. package/out/page/overlay.d.ts +3 -0
  12. package/out/page/overlay.js +75 -0
  13. package/out/page/overlay.js.map +1 -0
  14. package/out/page/parser.d.ts +66 -0
  15. package/out/page/parser.js +249 -0
  16. package/out/page/parser.js.map +1 -0
  17. package/out/page/probe.d.ts +5 -0
  18. package/out/page/probe.js +36 -0
  19. package/out/page/probe.js.map +1 -0
  20. package/out/page/render.d.ts +12 -8
  21. package/out/page/render.js +73 -38
  22. package/out/page/render.js.map +1 -1
  23. package/out/page/traverse.d.ts +5 -0
  24. package/out/page/traverse.js +7 -0
  25. package/out/page/traverse.js.map +1 -0
  26. package/out/page/util.d.ts +6 -0
  27. package/out/page/util.js +28 -0
  28. package/out/page/util.js.map +1 -0
  29. package/out/page/view.d.ts +30 -0
  30. package/out/page/view.js +103 -0
  31. package/out/page/view.js.map +1 -0
  32. package/package.json +6 -3
  33. package/out/page/highlight.d.ts +0 -5
  34. package/out/page/highlight.js +0 -72
  35. package/out/page/highlight.js.map +0 -1
  36. package/out/page/html.d.ts +0 -4
  37. package/out/page/html.js +0 -42
  38. package/out/page/html.js.map +0 -1
  39. package/out/page/snapshot.d.ts +0 -69
  40. package/out/page/snapshot.js +0 -191
  41. package/out/page/snapshot.js.map +0 -1
  42. package/out/page/utils.d.ts +0 -19
  43. package/out/page/utils.js +0 -68
  44. package/out/page/utils.js.map +0 -1
@@ -1,69 +0,0 @@
1
- export declare const DEFAULT_SKIP_TAGS: string[];
2
- export declare const DEFAULT_SEMANTIC_TAGS: string[];
3
- export type SnapshotNode = Element | Text;
4
- export interface SnapshotOptions {
5
- startId: number;
6
- skipHidden: boolean;
7
- skipImages: boolean;
8
- skipIframes: boolean;
9
- skipEmptyText: boolean;
10
- skipTags: string[];
11
- tagPreference: string[];
12
- collapseInline: boolean;
13
- }
14
- export interface SnapshotItem {
15
- ref: number;
16
- nodeType: 'element' | 'text';
17
- leaf: boolean;
18
- rect: {
19
- x: number;
20
- y: number;
21
- width: number;
22
- height: number;
23
- };
24
- tagName?: string;
25
- classList?: string[];
26
- textContent?: string;
27
- href?: string;
28
- src?: string;
29
- children?: SnapshotItem[];
30
- }
31
- export declare function createSnapshot(root: SnapshotNode, options?: Partial<SnapshotOptions>): {
32
- refMap: Map<number, SnapshotNode>;
33
- snapshot: SnapshotItem;
34
- maxId: number;
35
- };
36
- export declare class SnapshotTree {
37
- node: Element | Text;
38
- parent: SnapshotTree | null;
39
- counter: Counter;
40
- options: SnapshotOptions;
41
- ref: number;
42
- classList: string[];
43
- children: SnapshotTree[];
44
- textContent?: string;
45
- constructor(node: Element | Text, parent: SnapshotTree | null, counter: Counter, options: SnapshotOptions);
46
- get element(): Element | null;
47
- get depth(): number;
48
- get leaf(): boolean;
49
- get tagName(): string | undefined;
50
- get href(): string | undefined;
51
- get src(): any;
52
- get clientRect(): DOMRect;
53
- private parseTree;
54
- /**
55
- * Collapses an element with only one visible child into one.
56
- *
57
- * Wrapper element is preferred if it's a link or a button,
58
- * in other cases child element is preferred.
59
- */
60
- private collapseWrapper;
61
- private getAcceptedChildren;
62
- fillMap(map: Map<number, SnapshotNode>): void;
63
- toJson(): SnapshotItem;
64
- }
65
- export declare class Counter {
66
- value: number;
67
- constructor(value?: number);
68
- next(): number;
69
- }
@@ -1,191 +0,0 @@
1
- import { containsSelector, deepIsHidden, isRecursiveInline, normalizeText } from './utils.js';
2
- export const DEFAULT_SKIP_TAGS = ['svg', 'script', 'noscript', 'style', 'link', 'meta'];
3
- export const DEFAULT_SEMANTIC_TAGS = [
4
- 'a', 'button', 'label', 'section',
5
- 'article', 'main', 'header', 'footer', 'nav', 'aside',
6
- 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
7
- 'ul', 'ol', 'li', 'dl', 'dt', 'dd',
8
- 'p', 'pre', 'code', 'blockquote', 'figure', 'figcaption',
9
- 'table', 'thead', 'tbody', 'tr', 'td', 'th',
10
- 'form', 'input', 'textarea', 'select', 'option', 'fieldset', 'legend',
11
- 'strong', 'em', 'sub', 'sup',
12
- ];
13
- export function createSnapshot(root, options = {}) {
14
- // Hack: hide all elements that may unintentionally contain visible text
15
- document.querySelectorAll('script, noscript, style').forEach(el => {
16
- el.style.display = 'none';
17
- });
18
- const opts = {
19
- startId: 0,
20
- skipHidden: true,
21
- skipEmptyText: true,
22
- skipImages: false,
23
- skipIframes: false,
24
- skipTags: DEFAULT_SKIP_TAGS,
25
- tagPreference: DEFAULT_SEMANTIC_TAGS,
26
- collapseInline: true,
27
- ...options,
28
- };
29
- const counter = new Counter(opts.startId);
30
- const refMap = new Map();
31
- const tree = new SnapshotTree(root, null, counter, opts);
32
- tree.fillMap(refMap);
33
- return {
34
- refMap,
35
- snapshot: tree.toJson(),
36
- maxId: counter.value,
37
- };
38
- }
39
- export class SnapshotTree {
40
- constructor(node, parent, counter, options) {
41
- this.node = node;
42
- this.parent = parent;
43
- this.counter = counter;
44
- this.options = options;
45
- this.children = [];
46
- this.ref = this.counter.next();
47
- this.classList = [...(this.element?.classList ?? [])];
48
- if (this.element) {
49
- this.parseTree(this.element, this.getAcceptedChildren(this.element));
50
- }
51
- }
52
- get element() {
53
- return this.node instanceof Element ? this.node : null;
54
- }
55
- get depth() {
56
- return this.parent ? this.parent.depth + 1 : 0;
57
- }
58
- get leaf() {
59
- return this.children.length === 0;
60
- }
61
- get tagName() {
62
- return this.node instanceof Element ? this.node.tagName.toLowerCase() : undefined;
63
- }
64
- get href() {
65
- return this.node instanceof HTMLAnchorElement ? this.node.href : undefined;
66
- }
67
- get src() {
68
- return this.node.src ?? undefined;
69
- }
70
- get clientRect() {
71
- if (this.node instanceof Element) {
72
- return this.node.getBoundingClientRect();
73
- }
74
- const range = document.createRange();
75
- range.selectNodeContents(this.node);
76
- return range.getBoundingClientRect();
77
- }
78
- parseTree(el, childNodes) {
79
- this.children = [];
80
- if (childNodes.length === 1) {
81
- return this.collapseWrapper(el, childNodes[0]);
82
- }
83
- if (this.options.collapseInline && isRecursiveInline(el, this.options.tagPreference)) {
84
- // Do not process more children
85
- return;
86
- }
87
- for (const childNode of childNodes) {
88
- const snapshot = new SnapshotTree(childNode, this, this.counter, this.options);
89
- this.children.push(snapshot);
90
- }
91
- }
92
- /**
93
- * Collapses an element with only one visible child into one.
94
- *
95
- * Wrapper element is preferred if it's a link or a button,
96
- * in other cases child element is preferred.
97
- */
98
- collapseWrapper(el, child) {
99
- if (child instanceof Text) {
100
- this.textContent = normalizeText(child.textContent ?? '');
101
- return;
102
- }
103
- this.classList.push(...child.classList);
104
- const parentRank = this.options.tagPreference.indexOf(el.tagName.toLowerCase());
105
- const childRank = this.options.tagPreference.indexOf(child.tagName.toLowerCase());
106
- const preferParent = parentRank !== -1 && (parentRank < childRank || childRank === -1);
107
- if (!preferParent) {
108
- this.node = child;
109
- }
110
- // Continue parsing child element
111
- if (this.element) {
112
- this.parseTree(this.element, this.getAcceptedChildren(child));
113
- }
114
- }
115
- getAcceptedChildren(el) {
116
- const childNodes = [...el.childNodes];
117
- return childNodes.filter((node) => {
118
- // Ignore non-text and non-HTML nodes
119
- if (!(node instanceof Element || node instanceof Text)) {
120
- return false;
121
- }
122
- if (node instanceof Element) {
123
- // Skip hidden elements (opacity, display, visibility, etc)
124
- // TODO checkOpacity breaks PDF viewer
125
- if (this.options.skipHidden && deepIsHidden(node)) {
126
- return false;
127
- }
128
- // Always include inputs
129
- if (containsSelector(node, 'input')) {
130
- return true;
131
- }
132
- // Always include iframes, unless explicitly skipped
133
- if (!this.options.skipIframes && containsSelector(node, 'iframe')) {
134
- return true;
135
- }
136
- // Always include images, unless explicitly skipped
137
- if (!this.options.skipImages && containsSelector(node, 'img')) {
138
- return true;
139
- }
140
- // Skip listed tags
141
- if (this.options.skipTags.includes(node.tagName.toLowerCase())) {
142
- return false;
143
- }
144
- }
145
- // Skip nodes with empty text
146
- if (this.options.skipEmptyText) {
147
- const isEmptyText = normalizeText(node.textContent ?? '').length === 0;
148
- if (isEmptyText) {
149
- return false;
150
- }
151
- }
152
- return true;
153
- });
154
- }
155
- fillMap(map) {
156
- map.set(this.ref, this.node);
157
- for (const child of this.children) {
158
- child.fillMap(map);
159
- }
160
- }
161
- toJson() {
162
- const { top, left, width, height } = this.clientRect;
163
- return {
164
- ref: this.ref,
165
- nodeType: this.node instanceof Element ? 'element' : 'text',
166
- leaf: this.leaf,
167
- tagName: this.tagName,
168
- rect: {
169
- x: left,
170
- y: top,
171
- width,
172
- height,
173
- },
174
- classList: this.node instanceof Element ? this.classList : undefined,
175
- textContent: this.textContent,
176
- href: this.href,
177
- src: this.src,
178
- children: this.leaf ? undefined : this.children.map(child => child.toJson()),
179
- };
180
- }
181
- }
182
- export class Counter {
183
- constructor(value = 0) {
184
- this.value = value;
185
- }
186
- next() {
187
- this.value += 1;
188
- return this.value;
189
- }
190
- }
191
- //# sourceMappingURL=snapshot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/page/snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- export interface VisibilityOptions {
2
- checkOpacity: boolean;
3
- checkVisibility: boolean;
4
- checkTransform: boolean;
5
- }
6
- /**
7
- * Element not visible with descendants if:
8
- *
9
- * - opacity < 0.1
10
- * - display: none
11
- * - visibility: hidden
12
- * - transform: scale(0)
13
- */
14
- export declare function isHidden(element: Element, options?: Partial<VisibilityOptions>): boolean;
15
- export declare function hasVisibleArea(element: Element): boolean;
16
- export declare function deepIsHidden(element: Element, options?: Partial<VisibilityOptions>): boolean;
17
- export declare function normalizeText(str: string): string;
18
- export declare function containsSelector(el: Element, selector: string): boolean;
19
- export declare function isRecursiveInline(el: Element, ignoreTags?: string[]): boolean;
package/out/page/utils.js DELETED
@@ -1,68 +0,0 @@
1
- /**
2
- * Element not visible with descendants if:
3
- *
4
- * - opacity < 0.1
5
- * - display: none
6
- * - visibility: hidden
7
- * - transform: scale(0)
8
- */
9
- export function isHidden(element, options = {}) {
10
- const { checkOpacity = true, checkVisibility = true, checkTransform = true, } = options;
11
- const style = getComputedStyle(element);
12
- const opacity = Number(style.opacity);
13
- const display = style.display;
14
- const visibility = style.visibility;
15
- const transform = style.transform;
16
- if (display === 'none' ||
17
- (checkOpacity && opacity === 0) ||
18
- (checkVisibility && (visibility === 'hidden')) ||
19
- (checkTransform && transform.includes('scale(0)'))) {
20
- return true;
21
- }
22
- if (!element.checkVisibility()) {
23
- return true;
24
- }
25
- return false;
26
- }
27
- export function hasVisibleArea(element) {
28
- const rect = element.getBoundingClientRect();
29
- const area = rect.width * rect.height;
30
- return area > 100;
31
- }
32
- export function deepIsHidden(element, options = {}) {
33
- if (isHidden(element, options)) {
34
- return true;
35
- }
36
- if (!hasVisibleArea(element)) {
37
- return [...element.children].every(el => deepIsHidden(el, options));
38
- }
39
- return false;
40
- }
41
- export function normalizeText(str) {
42
- return str
43
- .replace(/\p{Cf}/gu, ' ')
44
- .replace(/\s+/g, ' ')
45
- .trim();
46
- }
47
- export function containsSelector(el, selector) {
48
- return el.matches(selector) || !!el.querySelector(selector);
49
- }
50
- export function isRecursiveInline(el, ignoreTags = []) {
51
- for (const child of el.childNodes) {
52
- if (child instanceof Element) {
53
- if (ignoreTags.includes(child.tagName.toLowerCase())) {
54
- return false;
55
- }
56
- const display = getComputedStyle(child).display;
57
- const inline = display === 'inline' || display === 'inline-block';
58
- if (!inline) {
59
- return false;
60
- }
61
- if (!isRecursiveInline(child, ignoreTags)) {
62
- return false;
63
- }
64
- }
65
- }
66
- return true;
67
- }
68
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/page/utils.ts"],"names":[],"mappings":"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"}