UNPKG

puppeteer-core

Version:

A high-level API to control headless Chrome over the DevTools Protocol

63 lines 1.93 kB
"use strict"; /** * @license * Copyright 2022 Google Inc. * SPDX-License-Identifier: Apache-2.0 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.pierceQuerySelectorAll = exports.pierceQuerySelector = void 0; /** * @internal */ const pierceQuerySelector = (root, selector) => { let found = null; const search = (root) => { const iter = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); do { const currentNode = iter.currentNode; if (currentNode.shadowRoot) { search(currentNode.shadowRoot); } if (currentNode instanceof ShadowRoot) { continue; } if (currentNode !== root && !found && currentNode.matches(selector)) { found = currentNode; } } while (!found && iter.nextNode()); }; if (root instanceof Document) { root = root.documentElement; } search(root); return found; }; exports.pierceQuerySelector = pierceQuerySelector; /** * @internal */ const pierceQuerySelectorAll = (element, selector) => { const result = []; const collect = (root) => { const iter = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); do { const currentNode = iter.currentNode; if (currentNode.shadowRoot) { collect(currentNode.shadowRoot); } if (currentNode instanceof ShadowRoot) { continue; } if (currentNode !== root && currentNode.matches(selector)) { result.push(currentNode); } } while (iter.nextNode()); }; if (element instanceof Document) { element = element.documentElement; } collect(element); return result; }; exports.pierceQuerySelectorAll = pierceQuerySelectorAll; //# sourceMappingURL=PierceQuerySelector.js.map