portadom 1.0.2 → 1.0.4

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/README.md CHANGED
@@ -58,7 +58,9 @@ const btnText = await btn.text();
58
58
  npm install portadom
59
59
  ```
60
60
 
61
- ## Basic usage
61
+ ## How to use
62
+
63
+ ### Minimal example
62
64
 
63
65
  ```js
64
66
  const html = `<div>
@@ -75,6 +77,59 @@ const btnProp = await btn.href();
75
77
  // btnProp == "https://example.com#"
76
78
  ```
77
79
 
80
+ ### Full example
81
+
82
+ ```js
83
+ const $ = loadCheerio(html);
84
+ const dom = cheerioPortadom($.root(), url);
85
+ // ...
86
+ const rootEl = dom.root();
87
+ const url = await dom.url();
88
+
89
+ // Find and extract data
90
+ const entries = await rootEl.findMany('.list-row:not(.native-agent):not(.reach-list)')
91
+ .mapAsyncSerial(async (el) => {
92
+ const employerName = await el.findOne('.employer').text();
93
+ const employerUrl = await el.findOne('.offer-company-logo-link').href();
94
+ const employerLogoUrl = await el.findOne('.offer-company-logo-link img').src();
95
+
96
+ const offerUrlEl = el.findOne('h2 a');
97
+ const offerUrl = await offerUrlEl.href();
98
+ const offerName = await offerUrlEl.text();
99
+ const offerId = offerUrl?.match(/O\d{2,}/)?.[0] ?? null;
100
+
101
+ const location = await el.findOne('.job-location').text();
102
+
103
+ const salaryText = await el.findOne('.label-group > a[data-dimension7="Salary label"]').text();
104
+
105
+ const labels = await el.findMany('.label-group > a:not([data-dimension7="Salary label"])')
106
+ .mapAsyncSerial((el) => el.text())
107
+ .then((arr) => arr.filter(Boolean) as string[]);
108
+
109
+ const footerInfoEl = el.findOne('.list-footer .info');
110
+ const lastChangeRelativeTimeEl = footerInfoEl.findOne('strong');
111
+ const lastChangeRelativeTime = await lastChangeRelativeTimeEl.text();
112
+ // Remove the element so it's easier to get the text content
113
+ await lastChangeRelativeTimeEl.remove();
114
+ const lastChangeTypeText = await footerInfoEl.textAsLower();
115
+ const lastChangeType = lastChangeTypeText === 'pridané' ? 'added' : 'modified';
116
+
117
+ return {
118
+ listingUrl: url,
119
+ employerName,
120
+ employerUrl,
121
+ employerLogoUrl,
122
+ offerName,
123
+ offerUrl,
124
+ offerId,
125
+ location,
126
+ labels,
127
+ lastChangeRelativeTime,
128
+ lastChangeType,
129
+ };
130
+ });
131
+ ```
132
+
78
133
  ### Loading
79
134
 
80
135
  Here is how you can load DOM in different environments:
@@ -200,3 +255,10 @@ const attrs = await Promise.all(mapPromises);
200
255
  See the [full documentation here](./docs/typedoc/modules.md).
201
256
  - [Portadom](./docs/typedoc/interfaces/Portadom.md)
202
257
  - [Portapage](./docs/typedoc/interfaces/Portapage.md)
