{ "version": 3, "sources": ["lcp-beacon.js"], "sourcesContent": ["(() => {\n // src/LcpBeacon.js\n var LcpBeacon = class {\n constructor(config) {\n this.config = config;\n this.performanceImages = [];\n this.errorCode = \"\";\n this.scriptTimer = /* @__PURE__ */ new Date();\n this.infiniteLoopId = null;\n }\n async init() {\n if (!await this._isValidPreconditions()) {\n this._finalize();\n return;\n }\n this.infiniteLoopId = setTimeout(() => {\n this._handleInfiniteLoop();\n }, 1e4);\n try {\n const above_the_fold_images = this._generateLcpCandidates(Infinity);\n if (above_the_fold_images) {\n this._initWithFirstElementWithInfo(above_the_fold_images);\n this._fillATFWithoutDuplications(above_the_fold_images);\n }\n } catch (err) {\n this.errorCode = \"script_error\";\n this._logMessage(\"Script Error: \" + err);\n }\n this._saveFinalResultIntoDB();\n }\n async _isValidPreconditions() {\n if (this._isNotValidScreensize()) {\n this._logMessage(\"Bailing out because screen size is not acceptable\");\n return false;\n }\n if (this._isPageCached() && await this._isGeneratedBefore()) {\n this._logMessage(\"Bailing out because data is already available\");\n return false;\n }\n return true;\n }\n _isPageCached() {\n const signature = document.documentElement.nextSibling && document.documentElement.nextSibling.data ? document.documentElement.nextSibling.data : \"\";\n return signature && signature.includes(\"Debug: cached\");\n }\n async _isGeneratedBefore() {\n let data_check = new FormData();\n data_check.append(\"action\", \"rocket_check_lcp\");\n data_check.append(\"rocket_lcp_nonce\", this.config.nonce);\n data_check.append(\"url\", this.config.url);\n data_check.append(\"is_mobile\", this.config.is_mobile);\n const lcp_data_response = await fetch(this.config.ajax_url, {\n method: \"POST\",\n credentials: \"same-origin\",\n body: data_check\n }).then((data) => data.json());\n return lcp_data_response.success;\n }\n _isNotValidScreensize() {\n const screenWidth = window.innerWidth || document.documentElement.clientWidth;\n const screenHeight = window.innerHeight || document.documentElement.clientHeight;\n const isNotValidForMobile = this.config.is_mobile && (screenWidth > this.config.width_threshold || screenHeight > this.config.height_threshold);\n const isNotValidForDesktop = !this.config.is_mobile && (screenWidth < this.config.width_threshold || screenHeight < this.config.height_threshold);\n return isNotValidForMobile || isNotValidForDesktop;\n }\n _generateLcpCandidates(count) {\n const lcpElements = document.querySelectorAll(this.config.elements);\n if (lcpElements.length <= 0) {\n return [];\n }\n const potentialCandidates = Array.from(lcpElements);\n const topCandidates = potentialCandidates.map((element) => {\n if (\"img\" === element.nodeName.toLowerCase() && \"picture\" === element.parentElement.nodeName.toLowerCase()) {\n return null;\n }\n let rect;\n if (\"picture\" === element.nodeName.toLowerCase()) {\n const imgElement = element.querySelector(\"img\");\n if (imgElement) {\n rect = imgElement.getBoundingClientRect();\n } else {\n return null;\n }\n } else {\n rect = element.getBoundingClientRect();\n }\n return {\n element,\n rect\n };\n }).filter((item) => item !== null).filter((item) => {\n return item.rect.width > 0 && item.rect.height > 0 && this._isIntersecting(item.rect);\n }).map((item) => ({\n item,\n area: this._getElementArea(item.rect),\n elementInfo: this._getElementInfo(item.element)\n })).sort((a, b) => b.area - a.area).slice(0, count);\n return topCandidates.map((candidate) => ({\n element: candidate.item.element,\n elementInfo: candidate.elementInfo\n }));\n }\n _isIntersecting(rect) {\n return rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth);\n }\n _getElementArea(rect) {\n const visibleWidth = Math.min(rect.width, (window.innerWidth || document.documentElement.clientWidth) - rect.left);\n const visibleHeight = Math.min(rect.height, (window.innerHeight || document.documentElement.clientHeight) - rect.top);\n return visibleWidth * visibleHeight;\n }\n _getElementInfo(element) {\n const nodeName = element.nodeName.toLowerCase();\n const element_info = {\n type: \"\",\n src: \"\",\n srcset: \"\",\n sizes: \"\",\n sources: [],\n bg_set: [],\n current_src: \"\"\n };\n const css_bg_url_rgx = /url\\(\\s*?['\"]?\\s*?(.+?)\\s*?[\"']?\\s*?\\)/ig;\n if (nodeName === \"img\" && element.srcset) {\n element_info.type = \"img-srcset\";\n element_info.src = element.src;\n element_info.srcset = element.srcset;\n element_info.sizes = element.sizes;\n element_info.current_src = element.currentSrc;\n } else if (nodeName === \"img\") {\n element_info.type = \"img\";\n element_info.src = element.src;\n element_info.current_src = element.currentSrc;\n } else if (nodeName === \"video\") {\n element_info.type = \"img\";\n const source = element.querySelector(\"source\");\n element_info.src = element.poster || (source ? source.src : \"\");\n element_info.current_src = element_info.src;\n } else if (nodeName === \"svg\") {\n const imageElement = element.querySelector(\"image\");\n if (imageElement) {\n element_info.type = \"img\";\n element_info.src = imageElement.getAttribute(\"href\") || \"\";\n element_info.current_src = element_info.src;\n }\n } else if (nodeName === \"picture\") {\n element_info.type = \"picture\";\n const img = element.querySelector(\"img\");\n element_info.src = img ? img.src : \"\";\n element_info.sources = Array.from(element.querySelectorAll(\"source\")).map((source) => ({\n srcset: source.srcset || \"\",\n media: source.media || \"\",\n type: source.type || \"\",\n sizes: source.sizes || \"\"\n }));\n } else {\n const computed_style = window.getComputedStyle(element, null);\n const bg_props = [\n computed_style.getPropertyValue(\"background-image\"),\n getComputedStyle(element, \":after\").getPropertyValue(\"background-image\"),\n getComputedStyle(element, \":before\").getPropertyValue(\"background-image\")\n ].filter((prop) => prop !== \"none\");\n if (bg_props.length === 0) {\n return null;\n }\n const full_bg_prop = bg_props[0];\n element_info.type = \"bg-img\";\n if (full_bg_prop.includes(\"image-set(\")) {\n element_info.type = \"bg-img-set\";\n }\n if (!full_bg_prop || full_bg_prop === \"\" || full_bg_prop.includes(\"data:image\")) {\n return null;\n }\n const matches = [...full_bg_prop.matchAll(css_bg_url_rgx)];\n element_info.bg_set = matches.map((m) => m[1] ? { src: m[1].trim() + (m[2] ? \" \" + m[2].trim() : \"\") } : {});\n if (element_info.bg_set.every((item) => item.src === \"\")) {\n element_info.bg_set = matches.map((m) => m[1] ? { src: m[1].trim() } : {});\n }\n if (element_info.bg_set.length > 0) {\n element_info.src = element_info.bg_set[0].src;\n if (element_info.type === \"bg-img-set\") {\n element_info.src = element_info.bg_set;\n }\n }\n }\n return element_info;\n }\n _initWithFirstElementWithInfo(elements) {\n const firstElementWithInfo = elements.find((item) => item.elementInfo !== null);\n if (!firstElementWithInfo) {\n this._logMessage(\"No LCP candidate found.\");\n this.performanceImages = [];\n return;\n }\n this.performanceImages = [{\n ...firstElementWithInfo.elementInfo,\n label: \"lcp\"\n }];\n }\n _fillATFWithoutDuplications(elements) {\n elements.forEach(({ element, elementInfo }) => {\n if (this._isDuplicateImage(element) || !elementInfo) {\n return;\n }\n this.performanceImages.push({ ...elementInfo, label: \"above-the-fold\" });\n });\n }\n _isDuplicateImage(image) {\n const elementInfo = this._getElementInfo(image);\n if (elementInfo === null) {\n return false;\n }\n const isImageOrVideo = elementInfo.type === \"img\" || elementInfo.type === \"img-srcset\" || elementInfo.type === \"video\";\n const isBgImageOrPicture = elementInfo.type === \"bg-img\" || elementInfo.type === \"bg-img-set\" || elementInfo.type === \"picture\";\n return (isImageOrVideo || isBgImageOrPicture) && this.performanceImages.some((item) => item.src === elementInfo.src);\n }\n _getFinalStatus() {\n if (\"\" !== this.errorCode) {\n return this.errorCode;\n }\n const scriptTime = (/* @__PURE__ */ new Date() - this.scriptTimer) / 1e3;\n if (10 <= scriptTime) {\n return \"timeout\";\n }\n return \"success\";\n }\n _saveFinalResultIntoDB() {\n const data = new FormData();\n data.append(\"action\", \"rocket_lcp\");\n data.append(\"rocket_lcp_nonce\", this.config.nonce);\n data.append(\"url\", this.config.url);\n data.append(\"is_mobile\", this.config.is_mobile);\n data.append(\"images\", JSON.stringify(this.performanceImages));\n data.append(\"status\", this._getFinalStatus());\n fetch(this.config.ajax_url, {\n method: \"POST\",\n credentials: \"same-origin\",\n body: data,\n headers: {\n \"wpr-saas-no-intercept\": true\n }\n }).then((response) => response.json()).then((data2) => {\n this._logMessage(data2);\n }).catch((error) => {\n this._logMessage(error);\n }).finally(() => {\n this._finalize();\n });\n }\n _handleInfiniteLoop() {\n this._saveFinalResultIntoDB();\n }\n _finalize() {\n const beaconscript = document.querySelector('[data-name=\"wpr-lcp-beacon\"]');\n beaconscript.setAttribute(\"beacon-completed\", \"true\");\n clearTimeout(this.infiniteLoopId);\n }\n _logMessage(msg) {\n if (!this.config.debug) {\n return;\n }\n console.log(msg);\n }\n };\n var LcpBeacon_default = LcpBeacon;\n\n // src/rocketLcpBeacon.js\n ((rocket_lcp_data) => {\n if (!rocket_lcp_data) {\n return;\n }\n const instance = new LcpBeacon_default(rocket_lcp_data);\n if (document.readyState !== \"loading\") {\n setTimeout(() => {\n instance.init();\n }, rocket_lcp_data.delay);\n return;\n }\n document.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(() => {\n instance.init();\n }, rocket_lcp_data.delay);\n });\n })(window.rocket_lcp_data);\n})();\n"], "mappings": "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", "names": ["LcpBeacon", "config", "above_the_fold_images", "err", "signature", "data_check", "data", "screenWidth", "screenHeight", "isNotValidForMobile", "isNotValidForDesktop", "count", "lcpElements", "element", "rect", "imgElement", "item", "a", "b", "candidate", "visibleWidth", "visibleHeight", "nodeName", "element_info", "css_bg_url_rgx", "source", "imageElement", "img", "bg_props", "prop", "full_bg_prop", "matches", "m", "elements", "firstElementWithInfo", "elementInfo", "image", "isImageOrVideo", "isBgImageOrPicture", "response", "data2", "error", "msg", "LcpBeacon_default", "rocket_lcp_data", "instance"] }