You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.5 KiB

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findAll = findAll;
var _config = require("../config");
var _accessiblity = require("./accessiblity");
function findAll(root, predicate, options) {
const results = findAllInternal(root, predicate, options);
const includeHiddenElements = options?.includeHiddenElements ?? options?.hidden ?? (0, _config.getConfig)()?.defaultIncludeHiddenElements;
if (includeHiddenElements) {
return results;
}
const cache = new WeakMap();
return results.filter(element => !(0, _accessiblity.isHiddenFromAccessibility)(element, {
cache
}));
}
// Extracted from React Test Renderer
// src: https://github.com/facebook/react/blob/8e2bde6f2751aa6335f3cef488c05c3ea08e074a/packages/react-test-renderer/src/ReactTestRenderer.js#L402
function findAllInternal(root, predicate, options) {
const results = [];
// Match descendants first but do not add them to results yet.
const matchingDescendants = [];
root.children.forEach(child => {
if (typeof child === 'string') {
return;
}
matchingDescendants.push(...findAllInternal(child, predicate, options));
});
if (
// When matchDeepestOnly = true: add current element only if no descendants match
(!options?.matchDeepestOnly || matchingDescendants.length === 0) && predicate(root)) {
results.push(root);
}
// Add matching descendants after element to preserve original tree walk order.
results.push(...matchingDescendants);
return results;
}
//# sourceMappingURL=findAll.js.map