258
+
259
+ ## Real life exampes
260
+
261
+ - [Profesia.sk Scraper](https://github.com/JuroOravec/apify-actor-profesia-sk)
262
+ - [Example 1](https://github.com/JuroOravec/apify-actor-profesia-sk/blob/3793915632bd81dc257d36699808635c8bc3f87e/src/pageActions/jobListing.ts#L128)
263
+ - [Example 2](https://github.com/JuroOravec/apify-actor-profesia-sk/blob/3793915632bd81dc257d36699808635c8bc3f87e/src/pageActions/jobDetail.ts#L75)
264
+ - [SKCRIS Scraper](https://github.com/JuroOravec/apify-actor-skcris/blob/9ce92f9bd55ffcde91f22744e49ba97b6b4f0e44/src/pageActions/detail.ts#L510)
@@ -8,17 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.playwrightLocatorPortadom = exports.playwrightHandlePortadom = exports.cheerioPortadom = exports.browserPortadom = void 0;
16
- const get_1 = __importDefault(require("lodash/get"));
17
13
  const format_1 = require("../utils/format");
18
14
  const url_1 = require("../utils/url");
19
15
  const error_1 = require("../utils/error");
20
16
  const domUtils_1 = require("./domUtils");
21
17
  const types_1 = require("./types");
18
+ const get = (obj, propPath) => propPath.reduce((prevRes, propKey) => { var _a; return (_a = prevRes === null || prevRes === void 0 ? void 0 : prevRes[propKey]) !== null && _a !== void 0 ? _a : null; }, obj);
22
19
  /** Implementation of Portadom in browser (using Browser API) */
23
20
  const browserPortadom = (node) => {
24
21
  const getDoc = () => node.ownerDocument;
@@ -45,7 +42,7 @@ const browserPortadom = (node) => {
45
42
  const prop = (propOrPath, { allowEmpty = false } = {}) => {
46
43
  var _a;
47
44
  const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];
48
- let propVal = (_a = (0, get_1.default)(node, propPath)) !== null && _a !== void 0 ? _a : null;
45
+ let propVal = (_a = get(node, propPath)) !== null && _a !== void 0 ? _a : null;
49
46
  propVal = typeof propVal === 'string' ? propVal.trim() : propVal;
50
47
  return (0, format_1.strOrNull)(propVal, allowEmpty);
51
48
  };
@@ -239,7 +236,7 @@ const cheerioPortadom = (cheerioNode, srcUrl) => {
239
236
  const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];
240
237
  let propVal = (_a = cheerioNode.prop(propPath[0])) !== null && _a !== void 0 ? _a : null;
241
238
  if (propPath.length > 1)
242
- propVal = (0, get_1.default)(propVal, propPath.slice(1));
239
+ propVal = get(propVal, propPath.slice(1));
243
240
  propVal = typeof propVal === 'string' ? propVal.trim() : propVal;
244
241
  return (0, format_1.strOrNull)(propVal, allowEmpty);
245
242
  };
@@ -1 +1 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/dom/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnyNode, Cheerio } from 'cheerio';\nimport type { ElementHandle, JSHandle, Locator, Page } from 'playwright';\nimport get from 'lodash/get';\n\nimport { strAsNumber, strOrNull } from '../utils/format';\nimport { formatUrl } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport { logAndRethrow } from '../utils/error';\nimport { mergeHandles, splitCheerioSelection, splitPlaywrightSelection } from './domUtils';\nimport { createPortadomArrayPromise, createPortadomPromise, type Portadom } from './types';\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport type BrowserPortadom<T extends Element = Element> = Portadom<T, Element>;\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport const browserPortadom = <El extends Element>(node: El): BrowserPortadom<El> => {\n const getDoc = () => node.ownerDocument;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: BrowserPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = node.textContent?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: BrowserPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: BrowserPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: BrowserPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const prop: BrowserPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = get(node, propPath) ?? null;\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: BrowserPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const attr: BrowserPortadom<El>['attr'] = (propName, { allowEmpty } = {}) => {\n let attrVal = node.getAttribute(propName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: BrowserPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const href: BrowserPortadom<El>['href'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: BrowserPortadom<El>['src'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: BrowserPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: BrowserPortadom<El>['url'] = () => {\n // See https://stackoverflow.com/a/16010322/9788634\n const urlVal = getDoc().defaultView?.location?.href || null;\n return urlVal;\n };\n\n const map: BrowserPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: BrowserPortadom<El>['findOne'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.querySelector(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const findMany: BrowserPortadom<El>['findMany'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomArrayPromise([]);\n }\n const resultEls = [...node.querySelectorAll(selector)] as TNewEl[]; // prettier-ignore\n const dom = resultEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const closest: BrowserPortadom<El>['closest'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.closest(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const parent: BrowserPortadom<El>['parent'] = <TNewEl extends Element = El>() => {\n const parentEl = (node.parentNode || null) as TNewEl | null;\n const dom = parentEl ? browserPortadom(parentEl) : null;\n return createPortadomPromise(dom);\n };\n\n const children: BrowserPortadom<El>['children'] = <TNewEl extends Element = El>() => {\n const childEls = [...node.children] as TNewEl[];\n const dom = childEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const root: BrowserPortadom<El>['root'] = <TNewEl extends Element = El>() => {\n const rootEl = ((node.ownerDocument?.documentElement as any) || null) as TNewEl | null;\n const dom = rootEl ? browserPortadom(rootEl) : null;\n return createPortadomPromise(dom);\n };\n\n const remove: BrowserPortadom<El>['remove'] = () => {\n node.remove();\n };\n\n const _getCommonAncestor = <El extends Node>(el1: El, el2: El) => {\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const _getCommonAncestorFromRange = (el1: El, el2: El) => {\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const isEl1BeforeEl2 = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: el1, lastEl: el2 }\n : { firstEl: el2, lastEl: el1 };\n\n const containerEl = _getCommonAncestorFromRange(firstEl, lastEl);\n return containerEl as El | null;\n };\n\n const getCommonAncestor: BrowserPortadom<El>['getCommonAncestor'] = <TNewEl extends Element = El>(\n otherEl\n ) => {\n const ancestor = _getCommonAncestor(node, otherEl);\n const dom = ancestor ? browserPortadom<TNewEl>(ancestor) : null;\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => node.querySelectorAll(selector) as Iterable<El>,\n getParent: (el) => el.parentElement as El | null,\n isAncestor: (el1, el2) => {\n return !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n },\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: BrowserPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Element = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then<BrowserPortadom<TNewEl> | null>(\n (ancestor) => (ancestor ? browserPortadom(ancestor as any as TNewEl) : null)\n );\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies Portadom<El, Element>;\n};\n\n/** Implementation of Portadom in Cheerio */\nexport type CheerioPortadom<El extends Cheerio<AnyNode> = Cheerio<AnyNode>> = Portadom<\n El,\n Cheerio<AnyNode>\n>;\n\n/** Implementation of Portadom in Cheerio */\nexport const cheerioPortadom = <El extends Cheerio<AnyNode>>(\n cheerioNode: El,\n srcUrl: string | null\n): CheerioPortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: CheerioPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = cheerioNode.text()?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: CheerioPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: CheerioPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: CheerioPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const attr: CheerioPortadom<El>['attr'] = (attrName, { allowEmpty } = {}) => {\n let attrVal = cheerioNode.attr(attrName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: CheerioPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const prop: CheerioPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = cheerioNode.prop(propPath[0]) ?? null;\n if (propPath.length > 1) propVal = get(propVal, propPath.slice(1));\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: CheerioPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const href: CheerioPortadom<El>['href'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const src: CheerioPortadom<El>['src'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const nodeName: CheerioPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: CheerioPortadom<El>['url'] = () => {\n return srcUrl ?? null;\n };\n\n const map: CheerioPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(cheerioNode);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: CheerioPortadom<El>['findOne'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.find(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const findMany: CheerioPortadom<El>['findMany'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEls = splitCheerioSelection(cheerioNode.find(selector)) as TNewEl[];\n const doms = resultEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const closest: CheerioPortadom<El>['closest'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.closest(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const parent: CheerioPortadom<El>['parent'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const parentEl = cheerioNode.parent().first() as TNewEl;\n if (!parentEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(parentEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const children: CheerioPortadom<El>['children'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const childEls = splitCheerioSelection(cheerioNode.children()) as TNewEl[];\n const doms = childEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const root: CheerioPortadom<El>['root'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const rootEl = cheerioNode._root?.first() as TNewEl | null;\n if (!rootEl?.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(rootEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const remove: CheerioPortadom<El>['remove'] = () => {\n cheerioNode.remove();\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = splitCheerioSelection(el1.parents()) as El[];\n const ch2Parents = splitCheerioSelection(el2.parents()) as El[];\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n if (!comparerParent.is(compareeParent)) continue;\n commonAncestor = comparerParent;\n break;\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: CheerioPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(cheerioNode, otherEl).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => splitCheerioSelection(cheerioNode.find(selector)) as El[],\n getParent: (el) => el.parent() as El | null,\n isAncestor: (el1, el2) => el1.is(el2.parents()),\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: CheerioPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node: cheerioNode,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies CheerioPortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport type PlaywrightHandlePortadom<\n El extends Locator | ElementHandle<Node> = Locator | ElementHandle<Node>\n> = Portadom<El, Locator | ElementHandle<Node>>;\n\nconst verifyHandleEl = async (el: Locator | ElementHandle<Node> | JSHandle | null) => {\n if (!el) return null;\n const exists = await (el as ElementHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return exists ? el : null;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport const playwrightHandlePortadom = <El extends Locator | ElementHandle<Node>>(\n node: El,\n page: Page\n): PlaywrightHandlePortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: PlaywrightHandlePortadom<El>['text'] = async ({ allowEmpty } = {}) => {\n const txt = (await node.textContent())?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: PlaywrightHandlePortadom<El>['textAsUpper'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleUpperCase() : txt;\n };\n\n const textAsLower: PlaywrightHandlePortadom<El>['textAsLower'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: PlaywrightHandlePortadom<El>['textAsNumber'] = async (options) => {\n const txt = await text(options);\n return strAsNumber(txt, options);\n };\n\n const prop: PlaywrightHandlePortadom<El>['prop'] = async <R = unknown>(\n propOrPath: MaybeArray<string>,\n options = {}\n ) => {\n const [resProp] = await props([propOrPath], options);\n return resProp as R;\n };\n\n const props: PlaywrightHandlePortadom<El>['props'] = async <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n { allowEmpty = false } = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const data = await (node as Locator)\n .evaluate(\n (el, { propPaths, allowEmpty }) => {\n return propPaths.map((propPath) => {\n let val: any = el;\n for (const prop of propPath) {\n if (el == null) break;\n val = val[prop];\n }\n val = typeof val === 'string' ? val.trim() : val;\n return strOrNull(val, allowEmpty) as any;\n });\n },\n { propPaths, allowEmpty }\n )\n .catch(logAndRethrow);\n return data as R;\n };\n\n const attr: PlaywrightHandlePortadom<El>['attr'] = async (attrName, options) => {\n const data = await attrs([attrName], options);\n return data[attrName] ?? null;\n };\n\n const attrs: PlaywrightHandlePortadom<El>['attrs'] = <El extends string>(\n attrNames: El[],\n { allowEmpty = false } = {}\n ) => {\n const data = (node as Locator)\n .evaluate(\n (el, { attrNames, allowEmpty }) => {\n const attrData = (attrNames as El[]).reduce<Record<El, string | null>>((agg, name) => {\n let attrVal = el.getAttribute(name) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n agg[name] = strOrNull(attrVal, allowEmpty);\n return agg;\n }, {} as any);\n return attrData;\n },\n { attrNames, allowEmpty }\n )\n .catch(logAndRethrow);\n return data;\n };\n\n const href: PlaywrightHandlePortadom<El>['href'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('href', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: PlaywrightHandlePortadom<El>['src'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('src', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: PlaywrightHandlePortadom<El>['nodeName'] = async () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = (await prop('nodeName')) as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: PlaywrightHandlePortadom<El>['url'] = async () => {\n return page.url() || null;\n };\n\n const map: PlaywrightHandlePortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightHandlePortadom<El>['findOne'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).querySelector<Element>(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightHandlePortadom<El>['findMany'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const doms = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return [];\n return [...(el as Element).querySelectorAll<Element>(s)];\n }, selector)\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightHandlePortadom<El>['closest'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).closest(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightHandlePortadom<El>['parent'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.parentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const children: PlaywrightHandlePortadom<El>['children'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const doms = node\n .evaluateHandle((el) => [...(el as Element).children])\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightHandlePortadom<El>['root'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.ownerDocument?.documentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightHandlePortadom<El>['remove'] = async () => {\n await (node as Locator).evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n const _getCommonAncestor = async (loc1: El, loc2: El) => {\n const isEl1BeforeEl2 = await (\n await mergeHandles([loc1, loc2])\n )\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n return result;\n })\n .catch(logAndRethrow);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: loc1, lastEl: loc2 }\n : { firstEl: loc2, lastEl: loc1 };\n\n const ancestor = await (\n await mergeHandles([firstEl, lastEl])\n )\n .evaluateHandle(([el1, el2]) => {\n if (!el1 || !el2) return null;\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n })\n .catch(logAndRethrow);\n\n const hasResult = await (ancestor as JSHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return hasResult ? (ancestor as El) : null;\n };\n\n const getCommonAncestor: PlaywrightHandlePortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightHandlePortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightHandlePortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightHandlePortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Locators */\nexport type PlaywrightLocatorPortadom<El extends Locator = Locator> = Portadom<El, Locator>;\n\n/** Implementation of Portadom in Playwright using Locators */\nexport const playwrightLocatorPortadom = <El extends Locator>(\n node: El,\n page: Page\n): PlaywrightLocatorPortadom<El> => {\n // NOTE: Where possible, make use of the already-existing logic for Handles\n const handleDom = playwrightHandlePortadom(node, page);\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Empty */\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightLocatorPortadom<El>['findOne'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const resultEl = node.locator(selector);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightLocatorPortadom<El>['findMany'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const doms = node\n .locator(selector)\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightLocatorPortadom<El>['closest'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634\n const resultEl = node.locator(`xpath=ancestor::${selector.trim()}[position() = 1]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightLocatorPortadom<El>['parent'] = <TNewEl extends Locator = El>() => {\n return closest<TNewEl>('*');\n };\n\n const children: PlaywrightLocatorPortadom<El>['children'] = <TNewEl extends Locator = El>() => {\n const doms = node\n .locator('xpath=child::*')\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightLocatorPortadom<El>['root'] = <TNewEl extends Locator = El>() => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634 and https://stackoverflow.com/q/31562639/9788634\n const resultEl = node.locator(`xpath=ancestor::*[position() = last()]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightLocatorPortadom<El>['remove'] = async () => {\n await node.evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = await el1.locator(`xpath=ancestor::*`).all();\n const ch2Parents = await el2.locator(`xpath=ancestor::*`).all();\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n const handle = await mergeHandles([comparerParent, compareeParent]);\n const isSame = await handle.evaluate(([el1, el2]: Element[]) => {\n return el1 === el2;\n });\n if (isSame) {\n commonAncestor = comparerParent as El;\n break;\n }\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: PlaywrightLocatorPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightLocatorPortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightLocatorPortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightLocatorPortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (ancestor) => {\n const hasResult = await (ancestor as Locator)?.evaluate((el) => !!el).catch(logAndRethrow);\n return ancestor && hasResult\n ? playwrightHandlePortadom(ancestor as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text: handleDom.text,\n textAsLower: handleDom.textAsLower,\n textAsUpper: handleDom.textAsUpper,\n textAsNumber: handleDom.textAsNumber,\n attr: handleDom.attr,\n attrs: handleDom.attrs,\n prop: handleDom.prop,\n props: handleDom.props,\n href: handleDom.href,\n src: handleDom.src,\n nodeName: handleDom.nodeName,\n url: handleDom.url,\n map: handleDom.map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightLocatorPortadom<El>;\n};\n\nconst _createCommonAncestorFromSelectorFn = <El>(input: {\n querySelectorAll: (selector: string) => MaybePromise<Iterable<El> | El[]>;\n getParent: (el: El) => MaybePromise<El | null>;\n /** Function that returns `true` if `el1` is ancestor of `el2`. */\n isAncestor: (el1: El, el2: El) => MaybePromise<boolean>;\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n getCommonAncestor: (el1: El, el2: El) => MaybePromise<El | null>;\n}) => {\n const getCommonAncestorFromSelector = async (selector: string): Promise<El | null> => {\n const els = [...(await input.querySelectorAll(selector))];\n if (!els.length) return null;\n if (els.length === 1) return input.getParent(els[0]);\n\n const comparerEl = els.shift();\n let ancestorEl: El | null = null;\n for (const el of els) {\n const currAncestorEl = comparerEl ? await input.getCommonAncestor(comparerEl, el) : null;\n const newAncestorEl = !ancestorEl\n ? currAncestorEl\n : currAncestorEl && (await input.isAncestor(currAncestorEl, ancestorEl))\n ? currAncestorEl\n : ancestorEl;\n ancestorEl = newAncestorEl;\n }\n\n return ancestorEl as El;\n };\n\n return getCommonAncestorFromSelector;\n};\n"]}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/dom/dom.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnyNode, Cheerio } from 'cheerio';\nimport type { ElementHandle, JSHandle, Locator, Page } from 'playwright';\n\nimport { strAsNumber, strOrNull } from '../utils/format';\nimport { formatUrl } from '../utils/url';\nimport type { MaybeArray, MaybePromise } from '../utils/types';\nimport { logAndRethrow } from '../utils/error';\nimport { mergeHandles, splitCheerioSelection, splitPlaywrightSelection } from './domUtils';\nimport { createPortadomArrayPromise, createPortadomPromise, type Portadom } from './types';\n\nconst get = (obj: any, propPath: string[]) =>\n propPath.reduce((prevRes, propKey) => prevRes?.[propKey] ?? null, obj);\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport type BrowserPortadom<T extends Element = Element> = Portadom<T, Element>;\n\n/** Implementation of Portadom in browser (using Browser API) */\nexport const browserPortadom = <El extends Element>(node: El): BrowserPortadom<El> => {\n const getDoc = () => node.ownerDocument;\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: BrowserPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = node.textContent?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: BrowserPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: BrowserPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: BrowserPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const prop: BrowserPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = get(node, propPath) ?? null;\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: BrowserPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const attr: BrowserPortadom<El>['attr'] = (propName, { allowEmpty } = {}) => {\n let attrVal = node.getAttribute(propName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: BrowserPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const href: BrowserPortadom<El>['href'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: BrowserPortadom<El>['src'] = async ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: BrowserPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: BrowserPortadom<El>['url'] = () => {\n // See https://stackoverflow.com/a/16010322/9788634\n const urlVal = getDoc().defaultView?.location?.href || null;\n return urlVal;\n };\n\n const map: BrowserPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: BrowserPortadom<El>['findOne'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.querySelector(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const findMany: BrowserPortadom<El>['findMany'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomArrayPromise([]);\n }\n const resultEls = [...node.querySelectorAll(selector)] as TNewEl[]; // prettier-ignore\n const dom = resultEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const closest: BrowserPortadom<El>['closest'] = <TNewEl extends Element = El>(selector) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(node.nodeType as any)) {\n return createPortadomPromise(null);\n }\n const resultEl = (node.closest(selector) ?? null) as TNewEl | null;\n const dom = resultEl ? browserPortadom(resultEl) : null;\n return createPortadomPromise(dom);\n };\n\n const parent: BrowserPortadom<El>['parent'] = <TNewEl extends Element = El>() => {\n const parentEl = (node.parentNode || null) as TNewEl | null;\n const dom = parentEl ? browserPortadom(parentEl) : null;\n return createPortadomPromise(dom);\n };\n\n const children: BrowserPortadom<El>['children'] = <TNewEl extends Element = El>() => {\n const childEls = [...node.children] as TNewEl[];\n const dom = childEls.map((el) => browserPortadom(el));\n return createPortadomArrayPromise(dom);\n };\n\n const root: BrowserPortadom<El>['root'] = <TNewEl extends Element = El>() => {\n const rootEl = ((node.ownerDocument?.documentElement as any) || null) as TNewEl | null;\n const dom = rootEl ? browserPortadom(rootEl) : null;\n return createPortadomPromise(dom);\n };\n\n const remove: BrowserPortadom<El>['remove'] = () => {\n node.remove();\n };\n\n const _getCommonAncestor = <El extends Node>(el1: El, el2: El) => {\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const _getCommonAncestorFromRange = (el1: El, el2: El) => {\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n };\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const isEl1BeforeEl2 = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: el1, lastEl: el2 }\n : { firstEl: el2, lastEl: el1 };\n\n const containerEl = _getCommonAncestorFromRange(firstEl, lastEl);\n return containerEl as El | null;\n };\n\n const getCommonAncestor: BrowserPortadom<El>['getCommonAncestor'] = <TNewEl extends Element = El>(\n otherEl\n ) => {\n const ancestor = _getCommonAncestor(node, otherEl);\n const dom = ancestor ? browserPortadom<TNewEl>(ancestor) : null;\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => node.querySelectorAll(selector) as Iterable<El>,\n getParent: (el) => el.parentElement as El | null,\n isAncestor: (el1, el2) => {\n return !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n },\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: BrowserPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Element = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then<BrowserPortadom<TNewEl> | null>(\n (ancestor) => (ancestor ? browserPortadom(ancestor as any as TNewEl) : null)\n );\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies Portadom<El, Element>;\n};\n\n/** Implementation of Portadom in Cheerio */\nexport type CheerioPortadom<El extends Cheerio<AnyNode> = Cheerio<AnyNode>> = Portadom<\n El,\n Cheerio<AnyNode>\n>;\n\n/** Implementation of Portadom in Cheerio */\nexport const cheerioPortadom = <El extends Cheerio<AnyNode>>(\n cheerioNode: El,\n srcUrl: string | null\n): CheerioPortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: CheerioPortadom<El>['text'] = ({ allowEmpty } = {}) => {\n const txt = cheerioNode.text()?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: CheerioPortadom<El>['textAsUpper'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleUpperCase() : txt;\n };\n\n const textAsLower: CheerioPortadom<El>['textAsLower'] = (options) => {\n const txt = text(options);\n return txt ? (txt as string).toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: CheerioPortadom<El>['textAsNumber'] = (options) => {\n const txt = text(options);\n return strAsNumber(txt as string, options);\n };\n\n const attr: CheerioPortadom<El>['attr'] = (attrName, { allowEmpty } = {}) => {\n let attrVal = cheerioNode.attr(attrName) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n return strOrNull(attrVal, allowEmpty);\n };\n\n const attrs: CheerioPortadom<El>['attrs'] = <T extends string>(attrNames: T[], options = {}) => {\n const attrData = attrNames.reduce<Record<T, string | null>>((agg, name) => {\n agg[name] = attr(name, options) as string | null;\n return agg;\n }, {} as any);\n return attrData;\n };\n\n const prop: CheerioPortadom<El>['prop'] = <R = unknown>(\n propOrPath: MaybeArray<string>,\n { allowEmpty = false } = {}\n ) => {\n const propPath = Array.isArray(propOrPath) ? propOrPath : [propOrPath];\n let propVal = cheerioNode.prop(propPath[0]) ?? null;\n if (propPath.length > 1) propVal = get(propVal, propPath.slice(1));\n propVal = typeof propVal === 'string' ? propVal.trim() : propVal;\n return strOrNull(propVal, allowEmpty) as R;\n };\n\n const props: CheerioPortadom<El>['props'] = <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n options = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const propData = propPaths.map((path) => prop(path, options));\n return propData as MaybePromise<R>;\n };\n\n const href: CheerioPortadom<El>['href'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('href', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const src: CheerioPortadom<El>['src'] = ({ allowEmpty, allowRelative, baseUrl } = {}) => {\n const val = prop('src', { allowEmpty }) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? srcUrl });\n };\n\n const nodeName: CheerioPortadom<El>['nodeName'] = () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = prop('nodeName') as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: CheerioPortadom<El>['url'] = () => {\n return srcUrl ?? null;\n };\n\n const map: CheerioPortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(cheerioNode);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: CheerioPortadom<El>['findOne'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.find(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const findMany: CheerioPortadom<El>['findMany'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEls = splitCheerioSelection(cheerioNode.find(selector)) as TNewEl[];\n const doms = resultEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const closest: CheerioPortadom<El>['closest'] = <TNewEl extends Cheerio<AnyNode> = El>(\n selector\n ) => {\n const resultEl = cheerioNode.closest(selector).first() as TNewEl;\n if (!resultEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(resultEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const parent: CheerioPortadom<El>['parent'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const parentEl = cheerioNode.parent().first() as TNewEl;\n if (!parentEl.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(parentEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const children: CheerioPortadom<El>['children'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const childEls = splitCheerioSelection(cheerioNode.children()) as TNewEl[];\n const doms = childEls.map((ch) => cheerioPortadom(ch, srcUrl));\n return createPortadomArrayPromise(doms);\n };\n\n const root: CheerioPortadom<El>['root'] = <TNewEl extends Cheerio<AnyNode> = El>() => {\n const rootEl = cheerioNode._root?.first() as TNewEl | null;\n if (!rootEl?.get(0)) return createPortadomPromise(null);\n const dom = cheerioPortadom(rootEl, srcUrl);\n return createPortadomPromise(dom);\n };\n\n const remove: CheerioPortadom<El>['remove'] = () => {\n cheerioNode.remove();\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = splitCheerioSelection(el1.parents()) as El[];\n const ch2Parents = splitCheerioSelection(el2.parents()) as El[];\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n if (!comparerParent.is(compareeParent)) continue;\n commonAncestor = comparerParent;\n break;\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: CheerioPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(cheerioNode, otherEl).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: (selector) => splitCheerioSelection(cheerioNode.find(selector)) as El[],\n getParent: (el) => el.parent() as El | null,\n isAncestor: (el1, el2) => el1.is(el2.parents()),\n getCommonAncestor: (el1, el2) => _getCommonAncestor(el1, el2),\n });\n\n const getCommonAncestorFromSelector: CheerioPortadom<El>['getCommonAncestorFromSelector'] = <\n TNewEl extends Cheerio<AnyNode> = El\n >(\n selector\n ) => {\n const dom = _getCommonAncestorFromSelector(selector).then((ancestor) => {\n if (!ancestor?.get(0)) return null;\n return cheerioPortadom<TNewEl>(ancestor as any as TNewEl, srcUrl);\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node: cheerioNode,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies CheerioPortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport type PlaywrightHandlePortadom<\n El extends Locator | ElementHandle<Node> = Locator | ElementHandle<Node>\n> = Portadom<El, Locator | ElementHandle<Node>>;\n\nconst verifyHandleEl = async (el: Locator | ElementHandle<Node> | JSHandle | null) => {\n if (!el) return null;\n const exists = await (el as ElementHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return exists ? el : null;\n};\n\n/** Implementation of Portadom in Playwright using Handles */\nexport const playwrightHandlePortadom = <El extends Locator | ElementHandle<Node>>(\n node: El,\n page: Page\n): PlaywrightHandlePortadom<El> => {\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n const text: PlaywrightHandlePortadom<El>['text'] = async ({ allowEmpty } = {}) => {\n const txt = (await node.textContent())?.trim() ?? null;\n return strOrNull(txt, allowEmpty);\n };\n\n const textAsUpper: PlaywrightHandlePortadom<El>['textAsUpper'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleUpperCase() : txt;\n };\n\n const textAsLower: PlaywrightHandlePortadom<El>['textAsLower'] = async (options) => {\n const txt = await text(options);\n return txt ? txt.toLocaleLowerCase() : txt;\n };\n\n const textAsNumber: PlaywrightHandlePortadom<El>['textAsNumber'] = async (options) => {\n const txt = await text(options);\n return strAsNumber(txt, options);\n };\n\n const prop: PlaywrightHandlePortadom<El>['prop'] = async <R = unknown>(\n propOrPath: MaybeArray<string>,\n options = {}\n ) => {\n const [resProp] = await props([propOrPath], options);\n return resProp as R;\n };\n\n const props: PlaywrightHandlePortadom<El>['props'] = async <R extends any[]>(\n propsOrPaths: MaybeArray<string>[],\n { allowEmpty = false } = {}\n ) => {\n const propPaths = propsOrPaths.map((p) => (Array.isArray(p) ? p : [p]));\n const data = await (node as Locator)\n .evaluate(\n (el, { propPaths, allowEmpty }) => {\n return propPaths.map((propPath) => {\n let val: any = el;\n for (const prop of propPath) {\n if (el == null) break;\n val = val[prop];\n }\n val = typeof val === 'string' ? val.trim() : val;\n return strOrNull(val, allowEmpty) as any;\n });\n },\n { propPaths, allowEmpty }\n )\n .catch(logAndRethrow);\n return data as R;\n };\n\n const attr: PlaywrightHandlePortadom<El>['attr'] = async (attrName, options) => {\n const data = await attrs([attrName], options);\n return data[attrName] ?? null;\n };\n\n const attrs: PlaywrightHandlePortadom<El>['attrs'] = <El extends string>(\n attrNames: El[],\n { allowEmpty = false } = {}\n ) => {\n const data = (node as Locator)\n .evaluate(\n (el, { attrNames, allowEmpty }) => {\n const attrData = (attrNames as El[]).reduce<Record<El, string | null>>((agg, name) => {\n let attrVal = el.getAttribute(name) ?? null;\n attrVal = typeof attrVal === 'string' ? attrVal.trim() : attrVal;\n agg[name] = strOrNull(attrVal, allowEmpty);\n return agg;\n }, {} as any);\n return attrData;\n },\n { attrNames, allowEmpty }\n )\n .catch(logAndRethrow);\n return data;\n };\n\n const href: PlaywrightHandlePortadom<El>['href'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('href', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const src: PlaywrightHandlePortadom<El>['src'] = async ({\n allowEmpty,\n allowRelative,\n baseUrl,\n } = {}) => {\n const val = (await prop('src', { allowEmpty })) as string | null;\n return formatUrl(val, { allowRelative, baseUrl: baseUrl ?? (await url()) });\n };\n\n const nodeName: PlaywrightHandlePortadom<El>['nodeName'] = async () => {\n // On UPPER- vs lower-case https://stackoverflow.com/questions/27223756/\n const val = (await prop('nodeName')) as string | null;\n return typeof val === 'string' ? val.toLocaleUpperCase() : val;\n };\n\n const url: PlaywrightHandlePortadom<El>['url'] = async () => {\n return page.url() || null;\n };\n\n const map: PlaywrightHandlePortadom<El>['map'] = <TVal>(mapFn: (node: El) => TVal) => {\n return mapFn(node);\n };\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightHandlePortadom<El>['findOne'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).querySelector<Element>(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightHandlePortadom<El>['findMany'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const doms = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return [];\n return [...(el as Element).querySelectorAll<Element>(s)];\n }, selector)\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightHandlePortadom<El>['closest'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n selector\n ) => {\n const dom = node\n .evaluateHandle((el, s) => {\n if (![Node.ELEMENT_NODE, Node.DOCUMENT_NODE].includes(el.nodeType as any)) return null;\n return (el as Element).closest(s) || null;\n }, selector)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightHandlePortadom<El>['parent'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.parentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const children: PlaywrightHandlePortadom<El>['children'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const doms = node\n .evaluateHandle((el) => [...(el as Element).children])\n .catch(logAndRethrow)\n .then(async (elsHandle) => {\n const resultEls = await splitPlaywrightSelection<any>(elsHandle);\n return resultEls.map((el) => playwrightHandlePortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightHandlePortadom<El>['root'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >() => {\n const dom = node\n .evaluateHandle((el) => el.ownerDocument?.documentElement || null)\n .catch(logAndRethrow)\n .then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return hasResult ? playwrightHandlePortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightHandlePortadom<El>['remove'] = async () => {\n await (node as Locator).evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n const _getCommonAncestor = async (loc1: El, loc2: El) => {\n const isEl1BeforeEl2 = await (\n await mergeHandles([loc1, loc2])\n )\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_FOLLOWING);\n return result;\n })\n .catch(logAndRethrow);\n\n const { firstEl, lastEl } = isEl1BeforeEl2\n ? { firstEl: loc1, lastEl: loc2 }\n : { firstEl: loc2, lastEl: loc1 };\n\n const ancestor = await (\n await mergeHandles([firstEl, lastEl])\n )\n .evaluateHandle(([el1, el2]) => {\n if (!el1 || !el2) return null;\n // https://stackoverflow.com/a/25154092\n // https://developer.mozilla.org/en-US/docs/Web/API/Range/commonAncestorContainer\n const range = new Range();\n range.setStartBefore(el1);\n range.setEndAfter(el2);\n const containerEl = range.commonAncestorContainer;\n return containerEl;\n })\n .catch(logAndRethrow);\n\n const hasResult = await (ancestor as JSHandle).evaluate((el) => !!el).catch(logAndRethrow);\n return hasResult ? (ancestor as El) : null;\n };\n\n const getCommonAncestor: PlaywrightHandlePortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator | ElementHandle<Node> = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightHandlePortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightHandlePortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightHandlePortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text,\n textAsLower,\n textAsUpper,\n textAsNumber,\n attr,\n attrs,\n prop,\n props,\n href,\n src,\n nodeName,\n url,\n map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightHandlePortadom<El>;\n};\n\n/** Implementation of Portadom in Playwright using Locators */\nexport type PlaywrightLocatorPortadom<El extends Locator = Locator> = Portadom<El, Locator>;\n\n/** Implementation of Portadom in Playwright using Locators */\nexport const playwrightLocatorPortadom = <El extends Locator>(\n node: El,\n page: Page\n): PlaywrightLocatorPortadom<El> => {\n // NOTE: Where possible, make use of the already-existing logic for Handles\n const handleDom = playwrightHandlePortadom(node, page);\n\n ///////////////////////\n // SCALAR OPERATIONS\n ///////////////////////\n\n /** Empty */\n\n ///////////////////////\n // NODE OPERATIONS\n ///////////////////////\n\n const findOne: PlaywrightLocatorPortadom<El>['findOne'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const resultEl = node.locator(selector);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const findMany: PlaywrightLocatorPortadom<El>['findMany'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n const doms = node\n .locator(selector)\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const closest: PlaywrightLocatorPortadom<El>['closest'] = <TNewEl extends Locator = El>(\n selector\n ) => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634\n const resultEl = node.locator(`xpath=ancestor::${selector.trim()}[position() = 1]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const parent: PlaywrightLocatorPortadom<El>['parent'] = <TNewEl extends Locator = El>() => {\n return closest<TNewEl>('*');\n };\n\n const children: PlaywrightLocatorPortadom<El>['children'] = <TNewEl extends Locator = El>() => {\n const doms = node\n .locator('xpath=child::*')\n .all()\n .then((resultEls) => {\n return resultEls.map((el) => playwrightLocatorPortadom(el as TNewEl, page));\n });\n return createPortadomArrayPromise(doms);\n };\n\n const root: PlaywrightLocatorPortadom<El>['root'] = <TNewEl extends Locator = El>() => {\n // Find closest ancestor matching the given selector.\n // See https://stackoverflow.com/a/40333166/9788634 and https://stackoverflow.com/q/31562639/9788634\n const resultEl = node.locator(`xpath=ancestor::*[position() = last()]`);\n const dom = verifyHandleEl(resultEl).then((hasResult) => {\n return hasResult ? playwrightLocatorPortadom(resultEl as TNewEl, page) : null;\n });\n return createPortadomPromise(dom);\n };\n\n const remove: PlaywrightLocatorPortadom<El>['remove'] = async () => {\n await node.evaluate((el) => el.remove()).catch(logAndRethrow);\n };\n\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n const _getCommonAncestor = async (el1: El, el2: El) => {\n const ch1Parents = await el1.locator(`xpath=ancestor::*`).all();\n const ch2Parents = await el2.locator(`xpath=ancestor::*`).all();\n\n let commonAncestor: El | null = null;\n for (const comparerParent of ch1Parents) {\n for (const compareeParent of ch2Parents) {\n const handle = await mergeHandles([comparerParent, compareeParent]);\n const isSame = await handle.evaluate(([el1, el2]: Element[]) => {\n return el1 === el2;\n });\n if (isSame) {\n commonAncestor = comparerParent as El;\n break;\n }\n }\n if (commonAncestor) break;\n }\n return commonAncestor;\n };\n\n const getCommonAncestor: PlaywrightLocatorPortadom<El>['getCommonAncestor'] = <\n TNewEl extends Locator = El\n >(\n otherEl\n ) => {\n const dom = _getCommonAncestor(node, otherEl).then(async (resultEl) => {\n const hasResult = await verifyHandleEl(resultEl);\n return resultEl && hasResult\n ? playwrightLocatorPortadom(resultEl as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n const _getCommonAncestorFromSelector = _createCommonAncestorFromSelectorFn<El>({\n querySelectorAll: async (selector) => {\n const resultEls = (await findMany(selector).map((d) => d.node!)).filter(Boolean);\n return resultEls;\n },\n getParent: async (el) => {\n return playwrightLocatorPortadom(el, page).parent().node;\n },\n isAncestor: async (el1, el2) => {\n return (await mergeHandles([el1, el2]))\n .evaluate(([el1, el2]) => {\n if (!el1 || !el2) return false;\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n const result = !!(el1.compareDocumentPosition(el2) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n return result;\n })\n .catch(logAndRethrow);\n },\n getCommonAncestor: _getCommonAncestor,\n });\n\n const getCommonAncestorFromSelector: PlaywrightLocatorPortadom<El>['getCommonAncestorFromSelector'] =\n <TNewEl extends Locator | ElementHandle<Node> = El>(selector) => {\n const dom = _getCommonAncestorFromSelector(selector).then(async (ancestor) => {\n const hasResult = await (ancestor as Locator)?.evaluate((el) => !!el).catch(logAndRethrow);\n return ancestor && hasResult\n ? playwrightHandlePortadom(ancestor as any as TNewEl, page)\n : null;\n });\n return createPortadomPromise(dom);\n };\n\n return {\n node,\n\n text: handleDom.text,\n textAsLower: handleDom.textAsLower,\n textAsUpper: handleDom.textAsUpper,\n textAsNumber: handleDom.textAsNumber,\n attr: handleDom.attr,\n attrs: handleDom.attrs,\n prop: handleDom.prop,\n props: handleDom.props,\n href: handleDom.href,\n src: handleDom.src,\n nodeName: handleDom.nodeName,\n url: handleDom.url,\n map: handleDom.map,\n\n findOne,\n findMany,\n closest,\n parent,\n children,\n root,\n remove,\n getCommonAncestor,\n getCommonAncestorFromSelector,\n } satisfies PlaywrightLocatorPortadom<El>;\n};\n\nconst _createCommonAncestorFromSelectorFn = <El>(input: {\n querySelectorAll: (selector: string) => MaybePromise<Iterable<El> | El[]>;\n getParent: (el: El) => MaybePromise<El | null>;\n /** Function that returns `true` if `el1` is ancestor of `el2`. */\n isAncestor: (el1: El, el2: El) => MaybePromise<boolean>;\n /** Function that finds the closest common ancestor for `el1` and `el2`. */\n getCommonAncestor: (el1: El, el2: El) => MaybePromise<El | null>;\n}) => {\n const getCommonAncestorFromSelector = async (selector: string): Promise<El | null> => {\n const els = [...(await input.querySelectorAll(selector))];\n if (!els.length) return null;\n if (els.length === 1) return input.getParent(els[0]);\n\n const comparerEl = els.shift();\n let ancestorEl: El | null = null;\n for (const el of els) {\n const currAncestorEl = comparerEl ? await input.getCommonAncestor(comparerEl, el) : null;\n const newAncestorEl = !ancestorEl\n ? currAncestorEl\n : currAncestorEl && (await input.isAncestor(currAncestorEl, ancestorEl))\n ? currAncestorEl\n : ancestorEl;\n ancestorEl = newAncestorEl;\n }\n\n return ancestorEl as El;\n };\n\n return getCommonAncestorFromSelector;\n};\n"]}
@@ -1,6 +1,2 @@
1
1
  export type MaybePromise<T> = T | Promise<T>;
2
2
  export type MaybeArray<T> = T | T[];
3
- export type ArrVal<T extends any[] | readonly any[]> = T[number];
4
- export declare const enumFromArray: <T extends readonly any[]>(arr: T) => { [Key in ArrVal<T>]: Key; };
5
- export type PickPartial<T extends object, Keys extends keyof T> = Omit<T, Keys> & Partial<Pick<T, Keys>>;
6
- export type PickRequired<T extends object, Keys extends keyof T> = Omit<T, Keys> & Required<Pick<T, Keys>>;
@@ -1,9 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enumFromArray = void 0;
4
- const lodash_1 = require("lodash");
5
- const enumFromArray = (arr) => {
6
- return (0, lodash_1.fromPairs)(arr.map((k) => [k, k]));
7
- };
8
- exports.enumFromArray = enumFromArray;
9
3
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAO5B,MAAM,aAAa,GAAG,CAA2B,GAAM,EAAE,EAAE;IAChE,OAAO,IAAA,kBAAS,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAgC,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,aAAa,iBAExB","sourcesContent":["import { fromPairs } from 'lodash';\n\nexport type MaybePromise<T> = T | Promise<T>;\nexport type MaybeArray<T> = T | T[];\n\nexport type ArrVal<T extends any[] | readonly any[]> = T[number];\n\nexport const enumFromArray = <T extends readonly any[]>(arr: T) => {\n return fromPairs(arr.map((k) => [k, k])) as { [Key in ArrVal<T>]: Key };\n};\n\nexport type PickPartial<T extends object, Keys extends keyof T> = Omit<T, Keys> &\n Partial<Pick<T, Keys>>;\n\nexport type PickRequired<T extends object, Keys extends keyof T> = Omit<T, Keys> &\n Required<Pick<T, Keys>>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":"","sourcesContent":["export type MaybePromise<T> = T | Promise<T>;\nexport type MaybeArray<T> = T | T[];\n"]}
@@ -1,5 +1,3 @@
1
- /** Validate correctness of a URL */
2
- export declare const validateUrl: (url: string) => void;
3
1
  /** Transform relative URL paths to absolute URLs */
4
2
  export declare const resolveUrlPath: (urlBase: string, urlPath: string) => string;
5
3
  export interface FormatUrlOptions {
@@ -1,17 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatUrl = exports.resolveUrlPath = exports.validateUrl = void 0;
4
- /** Validate correctness of a URL */
5
- const validateUrl = (url) => {
6
- try {
7
- new URL(url);
8
- }
9
- catch (err) {
10
- err.message += `\nURL: "${url}"`;
11
- throw err;
12
- }
13
- };
14
- exports.validateUrl = validateUrl;
3
+ exports.formatUrl = exports.resolveUrlPath = void 0;
15
4
  /** Transform relative URL paths to absolute URLs */
16
5
  const resolveUrlPath = (urlBase, urlPath) => {
17
6
  const url = new URL(urlBase);
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AAC7B,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE;IACzC,IAAI;QACF,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;KACd;IAAC,OAAO,GAAG,EAAE;QACX,GAAa,CAAC,OAAO,IAAI,WAAW,GAAG,GAAG,CAAC;QAC5C,MAAM,GAAG,CAAC;KACX;AACH,CAAC,CAAC;AAPW,QAAA,WAAW,eAOtB;AAEF,oDAAoD;AAC7C,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;IACjE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;IACvB,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC,CAAC;AAJW,QAAA,cAAc,kBAIzB;AAOK,MAAM,SAAS,GAAG,CACvB,QAAoB,EACpB,EAAE,aAAa,EAAE,OAAO,KAAuB,EAAE,EACjD,EAAE;IACF,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,aAAa;QAAE,OAAO,QAAQ,CAAC;IAEhE,IAAI,CAAC,OAAO;QAAE,MAAM,KAAK,CAAC,wEAAwE,CAAC,CAAC,CAAC,kBAAkB;IACvH,OAAO,IAAA,sBAAc,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC,CAAC;AATW,QAAA,SAAS,aASpB","sourcesContent":["/** Validate correctness of a URL */\nexport const validateUrl = (url: string) => {\n try {\n new URL(url);\n } catch (err) {\n (err as Error).message += `\\nURL: \"${url}\"`;\n throw err;\n }\n};\n\n/** Transform relative URL paths to absolute URLs */\nexport const resolveUrlPath = (urlBase: string, urlPath: string) => {\n const url = new URL(urlBase);\n url.pathname = urlPath;\n return url.href;\n};\n\nexport interface FormatUrlOptions {\n allowRelative?: boolean;\n baseUrl?: string | null;\n}\n\nexport const formatUrl = <T>(\n maybeUrl: string | T,\n { allowRelative, baseUrl }: FormatUrlOptions = {}\n) => {\n if (typeof maybeUrl !== 'string') return maybeUrl;\n if (!maybeUrl.startsWith('/') || allowRelative) return maybeUrl;\n\n if (!baseUrl) throw Error('Cannot convert URL from relative to absolute path - baseUrl is missing'); // prettier-ignore\n return resolveUrlPath(baseUrl, maybeUrl);\n};\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AAC7C,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;IACjE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;IACvB,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC,CAAC;AAJW,QAAA,cAAc,kBAIzB;AAOK,MAAM,SAAS,GAAG,CACvB,QAAoB,EACpB,EAAE,aAAa,EAAE,OAAO,KAAuB,EAAE,EACjD,EAAE;IACF,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,aAAa;QAAE,OAAO,QAAQ,CAAC;IAEhE,IAAI,CAAC,OAAO;QAAE,MAAM,KAAK,CAAC,wEAAwE,CAAC,CAAC,CAAC,kBAAkB;IACvH,OAAO,IAAA,sBAAc,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC,CAAC;AATW,QAAA,SAAS,aASpB","sourcesContent":["/** Transform relative URL paths to absolute URLs */\nexport const resolveUrlPath = (urlBase: string, urlPath: string) => {\n const url = new URL(urlBase);\n url.pathname = urlPath;\n return url.href;\n};\n\nexport interface FormatUrlOptions {\n allowRelative?: boolean;\n baseUrl?: string | null;\n}\n\nexport const formatUrl = <T>(\n maybeUrl: string | T,\n { allowRelative, baseUrl }: FormatUrlOptions = {}\n) => {\n if (typeof maybeUrl !== 'string') return maybeUrl;\n if (!maybeUrl.startsWith('/') || allowRelative) return maybeUrl;\n\n if (!baseUrl) throw Error('Cannot convert URL from relative to absolute path - baseUrl is missing'); // prettier-ignore\n return resolveUrlPath(baseUrl, maybeUrl);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "portadom",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "private": false,
5
5
  "description": "Single DOM manipulation interface across Browser API, JSDOM, Cheerio, Playwright",
6
6
  "author": "Juro Oravec <juraj.oravec.josefson@gmail.com>",
@@ -48,7 +48,6 @@
48
48
  "gen:docs": "typedoc src/index.ts --plugin typedoc-plugin-markdown --tsconfig tsconfig.base.json --out ./docs/typedoc"
49
49
  },
50
50
  "devDependencies": {
51
- "@types/lodash": "^4.14.194",
52
51
  "@typescript-eslint/eslint-plugin": "^4.33.0",
53
52
  "@typescript-eslint/parser": "^4.33.0",
54
53
  "cheerio": "^1.0.0-rc.12",
@@ -61,8 +60,5 @@
61
60
  "typedoc": "^0.25.0",
62
61
  "typedoc-plugin-markdown": "^3.16.0",
63
62
  "typescript": "^5.0.4"
64
- },
65
- "dependencies": {
66
- "lodash": "^4.17.21"
67
63
  }
68
64
  }