{"version":3,"file":"canvas-manager-900X62Xw.cjs","sources":["../../rrweb-snapshot/dist/rrweb-snapshot.js","../src/utils.ts","../../types/dist/rrweb-types.js","../src/record/error-handler.ts","../../../node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../src/record/observers/canvas/serialize-args.ts","../src/record/observers/canvas/2d.ts","../src/record/observers/canvas/canvas.ts","../src/record/observers/canvas/webgl.ts","../../rrweb-worker/dist/rrweb-worker/image-bitmap-data-url-worker.mjs","../../rrweb-worker/dist/rrweb-worker/index.mjs","../src/record/observers/canvas/canvas-manager.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\nfunction isElement(n) {\n  return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n  const host = n?.host;\n  return Boolean(host?.shadowRoot === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n  return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s) {\n  try {\n    const rules = s.rules || s.cssRules;\n    return rules ? fixBrowserCompatibilityIssuesInCSS(\n      Array.from(rules, stringifyRule).join(\"\")\n    ) : null;\n  } catch (error) {\n    return null;\n  }\n}\nfunction fixAllCssProperty(rule) {\n  let styles = \"\";\n  for (let i = 0; i < rule.style.length; i++) {\n    const styleDeclaration = rule.style;\n    const attribute = styleDeclaration[i];\n    const isImportant = styleDeclaration.getPropertyPriority(attribute);\n    styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : \"\"};`;\n  }\n  return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n  let importStringified;\n  if (isCSSImportRule(rule)) {\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n    }\n  } else if (isCSSStyleRule(rule)) {\n    let cssText = rule.cssText;\n    const needsSafariColonFix = rule.selectorText.includes(\":\");\n    const needsAllFix = typeof rule.style[\"all\"] === \"string\" && rule.style[\"all\"];\n    if (needsAllFix) {\n      cssText = fixAllCssProperty(rule);\n    }\n    if (needsSafariColonFix) {\n      cssText = fixSafariColons(cssText);\n    }\n    if (needsSafariColonFix || needsAllFix) {\n      return cssText;\n    }\n  }\n  return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n) {\n    if (!n) return -1;\n    const id = this.getMeta(n)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n) {\n    return this.nodeMetaMap.get(n) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n) {\n    const id = this.getId(n);\n    this.idNodeMap.delete(id);\n    if (n.childNodes) {\n      n.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n);\n    this.nodeMetaMap.set(n, meta);\n  }\n  replace(id, n) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n, meta);\n    }\n    this.idNodeMap.set(id, n);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror() {\n  return new Mirror();\n}\nfunction shouldMaskInput({\n  maskInputOptions,\n  tagName,\n  type\n}) {\n  if (tagName === \"OPTION\") {\n    tagName = \"SELECT\";\n  }\n  return Boolean(\n    maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === \"password\" || // Default to \"text\" option for inputs without a \"type\" attribute defined\n    tagName === \"INPUT\" && !type && maskInputOptions[\"text\"]\n  );\n}\nfunction maskInputValue({\n  isMasked,\n  element,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  if (!isMasked) {\n    return text;\n  }\n  if (maskInputFn) {\n    text = maskInputFn(text, element);\n  }\n  return \"*\".repeat(text.length);\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n  return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction isNodeMetaEqual(a, b) {\n  if (!a || !b || a.type !== b.type) return false;\n  if (a.type === NodeType.Document)\n    return a.compatMode === b.compatMode;\n  else if (a.type === NodeType.DocumentType)\n    return a.name === b.name && a.publicId === b.publicId && a.systemId === b.systemId;\n  else if (a.type === NodeType.Comment || a.type === NodeType.Text || a.type === NodeType.CDATA)\n    return a.textContent === b.textContent;\n  else if (a.type === NodeType.Element)\n    return a.tagName === b.tagName && JSON.stringify(a.attributes) === JSON.stringify(b.attributes) && a.isSVG === b.isSVG && a.needBlock === b.needBlock;\n  return false;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction getInputValue(el, tagName, type) {\n  if (tagName === \"INPUT\" && (type === \"radio\" || type === \"checkbox\")) {\n    return el.getAttribute(\"value\") || \"\";\n  }\n  return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const document = window.document;\n  let impl = window[name];\n  if (document && typeof document.createElement === \"function\") {\n    try {\n      const sandbox = document.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n    }\n  }\n  return cachedImplementations[name] = impl.bind(\n    window\n  );\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nfunction clearTimeout(...rest) {\n  return getImplementation(\"clearTimeout\")(...rest);\n}\nfunction getIFrameContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch {\n  }\n}\nfunction getIFrameContentWindow(iframe) {\n  try {\n    return iframe.contentWindow;\n  } catch {\n  }\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction filterCSSPropertiesFromInlineStyle(cssText, ignoredProperties) {\n  if (!cssText || ignoredProperties.size === 0) {\n    return cssText;\n  }\n  try {\n    const properties = cssText.split(\";\");\n    const filteredProperties = [];\n    for (let property of properties) {\n      property = property.trim();\n      if (!property) continue;\n      const colonIndex = property.indexOf(\":\");\n      if (colonIndex === -1) {\n        filteredProperties.push(property);\n        continue;\n      }\n      const propertyName = property.slice(0, colonIndex).trim();\n      if (!ignoredProperties.has(propertyName)) {\n        filteredProperties.push(property);\n      }\n    }\n    return filteredProperties.join(\"; \") + (filteredProperties.length > 0 && cssText.endsWith(\";\") ? \";\" : \"\");\n  } catch (error) {\n    console.warn(\"Error filtering CSS properties:\", error);\n    return cssText;\n  }\n}\nfunction absoluteToStylesheet(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const stack = href.split(\"/\");\n      const parts = filePath.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n    }\n  );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars = match[0];\n      pos += chars.length;\n      return chars;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c = attributeValue.charAt(pos);\n        if (c === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a = cachedDocument.get(doc);\n  if (!a) {\n    a = doc.createElement(\"a\");\n    cachedDocument.set(doc, a);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a.setAttribute(\"href\", customHref);\n  return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn, ignoreCSSAttributes) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    let processedStyle = absoluteToStylesheet(value, getHref(doc));\n    if (ignoreCSSAttributes && ignoreCSSAttributes.size > 0) {\n      processedStyle = filterCSSPropertiesFromInlineStyle(\n        processedStyle,\n        ignoreCSSAttributes\n      );\n    }\n    return processedStyle;\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  if (typeof maskAttributeFn === \"function\") {\n    return maskAttributeFn(name, value, element);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n  try {\n    if (unblockSelector && element.matches(unblockSelector)) {\n      return false;\n    }\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e) {\n  }\n  return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction classMatchesRegex(node, regex, checkAncestors) {\n  if (!node) return false;\n  if (checkAncestors) {\n    return distanceToMatch(\n      node,\n      (node2) => elementClassMatchesRegex(node2, regex)\n    ) >= 0;\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return elementClassMatchesRegex(node, regex);\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    if (el === null) return false;\n    if (el.tagName === \"INPUT\") {\n      const autocomplete = el.getAttribute(\"autocomplete\");\n      const disallowedAutocompleteValues = [\n        \"current-password\",\n        \"new-password\",\n        \"cc-number\",\n        \"cc-exp\",\n        \"cc-exp-month\",\n        \"cc-exp-year\",\n        \"cc-csc\"\n      ];\n      if (disallowedAutocompleteValues.includes(autocomplete)) {\n        return true;\n      }\n    }\n    let maskDistance = -1;\n    let unmaskDistance = -1;\n    if (maskAllText) {\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector)\n      );\n      if (unmaskDistance < 0) {\n        return true;\n      }\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector),\n        unmaskDistance >= 0 ? unmaskDistance : Infinity\n      );\n    } else {\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector)\n      );\n      if (maskDistance < 0) {\n        return false;\n      }\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector),\n        maskDistance >= 0 ? maskDistance : Infinity\n      );\n    }\n    return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;\n  } catch (e) {\n  }\n  return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = getIFrameContentWindow(iframeEl);\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    styleSheetLoaded = null;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskAttributeFn,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    ignoreCSSAttributes\n  } = options;\n  const rootId = getRootId(doc, mirror);\n  switch (n.nodeType) {\n    case n.DOCUMENT_NODE:\n      if (n.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType.Document,\n          childNodes: [],\n          compatMode: n.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType.Document,\n          childNodes: []\n        };\n      }\n    case n.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType.DocumentType,\n        name: n.name,\n        publicId: n.publicId,\n        systemId: n.systemId,\n        rootId\n      };\n    case n.ELEMENT_NODE:\n      return serializeElementNode(n, {\n        doc,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        inlineStylesheet,\n        maskAttributeFn,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        ignoreCSSAttributes\n      });\n    case n.TEXT_NODE:\n      return serializeTextNode(n, {\n        doc,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        maskTextFn,\n        maskInputOptions,\n        maskInputFn,\n        rootId\n      });\n    case n.CDATA_SECTION_NODE:\n      return {\n        type: NodeType.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n.COMMENT_NODE:\n      return {\n        type: NodeType.Comment,\n        textContent: n.textContent || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror) {\n  if (!mirror.hasNode(doc)) return void 0;\n  const docId = mirror.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n, options) {\n  const {\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    maskTextFn,\n    maskInputOptions,\n    maskInputFn,\n    rootId\n  } = options;\n  const parentTagName = n.parentNode && n.parentNode.tagName;\n  let textContent = n.textContent;\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  const isTextarea = parentTagName === \"TEXTAREA\" ? true : void 0;\n  if (isStyle && textContent) {\n    try {\n      if (n.nextSibling || n.previousSibling) {\n      } else if (n.parentNode.sheet?.cssRules) {\n        textContent = stringifyStylesheet(\n          n.parentNode.sheet\n        );\n      }\n    } catch (err) {\n      console.warn(\n        `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n        n\n      );\n    }\n    textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n  }\n  if (isScript) {\n    textContent = \"SCRIPT_PLACEHOLDER\";\n  }\n  const forceMask = needMaskingText(\n    n,\n    maskTextClass,\n    maskTextSelector,\n    unmaskTextClass,\n    unmaskTextSelector,\n    maskAllText\n  );\n  if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n    textContent = maskTextFn ? maskTextFn(textContent, n.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n    textContent = maskInputFn ? maskInputFn(textContent, n.parentNode) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (parentTagName === \"OPTION\" && textContent) {\n    const isInputMasked = shouldMaskInput({\n      type: null,\n      tagName: parentTagName,\n      maskInputOptions\n    });\n    textContent = maskInputValue({\n      isMasked: needMaskingText(\n        n,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        isInputMasked\n      ),\n      element: n,\n      value: textContent,\n      maskInputFn\n    });\n  }\n  return {\n    type: NodeType.Text,\n    textContent: textContent || \"\",\n    isStyle,\n    rootId\n  };\n}\nfunction serializeElementNode(n, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    ignoreCSSAttributes\n  } = options;\n  const needBlock = _isBlockedElement(\n    n,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  );\n  const tagName = getValidTagName(n);\n  let attributes2 = {};\n  const len = n.attributes.length;\n  for (let i = 0; i < len; i++) {\n    const attr = n.attributes[i];\n    if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes2[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n        n,\n        maskAttributeFn,\n        ignoreCSSAttributes\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s) => {\n      return s.href === n.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      attributes2.rel = null;\n      attributes2.href = null;\n      attributes2.crossorigin = null;\n      attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n    }\n  }\n  if (tagName === \"style\" && n.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n  !(n.innerText || n.textContent || \"\").trim().length) {\n    const cssText = stringifyStylesheet(\n      n.sheet\n    );\n    if (cssText) {\n      attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n    }\n  }\n  if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\" || tagName === \"option\") {\n    const el = n;\n    const type = getInputType(el);\n    const value = getInputValue(el, toUpperCase(tagName), type);\n    const checked = el.checked;\n    if (type !== \"submit\" && type !== \"button\" && value) {\n      const forceMask = needMaskingText(\n        el,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        shouldMaskInput({\n          type,\n          tagName: toUpperCase(tagName),\n          maskInputOptions\n        })\n      );\n      attributes2.value = maskInputValue({\n        isMasked: forceMask,\n        element: el,\n        value,\n        maskInputFn\n      });\n    }\n    if (checked) {\n      attributes2.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n.selected && !maskInputOptions[\"select\"]) {\n      attributes2.selected = true;\n    } else {\n      delete attributes2.selected;\n    }\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n.__context === \"2d\") {\n      if (!is2DCanvasBlank(n)) {\n        attributes2.rr_dataURL = n.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n)) {\n      const canvasDataURL = n.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n.width;\n      blankCanvas.height = n.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes2.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes2.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if (tagName === \"audio\" || tagName === \"video\") {\n    attributes2.rr_mediaState = n.paused ? \"paused\" : \"played\";\n    attributes2.rr_mediaCurrentTime = n.currentTime;\n  }\n  if (!newlyAddedElement) {\n    if (n.scrollLeft) {\n      attributes2.rr_scrollLeft = n.scrollLeft;\n    }\n    if (n.scrollTop) {\n      attributes2.rr_scrollTop = n.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n.getBoundingClientRect();\n    attributes2 = {\n      class: attributes2.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n    if (!needBlock && !getIFrameContentDocument(n)) {\n      attributes2.rr_src = attributes2.src;\n    }\n    delete attributes2.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e) {\n  }\n  return {\n    type: NodeType.Element,\n    tagName,\n    attributes: attributes2,\n    childNodes: [],\n    isSVG: isSVGElement(n) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n    return true;\n  } else if (sn.type === NodeType.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false,\n    ignoreCSSAttributes\n  } = options;\n  let { preserveWhiteSpace = true } = options;\n  const _serializedNode = serializeNode(n, {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    maskAllText,\n    unblockSelector,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement,\n    ignoreCSSAttributes\n  });\n  if (!_serializedNode) {\n    console.warn(n, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror.hasNode(n)) {\n    id = mirror.getId(n);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType.Text && !_serializedNode.isStyle && !_serializedNode.textContent.trim().length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode2 = Object.assign(_serializedNode, { id });\n  mirror.add(n, serializedNode2);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode2.type === NodeType.Element) {\n    recordChild = recordChild && !serializedNode2.needBlock;\n    const shadowRoot = n.shadowRoot;\n    if (shadowRoot && isNativeShadowDom(shadowRoot))\n      serializedNode2.isShadowHost = true;\n  }\n  if ((serializedNode2.type === NodeType.Document || serializedNode2.type === NodeType.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror,\n      blockClass,\n      blockSelector,\n      maskAllText,\n      unblockSelector,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onBlockedImageLoad,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn,\n      ignoreCSSAttributes\n    };\n    const childNodes = n.childNodes ? Array.from(n.childNodes) : [];\n    for (const childN of childNodes) {\n      const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n      if (serializedChildNode) {\n        serializedNode2.childNodes.push(serializedChildNode);\n      }\n    }\n    if (isElement(n) && n.shadowRoot) {\n      for (const childN of Array.from(n.shadowRoot.childNodes)) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(n.shadowRoot) && (serializedChildNode.isShadow = true);\n          serializedNode2.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  if (n.parentNode && isShadowRoot(n.parentNode) && isNativeShadowDom(n.parentNode)) {\n    serializedNode2.isShadow = true;\n  }\n  if (serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"iframe\" && !serializedNode2.needBlock) {\n    onceIframeLoaded(\n      n,\n      () => {\n        const iframeDoc = getIFrameContentDocument(n);\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n            ignoreCSSAttributes\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"img\" && !n.complete && serializedNode2.needBlock) {\n    const image = n;\n    const updateImageDimensions = () => {\n      if (image.isConnected && !image.complete && onBlockedImageLoad) {\n        try {\n          const rect = image.getBoundingClientRect();\n          if (rect.width > 0 && rect.height > 0) {\n            onBlockedImageLoad(image, serializedNode2, rect);\n          }\n        } catch (error) {\n        }\n      }\n      image.removeEventListener(\"load\", updateImageDimensions);\n    };\n    if (image.isConnected) {\n      image.addEventListener(\"load\", updateImageDimensions);\n    }\n  }\n  if (serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n, {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn,\n            ignoreCSSAttributes\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType.Element) {\n    delete serializedNode2.needBlock;\n  }\n  return serializedNode2;\n}\nfunction snapshot(n, options) {\n  const {\n    mirror = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([])\n  } = options || {};\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true\n  } : maskAllInputs === false ? {} : maskAllInputs;\n  const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n    // if true: set of sensible options that should not throw away any information\n    {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaDescKeywords: slimDOM === \"all\",\n      // destructive\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaAuthorship: true,\n      headMetaVerification: true\n    }\n  ) : slimDOM === false ? {} : slimDOM;\n  return serializeNodeWithId(n, {\n    doc: n,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onBlockedImageLoad,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false,\n    ignoreCSSAttributes\n  });\n}\nfunction visitSnapshot(node, onVisit) {\n  function walk(current) {\n    onVisit(current);\n    if (current.type === NodeType.Document || current.type === NodeType.Element) {\n      current.childNodes.forEach(walk);\n    }\n  }\n  walk(node);\n}\nfunction cleanupSnapshot() {\n  _id = 1;\n}\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options = {}) {\n  let lineno = 1;\n  let column = 1;\n  function updatePosition(str) {\n    const lines = str.match(/\\n/g);\n    if (lines) {\n      lineno += lines.length;\n    }\n    const i = str.lastIndexOf(\"\\n\");\n    column = i === -1 ? column + str.length : str.length - i;\n  }\n  function position() {\n    const start = { line: lineno, column };\n    return (node) => {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n  const _Position = class _Position {\n    constructor(start) {\n      __publicField(this, \"content\");\n      __publicField(this, \"start\");\n      __publicField(this, \"end\");\n      __publicField(this, \"source\");\n      this.start = start;\n      this.end = { line: lineno, column };\n      this.source = options.source;\n      this.content = _Position.content;\n    }\n  };\n  __publicField(_Position, \"content\");\n  let Position = _Position;\n  Position.content = css;\n  const errorsList = [];\n  function error(msg) {\n    const err = new Error(\n      `${options.source || \"\"}:${lineno}:${column}: ${msg}`\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n  function stylesheet() {\n    const rulesList = rules();\n    return {\n      type: \"stylesheet\",\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList\n      }\n    };\n  }\n  function open() {\n    return match(/^{\\s*/);\n  }\n  function close() {\n    return match(/^}/);\n  }\n  function rules() {\n    let node;\n    const rules2 = [];\n    whitespace();\n    comments(rules2);\n    while (css.length && css.charAt(0) !== \"}\" && (node = atrule() || rule())) {\n      if (node) {\n        rules2.push(node);\n        comments(rules2);\n      }\n    }\n    return rules2;\n  }\n  function match(re) {\n    const m = re.exec(css);\n    if (!m) {\n      return;\n    }\n    const str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n  function whitespace() {\n    match(/^\\s*/);\n  }\n  function comments(rules2 = []) {\n    let c;\n    while (c = comment()) {\n      if (c) {\n        rules2.push(c);\n      }\n      c = comment();\n    }\n    return rules2;\n  }\n  function comment() {\n    const pos = position();\n    if (\"/\" !== css.charAt(0) || \"*\" !== css.charAt(1)) {\n      return;\n    }\n    let i = 2;\n    while (\"\" !== css.charAt(i) && (\"*\" !== css.charAt(i) || \"/\" !== css.charAt(i + 1))) {\n      ++i;\n    }\n    i += 2;\n    if (\"\" === css.charAt(i - 1)) {\n      return error(\"End of comment missing\");\n    }\n    const str = css.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i);\n    column += 2;\n    return pos({\n      type: \"comment\",\n      comment: str\n    });\n  }\n  function selector() {\n    const m = match(/^([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const splitSelectors = trim(m[0]).replace(/\\/\\*[\\s\\S]*?\\*\\/+/g, \"\").replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m2) => {\n      return m2.replace(/,/g, \"‌\");\n    }).split(/\\s*(?![^(]*\\)),\\s*/);\n    if (splitSelectors.length <= 1) {\n      return splitSelectors.map((s) => {\n        return s.replace(/\\u200C/g, \",\");\n      });\n    }\n    let i = 0;\n    let j = 0;\n    const len = splitSelectors.length;\n    const finalSelectors = [];\n    while (i < len) {\n      const openingParensCount = (splitSelectors[i].match(/\\(/g) || []).length;\n      const closingParensCount = (splitSelectors[i].match(/\\)/g) || []).length;\n      let unbalancedParens = openingParensCount - closingParensCount;\n      if (unbalancedParens >= 1) {\n        let foundClosingSelector = false;\n        j = i + 1;\n        while (j < len) {\n          const nextOpeningParensCount = (splitSelectors[j].match(/\\(/g) || []).length;\n          const nextClosingParensCount = (splitSelectors[j].match(/\\)/g) || []).length;\n          const nextUnbalancedParens = nextClosingParensCount - nextOpeningParensCount;\n          if (nextUnbalancedParens === unbalancedParens) {\n            finalSelectors.push(splitSelectors.slice(i, j + 1).join(\",\"));\n            i = j + 1;\n            foundClosingSelector = true;\n            break;\n          }\n          j++;\n          unbalancedParens -= nextUnbalancedParens;\n        }\n        if (foundClosingSelector) {\n          continue;\n        }\n        splitSelectors.slice(i, len).forEach((selector2) => selector2 && finalSelectors.push(selector2));\n        break;\n      }\n      splitSelectors[i] && finalSelectors.push(splitSelectors[i]);\n      i++;\n    }\n    return finalSelectors.map((s) => {\n      return s.replace(/\\u200C/g, \",\");\n    });\n  }\n  function declaration() {\n    const pos = position();\n    const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!propMatch) {\n      return;\n    }\n    const prop = trim(propMatch[0]);\n    if (!match(/^:\\s*/)) {\n      return error(`property missing ':'`);\n    }\n    const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n    const ret = pos({\n      type: \"declaration\",\n      property: prop.replace(commentre, \"\"),\n      value: val ? trim(val[0]).replace(commentre, \"\") : \"\"\n    });\n    match(/^[;\\s]*/);\n    return ret;\n  }\n  function declarations() {\n    const decls = [];\n    if (!open()) {\n      return error(`missing '{'`);\n    }\n    comments(decls);\n    let decl;\n    while (decl = declaration()) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n      decl = declaration();\n    }\n    if (!close()) {\n      return error(`missing '}'`);\n    }\n    return decls;\n  }\n  function keyframe() {\n    let m;\n    const vals = [];\n    const pos = position();\n    while (m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/)) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n    if (!vals.length) {\n      return;\n    }\n    return pos({\n      type: \"keyframe\",\n      values: vals,\n      declarations: declarations()\n    });\n  }\n  function atkeyframes() {\n    const pos = position();\n    let m = match(/^@([-\\w]+)?keyframes\\s*/);\n    if (!m) {\n      return;\n    }\n    const vendor = m[1];\n    m = match(/^([-\\w]+)\\s*/);\n    if (!m) {\n      return error(\"@keyframes missing name\");\n    }\n    const name = m[1];\n    if (!open()) {\n      return error(`@keyframes missing '{'`);\n    }\n    let frame;\n    let frames = comments();\n    while (frame = keyframe()) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n    if (!close()) {\n      return error(`@keyframes missing '}'`);\n    }\n    return pos({\n      type: \"keyframes\",\n      name,\n      vendor,\n      keyframes: frames\n    });\n  }\n  function atsupports() {\n    const pos = position();\n    const m = match(/^@supports *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const supports = trim(m[1]);\n    if (!open()) {\n      return error(`@supports missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@supports missing '}'`);\n    }\n    return pos({\n      type: \"supports\",\n      supports,\n      rules: style\n    });\n  }\n  function athost() {\n    const pos = position();\n    const m = match(/^@host\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@host missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@host missing '}'`);\n    }\n    return pos({\n      type: \"host\",\n      rules: style\n    });\n  }\n  function atmedia() {\n    const pos = position();\n    const m = match(/^@media *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const media = trim(m[1]);\n    if (!open()) {\n      return error(`@media missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@media missing '}'`);\n    }\n    return pos({\n      type: \"media\",\n      media,\n      rules: style\n    });\n  }\n  function atcustommedia() {\n    const pos = position();\n    const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) {\n      return;\n    }\n    return pos({\n      type: \"custom-media\",\n      name: trim(m[1]),\n      media: trim(m[2])\n    });\n  }\n  function atpage() {\n    const pos = position();\n    const m = match(/^@page */);\n    if (!m) {\n      return;\n    }\n    const sel = selector() || [];\n    if (!open()) {\n      return error(`@page missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@page missing '}'`);\n    }\n    return pos({\n      type: \"page\",\n      selectors: sel,\n      declarations: decls\n    });\n  }\n  function atdocument() {\n    const pos = position();\n    const m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const vendor = trim(m[1]);\n    const doc = trim(m[2]);\n    if (!open()) {\n      return error(`@document missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@document missing '}'`);\n    }\n    return pos({\n      type: \"document\",\n      document: doc,\n      vendor,\n      rules: style\n    });\n  }\n  function atfontface() {\n    const pos = position();\n    const m = match(/^@font-face\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@font-face missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@font-face missing '}'`);\n    }\n    return pos({\n      type: \"font-face\",\n      declarations: decls\n    });\n  }\n  const atimport = _compileAtrule(\"import\");\n  const atcharset = _compileAtrule(\"charset\");\n  const atnamespace = _compileAtrule(\"namespace\");\n  function _compileAtrule(name) {\n    const re = new RegExp(\n      \"^@\" + name + \"\\\\s*((?:\" + [\n        /[^\\\\]\"(?:\\\\\"|[^\"])*\"/.source,\n        // consume any quoted parts (checking that the double quote isn't itself escaped)\n        /[^\\\\]'(?:\\\\'|[^'])*'/.source,\n        // same but for single quotes\n        \"[^;]\"\n      ].join(\"|\") + \")+);\"\n    );\n    return () => {\n      const pos = position();\n      const m = match(re);\n      if (!m) {\n        return;\n      }\n      const ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    };\n  }\n  function atrule() {\n    if (css[0] !== \"@\") {\n      return;\n    }\n    return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();\n  }\n  function rule() {\n    const pos = position();\n    const sel = selector();\n    if (!sel) {\n      return error(\"selector missing\");\n    }\n    comments();\n    return pos({\n      type: \"rule\",\n      selectors: sel,\n      declarations: declarations()\n    });\n  }\n  return addParent(stylesheet());\n}\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\nfunction addParent(obj, parent) {\n  const isNode = obj && typeof obj.type === \"string\";\n  const childParent = isNode ? obj : parent;\n  for (const k of Object.keys(obj)) {\n    const value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach((v) => {\n        addParent(v, childParent);\n      });\n    } else if (value && typeof value === \"object\") {\n      addParent(value, childParent);\n    }\n  }\n  if (isNode) {\n    Object.defineProperty(obj, \"parent\", {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null\n    });\n  }\n  return obj;\n}\nconst tagMap = {\n  script: \"noscript\",\n  // camel case svg element tag names\n  altglyph: \"altGlyph\",\n  altglyphdef: \"altGlyphDef\",\n  altglyphitem: \"altGlyphItem\",\n  animatecolor: \"animateColor\",\n  animatemotion: \"animateMotion\",\n  animatetransform: \"animateTransform\",\n  clippath: \"clipPath\",\n  feblend: \"feBlend\",\n  fecolormatrix: \"feColorMatrix\",\n  fecomponenttransfer: \"feComponentTransfer\",\n  fecomposite: \"feComposite\",\n  feconvolvematrix: \"feConvolveMatrix\",\n  fediffuselighting: \"feDiffuseLighting\",\n  fedisplacementmap: \"feDisplacementMap\",\n  fedistantlight: \"feDistantLight\",\n  fedropshadow: \"feDropShadow\",\n  feflood: \"feFlood\",\n  fefunca: \"feFuncA\",\n  fefuncb: \"feFuncB\",\n  fefuncg: \"feFuncG\",\n  fefuncr: \"feFuncR\",\n  fegaussianblur: \"feGaussianBlur\",\n  feimage: \"feImage\",\n  femerge: \"feMerge\",\n  femergenode: \"feMergeNode\",\n  femorphology: \"feMorphology\",\n  feoffset: \"feOffset\",\n  fepointlight: \"fePointLight\",\n  fespecularlighting: \"feSpecularLighting\",\n  fespotlight: \"feSpotLight\",\n  fetile: \"feTile\",\n  feturbulence: \"feTurbulence\",\n  foreignobject: \"foreignObject\",\n  glyphref: \"glyphRef\",\n  lineargradient: \"linearGradient\",\n  radialgradient: \"radialGradient\"\n};\nfunction getTagName(n) {\n  let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\n  if (tagName === \"link\" && n.attributes._cssText) {\n    tagName = \"style\";\n  }\n  return tagName;\n}\nfunction escapeRegExp(str) {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, \"g\");\nfunction addHoverClass(cssText, cache) {\n  const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\n  if (cachedStyle) return cachedStyle;\n  if (cssText.length >= 1e6) {\n    return cssText;\n  }\n  const ast = parse(cssText, {\n    silent: true\n  });\n  if (!ast.stylesheet) {\n    return cssText;\n  }\n  const selectors = [];\n  ast.stylesheet.rules.forEach((rule) => {\n    if (\"selectors\" in rule) {\n      (rule.selectors || []).forEach((selector) => {\n        if (HOVER_SELECTOR.test(selector)) {\n          selectors.push(selector);\n        }\n      });\n    }\n  });\n  if (selectors.length === 0) {\n    return cssText;\n  }\n  const selectorMatcher = new RegExp(\n    selectors.filter((selector, index) => selectors.indexOf(selector) === index).sort((a, b) => b.length - a.length).map((selector) => {\n      return escapeRegExp(selector);\n    }).join(\"|\"),\n    \"g\"\n  );\n  const result = cssText.replace(selectorMatcher, (selector) => {\n    const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, \"$1.\\\\:hover\");\n    return `${selector}, ${newSelector}`;\n  });\n  cache?.stylesWithHoverClass.set(cssText, result);\n  return result;\n}\nfunction createCache() {\n  const stylesWithHoverClass = /* @__PURE__ */ new Map();\n  return {\n    stylesWithHoverClass\n  };\n}\nfunction buildNode(n, options) {\n  const { doc, hackCss, cache } = options;\n  switch (n.type) {\n    case NodeType.Document:\n      return doc.implementation.createDocument(null, \"\", null);\n    case NodeType.DocumentType:\n      return doc.implementation.createDocumentType(\n        n.name || \"html\",\n        n.publicId,\n        n.systemId\n      );\n    case NodeType.Element: {\n      const tagName = getTagName(n);\n      let node;\n      if (n.isSVG) {\n        node = doc.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n      } else {\n        if (\n          // If the tag name is a custom element name\n          n.isCustom && // If the browser supports custom elements\n          doc.defaultView?.customElements && // If the custom element hasn't been defined yet\n          !doc.defaultView.customElements.get(n.tagName)\n        )\n          try {\n            doc.defaultView.customElements.define(\n              n.tagName,\n              class extends doc.defaultView.HTMLElement {\n              }\n            );\n          } catch (e) {\n            console.warn(\"Cannot define custom element\", e);\n          }\n        node = doc.createElement(tagName);\n      }\n      const specialAttributes = {};\n      for (const name in n.attributes) {\n        if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\n          continue;\n        }\n        let value = n.attributes[name];\n        if (tagName === \"option\" && name === \"selected\" && value === false) {\n          continue;\n        }\n        if (value === null) {\n          continue;\n        }\n        if (value === true) value = \"\";\n        if (name.startsWith(\"rr_\")) {\n          specialAttributes[name] = value;\n          continue;\n        }\n        const isTextarea = tagName === \"textarea\" && name === \"value\";\n        const isRemoteOrDynamicCss = tagName === \"style\" && name === \"_cssText\";\n        if (isRemoteOrDynamicCss && hackCss && typeof value === \"string\") {\n          value = addHoverClass(value, cache);\n        }\n        if ((isTextarea || isRemoteOrDynamicCss) && typeof value === \"string\") {\n          const child = doc.createTextNode(value);\n          for (const c of Array.from(node.childNodes)) {\n            if (c.nodeType === node.TEXT_NODE) {\n              node.removeChild(c);\n            }\n          }\n          node.appendChild(child);\n          continue;\n        }\n        try {\n          if (n.isSVG && name === \"xlink:href\") {\n            node.setAttributeNS(\n              \"http://www.w3.org/1999/xlink\",\n              name,\n              value.toString()\n            );\n          } else if (name === \"onload\" || name === \"onclick\" || name.substring(0, 7) === \"onmouse\") {\n            node.setAttribute(\"_\" + name, value.toString());\n          } else if (tagName === \"meta\" && n.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n            node.setAttribute(\"csp-content\", value.toString());\n            continue;\n          } else if (tagName === \"link\" && (n.attributes.rel === \"preload\" || n.attributes.rel === \"modulepreload\")) {\n          } else if (tagName === \"link\" && n.attributes.rel === \"prefetch\" && typeof n.attributes.href === \"string\" && extractFileExtension(n.attributes.href) === \"js\") {\n          } else if (tagName === \"img\" && n.attributes.srcset && n.attributes.rr_dataURL) {\n            node.setAttribute(\n              \"rrweb-original-srcset\",\n              n.attributes.srcset\n            );\n          } else {\n            node.setAttribute(name, value.toString());\n          }\n        } catch (error) {\n        }\n      }\n      for (const name in specialAttributes) {\n        const value = specialAttributes[name];\n        if (tagName === \"canvas\" && name === \"rr_dataURL\") {\n          const image = doc.createElement(\"img\");\n          image.onload = () => {\n            const ctx = node.getContext(\"2d\");\n            if (ctx) {\n              ctx.drawImage(image, 0, 0, image.width, image.height);\n            }\n          };\n          image.src = value.toString();\n          if (node.RRNodeType)\n            node.rr_dataURL = value.toString();\n        } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n          const image = node;\n          if (!image.currentSrc.startsWith(\"data:\")) {\n            image.setAttribute(\n              \"rrweb-original-src\",\n              n.attributes.src\n            );\n            image.src = value.toString();\n          }\n        }\n        if (name === \"rr_width\") {\n          node.style.setProperty(\"width\", value.toString());\n        } else if (name === \"rr_height\") {\n          node.style.setProperty(\"height\", value.toString());\n        } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n          node.currentTime = value;\n        } else if (name === \"rr_mediaState\") {\n          switch (value) {\n            case \"played\":\n              node.play().catch((e) => console.warn(\"media playback error\", e));\n              break;\n            case \"paused\":\n              node.pause();\n              break;\n          }\n        }\n      }\n      if (n.isShadowHost) {\n        if (!node.shadowRoot) {\n          node.attachShadow({ mode: \"open\" });\n        } else {\n          while (node.shadowRoot.firstChild) {\n            node.shadowRoot.removeChild(node.shadowRoot.firstChild);\n          }\n        }\n      }\n      return node;\n    }\n    case NodeType.Text:\n      return doc.createTextNode(\n        n.isStyle && hackCss ? addHoverClass(n.textContent, cache) : n.textContent\n      );\n    case NodeType.CDATA:\n      if (!(doc instanceof XMLDocument)) {\n        return null;\n      }\n      return doc.createCDATASection(n.textContent);\n    case NodeType.Comment:\n      return doc.createComment(n.textContent);\n    default:\n      return null;\n  }\n}\nfunction buildNodeWithSN(n, options) {\n  const {\n    doc,\n    mirror,\n    skipChild = false,\n    hackCss = true,\n    afterAppend,\n    cache\n  } = options;\n  if (mirror.has(n.id)) {\n    const nodeInMirror = mirror.getNode(n.id);\n    const meta = mirror.getMeta(nodeInMirror);\n    if (isNodeMetaEqual(meta, n)) return mirror.getNode(n.id);\n  }\n  let node = buildNode(n, { doc, hackCss, cache });\n  if (!node) {\n    return null;\n  }\n  if (n.rootId && mirror.getNode(n.rootId) !== doc) {\n    mirror.replace(n.rootId, doc);\n  }\n  if (n.type === NodeType.Document) {\n    doc.close();\n    doc.open();\n    if (n.compatMode === \"BackCompat\" && n.childNodes && n.childNodes[0].type !== NodeType.DocumentType) {\n      if (n.childNodes[0].type === NodeType.Element && \"xmlns\" in n.childNodes[0].attributes && n.childNodes[0].attributes.xmlns === \"http://www.w3.org/1999/xhtml\") {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">'\n        );\n      } else {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">'\n        );\n      }\n    }\n    node = doc;\n  }\n  mirror.add(node, n);\n  if ((n.type === NodeType.Document || n.type === NodeType.Element) && !skipChild) {\n    for (const childN of n.childNodes) {\n      const childNode = buildNodeWithSN(childN, {\n        doc,\n        mirror,\n        skipChild: false,\n        hackCss,\n        afterAppend,\n        cache\n      });\n      if (!childNode) {\n        console.warn(\"Failed to rebuild\", childN);\n        continue;\n      }\n      if (childN.isShadow && isElement(node) && node.shadowRoot) {\n        node.shadowRoot.appendChild(childNode);\n      } else if (n.type === NodeType.Document && childN.type == NodeType.Element) {\n        const htmlElement = childNode;\n        let body = null;\n        htmlElement.childNodes.forEach((child) => {\n          if (child.nodeName === \"BODY\") body = child;\n        });\n        if (body) {\n          htmlElement.removeChild(body);\n          node.appendChild(childNode);\n          htmlElement.appendChild(body);\n        } else {\n          node.appendChild(childNode);\n        }\n      } else {\n        node.appendChild(childNode);\n      }\n      if (afterAppend) {\n        afterAppend(childNode, childN.id);\n      }\n    }\n  }\n  return node;\n}\nfunction visit(mirror, onVisit) {\n  function walk(node) {\n    onVisit(node);\n  }\n  for (const id of mirror.getIds()) {\n    if (mirror.has(id)) {\n      walk(mirror.getNode(id));\n    }\n  }\n}\nfunction handleScroll(node, mirror) {\n  const n = mirror.getMeta(node);\n  if (n?.type !== NodeType.Element) {\n    return;\n  }\n  const el = node;\n  for (const name in n.attributes) {\n    if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) && name.startsWith(\"rr_\"))) {\n      continue;\n    }\n    const value = n.attributes[name];\n    if (name === \"rr_scrollLeft\") {\n      el.scrollLeft = value;\n    }\n    if (name === \"rr_scrollTop\") {\n      el.scrollTop = value;\n    }\n  }\n}\nfunction rebuild(n, options) {\n  const {\n    doc,\n    onVisit,\n    hackCss = true,\n    afterAppend,\n    cache,\n    mirror = new Mirror()\n  } = options;\n  const node = buildNodeWithSN(n, {\n    doc,\n    mirror,\n    skipChild: false,\n    hackCss,\n    afterAppend,\n    cache\n  });\n  visit(mirror, (visitedNode) => {\n    if (onVisit) {\n      onVisit(visitedNode);\n    }\n    handleScroll(visitedNode, mirror);\n  });\n  return node;\n}\nexport {\n  IGNORED_NODE,\n  Mirror,\n  NodeType,\n  addHoverClass,\n  buildNodeWithSN,\n  classMatchesRegex,\n  cleanupSnapshot,\n  clearTimeout,\n  createCache,\n  createMatchPredicate,\n  createMirror,\n  distanceToMatch,\n  escapeImportStatement,\n  extractFileExtension,\n  filterCSSPropertiesFromInlineStyle,\n  fixAllCssProperty,\n  fixSafariColons,\n  genId,\n  getIFrameContentDocument,\n  getIFrameContentWindow,\n  getInputType,\n  getInputValue,\n  ignoreAttribute,\n  is2DCanvasBlank,\n  isCSSImportRule,\n  isCSSStyleRule,\n  isElement,\n  isNativeShadowDom,\n  isNodeMetaEqual,\n  isShadowRoot,\n  maskInputValue,\n  needMaskingText,\n  onRequestAnimationFrame,\n  rebuild,\n  serializeNodeWithId,\n  setTimeout,\n  shouldMaskInput,\n  snapshot,\n  stringifyRule,\n  stringifyStylesheet,\n  toLowerCase,\n  toUpperCase,\n  transformAttribute,\n  visitSnapshot\n};\n//# sourceMappingURL=rrweb-snapshot.js.map\n","import type {\n  throttleOptions,\n  listenerHandler,\n  hookResetter,\n  blockClass,\n  addedNodeMutation,\n  DocumentDimension,\n  IWindow,\n  DeprecatedMirror,\n  textMutation,\n} from '@sentry-internal/rrweb-types';\nimport type { IMirror, Mirror } from '@sentry-internal/rrweb-snapshot';\nimport {\n  createMatchPredicate,\n  distanceToMatch,\n} from '@sentry-internal/rrweb-snapshot';\nimport { isShadowRoot, IGNORED_NODE } from '@sentry-internal/rrweb-snapshot';\nimport type { RRNode, RRIFrameElement } from '@sentry-internal/rrdom';\n\nexport function on(\n  type: string,\n  fn: EventListenerOrEventListenerObject,\n  target: Document | IWindow = document,\n): listenerHandler {\n  const options = { capture: true, passive: true };\n  target.addEventListener(type, fn, options);\n  return () => target.removeEventListener(type, fn, options);\n}\n\n// https://github.com/rrweb-io/rrweb/pull/407\nconst DEPARTED_MIRROR_ACCESS_WARNING =\n  'Please stop import mirror directly. Instead of that,' +\n  '\\r\\n' +\n  'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n  '\\r\\n' +\n  'or you can use record.mirror to access the mirror instance during recording.';\n/** @deprecated */\nexport let _mirror: DeprecatedMirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === 'map') {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      return Reflect.get(target, prop, receiver);\n    },\n  });\n}\n\n// copy from underscore and modified\nexport function throttle<T>(\n  func: (arg: T) => void,\n  wait: number,\n  options: throttleOptions = {},\n) {\n  let timeout: ReturnType<typeof setTimeout> | null = null;\n  let previous = 0;\n  return function (...args: T[]) {\n    const now = Date.now();\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n    const remaining = wait - (now - previous);\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-this-alias\n    const context = this;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = now;\n      func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout(() => {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        func.apply(context, args);\n      }, remaining);\n    }\n  };\n}\n\nexport function hookSetter<T>(\n  target: T,\n  key: string | number | symbol,\n  d: PropertyDescriptor,\n  isRevoked?: boolean,\n  win = window,\n): hookResetter {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked\n      ? d\n      : {\n          set(value) {\n            // put hooked setter into event loop to avoid of set latency\n            setTimeout(() => {\n              d.set!.call(this, value);\n            }, 0);\n            if (original && original.set) {\n              original.set.call(this, value);\n            }\n          },\n        },\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\n\n// copy from https://github.com/getsentry/sentry-javascript/blob/b2109071975af8bf0316d3b5b38f519bdaf5dc15/packages/utils/src/object.ts\nexport function patch(\n  source: { [key: string]: any },\n  name: string,\n  replacement: (...args: unknown[]) => unknown,\n): () => void {\n  try {\n    if (!(name in source)) {\n      return () => {\n        //\n      };\n    }\n\n    const original = source[name] as () => unknown;\n    const wrapped = replacement(original);\n\n    // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n    // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n    if (typeof wrapped === 'function') {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original,\n        },\n      });\n    }\n\n    source[name] = wrapped;\n\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n      //\n    };\n    // This can throw if multiple fill happens on a global object like XMLHttpRequest\n    // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n  }\n}\n\n// guard against old third party libraries which redefine Date.now\nlet nowTimestamp = Date.now;\n\nif (!(/*@__PURE__*/ /[1-9][0-9]{12}/.test(Date.now().toString()))) {\n  // they have already redefined it! use a fallback\n  nowTimestamp = () => new Date().getTime();\n}\nexport { nowTimestamp };\n\nexport function getWindowScroll(win: Window) {\n  const doc = win.document;\n  return {\n    left: doc.scrollingElement\n      ? doc.scrollingElement.scrollLeft\n      : win.pageXOffset !== undefined\n      ? win.pageXOffset\n      : doc?.documentElement.scrollLeft ||\n        doc?.body?.parentElement?.scrollLeft ||\n        doc?.body?.scrollLeft ||\n        0,\n    top: doc.scrollingElement\n      ? doc.scrollingElement.scrollTop\n      : win.pageYOffset !== undefined\n      ? win.pageYOffset\n      : doc?.documentElement.scrollTop ||\n        doc?.body?.parentElement?.scrollTop ||\n        doc?.body?.scrollTop ||\n        0,\n  };\n}\n\nexport function getWindowHeight(): number {\n  return (\n    window.innerHeight ||\n    (document.documentElement && document.documentElement.clientHeight) ||\n    (document.body && document.body.clientHeight)\n  );\n}\n\nexport function getWindowWidth(): number {\n  return (\n    window.innerWidth ||\n    (document.documentElement && document.documentElement.clientWidth) ||\n    (document.body && document.body.clientWidth)\n  );\n}\n\n/**\n * Returns the given node as an HTMLElement if it is one, otherwise the parent node as an HTMLElement\n * @param node - node to check\n * @returns HTMLElement or null\n */\n\nexport function closestElementOfNode(node: Node | null): HTMLElement | null {\n  if (!node) {\n    return null;\n  }\n\n  // Catch access to node properties to avoid Firefox \"permission denied\" errors\n  try {\n    const el: HTMLElement | null =\n      node.nodeType === node.ELEMENT_NODE\n        ? (node as HTMLElement)\n        : node.parentElement;\n    return el;\n  } catch (error) {\n    return null;\n  }\n}\n\n/**\n * Checks if the given element set to be blocked by rrweb\n * @param node - node to check\n * @param blockClass - class name to check\n * @param blockSelector - css selectors to check\n * @param checkAncestors - whether to search through parent nodes for the block class\n * @returns true/false if the node was blocked or not\n */\nexport function isBlocked(\n  node: Node | null,\n  blockClass: blockClass,\n  blockSelector: string | null,\n  unblockSelector: string | null,\n  checkAncestors: boolean,\n): boolean {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode(node);\n\n  if (!el) {\n    return false;\n  }\n\n  const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n\n  if (!checkAncestors) {\n    const isUnblocked = unblockSelector && el.matches(unblockSelector);\n\n    return blockedPredicate(el) && !isUnblocked;\n  }\n\n  const blockDistance = distanceToMatch(el, blockedPredicate);\n  let unblockDistance = -1;\n\n  if (blockDistance < 0) {\n    return false;\n  }\n\n  if (unblockSelector) {\n    unblockDistance = distanceToMatch(\n      el,\n      createMatchPredicate(null, unblockSelector),\n    );\n  }\n\n  if (blockDistance > -1 && unblockDistance < 0) {\n    return true;\n  }\n\n  return blockDistance < unblockDistance;\n}\n\nexport function isSerialized(n: Node, mirror: Mirror): boolean {\n  return mirror.getId(n) !== -1;\n}\n\nexport function isIgnored(n: Node, mirror: Mirror): boolean {\n  // The main part of the slimDOM check happens in\n  // rrweb-snapshot::serializeNodeWithId\n  return mirror.getId(n) === IGNORED_NODE;\n}\n\nexport function isAncestorRemoved(target: Node, mirror: Mirror): boolean {\n  if (isShadowRoot(target)) {\n    return false;\n  }\n  const id = mirror.getId(target);\n  if (!mirror.has(id)) {\n    return true;\n  }\n  if (\n    target.parentNode &&\n    target.parentNode.nodeType === target.DOCUMENT_NODE\n  ) {\n    return false;\n  }\n  // if the root is not document, it means the node is not in the DOM tree anymore\n  if (!target.parentNode) {\n    return true;\n  }\n  return isAncestorRemoved(target.parentNode, mirror);\n}\n\nexport function legacy_isTouchEvent(\n  event: MouseEvent | TouchEvent | PointerEvent,\n): event is TouchEvent {\n  return Boolean((event as TouchEvent).changedTouches);\n}\n\nexport function polyfill(win = window) {\n  if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    win.NodeList.prototype.forEach = Array.prototype\n      .forEach as unknown as NodeList['forEach'];\n  }\n\n  if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    win.DOMTokenList.prototype.forEach = Array.prototype\n      .forEach as unknown as DOMTokenList['forEach'];\n  }\n\n  // https://github.com/Financial-Times/polyfill-service/pull/183\n  if (!Node.prototype.contains) {\n    Node.prototype.contains = (...args: unknown[]) => {\n      let node = args[0] as Node | null;\n      if (!(0 in args)) {\n        throw new TypeError('1 argument is required');\n      }\n\n      do {\n        if (this === node) {\n          return true;\n        }\n      } while ((node = node && node.parentNode));\n\n      return false;\n    };\n  }\n}\n\ntype ResolveTree = {\n  value: addedNodeMutation;\n  children: ResolveTree[];\n  parent: ResolveTree | null;\n};\n\nexport function queueToResolveTrees(queue: addedNodeMutation[]): ResolveTree[] {\n  const queueNodeMap: Record<number, ResolveTree> = {};\n  const putIntoMap = (\n    m: addedNodeMutation,\n    parent: ResolveTree | null,\n  ): ResolveTree => {\n    const nodeInTree: ResolveTree = {\n      value: m,\n      parent,\n      children: [],\n    };\n    queueNodeMap[m.node.id] = nodeInTree;\n    return nodeInTree;\n  };\n\n  const queueNodeTrees: ResolveTree[] = [];\n  for (const mutation of queue) {\n    const { nextId, parentId } = mutation;\n    if (nextId && nextId in queueNodeMap) {\n      const nextInTree = queueNodeMap[nextId];\n      if (nextInTree.parent) {\n        const idx = nextInTree.parent.children.indexOf(nextInTree);\n        nextInTree.parent.children.splice(\n          idx,\n          0,\n          putIntoMap(mutation, nextInTree.parent),\n        );\n      } else {\n        const idx = queueNodeTrees.indexOf(nextInTree);\n        queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n      }\n      continue;\n    }\n    if (parentId in queueNodeMap) {\n      const parentInTree = queueNodeMap[parentId];\n      parentInTree.children.push(putIntoMap(mutation, parentInTree));\n      continue;\n    }\n    queueNodeTrees.push(putIntoMap(mutation, null));\n  }\n\n  return queueNodeTrees;\n}\n\nexport function iterateResolveTree(\n  tree: ResolveTree,\n  cb: (mutation: addedNodeMutation) => unknown,\n) {\n  cb(tree.value);\n  /**\n   * The resolve tree was designed to reflect the DOM layout,\n   * but we need append next sibling first, so we do a reverse\n   * loop here.\n   */\n  for (let i = tree.children.length - 1; i >= 0; i--) {\n    iterateResolveTree(tree.children[i], cb);\n  }\n}\n\nexport type AppendedIframe = {\n  mutationInQueue: addedNodeMutation;\n  builtNode: HTMLIFrameElement | RRIFrameElement;\n};\n\nexport function isSerializedIframe<TNode extends Node | RRNode>(\n  n: TNode,\n  mirror: IMirror<TNode>,\n): boolean {\n  return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\n\nexport function isSerializedStylesheet<TNode extends Node | RRNode>(\n  n: TNode,\n  mirror: IMirror<TNode>,\n): boolean {\n  return Boolean(\n    n.nodeName === 'LINK' &&\n      n.nodeType === n.ELEMENT_NODE &&\n      (n as HTMLElement).getAttribute &&\n      (n as HTMLElement).getAttribute('rel') === 'stylesheet' &&\n      mirror.getMeta(n),\n  );\n}\n\nexport function getBaseDimension(\n  node: Node,\n  rootIframe: Node,\n): DocumentDimension {\n  const frameElement = node.ownerDocument?.defaultView?.frameElement;\n  if (!frameElement || frameElement === rootIframe) {\n    return {\n      x: 0,\n      y: 0,\n      relativeScale: 1,\n      absoluteScale: 1,\n    };\n  }\n\n  const frameDimension = frameElement.getBoundingClientRect();\n  const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n  // the iframe element may have a scale transform\n  const relativeScale = frameDimension.height / frameElement.clientHeight;\n  return {\n    x:\n      frameDimension.x * frameBaseDimension.relativeScale +\n      frameBaseDimension.x,\n    y:\n      frameDimension.y * frameBaseDimension.relativeScale +\n      frameBaseDimension.y,\n    relativeScale,\n    absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\n  };\n}\n\nexport function hasShadowRoot<T extends Node | RRNode>(\n  n: T,\n): n is T & { shadowRoot: ShadowRoot } {\n  return Boolean((n as unknown as Element)?.shadowRoot);\n}\n\nexport function getNestedRule(\n  rules: CSSRuleList,\n  position: number[],\n): CSSGroupingRule {\n  const rule = rules[position[0]] as CSSGroupingRule;\n  if (position.length === 1) {\n    return rule;\n  } else {\n    return getNestedRule(\n      (rule.cssRules[position[1]] as CSSGroupingRule).cssRules,\n      position.slice(2),\n    );\n  }\n}\n\nexport function getPositionsAndIndex(nestedIndex: number[]) {\n  const positions = [...nestedIndex];\n  const index = positions.pop();\n  return { positions, index };\n}\n\n/**\n * Returns the latest mutation in the queue for each node.\n * @param mutations - mutations The text mutations to filter.\n * @returns The filtered text mutations.\n */\nexport function uniqueTextMutations(mutations: textMutation[]): textMutation[] {\n  const idSet = new Set<number>();\n  const uniqueMutations: textMutation[] = [];\n\n  for (let i = mutations.length; i--; ) {\n    const mutation = mutations[i];\n    if (!idSet.has(mutation.id)) {\n      uniqueMutations.push(mutation);\n      idSet.add(mutation.id);\n    }\n  }\n\n  return uniqueMutations;\n}\n\nexport class StyleSheetMirror {\n  private id = 1;\n  private styleIDMap = new WeakMap<CSSStyleSheet, number>();\n  private idStyleMap = new Map<number, CSSStyleSheet>();\n\n  getId(stylesheet: CSSStyleSheet): number {\n    return this.styleIDMap.get(stylesheet) ?? -1;\n  }\n\n  has(stylesheet: CSSStyleSheet): boolean {\n    return this.styleIDMap.has(stylesheet);\n  }\n\n  /**\n   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n   */\n  add(stylesheet: CSSStyleSheet, id?: number): number {\n    if (this.has(stylesheet)) return this.getId(stylesheet);\n    let newId: number;\n    if (id === undefined) {\n      newId = this.id++;\n    } else newId = id;\n    this.styleIDMap.set(stylesheet, newId);\n    this.idStyleMap.set(newId, stylesheet);\n    return newId;\n  }\n\n  getStyle(id: number): CSSStyleSheet | null {\n    return this.idStyleMap.get(id) || null;\n  }\n\n  reset(): void {\n    this.styleIDMap = new WeakMap();\n    this.idStyleMap = new Map();\n    this.id = 1;\n  }\n\n  generateId(): number {\n    return this.id++;\n  }\n}\n\n/**\n * Get the direct shadow host of a node in shadow dom. Returns null if it is not in a shadow dom.\n */\nexport function getShadowHost(n: Node): Element | null {\n  let shadowHost: Element | null = null;\n  if (\n    n.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE &&\n    (n.getRootNode() as ShadowRoot).host\n  )\n    shadowHost = (n.getRootNode() as ShadowRoot).host;\n  return shadowHost;\n}\n\n/**\n * Get the root shadow host of a node in nested shadow doms. Returns the node itself if it is not in a shadow dom.\n */\nexport function getRootShadowHost(n: Node): Node {\n  let rootShadowHost: Node = n;\n\n  let shadowHost: Element | null;\n  // If n is in a nested shadow dom.\n  while ((shadowHost = getShadowHost(rootShadowHost)))\n    rootShadowHost = shadowHost;\n\n  return rootShadowHost;\n}\n\nexport function shadowHostInDom(n: Node): boolean {\n  const doc = n.ownerDocument;\n  if (!doc) return false;\n  const shadowHost = getRootShadowHost(n);\n  return doc.contains(shadowHost);\n}\n\nexport function inDom(n: Node): boolean {\n  const doc = n.ownerDocument;\n  if (!doc) return false;\n  return doc.contains(n) || shadowHostInDom(n);\n}\n\n/**\n * We generally want to use window.requestAnimationFrame / window.setTimeout / window.clearTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\ninterface CacheableImplementations {\n  requestAnimationFrame: typeof requestAnimationFrame;\n  setTimeout: typeof setTimeout;\n  clearTimeout: typeof clearTimeout;\n}\n\nconst cachedImplementations: Partial<CacheableImplementations> = {};\n\nfunction getImplementation<T extends keyof CacheableImplementations>(\n  name: T,\n): CacheableImplementations[T] {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n\n  const document = window.document;\n  let impl = window[name] as CacheableImplementations[T];\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl =\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          contentWindow[name] as CacheableImplementations[T];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      // Could not create sandbox iframe, just use window.xxx\n    }\n  }\n\n  return (cachedImplementations[name] = impl.bind(\n    window,\n  ) as CacheableImplementations[T]);\n}\n\nexport function onRequestAnimationFrame(\n  ...rest: Parameters<typeof requestAnimationFrame>\n): ReturnType<typeof requestAnimationFrame> {\n  return getImplementation('requestAnimationFrame')(...rest);\n}\n\nexport function setTimeout(\n  ...rest: Parameters<typeof window.setTimeout>\n): ReturnType<typeof window.setTimeout> {\n  return getImplementation('setTimeout')(...rest);\n}\n\nexport function clearTimeout(\n  ...rest: Parameters<typeof window.clearTimeout>\n): ReturnType<typeof window.clearTimeout> {\n  return getImplementation('clearTimeout')(...rest);\n}\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\nexport {\n  CanvasContext,\n  EventType,\n  IncrementalSource,\n  MediaInteractions,\n  MouseInteractions,\n  PointerTypes,\n  ReplayerEvents\n};\n//# sourceMappingURL=rrweb-types.js.map\n","import type { ErrorHandler } from '../types';\n\ntype Callback = (...args: unknown[]) => unknown;\n\nlet errorHandler: ErrorHandler | undefined;\n\nexport function registerErrorHandler(handler: ErrorHandler | undefined) {\n  errorHandler = handler;\n}\n\nexport function unregisterErrorHandler() {\n  errorHandler = undefined;\n}\n\n/**\n * Wrap callbacks in a wrapper that allows to pass errors to a configured `errorHandler` method.\n */\nexport const callbackWrapper = <T extends Callback>(cb: T): T => {\n  if (!errorHandler) {\n    return cb;\n  }\n\n  const rrwebWrapped = ((...rest: unknown[]) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return () => {\n          // This will get called by `record()`'s cleanup function\n        };\n      }\n\n      throw error;\n    }\n  }) as unknown as T;\n\n  return rrwebWrapped;\n};\n","/*\n * base64-arraybuffer 1.0.2 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2022 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n    var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nvar decode = function (base64) {\n    var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { encode } from 'base64-arraybuffer';\nimport type { IWindow, CanvasArg } from '@sentry-internal/rrweb-types';\n\n// TODO: unify with `replay/webgl.ts`\ntype CanvasVarMap = Map<string, unknown[]>;\nconst canvasVarMap: Map<RenderingContext, CanvasVarMap> = new Map();\nexport function variableListFor(ctx: RenderingContext, ctor: string) {\n  let contextMap = canvasVarMap.get(ctx);\n  if (!contextMap) {\n    contextMap = new Map();\n    canvasVarMap.set(ctx, contextMap);\n  }\n  if (!contextMap.has(ctor)) {\n    contextMap.set(ctor, []);\n  }\n  return contextMap.get(ctor) as unknown[];\n}\n\nexport const saveWebGLVar = (\n  value: unknown,\n  win: IWindow,\n  ctx: RenderingContext,\n): number | void => {\n  if (\n    !value ||\n    !(isInstanceOfWebGLObject(value, win) || typeof value === 'object')\n  )\n    return;\n\n  const name = value.constructor.name;\n  const list = variableListFor(ctx, name);\n  let index = list.indexOf(value);\n\n  if (index === -1) {\n    index = list.length;\n    list.push(value);\n  }\n  return index;\n};\n\n// from webgl-recorder: https://github.com/evanw/webgl-recorder/blob/bef0e65596e981ee382126587e2dcbe0fc7748e2/webgl-recorder.js#L50-L77\nexport function serializeArg(\n  value: unknown,\n  win: IWindow,\n  ctx: RenderingContext,\n): CanvasArg {\n  if (value instanceof Array) {\n    return value.map((arg) => serializeArg(arg, win, ctx));\n  } else if (value === null) {\n    return value;\n  } else if (\n    value instanceof Float32Array ||\n    value instanceof Float64Array ||\n    value instanceof Int32Array ||\n    value instanceof Uint32Array ||\n    value instanceof Uint8Array ||\n    value instanceof Uint16Array ||\n    value instanceof Int16Array ||\n    value instanceof Int8Array ||\n    value instanceof Uint8ClampedArray\n  ) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [Object.values(value)],\n    };\n  } else if (\n    // SharedArrayBuffer disabled on most browsers due to spectre.\n    // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n    // value instanceof SharedArrayBuffer ||\n    value instanceof ArrayBuffer\n  ) {\n    const name = value.constructor.name as 'ArrayBuffer';\n    const base64 = encode(value);\n\n    return {\n      rr_type: name,\n      base64,\n    };\n  } else if (value instanceof DataView) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [\n        serializeArg(value.buffer, win, ctx),\n        value.byteOffset,\n        value.byteLength,\n      ],\n    };\n  } else if (value instanceof HTMLImageElement) {\n    const name = value.constructor.name;\n    const { src } = value;\n    return {\n      rr_type: name,\n      src,\n    };\n  } else if (value instanceof HTMLCanvasElement) {\n    const name = 'HTMLImageElement';\n    // TODO: move `toDataURL` to web worker if possible\n    const src = value.toDataURL(); // heavy on large canvas\n    return {\n      rr_type: name,\n      src,\n    };\n  } else if (value instanceof ImageData) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [serializeArg(value.data, win, ctx), value.width, value.height],\n    };\n    // } else if (value instanceof Blob) {\n    //   const name = value.constructor.name;\n    //   return {\n    //     rr_type: name,\n    //     data: [serializeArg(await value.arrayBuffer(), win, ctx)],\n    //     type: value.type,\n    //   };\n  } else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\n    const name = value.constructor.name;\n    const index = saveWebGLVar(value, win, ctx) as number;\n\n    return {\n      rr_type: name,\n      index: index,\n    };\n  }\n\n  return value as unknown as CanvasArg;\n}\n\nexport const serializeArgs = (\n  args: Array<unknown>,\n  win: IWindow,\n  ctx: RenderingContext,\n) => {\n  return args.map((arg) => serializeArg(arg, win, ctx));\n};\n\nexport const isInstanceOfWebGLObject = (\n  value: unknown,\n  win: IWindow,\n): value is\n  | WebGLActiveInfo\n  | WebGLBuffer\n  | WebGLFramebuffer\n  | WebGLProgram\n  | WebGLRenderbuffer\n  | WebGLShader\n  | WebGLShaderPrecisionFormat\n  | WebGLTexture\n  | WebGLUniformLocation\n  | WebGLVertexArrayObject => {\n  const webGLConstructorNames: string[] = [\n    'WebGLActiveInfo',\n    'WebGLBuffer',\n    'WebGLFramebuffer',\n    'WebGLProgram',\n    'WebGLRenderbuffer',\n    'WebGLShader',\n    'WebGLShaderPrecisionFormat',\n    'WebGLTexture',\n    'WebGLUniformLocation',\n    'WebGLVertexArrayObject',\n    // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n    'WebGLVertexArrayObjectOES',\n  ];\n  const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n    (name: string) => typeof win[name as keyof Window] === 'function',\n  );\n  return Boolean(\n    supportedWebGLConstructorNames.find(\n      (name: string) => value instanceof win[name as keyof Window],\n    ),\n  );\n};\n","import {\n  blockClass,\n  CanvasContext,\n  canvasManagerMutationCallback,\n  IWindow,\n  listenerHandler,\n} from '@sentry-internal/rrweb-types';\nimport { hookSetter, isBlocked, patch, setTimeout } from '../../../utils';\nimport { serializeArgs } from './serialize-args';\n\nexport default function initCanvas2DMutationObserver(\n  cb: canvasManagerMutationCallback,\n  win: IWindow,\n  blockClass: blockClass,\n  blockSelector: string | null,\n  unblockSelector: string | null,\n): listenerHandler {\n  const handlers: listenerHandler[] = [];\n  const props2D = Object.getOwnPropertyNames(\n    win.CanvasRenderingContext2D.prototype,\n  );\n  for (const prop of props2D) {\n    try {\n      if (\n        typeof win.CanvasRenderingContext2D.prototype[\n          prop as keyof CanvasRenderingContext2D\n        ] !== 'function'\n      ) {\n        continue;\n      }\n      const restoreHandler = patch(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        function (\n          original: (\n            this: CanvasRenderingContext2D,\n            ...args: unknown[]\n          ) => void,\n        ) {\n          return function (\n            this: CanvasRenderingContext2D,\n            ...args: Array<unknown>\n          ) {\n            if (\n              !isBlocked(\n                this.canvas,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                true,\n              )\n            ) {\n              // Using setTimeout as toDataURL can be heavy\n              // and we'd rather not block the main thread\n              setTimeout(() => {\n                const recordArgs = serializeArgs(args, win, this);\n                cb(this.canvas, {\n                  type: CanvasContext['2D'],\n                  property: prop,\n                  args: recordArgs,\n                });\n              }, 0);\n            }\n            return original.apply(this, args);\n          };\n        },\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter<CanvasRenderingContext2D>(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        {\n          set(v) {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n            cb(this.canvas, {\n              type: CanvasContext['2D'],\n              property: prop,\n              args: [v],\n              setter: true,\n            });\n          },\n        },\n      );\n      handlers.push(hookHandler);\n    }\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\n","import type { ICanvas } from '@sentry-internal/rrweb-snapshot';\nimport type {\n  blockClass,\n  IWindow,\n  listenerHandler,\n} from '@sentry-internal/rrweb-types';\nimport { isBlocked, patch } from '../../../utils';\n\nfunction getNormalizedContextName(contextType: string) {\n  return contextType === 'experimental-webgl' ? 'webgl' : contextType;\n}\n\nexport default function initCanvasContextObserver(\n  win: IWindow,\n  blockClass: blockClass,\n  blockSelector: string | null,\n  unblockSelector: string | null,\n  setPreserveDrawingBufferToTrue: boolean,\n): listenerHandler {\n  const handlers: listenerHandler[] = [];\n  try {\n    const restoreHandler = patch(\n      win.HTMLCanvasElement.prototype,\n      'getContext',\n      function (\n        original: (\n          this: ICanvas | HTMLCanvasElement,\n          contextType: string,\n          ...args: Array<unknown>\n        ) => void,\n      ) {\n        return function (\n          this: ICanvas | HTMLCanvasElement,\n          contextType: string,\n          ...args: Array<unknown>\n        ) {\n          if (\n            !isBlocked(this, blockClass, blockSelector, unblockSelector, true)\n          ) {\n            const ctxName = getNormalizedContextName(contextType);\n            if (!('__context' in this)) (this as ICanvas).__context = ctxName;\n\n            if (\n              setPreserveDrawingBufferToTrue &&\n              ['webgl', 'webgl2'].includes(ctxName)\n            ) {\n              if (args[0] && typeof args[0] === 'object') {\n                const contextAttributes = args[0] as WebGLContextAttributes;\n                if (!contextAttributes.preserveDrawingBuffer) {\n                  contextAttributes.preserveDrawingBuffer = true;\n                }\n              } else {\n                args.splice(0, 1, {\n                  preserveDrawingBuffer: true,\n                });\n              }\n            }\n          }\n          return original.apply(this, [contextType, ...args]);\n        };\n      },\n    );\n    handlers.push(restoreHandler);\n  } catch {\n    console.error('failed to patch HTMLCanvasElement.prototype.getContext');\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\n","import type { Mirror } from '@sentry-internal/rrweb-snapshot';\nimport {\n  blockClass,\n  CanvasContext,\n  canvasManagerMutationCallback,\n  canvasMutationWithType,\n  IWindow,\n  listenerHandler,\n} from '@sentry-internal/rrweb-types';\nimport { hookSetter, isBlocked, patch } from '../../../utils';\nimport { saveWebGLVar, serializeArgs } from './serialize-args';\n\nfunction patchGLPrototype(\n  prototype: WebGLRenderingContext | WebGL2RenderingContext,\n  type: CanvasContext,\n  cb: canvasManagerMutationCallback,\n  blockClass: blockClass,\n  blockSelector: string | null,\n  unblockSelector: string | null,\n  _mirror: Mirror,\n  win: IWindow,\n): listenerHandler[] {\n  const handlers: listenerHandler[] = [];\n\n  const props = Object.getOwnPropertyNames(prototype);\n\n  for (const prop of props) {\n    if (\n      //prop.startsWith('get') ||  // e.g. getProgramParameter, but too risky\n      [\n        'isContextLost',\n        'canvas',\n        'drawingBufferWidth',\n        'drawingBufferHeight',\n      ].includes(prop)\n    ) {\n      // skip read only propery/functions\n      continue;\n    }\n    try {\n      if (typeof prototype[prop as keyof typeof prototype] !== 'function') {\n        continue;\n      }\n      const restoreHandler = patch(\n        prototype,\n        prop,\n        function (\n          original: (this: typeof prototype, ...args: Array<unknown>) => void,\n        ) {\n          return function (this: typeof prototype, ...args: Array<unknown>) {\n            const result = original.apply(this, args);\n            saveWebGLVar(result, win, this);\n            if (\n              'tagName' in this.canvas &&\n              !isBlocked(\n                this.canvas,\n                blockClass,\n                blockSelector,\n                unblockSelector,\n                true,\n              )\n            ) {\n              const recordArgs = serializeArgs(args, win, this);\n              const mutation: canvasMutationWithType = {\n                type,\n                property: prop,\n                args: recordArgs,\n              };\n              // TODO: this could potentially also be an OffscreenCanvas as well as HTMLCanvasElement\n              cb(this.canvas, mutation);\n            }\n\n            return result;\n          };\n        },\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter<typeof prototype>(prototype, prop, {\n        set(v) {\n          // TODO: this could potentially also be an OffscreenCanvas as well as HTMLCanvasElement\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n          cb(this.canvas as HTMLCanvasElement, {\n            type,\n            property: prop,\n            args: [v],\n            setter: true,\n          });\n        },\n      });\n      handlers.push(hookHandler);\n    }\n  }\n\n  return handlers;\n}\n\nexport default function initCanvasWebGLMutationObserver(\n  cb: canvasManagerMutationCallback,\n  win: IWindow,\n  blockClass: blockClass,\n  blockSelector: string | null,\n  unblockSelector: string | null,\n  mirror: Mirror,\n): listenerHandler {\n  const handlers: listenerHandler[] = [];\n\n  handlers.push(\n    ...patchGLPrototype(\n      win.WebGLRenderingContext.prototype,\n      CanvasContext.WebGL,\n      cb,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      mirror,\n      win,\n    ),\n  );\n\n  if (typeof win.WebGL2RenderingContext !== 'undefined') {\n    handlers.push(\n      ...patchGLPrototype(\n        win.WebGL2RenderingContext.prototype,\n        CanvasContext.WebGL2,\n        cb,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        mirror,\n        win,\n      ),\n    );\n  }\n\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\n","export default `for(var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),a=0;a<64;a++)t[e.charCodeAt(a)]=a;var n=function(t){var a,n=new Uint8Array(t),r=n.length,s=\"\";for(a=0;a<r;a+=3)s+=e[n[a]>>2],s+=e[(3&n[a])<<4|n[a+1]>>4],s+=e[(15&n[a+1])<<2|n[a+2]>>6],s+=e[63&n[a+2]];return r%3==2?s=s.substring(0,s.length-1)+\"=\":r%3==1&&(s=s.substring(0,s.length-2)+\"==\"),s};const r=new Map,s=new Map;const i=self;i.onmessage=async function(e){if(!(\"OffscreenCanvas\"in globalThis))return i.postMessage({id:e.data.id});{const{id:t,bitmap:a,width:o,height:f,maxCanvasSize:c,dataURLOptions:g}=e.data,u=async function(e,t,a){const r=e+\"-\"+t;if(\"OffscreenCanvas\"in globalThis){if(s.has(r))return s.get(r);const i=new OffscreenCanvas(e,t);i.getContext(\"2d\");const o=await i.convertToBlob(a),f=await o.arrayBuffer(),c=n(f);return s.set(r,c),c}return\"\"}(o,f,g),[h,d]=function(e,t,a){if(!a)return[e,t];const[n,r]=a;if(e<=n&&t<=r)return[e,t];let s=e,i=t;return s>n&&(i=Math.floor(n*t/e),s=n),i>r&&(s=Math.floor(r*e/t),i=r),[s,i]}(o,f,c),l=new OffscreenCanvas(h,d),w=l.getContext(\"bitmaprenderer\"),p=h===o&&d===f?a:await createImageBitmap(a,{resizeWidth:h,resizeHeight:d,resizeQuality:\"low\"});w?.transferFromImageBitmap(p),a.close();const y=await l.convertToBlob(g),v=y.type,b=await y.arrayBuffer(),m=n(b);if(p.close(),!r.has(t)&&await u===m)return r.set(t,m),i.postMessage({id:t});if(r.get(t)===m)return i.postMessage({id:t});i.postMessage({id:t,type:v,base64:m,width:o,height:f}),r.set(t,m)}};`;\n","import r from\"./image-bitmap-data-url-worker\";function t(){const t=new Blob([r]);return URL.createObjectURL(t)}export{t as getImageBitmapDataUrlWorkerURL};\n","import type {\n  ICanvas,\n  Mirror,\n  DataURLOptions,\n} from '@sentry-internal/rrweb-snapshot';\nimport type {\n  blockClass,\n  canvasManagerMutationCallback,\n  canvasMutationCallback,\n  canvasMutationCommand,\n  canvasMutationWithType,\n  IWindow,\n  listenerHandler,\n  CanvasArg,\n  ImageBitmapDataURLWorkerResponse,\n} from '@sentry-internal/rrweb-types';\nimport { isBlocked, onRequestAnimationFrame } from '../../../utils';\nimport { CanvasContext } from '@sentry-internal/rrweb-types';\nimport initCanvas2DMutationObserver from './2d';\nimport initCanvasContextObserver from './canvas';\nimport initCanvasWebGLMutationObserver from './webgl';\nimport { getImageBitmapDataUrlWorkerURL } from '@sentry-internal/rrweb-worker';\nimport { callbackWrapper, registerErrorHandler } from '../../error-handler';\nimport type { ErrorHandler } from '../../../types';\n\nexport type RafStamps = { latestId: number; invokeId: number | null };\n\ntype pendingCanvasMutationsMap = Map<\n  HTMLCanvasElement,\n  canvasMutationWithType[]\n>;\ntype MaxCanvasSize = [number, number];\ntype SnapshotOptions = {\n  skipRequestAnimationFrame?: boolean;\n};\n\nexport interface CanvasManagerInterface {\n  reset(): void;\n  freeze(): void;\n  unfreeze(): void;\n  lock(): void;\n  unlock(): void;\n  snapshot(canvasElement?: HTMLCanvasElement, options?: SnapshotOptions): void;\n  addWindow(win: IWindow): void;\n  addShadowRoot(shadowRoot: ShadowRoot): void;\n  resetShadowRoots(): void;\n}\n\nexport interface CanvasManagerConstructorOptions {\n  recordCanvas: boolean;\n  enableManualSnapshot?: boolean;\n  mutationCb: canvasMutationCallback;\n  win: IWindow;\n  blockClass: blockClass;\n  blockSelector: string | null;\n  unblockSelector: string | null;\n  maxCanvasSize?: MaxCanvasSize | null;\n  mirror: Mirror;\n  dataURLOptions: DataURLOptions;\n  errorHandler?: ErrorHandler;\n  sampling?: 'all' | number;\n}\n\nexport class CanvasManagerNoop implements CanvasManagerInterface {\n  public reset() {\n    // noop\n  }\n  public freeze() {\n    // noop\n  }\n  public unfreeze() {\n    // noop\n  }\n  public lock() {\n    // noop\n  }\n  public unlock() {\n    // noop\n  }\n  public snapshot() {\n    // noop\n  }\n  public addWindow() {\n    // noop\n  }\n\n  public addShadowRoot() {\n    // noop\n  }\n\n  public resetShadowRoots() {\n    // noop\n  }\n}\n\nexport class CanvasManager implements CanvasManagerInterface {\n  private pendingCanvasMutations: pendingCanvasMutationsMap = new Map();\n  private rafStamps: RafStamps = { latestId: 0, invokeId: null };\n  private options: CanvasManagerConstructorOptions;\n  private mirror: Mirror;\n\n  private shadowDoms = new Set<WeakRef<ShadowRoot>>();\n  private windowsSet = new WeakSet<IWindow>();\n  private windows: WeakRef<IWindow>[] = [];\n\n  private mutationCb: canvasMutationCallback;\n  private restoreHandlers: listenerHandler[] = [];\n  private frozen = false;\n  private locked = false;\n\n  private snapshotInProgressMap: Map<number, boolean> = new Map();\n  private worker: Worker | null = null;\n\n  private lastSnapshotTime = 0;\n\n  public reset() {\n    this.pendingCanvasMutations.clear();\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e) {\n        //\n      }\n    });\n    this.restoreHandlers = [];\n    this.windowsSet = new WeakSet();\n    this.windows = [];\n    this.shadowDoms = new Set();\n    this.worker?.terminate();\n    this.worker = null;\n    this.snapshotInProgressMap = new Map();\n  }\n\n  public freeze() {\n    this.frozen = true;\n  }\n\n  public unfreeze() {\n    this.frozen = false;\n  }\n\n  public lock() {\n    this.locked = true;\n  }\n\n  public unlock() {\n    this.locked = false;\n  }\n\n  constructor(options: CanvasManagerConstructorOptions) {\n    const {\n      enableManualSnapshot,\n      sampling = 'all',\n      win,\n      recordCanvas,\n      errorHandler,\n    } = options;\n    options.sampling = sampling;\n    this.mutationCb = options.mutationCb;\n    this.mirror = options.mirror;\n    this.options = options;\n\n    if (errorHandler) {\n      registerErrorHandler(errorHandler);\n    }\n    if (\n      (recordCanvas && typeof sampling === 'number') ||\n      enableManualSnapshot\n    ) {\n      this.worker = this.initFPSWorker();\n    }\n    this.addWindow(win);\n\n    if (enableManualSnapshot) {\n      return;\n    }\n\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === 'all') {\n        this.startRAFTimestamping();\n        this.startPendingCanvasMutationFlusher();\n      }\n      if (recordCanvas && typeof sampling === 'number') {\n        this.initCanvasFPSObserver();\n      }\n    })();\n  }\n\n  public addWindow(win: IWindow) {\n    const {\n      sampling = 'all',\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      recordCanvas,\n      enableManualSnapshot,\n    } = this.options;\n    if (this.windowsSet.has(win)) return;\n\n    if (enableManualSnapshot) {\n      this.windowsSet.add(win);\n      this.windows.push(new WeakRef(win));\n      return;\n    }\n\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === 'all') {\n        this.initCanvasMutationObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n        );\n      }\n      if (recordCanvas && typeof sampling === 'number') {\n        const canvasContextReset = initCanvasContextObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true,\n        );\n        this.restoreHandlers.push(() => {\n          canvasContextReset();\n        });\n      }\n    })();\n    this.windowsSet.add(win);\n    this.windows.push(new WeakRef(win));\n  }\n\n  public addShadowRoot(shadowRoot: ShadowRoot) {\n    this.shadowDoms.add(new WeakRef(shadowRoot));\n  }\n\n  public resetShadowRoots() {\n    this.shadowDoms = new Set();\n  }\n\n  public snapshot(\n    canvasElement?: HTMLCanvasElement,\n    options?: SnapshotOptions,\n  ): void {\n    if (options?.skipRequestAnimationFrame) {\n      this.takeSnapshot(performance.now(), true, canvasElement);\n      return;\n    }\n    onRequestAnimationFrame((timestamp) =>\n      this.takeSnapshot(timestamp, true, canvasElement),\n    );\n  }\n\n  private initFPSWorker(): Worker {\n    const worker = new Worker(getImageBitmapDataUrlWorkerURL());\n    worker.onmessage = (e) => {\n      const data = e.data as ImageBitmapDataURLWorkerResponse;\n      const { id } = data;\n      this.snapshotInProgressMap.set(id, false);\n\n      if (!('base64' in data)) return;\n\n      const { base64, type, width, height } = data;\n      this.mutationCb({\n        id,\n        type: CanvasContext['2D'],\n        commands: [\n          {\n            property: 'clearRect', // wipe canvas\n            args: [0, 0, width, height],\n          },\n          {\n            property: 'drawImage', // draws (semi-transparent) image\n            args: [\n              {\n                rr_type: 'ImageBitmap',\n                args: [\n                  {\n                    rr_type: 'Blob',\n                    data: [{ rr_type: 'ArrayBuffer', base64 }],\n                    type,\n                  },\n                ],\n              } as CanvasArg,\n              0,\n              0,\n              // The below args are needed if we enforce a max size, we want to\n              // retain the original size when drawing the image (which should be smaller)\n              width,\n              height,\n            ],\n          },\n        ],\n      });\n    };\n    return worker;\n  }\n\n  private processMutation: canvasManagerMutationCallback = (\n    target,\n    mutation,\n  ) => {\n    const newFrame =\n      this.rafStamps.invokeId &&\n      this.rafStamps.latestId !== this.rafStamps.invokeId;\n    if (newFrame || !this.rafStamps.invokeId)\n      this.rafStamps.invokeId = this.rafStamps.latestId;\n\n    if (!this.pendingCanvasMutations.has(target)) {\n      this.pendingCanvasMutations.set(target, []);\n    }\n\n    this.pendingCanvasMutations.get(target)!.push(mutation);\n  };\n\n  private initCanvasFPSObserver() {\n    let rafId: number;\n\n    if (!this.windows.length && !this.shadowDoms.size) {\n      // If these are empty, then we won't be able to find any canvases to snapshot, so nothing to do here.\n      return;\n    }\n\n    const rafCallback = (timestamp: DOMHighResTimeStamp) => {\n      this.takeSnapshot(timestamp, false);\n      rafId = onRequestAnimationFrame(rafCallback);\n    };\n\n    rafId = onRequestAnimationFrame(rafCallback);\n\n    this.restoreHandlers.push(() => {\n      if (rafId) {\n        cancelAnimationFrame(rafId);\n      }\n    });\n  }\n\n  private initCanvasMutationObserver(\n    win: IWindow,\n    blockClass: blockClass,\n    blockSelector: string | null,\n    unblockSelector: string | null,\n  ): void {\n    const canvasContextReset = initCanvasContextObserver(\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      false,\n    );\n    const canvas2DReset = initCanvas2DMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n    );\n\n    const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      this.mirror,\n    );\n\n    this.restoreHandlers.push(() => {\n      canvasContextReset();\n      canvas2DReset();\n      canvasWebGL1and2Reset();\n    });\n  }\n\n  /**\n   * Returns all `canvas` elements that are not blocked by the given selectors. Searches all windows and shadow roots.\n   */\n  private getCanvasElements(\n    blockClass: blockClass,\n    blockSelector: string | null,\n    unblockSelector: string | null,\n  ): HTMLCanvasElement[] {\n    const matchedCanvas: HTMLCanvasElement[] = [];\n\n    const searchCanvas = (root: Document | ShadowRoot) => {\n      root.querySelectorAll('canvas').forEach((canvas) => {\n        if (\n          !isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)\n        ) {\n          matchedCanvas.push(canvas);\n        }\n      });\n    };\n\n    for (const item of this.windows) {\n      const window = item.deref();\n      let _document: Document | false | undefined;\n\n      try {\n        _document = window && window.document;\n      } catch {\n        // Accessing `window.document` can throw a security error:\n        // \"Failed to read a named property 'document' from 'Window': An\n        // attempt was made to break through the security policy of the user\n        // agent.\"\n      }\n\n      if (_document) {\n        // This is not included in the `try` block above in case `searchCanvas()` throws\n        searchCanvas(_document);\n      }\n    }\n\n    // Search in shadow roots\n    for (const item of this.shadowDoms) {\n      const shadowRoot = item.deref();\n      if (shadowRoot) {\n        searchCanvas(shadowRoot);\n      }\n    }\n\n    return matchedCanvas;\n  }\n\n  /**\n   * Takes a snapshot of the provided canvas element, or will search all windows/shadow roots for canvases. Will self-throttle based on `options.sampling`.\n   *\n   * @returns `true` if the snapshot was taken, `false` if it was throttled.\n   */\n  private takeSnapshot(\n    timestamp: DOMHighResTimeStamp,\n    isManualSnapshot: boolean,\n    canvasElement?: HTMLCanvasElement,\n  ) {\n    const {\n      sampling,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      dataURLOptions,\n      maxCanvasSize,\n    } = this.options;\n    const fps = sampling === 'all' ? 2 : sampling || 2;\n    const timeBetweenSnapshots = 1000 / fps;\n    const shouldThrottle =\n      this.lastSnapshotTime &&\n      timestamp - this.lastSnapshotTime < timeBetweenSnapshots;\n\n    if (shouldThrottle) {\n      return false;\n    }\n\n    this.lastSnapshotTime = timestamp;\n    const canvases = canvasElement\n      ? [canvasElement]\n      : this.getCanvasElements(blockClass, blockSelector, unblockSelector);\n\n    // Process all canvases concurrently\n    canvases.forEach((canvas) => {\n      const id = this.mirror.getId(canvas);\n\n      // Check if canvas is valid and not already being processed\n      if (\n        !this.mirror.hasNode(canvas) ||\n        !canvas.width ||\n        !canvas.height ||\n        this.snapshotInProgressMap.get(id)\n      ) {\n        return;\n      }\n\n      this.snapshotInProgressMap.set(id, true);\n\n      // Handle WebGL context preservation\n      if (\n        !isManualSnapshot &&\n        ['webgl', 'webgl2'].includes((canvas as ICanvas).__context)\n      ) {\n        const context = canvas.getContext((canvas as ICanvas).__context) as\n          | WebGLRenderingContext\n          | WebGL2RenderingContext\n          | null;\n\n        if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\n          // Hack to load canvas back into memory so `createImageBitmap` can grab it's contents.\n          // Context: https://twitter.com/Juice10/status/1499775271758704643\n          // Preferably we set `preserveDrawingBuffer` to true, but that's not always possible,\n          // especially when canvas is loaded before rrweb.\n          // This hack can wipe the background color of the canvas in the (unlikely) event that\n          // the canvas background was changed but clear was not called directly afterwards.\n          // Example of this hack having negative side effect: https://visgl.github.io/react-map-gl/examples/layers\n          context.clear(context.COLOR_BUFFER_BIT);\n        }\n      }\n\n      createImageBitmap(canvas)\n        .then((bitmap) => {\n          this.worker?.postMessage(\n            {\n              id,\n              bitmap,\n              width: canvas.width,\n              height: canvas.height,\n              dataURLOptions,\n              maxCanvasSize,\n            },\n            [bitmap],\n          );\n        })\n        .catch((error) => {\n          callbackWrapper(() => {\n            this.snapshotInProgressMap.delete(id);\n            throw error;\n          })();\n        });\n    });\n\n    return true;\n  }\n\n  private startPendingCanvasMutationFlusher() {\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n\n  private startRAFTimestamping() {\n    const setLatestRAFTimestamp = (timestamp: DOMHighResTimeStamp) => {\n      this.rafStamps.latestId = timestamp;\n      onRequestAnimationFrame(setLatestRAFTimestamp);\n    };\n    onRequestAnimationFrame(setLatestRAFTimestamp);\n  }\n\n  flushPendingCanvasMutations() {\n    this.pendingCanvasMutations.forEach(\n      (_values: canvasMutationCommand[], canvas: HTMLCanvasElement) => {\n        const id = this.mirror.getId(canvas);\n        this.flushPendingCanvasMutationFor(canvas, id);\n      },\n    );\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n\n  flushPendingCanvasMutationFor(canvas: HTMLCanvasElement, id: number) {\n    if (this.frozen || this.locked) {\n      return;\n    }\n\n    const valuesWithType = this.pendingCanvasMutations.get(canvas);\n    if (!valuesWithType || id === -1) return;\n\n    const values = valuesWithType.map((value) => {\n      const { type, ...rest } = value;\n      return rest;\n    });\n    const { type } = valuesWithType[0];\n\n    this.mutationCb({ id, type, commands: values });\n\n    this.pendingCanvasMutations.delete(canvas);\n  }\n}\n"],"names":["cachedImplementations","getImplementation","document","setTimeout","clearTimeout","chars","_Position","nowTimestamp","blockClass","_mirror","t","errorHandler","getImageBitmapDataUrlWorkerURL","window","type"],"mappings":"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","x_google_ignoreList":[4]}