UNPKG

@sentry/core

Version:
112 lines (108 loc) 3.24 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const is = require('./is.js'); const worldwide = require('./worldwide.js'); const WINDOW = worldwide.GLOBAL_OBJ; const DEFAULT_MAX_STRING_LENGTH = 80; function htmlTreeAsString(elem, options = {}) { if (!elem) { return "<unknown>"; } try { let currentElem = elem; const MAX_TRAVERSE_HEIGHT = 5; const out = []; let height = 0; let len = 0; const separator = " > "; const sepLength = separator.length; let nextStr; const keyAttrs = Array.isArray(options) ? options : options.keyAttrs; const maxStringLength = !Array.isArray(options) && options.maxStringLength || DEFAULT_MAX_STRING_LENGTH; while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) { nextStr = _htmlElementAsString(currentElem, keyAttrs); if (nextStr === "html" || height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength) { break; } out.push(nextStr); len += nextStr.length; currentElem = currentElem.parentNode; } return out.reverse().join(separator); } catch { return "<unknown>"; } } function _htmlElementAsString(el, keyAttrs) { const elem = el; const out = []; if (!elem?.tagName) { return ""; } if (WINDOW.HTMLElement) { if (elem instanceof HTMLElement && elem.dataset) { if (elem.dataset["sentryComponent"]) { return elem.dataset["sentryComponent"]; } if (elem.dataset["sentryElement"]) { return elem.dataset["sentryElement"]; } } } out.push(elem.tagName.toLowerCase()); const keyAttrPairs = keyAttrs?.length ? keyAttrs.filter((keyAttr) => elem.getAttribute(keyAttr)).map((keyAttr) => [keyAttr, elem.getAttribute(keyAttr)]) : null; if (keyAttrPairs?.length) { keyAttrPairs.forEach((keyAttrPair) => { out.push(`[${keyAttrPair[0]}="${keyAttrPair[1]}"]`); }); } else { if (elem.id) { out.push(`#${elem.id}`); } const className = elem.className; if (className && is.isString(className)) { const classes = className.split(/\s+/); for (const c of classes) { out.push(`.${c}`); } } } for (const k of ["aria-label", "type", "name", "title", "alt"]) { const attr = elem.getAttribute(k); if (attr) { out.push(`[${k}="${attr}"]`); } } return out.join(""); } function getLocationHref() { try { return WINDOW.document.location.href; } catch { return ""; } } function getComponentName(elem, maxTraverseHeight = 5) { if (!WINDOW.HTMLElement) { return null; } let currentElem = elem; for (let i = 0; i < maxTraverseHeight; i++) { if (!currentElem) { return null; } if (currentElem instanceof HTMLElement) { if (currentElem.dataset["sentryComponent"]) { return currentElem.dataset["sentryComponent"]; } if (currentElem.dataset["sentryElement"]) { return currentElem.dataset["sentryElement"]; } } currentElem = currentElem.parentNode; } return null; } exports.getComponentName = getComponentName; exports.getLocationHref = getLocationHref; exports.htmlTreeAsString = htmlTreeAsString; //# sourceMappingURL=browser.js.map