diff --git a/README.md b/README.md index a5b8806895..5ed744111f 100644 --- a/README.md +++ b/README.md @@ -32,20 +32,20 @@ To be able to validate your license and use the plugin, you will also have to ma ## Gulp Tasks -| Command | Description | -|--------------------------------|:--------------------------------------------------------------------------------------------------------------------------------:| -| **CSS Tasks** | | -| `gulp build:saas:unmin` | Builds Full admin CSS, the unminified version (wpr-admin.css) | -| `gulp build:saas:min` | Builds Full admin CSS, the minified version (wpr-admin.min.css) | -| `gulp build:sass:all` | Builds all admin CSS files (wpr-admin.css, wpr-admin.min.css, wpr-admin-rtl.css, wpr-admin-rtl.min.css) | -| `gulp sass:watch` | Watches all admin CSS files mentioned above and builds them again with any change. | -| **JS Tasks** | | -| `gulp build:js:app:unmin` | Builds admin app js file, the unminified version (wpr-admin.js) | -| `gulp build:js:app:min` | Builds admin app js file, the minified version (wpr-admin.min.js) | -| `gulp build:js:lazyloadcss:min` | Builds lazyload CSS js file, the minified version (lazyload-css.min.js) | -| `gulp build:js:lcp` | Builds lcp beacon script, the minified version (lcp-beacon.min.js, source file, and map file) | -| `gulp build:js:all` | Builds all js files mentioned above (wpr-admin.js, wpr-admin.min.js, lazyload-css.min.js, lcp-beacon) | -| `gulp js:watch` | Watches all js files changes and build them again with any change. | +| Command | Description | +|---------------------------------|:-------------------------------------------------------------------------------------------------------:| +| **CSS Tasks** | | +| `gulp build:saas:unmin` | Builds Full admin CSS, the unminified version (wpr-admin.css) | +| `gulp build:saas:min` | Builds Full admin CSS, the minified version (wpr-admin.min.css) | +| `gulp build:sass:all` | Builds all admin CSS files (wpr-admin.css, wpr-admin.min.css, wpr-admin-rtl.css, wpr-admin-rtl.min.css) | +| `gulp sass:watch` | Watches all admin CSS files mentioned above and builds them again with any change. | +| **JS Tasks** | | +| `gulp build:js:app:unmin` | Builds admin app js file, the unminified version (wpr-admin.js) | +| `gulp build:js:app:min` | Builds admin app js file, the minified version (wpr-admin.min.js) | +| `gulp build:js:lazyloadcss:min` | Builds lazyload CSS js file, the minified version (lazyload-css.min.js) | +| `gulp build:js:all` | Builds all js files mentioned above (wpr-admin.js, wpr-admin.min.js, lazyload-css.min.js, wpr-beacon) | +| `gulp build:js:beacon` | Builds beacon script (wpr-beacon.min.js, source file, and map file) | +| `gulp js:watch` | Watches all js files changes and build them again with any change. | ## Support diff --git a/assets/js/lcp-beacon.min.js b/assets/js/lcp-beacon.min.js deleted file mode 100644 index fde1c5b3fc..0000000000 --- a/assets/js/lcp-beacon.min.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{var l=class{constructor(e){this.config=e,this.performanceImages=[],this.errorCode="",this.scriptTimer=new Date,this.infiniteLoopId=null}async init(){if(!await this._isValidPreconditions()){this._finalize();return}this.infiniteLoopId=setTimeout(()=>{this._handleInfiniteLoop()},1e4);try{const e=this._generateLcpCandidates(1/0);e&&(this._initWithFirstElementWithInfo(e),this._fillATFWithoutDuplications(e))}catch(e){this.errorCode="script_error",this._logMessage("Script Error: "+e)}this._saveFinalResultIntoDB()}async _isValidPreconditions(){return this._isNotValidScreensize()?(this._logMessage("Bailing out because screen size is not acceptable"),!1):this._isPageCached()&&await this._isGeneratedBefore()?(this._logMessage("Bailing out because data is already available"),!1):!0}_isPageCached(){const e=document.documentElement.nextSibling&&document.documentElement.nextSibling.data?document.documentElement.nextSibling.data:"";return e&&e.includes("Debug: cached")}async _isGeneratedBefore(){let e=new FormData;return e.append("action","rocket_check_lcp"),e.append("rocket_lcp_nonce",this.config.nonce),e.append("url",this.config.url),e.append("is_mobile",this.config.is_mobile),(await fetch(this.config.ajax_url,{method:"POST",credentials:"same-origin",body:e}).then(t=>t.json())).success}_isNotValidScreensize(){const e=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,t=this.config.is_mobile&&(e>this.config.width_threshold||i>this.config.height_threshold),c=!this.config.is_mobile&&(e{if(n.nodeName.toLowerCase()==="img"&&n.parentElement.nodeName.toLowerCase()==="picture")return null;let s;if(n.nodeName.toLowerCase()==="picture"){const o=n.querySelector("img");if(o)s=o.getBoundingClientRect();else return null}else s=n.getBoundingClientRect();return{element:n,rect:s}}).filter(n=>n!==null).filter(n=>n.rect.width>0&&n.rect.height>0&&this._isIntersecting(n.rect)).map(n=>({item:n,area:this._getElementArea(n.rect),elementInfo:this._getElementInfo(n.element)})).sort((n,s)=>s.area-n.area).slice(0,e).map(n=>({element:n.item.element,elementInfo:n.elementInfo}))}_isIntersecting(e){return e.bottom>=0&&e.right>=0&&e.top<=(window.innerHeight||document.documentElement.clientHeight)&&e.left<=(window.innerWidth||document.documentElement.clientWidth)}_getElementArea(e){const i=Math.min(e.width,(window.innerWidth||document.documentElement.clientWidth)-e.left),t=Math.min(e.height,(window.innerHeight||document.documentElement.clientHeight)-e.top);return i*t}_getElementInfo(e){const i=e.nodeName.toLowerCase(),t={type:"",src:"",srcset:"",sizes:"",sources:[],bg_set:[],current_src:""},c=/url\(\s*?['"]?\s*?(.+?)\s*?["']?\s*?\)/ig;if(i==="img"&&e.srcset)t.type="img-srcset",t.src=e.src,t.srcset=e.srcset,t.sizes=e.sizes,t.current_src=e.currentSrc;else if(i==="img")t.type="img",t.src=e.src,t.current_src=e.currentSrc;else if(i==="video"){t.type="img";const n=e.querySelector("source");t.src=e.poster||(n?n.src:""),t.current_src=t.src}else if(i==="svg"){const n=e.querySelector("image");n&&(t.type="img",t.src=n.getAttribute("href")||"",t.current_src=t.src)}else if(i==="picture"){t.type="picture";const n=e.querySelector("img");t.src=n?n.src:"",t.sources=Array.from(e.querySelectorAll("source")).map(s=>({srcset:s.srcset||"",media:s.media||"",type:s.type||"",sizes:s.sizes||""}))}else{const s=[window.getComputedStyle(e,null).getPropertyValue("background-image"),getComputedStyle(e,":after").getPropertyValue("background-image"),getComputedStyle(e,":before").getPropertyValue("background-image")].filter(r=>r!=="none");if(s.length===0)return null;const o=s[0];if(t.type="bg-img",o.includes("image-set(")&&(t.type="bg-img-set"),!o||o===""||o.includes("data:image"))return null;const a=[...o.matchAll(c)];t.bg_set=a.map(r=>r[1]?{src:r[1].trim()+(r[2]?" "+r[2].trim():"")}:{}),t.bg_set.every(r=>r.src==="")&&(t.bg_set=a.map(r=>r[1]?{src:r[1].trim()}:{})),t.bg_set.length>0&&(t.src=t.bg_set[0].src,t.type==="bg-img-set"&&(t.src=t.bg_set))}return t}_initWithFirstElementWithInfo(e){const i=e.find(t=>t.elementInfo!==null);if(!i){this._logMessage("No LCP candidate found."),this.performanceImages=[];return}this.performanceImages=[{...i.elementInfo,label:"lcp"}]}_fillATFWithoutDuplications(e){e.forEach(({element:i,elementInfo:t})=>{this._isDuplicateImage(i)||!t||this.performanceImages.push({...t,label:"above-the-fold"})})}_isDuplicateImage(e){const i=this._getElementInfo(e);if(i===null)return!1;const t=i.type==="img"||i.type==="img-srcset"||i.type==="video",c=i.type==="bg-img"||i.type==="bg-img-set"||i.type==="picture";return(t||c)&&this.performanceImages.some(n=>n.src===i.src)}_getFinalStatus(){return this.errorCode!==""?this.errorCode:10<=(new Date-this.scriptTimer)/1e3?"timeout":"success"}_saveFinalResultIntoDB(){const e=new FormData;e.append("action","rocket_lcp"),e.append("rocket_lcp_nonce",this.config.nonce),e.append("url",this.config.url),e.append("is_mobile",this.config.is_mobile),e.append("images",JSON.stringify(this.performanceImages)),e.append("status",this._getFinalStatus()),fetch(this.config.ajax_url,{method:"POST",credentials:"same-origin",body:e,headers:{"wpr-saas-no-intercept":!0}}).then(i=>i.json()).then(i=>{this._logMessage(i)}).catch(i=>{this._logMessage(i)}).finally(()=>{this._finalize()})}_handleInfiniteLoop(){this._saveFinalResultIntoDB()}_finalize(){document.querySelector('[data-name="wpr-lcp-beacon"]').setAttribute("beacon-completed","true"),clearTimeout(this.infiniteLoopId)}_logMessage(e){this.config.debug&&console.log(e)}},d=l;(e=>{if(!e)return;const i=new d(e);if(document.readyState!=="loading"){setTimeout(()=>{i.init()},e.delay);return}document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>{i.init()},e.delay)})})(window.rocket_lcp_data)})(); -//# sourceMappingURL=lcp-beacon.min.js.map diff --git a/assets/js/lcp-beacon.min.js.map b/assets/js/lcp-beacon.min.js.map deleted file mode 100644 index 2aa52049bb..0000000000 --- a/assets/js/lcp-beacon.min.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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"] -} diff --git a/assets/js/lcp-beacon.js b/assets/js/wpr-beacon.js similarity index 86% rename from assets/js/lcp-beacon.js rename to assets/js/wpr-beacon.js index 906bd8b516..b503459d0d 100644 --- a/assets/js/lcp-beacon.js +++ b/assets/js/wpr-beacon.js @@ -1,21 +1,12 @@ (() => { - // src/LcpBeacon.js - var LcpBeacon = class { + // src/RocketLcpBeacon.js + var RocketLcpBeacon = class { constructor(config) { this.config = config; this.performanceImages = []; this.errorCode = ""; - this.scriptTimer = /* @__PURE__ */ new Date(); - this.infiniteLoopId = null; } - async init() { - if (!await this._isValidPreconditions()) { - this._finalize(); - return; - } - this.infiniteLoopId = setTimeout(() => { - this._handleInfiniteLoop(); - }, 1e4); + async run() { try { const above_the_fold_images = this._generateLcpCandidates(Infinity); if (above_the_fold_images) { @@ -26,42 +17,6 @@ this.errorCode = "script_error"; this._logMessage("Script Error: " + err); } - this._saveFinalResultIntoDB(); - } - async _isValidPreconditions() { - if (this._isNotValidScreensize()) { - this._logMessage("Bailing out because screen size is not acceptable"); - return false; - } - if (this._isPageCached() && await this._isGeneratedBefore()) { - this._logMessage("Bailing out because data is already available"); - return false; - } - return true; - } - _isPageCached() { - const signature = document.documentElement.nextSibling && document.documentElement.nextSibling.data ? document.documentElement.nextSibling.data : ""; - return signature && signature.includes("Debug: cached"); - } - async _isGeneratedBefore() { - let data_check = new FormData(); - data_check.append("action", "rocket_check_lcp"); - data_check.append("rocket_lcp_nonce", this.config.nonce); - data_check.append("url", this.config.url); - data_check.append("is_mobile", this.config.is_mobile); - const lcp_data_response = await fetch(this.config.ajax_url, { - method: "POST", - credentials: "same-origin", - body: data_check - }).then((data) => data.json()); - return lcp_data_response.success; - } - _isNotValidScreensize() { - const screenWidth = window.innerWidth || document.documentElement.clientWidth; - const screenHeight = window.innerHeight || document.documentElement.clientHeight; - const isNotValidForMobile = this.config.is_mobile && (screenWidth > this.config.width_threshold || screenHeight > this.config.height_threshold); - const isNotValidForDesktop = !this.config.is_mobile && (screenWidth < this.config.width_threshold || screenHeight < this.config.height_threshold); - return isNotValidForMobile || isNotValidForDesktop; } _generateLcpCandidates(count) { const lcpElements = document.querySelectorAll(this.config.elements); @@ -89,7 +44,7 @@ rect }; }).filter((item) => item !== null).filter((item) => { - return item.rect.width > 0 && item.rect.height > 0 && this._isIntersecting(item.rect); + return item.rect.width > 0 && item.rect.height > 0 && RocketBeacon._isIntersecting(item.rect); }).map((item) => ({ item, area: this._getElementArea(item.rect), @@ -100,9 +55,6 @@ elementInfo: candidate.elementInfo })); } - _isIntersecting(rect) { - return rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth); - } _getElementArea(rect) { const visibleWidth = Math.min(rect.width, (window.innerWidth || document.documentElement.clientWidth) - rect.left); const visibleHeight = Math.min(rect.height, (window.innerHeight || document.documentElement.clientHeight) - rect.top); @@ -213,24 +165,89 @@ const isBgImageOrPicture = elementInfo.type === "bg-img" || elementInfo.type === "bg-img-set" || elementInfo.type === "picture"; return (isImageOrVideo || isBgImageOrPicture) && this.performanceImages.some((item) => item.src === elementInfo.src); } - _getFinalStatus() { - if ("" !== this.errorCode) { - return this.errorCode; + _logMessage(msg) { + if (!this.config.debug) { + return; } - const scriptTime = (/* @__PURE__ */ new Date() - this.scriptTimer) / 1e3; - if (10 <= scriptTime) { - return "timeout"; + console.log(msg); + } + getResults() { + return this.performanceImages; + } + }; + var RocketLcpBeacon_default = RocketLcpBeacon; + + // src/RocketBeacon.js + var RocketBeacon2 = class { + constructor(config) { + this.config = config; + this.lcpBeacon = null; + this.infiniteLoopId = null; + this.scriptTimer = /* @__PURE__ */ new Date(); + this.errorCode = ""; + } + async init() { + if (!await this._isValidPreconditions()) { + this._finalize(); + return; } - return "success"; + this.infiniteLoopId = setTimeout(() => { + this._handleInfiniteLoop(); + }, 1e4); + const isGeneratedBefore = await this._isGeneratedBefore(); + if (!isGeneratedBefore.lcp) { + this.lcpBeacon = new RocketLcpBeacon_default(this.config); + await this.lcpBeacon.run(); + } + this._saveFinalResultIntoDB(); + } + async _isValidPreconditions() { + if (this._isNotValidScreensize()) { + this._logMessage("Bailing out because screen size is not acceptable"); + return false; + } + if (this._isPageCached() && await this._isGeneratedBefore()) { + this._logMessage("Bailing out because data is already available"); + return false; + } + return true; + } + _isPageCached() { + const signature = document.documentElement.nextSibling && document.documentElement.nextSibling.data ? document.documentElement.nextSibling.data : ""; + return signature && signature.includes("Debug: cached"); + } + async _isGeneratedBefore() { + let data_check = new FormData(); + data_check.append("action", "rocket_check_beacon"); + data_check.append("rocket_beacon_nonce", this.config.nonce); + data_check.append("url", this.config.url); + data_check.append("is_mobile", this.config.is_mobile); + const beacon_data_response = await fetch(this.config.ajax_url, { + method: "POST", + credentials: "same-origin", + body: data_check + }).then((data) => data.json()); + return beacon_data_response.data; + } + _isNotValidScreensize() { + const screenWidth = window.innerWidth || document.documentElement.clientWidth; + const screenHeight = window.innerHeight || document.documentElement.clientHeight; + const isNotValidForMobile = this.config.is_mobile && (screenWidth > this.config.width_threshold || screenHeight > this.config.height_threshold); + const isNotValidForDesktop = !this.config.is_mobile && (screenWidth < this.config.width_threshold || screenHeight < this.config.height_threshold); + return isNotValidForMobile || isNotValidForDesktop; + } + static _isIntersecting(rect) { + return rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth); } _saveFinalResultIntoDB() { + const lcpResults = this.lcpBeacon ? this.lcpBeacon.getResults() : null; const data = new FormData(); - data.append("action", "rocket_lcp"); - data.append("rocket_lcp_nonce", this.config.nonce); + data.append("action", "rocket_beacon"); + data.append("rocket_beacon_nonce", this.config.nonce); data.append("url", this.config.url); data.append("is_mobile", this.config.is_mobile); - data.append("images", JSON.stringify(this.performanceImages)); data.append("status", this._getFinalStatus()); + data.append("lcp_images", JSON.stringify(lcpResults)); fetch(this.config.ajax_url, { method: "POST", credentials: "same-origin", @@ -246,11 +263,21 @@ this._finalize(); }); } + _getFinalStatus() { + if ("" !== this.errorCode) { + return this.errorCode; + } + const scriptTime = (/* @__PURE__ */ new Date() - this.scriptTimer) / 1e3; + if (10 <= scriptTime) { + return "timeout"; + } + return "success"; + } _handleInfiniteLoop() { this._saveFinalResultIntoDB(); } _finalize() { - const beaconscript = document.querySelector('[data-name="wpr-lcp-beacon"]'); + const beaconscript = document.querySelector('[data-name="wpr-wpr-beacon"]'); beaconscript.setAttribute("beacon-completed", "true"); clearTimeout(this.infiniteLoopId); } @@ -261,24 +288,24 @@ console.log(msg); } }; - var LcpBeacon_default = LcpBeacon; + var RocketBeacon_default = RocketBeacon2; - // src/rocketLcpBeacon.js - ((rocket_lcp_data) => { - if (!rocket_lcp_data) { + // src/RocketFinalBeacon.js + ((rocket_beacon_data) => { + if (!rocket_beacon_data) { return; } - const instance = new LcpBeacon_default(rocket_lcp_data); + const instance = new RocketBeacon_default(rocket_beacon_data); if (document.readyState !== "loading") { setTimeout(() => { instance.init(); - }, rocket_lcp_data.delay); + }, rocket_beacon_data.delay); return; } document.addEventListener("DOMContentLoaded", () => { setTimeout(() => { instance.init(); - }, rocket_lcp_data.delay); + }, rocket_beacon_data.delay); }); - })(window.rocket_lcp_data); + })(window.rocket_beacon_data); })(); diff --git a/assets/js/wpr-beacon.min.js b/assets/js/wpr-beacon.min.js new file mode 100644 index 0000000000..e9f16562eb --- /dev/null +++ b/assets/js/wpr-beacon.min.js @@ -0,0 +1,2 @@ +(()=>{var l=class{constructor(e){this.config=e,this.performanceImages=[],this.errorCode=""}async run(){try{const e=this._generateLcpCandidates(1/0);e&&(this._initWithFirstElementWithInfo(e),this._fillATFWithoutDuplications(e))}catch(e){this.errorCode="script_error",this._logMessage("Script Error: "+e)}}_generateLcpCandidates(e){const i=document.querySelectorAll(this.config.elements);return i.length<=0?[]:Array.from(i).map(n=>{if(n.nodeName.toLowerCase()==="img"&&n.parentElement.nodeName.toLowerCase()==="picture")return null;let s;if(n.nodeName.toLowerCase()==="picture"){const o=n.querySelector("img");if(o)s=o.getBoundingClientRect();else return null}else s=n.getBoundingClientRect();return{element:n,rect:s}}).filter(n=>n!==null).filter(n=>n.rect.width>0&&n.rect.height>0&&RocketBeacon._isIntersecting(n.rect)).map(n=>({item:n,area:this._getElementArea(n.rect),elementInfo:this._getElementInfo(n.element)})).sort((n,s)=>s.area-n.area).slice(0,e).map(n=>({element:n.item.element,elementInfo:n.elementInfo}))}_getElementArea(e){const i=Math.min(e.width,(window.innerWidth||document.documentElement.clientWidth)-e.left),t=Math.min(e.height,(window.innerHeight||document.documentElement.clientHeight)-e.top);return i*t}_getElementInfo(e){const i=e.nodeName.toLowerCase(),t={type:"",src:"",srcset:"",sizes:"",sources:[],bg_set:[],current_src:""},c=/url\(\s*?['"]?\s*?(.+?)\s*?["']?\s*?\)/ig;if(i==="img"&&e.srcset)t.type="img-srcset",t.src=e.src,t.srcset=e.srcset,t.sizes=e.sizes,t.current_src=e.currentSrc;else if(i==="img")t.type="img",t.src=e.src,t.current_src=e.currentSrc;else if(i==="video"){t.type="img";const n=e.querySelector("source");t.src=e.poster||(n?n.src:""),t.current_src=t.src}else if(i==="svg"){const n=e.querySelector("image");n&&(t.type="img",t.src=n.getAttribute("href")||"",t.current_src=t.src)}else if(i==="picture"){t.type="picture";const n=e.querySelector("img");t.src=n?n.src:"",t.sources=Array.from(e.querySelectorAll("source")).map(s=>({srcset:s.srcset||"",media:s.media||"",type:s.type||"",sizes:s.sizes||""}))}else{const s=[window.getComputedStyle(e,null).getPropertyValue("background-image"),getComputedStyle(e,":after").getPropertyValue("background-image"),getComputedStyle(e,":before").getPropertyValue("background-image")].filter(r=>r!=="none");if(s.length===0)return null;const o=s[0];if(t.type="bg-img",o.includes("image-set(")&&(t.type="bg-img-set"),!o||o===""||o.includes("data:image"))return null;const a=[...o.matchAll(c)];t.bg_set=a.map(r=>r[1]?{src:r[1].trim()+(r[2]?" "+r[2].trim():"")}:{}),t.bg_set.every(r=>r.src==="")&&(t.bg_set=a.map(r=>r[1]?{src:r[1].trim()}:{})),t.bg_set.length>0&&(t.src=t.bg_set[0].src,t.type==="bg-img-set"&&(t.src=t.bg_set))}return t}_initWithFirstElementWithInfo(e){const i=e.find(t=>t.elementInfo!==null);if(!i){this._logMessage("No LCP candidate found."),this.performanceImages=[];return}this.performanceImages=[{...i.elementInfo,label:"lcp"}]}_fillATFWithoutDuplications(e){e.forEach(({element:i,elementInfo:t})=>{this._isDuplicateImage(i)||!t||this.performanceImages.push({...t,label:"above-the-fold"})})}_isDuplicateImage(e){const i=this._getElementInfo(e);if(i===null)return!1;const t=i.type==="img"||i.type==="img-srcset"||i.type==="video",c=i.type==="bg-img"||i.type==="bg-img-set"||i.type==="picture";return(t||c)&&this.performanceImages.some(n=>n.src===i.src)}_logMessage(e){this.config.debug&&console.log(e)}getResults(){return this.performanceImages}},g=l,u=class{constructor(e){this.config=e,this.lcpBeacon=null,this.infiniteLoopId=null,this.scriptTimer=new Date,this.errorCode=""}async init(){if(!await this._isValidPreconditions()){this._finalize();return}this.infiniteLoopId=setTimeout(()=>{this._handleInfiniteLoop()},1e4),(await this._isGeneratedBefore()).lcp||(this.lcpBeacon=new g(this.config),await this.lcpBeacon.run()),this._saveFinalResultIntoDB()}async _isValidPreconditions(){return this._isNotValidScreensize()?(this._logMessage("Bailing out because screen size is not acceptable"),!1):this._isPageCached()&&await this._isGeneratedBefore()?(this._logMessage("Bailing out because data is already available"),!1):!0}_isPageCached(){const e=document.documentElement.nextSibling&&document.documentElement.nextSibling.data?document.documentElement.nextSibling.data:"";return e&&e.includes("Debug: cached")}async _isGeneratedBefore(){let e=new FormData;return e.append("action","rocket_check_beacon"),e.append("rocket_beacon_nonce",this.config.nonce),e.append("url",this.config.url),e.append("is_mobile",this.config.is_mobile),(await fetch(this.config.ajax_url,{method:"POST",credentials:"same-origin",body:e}).then(t=>t.json())).data}_isNotValidScreensize(){const e=window.innerWidth||document.documentElement.clientWidth,i=window.innerHeight||document.documentElement.clientHeight,t=this.config.is_mobile&&(e>this.config.width_threshold||i>this.config.height_threshold),c=!this.config.is_mobile&&(e=0&&e.right>=0&&e.top<=(window.innerHeight||document.documentElement.clientHeight)&&e.left<=(window.innerWidth||document.documentElement.clientWidth)}_saveFinalResultIntoDB(){const e=this.lcpBeacon?this.lcpBeacon.getResults():null,i=new FormData;i.append("action","rocket_beacon"),i.append("rocket_beacon_nonce",this.config.nonce),i.append("url",this.config.url),i.append("is_mobile",this.config.is_mobile),i.append("status",this._getFinalStatus()),i.append("lcp_images",JSON.stringify(e)),fetch(this.config.ajax_url,{method:"POST",credentials:"same-origin",body:i,headers:{"wpr-saas-no-intercept":!0}}).then(t=>t.json()).then(t=>{this._logMessage(t)}).catch(t=>{this._logMessage(t)}).finally(()=>{this._finalize()})}_getFinalStatus(){return this.errorCode!==""?this.errorCode:10<=(new Date-this.scriptTimer)/1e3?"timeout":"success"}_handleInfiniteLoop(){this._saveFinalResultIntoDB()}_finalize(){document.querySelector('[data-name="wpr-wpr-beacon"]').setAttribute("beacon-completed","true"),clearTimeout(this.infiniteLoopId)}_logMessage(e){this.config.debug&&console.log(e)}},d=u;(e=>{if(!e)return;const i=new d(e);if(document.readyState!=="loading"){setTimeout(()=>{i.init()},e.delay);return}document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>{i.init()},e.delay)})})(window.rocket_beacon_data)})(); +//# sourceMappingURL=wpr-beacon.min.js.map diff --git a/assets/js/wpr-beacon.min.js.map b/assets/js/wpr-beacon.min.js.map new file mode 100644 index 0000000000..919e8ba0da --- /dev/null +++ b/assets/js/wpr-beacon.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["wpr-beacon.js"], + "sourcesContent": ["(() => {\n // src/RocketLcpBeacon.js\n var RocketLcpBeacon = class {\n constructor(config) {\n this.config = config;\n this.performanceImages = [];\n this.errorCode = \"\";\n }\n async run() {\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 }\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 && RocketBeacon._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 _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 _logMessage(msg) {\n if (!this.config.debug) {\n return;\n }\n console.log(msg);\n }\n getResults() {\n return this.performanceImages;\n }\n };\n var RocketLcpBeacon_default = RocketLcpBeacon;\n\n // src/RocketBeacon.js\n var RocketBeacon2 = class {\n constructor(config) {\n this.config = config;\n this.lcpBeacon = null;\n this.infiniteLoopId = null;\n this.scriptTimer = /* @__PURE__ */ new Date();\n this.errorCode = \"\";\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 const isGeneratedBefore = await this._isGeneratedBefore();\n if (!isGeneratedBefore.lcp) {\n this.lcpBeacon = new RocketLcpBeacon_default(this.config);\n await this.lcpBeacon.run();\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_beacon\");\n data_check.append(\"rocket_beacon_nonce\", this.config.nonce);\n data_check.append(\"url\", this.config.url);\n data_check.append(\"is_mobile\", this.config.is_mobile);\n const beacon_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 beacon_data_response.data;\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 static _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 _saveFinalResultIntoDB() {\n const lcpResults = this.lcpBeacon ? this.lcpBeacon.getResults() : null;\n const data = new FormData();\n data.append(\"action\", \"rocket_beacon\");\n data.append(\"rocket_beacon_nonce\", this.config.nonce);\n data.append(\"url\", this.config.url);\n data.append(\"is_mobile\", this.config.is_mobile);\n data.append(\"status\", this._getFinalStatus());\n data.append(\"lcp_images\", JSON.stringify(lcpResults));\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 _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 _handleInfiniteLoop() {\n this._saveFinalResultIntoDB();\n }\n _finalize() {\n const beaconscript = document.querySelector('[data-name=\"wpr-wpr-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 RocketBeacon_default = RocketBeacon2;\n\n // src/RocketFinalBeacon.js\n ((rocket_beacon_data) => {\n if (!rocket_beacon_data) {\n return;\n }\n const instance = new RocketBeacon_default(rocket_beacon_data);\n if (document.readyState !== \"loading\") {\n setTimeout(() => {\n instance.init();\n }, rocket_beacon_data.delay);\n return;\n }\n document.addEventListener(\"DOMContentLoaded\", () => {\n setTimeout(() => {\n instance.init();\n }, rocket_beacon_data.delay);\n });\n })(window.rocket_beacon_data);\n})();\n"], + "mappings": "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", + "names": ["RocketLcpBeacon", "config", "above_the_fold_images", "err", "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", "msg", "RocketLcpBeacon_default", "RocketBeacon2", "signature", "data_check", "data", "screenWidth", "screenHeight", "isNotValidForMobile", "isNotValidForDesktop", "lcpResults", "response", "data2", "error", "RocketBeacon_default", "rocket_beacon_data", "instance"] +} diff --git a/gulpfile.js b/gulpfile.js index fb34f3def4..d69d1294b2 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -17,8 +17,8 @@ requireDir('./src/js/gulp/tasks', { recurse: true }); * gulp build:js:app:unmin => Builds admin app js file, the unminified version (wpr-admin.js) * gulp build:js:app:min => Builds admin app js file, the minified version (wpr-admin.min.js) * gulp build:js:lazyloadcss:min => Builds lazyload CSS js file, the minified version (lazyload-css.min.js) -* gulp build:js:lcp => Builds lcp beacon script, the minified version (lcp-beacon.min.js, source file, and map file) -* gulp build:js:all => Builds all js files mentioned above (wpr-admin.js, wpr-admin.min.js, lazyload-css.min.js, lcp-beacon) +* gulp build:js:all => Builds all js files mentioned above (wpr-admin.js, wpr-admin.min.js, lazyload-css.min.js, wpr-beacon.min.js) +* gulp build:js:beacon => Builds lcp beacon script, the minified version (wpr-beacon.min.js, source file, and map file) * gulp js:watch => Watches all js files changes and build them again with any change. * */ diff --git a/inc/Engine/Common/PerformanceHints/AJAX/Subscriber.php b/inc/Engine/Common/PerformanceHints/AJAX/Subscriber.php index ec935fbf1a..ef26dc446c 100644 --- a/inc/Engine/Common/PerformanceHints/AJAX/Subscriber.php +++ b/inc/Engine/Common/PerformanceHints/AJAX/Subscriber.php @@ -31,10 +31,10 @@ public function __construct( array $factories ) { */ public static function get_subscribed_events(): array { return [ - 'wp_ajax_rocket_lcp' => 'add_data', - 'wp_ajax_nopriv_rocket_lcp' => 'add_data', - 'wp_ajax_rocket_check_lcp' => 'check_data', - 'wp_ajax_nopriv_rocket_check_lcp' => 'check_data', + 'wp_ajax_rocket_beacon' => 'add_data', + 'wp_ajax_nopriv_rocket_beacon' => 'add_data', + 'wp_ajax_rocket_check_beacon' => 'check_data', + 'wp_ajax_nopriv_rocket_check_beacon' => 'check_data', ]; } diff --git a/inc/Engine/Common/PerformanceHints/Frontend/Processor.php b/inc/Engine/Common/PerformanceHints/Frontend/Processor.php index 1a3dd065e6..c8ea64940d 100644 --- a/inc/Engine/Common/PerformanceHints/Frontend/Processor.php +++ b/inc/Engine/Common/PerformanceHints/Frontend/Processor.php @@ -111,7 +111,7 @@ public function maybe_apply_optimizations( string $html ): string { private function inject_beacon( $html, $url, $is_mobile ): string { $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min'; - if ( ! $this->filesystem->exists( rocket_get_constant( 'WP_ROCKET_ASSETS_JS_PATH' ) . 'lcp-beacon' . $min . '.js' ) ) { + if ( ! $this->filesystem->exists( rocket_get_constant( 'WP_ROCKET_ASSETS_JS_PATH' ) . 'wpr-beacon' . $min . '.js' ) ) { return $html; } diff --git a/inc/Engine/Media/AboveTheFold/AJAX/Controller.php b/inc/Engine/Media/AboveTheFold/AJAX/Controller.php index 6cb1a7d887..24167c4d1b 100644 --- a/inc/Engine/Media/AboveTheFold/AJAX/Controller.php +++ b/inc/Engine/Media/AboveTheFold/AJAX/Controller.php @@ -51,7 +51,7 @@ public function __construct( ATFQuery $query, ContextInterface $context ) { * @return void */ public function add_data(): void { - check_ajax_referer( 'rocket_lcp', 'rocket_lcp_nonce' ); + check_ajax_referer( 'rocket_beacon', 'rocket_beacon_nonce' ); if ( ! $this->context->is_allowed() ) { wp_send_json_error( 'not allowed' ); @@ -60,7 +60,7 @@ public function add_data(): void { $url = isset( $_POST['url'] ) ? untrailingslashit( esc_url_raw( wp_unslash( $_POST['url'] ) ) ) : ''; $is_mobile = isset( $_POST['is_mobile'] ) ? filter_var( wp_unslash( $_POST['is_mobile'] ), FILTER_VALIDATE_BOOLEAN ) : false; - $images = isset( $_POST['images'] ) ? json_decode( wp_unslash( $_POST['images'] ) ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + $images = isset( $_POST['lcp_images'] ) ? json_decode( wp_unslash( $_POST['lcp_images'] ) ) : []; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $lcp = 'not found'; $viewport = []; @@ -241,7 +241,7 @@ private function sanitize_image_url( string $url ) { } /** - * Checks if there is existing LCP data for the current URL and device type. + * Checks if there is existing data for the current URL and device type from the beacon script. * * This method is called via AJAX. It checks if there is existing LCP data for the current URL and device type. * If the data exists, it returns a JSON success response with true. If the data does not exist, it returns a JSON success response with false. @@ -250,7 +250,7 @@ private function sanitize_image_url( string $url ) { * @return void */ public function check_data(): void { - check_ajax_referer( 'rocket_lcp', 'rocket_lcp_nonce' ); + check_ajax_referer( 'rocket_beacon', 'rocket_beacon_nonce' ); if ( ! $this->context->is_allowed() ) { wp_send_json_error( false ); @@ -276,7 +276,7 @@ public function check_data(): void { * @param object $image_object Image full object. * @return bool */ - private function validate_image( $image_object ) { + private function validate_image( $image_object ): bool { $valid_image = ! empty( $image_object->src ) ? $this->validate_image_src( $image_object->src ?? '' ) : true; /** @@ -295,7 +295,7 @@ private function validate_image( $image_object ) { * @param string $image_src Image src url. * @return bool */ - private function validate_image_src( $image_src ) { + private function validate_image_src( string $image_src ): bool { if ( empty( $image_src ) ) { return false; } diff --git a/package-lock.json b/package-lock.json index c1d49b6e54..68aebb1960 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,7 @@ "isomorphic-fetch": "^3.0", "prop-types": "^15.6.2", "react": "^16.5.2", - "react-dom": "^16.5.2", - "wp-rocket-scripts": "^1.0.1" + "react-dom": "^16.5.2" }, "devDependencies": { "@babel/core": "^7.16.0", @@ -44,6 +43,7 @@ "watchify": "^4.0.0", "webpack": "^5.76.0", "webpack-cli": "^4.9.1", + "wp-rocket-scripts": "^1.0.2-alpha", "yargs": "^17.3.0" } }, @@ -74,30 +74,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.8.tgz", - "integrity": "sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.8.tgz", - "integrity": "sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", + "@babel/generator": "^7.24.9", "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", "@babel/helpers": "^7.24.8", "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -131,12 +131,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", - "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", "dev": true, "dependencies": { - "@babel/types": "^7.24.8", + "@babel/types": "^7.24.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -306,9 +306,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", - "integrity": "sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", @@ -1867,9 +1867,9 @@ } }, "node_modules/@babel/types": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", - "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -2203,9 +2203,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2241,9 +2241,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "20.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2745,18 +2745,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", @@ -4054,9 +4042,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001641", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", - "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true, "funding": [ { @@ -4751,15 +4739,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.827", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", - "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "node_modules/elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", + "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", "dev": true, "dependencies": { "bn.js": "^4.11.9", @@ -5214,35 +5202,35 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", - "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", "dev": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -6670,9 +6658,9 @@ } }, "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "node_modules/import-fresh": { @@ -6692,9 +6680,9 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -6923,9 +6911,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -7908,9 +7896,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/normalize-path": { @@ -8042,23 +8030,6 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -9460,6 +9431,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -9621,9 +9602,9 @@ } }, "node_modules/terser": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", - "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -9924,9 +9905,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", + "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==", "dev": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -10746,9 +10727,10 @@ } }, "node_modules/wp-rocket-scripts": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wp-rocket-scripts/-/wp-rocket-scripts-1.0.1.tgz", - "integrity": "sha512-GZyqgCOo2fjMeNfuHDZ3B1ZH2UgeCoI8/Ts9vJbIXxuvSunF+lE+3tLhSfyDnM416KMa23u13S29i8eZ1CR82g==" + "version": "1.0.2-alpha", + "resolved": "https://registry.npmjs.org/wp-rocket-scripts/-/wp-rocket-scripts-1.0.2-alpha.tgz", + "integrity": "sha512-LnP09lxaTDkXef1Wi6+1syqmFsGGk6V982uvliILBJwA8OeBY4zWHAOh/NFIiBcKOkiYYoA+u30Q2xuAF3nvsw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -10892,27 +10874,27 @@ } }, "@babel/compat-data": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.8.tgz", - "integrity": "sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "dev": true }, "@babel/core": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.8.tgz", - "integrity": "sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", + "@babel/generator": "^7.24.9", "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", "@babel/helpers": "^7.24.8", "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -10932,12 +10914,12 @@ } }, "@babel/generator": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", - "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", "dev": true, "requires": { - "@babel/types": "^7.24.8", + "@babel/types": "^7.24.9", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -11065,9 +11047,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", - "integrity": "sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.24.7", @@ -12121,9 +12103,9 @@ } }, "@babel/types": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", - "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.24.8", @@ -12375,9 +12357,9 @@ } }, "@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", "dev": true, "requires": { "@types/estree": "*", @@ -12413,9 +12395,9 @@ "dev": true }, "@types/node": { - "version": "20.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", - "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", + "version": "20.14.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", + "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", "dev": true, "requires": { "undici-types": "~5.26.4" @@ -12818,18 +12800,6 @@ "es-shim-unscopables": "^1.0.0" } }, - "array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", @@ -13986,9 +13956,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001641", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz", - "integrity": "sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true }, "chalk": { @@ -14557,15 +14527,15 @@ } }, "electron-to-chromium": { - "version": "1.4.827", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", - "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.6.tgz", + "integrity": "sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==", "dev": true, "requires": { "bn.js": "^4.11.9", @@ -15032,29 +15002,29 @@ } }, "eslint-plugin-react": { - "version": "7.34.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", - "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", "dev": true, "requires": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "dependencies": { "doctrine": { @@ -16046,9 +16016,9 @@ "dev": true }, "immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "import-fresh": { @@ -16062,9 +16032,9 @@ } }, "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -16232,9 +16202,9 @@ "dev": true }, "is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "requires": { "hasown": "^2.0.2" @@ -16966,9 +16936,9 @@ } }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "normalize-path": { @@ -17061,17 +17031,6 @@ "es-abstract": "^1.23.2" } }, - "object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "requires": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -18151,6 +18110,16 @@ "side-channel": "^1.0.6" } }, + "string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -18270,9 +18239,9 @@ } }, "terser": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz", - "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -18495,9 +18464,9 @@ "dev": true }, "uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.0.tgz", + "integrity": "sha512-wNKHUY2hYYkf6oSFfhwwiHo4WCHzHmzcXsqXYTN9ja3iApYIFbb2U6ics9hBcYLHcYGQoAlwnZlTrf3oF+BL/Q==", "dev": true }, "umd": { @@ -19117,9 +19086,10 @@ "dev": true }, "wp-rocket-scripts": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wp-rocket-scripts/-/wp-rocket-scripts-1.0.1.tgz", - "integrity": "sha512-GZyqgCOo2fjMeNfuHDZ3B1ZH2UgeCoI8/Ts9vJbIXxuvSunF+lE+3tLhSfyDnM416KMa23u13S29i8eZ1CR82g==" + "version": "1.0.2-alpha", + "resolved": "https://registry.npmjs.org/wp-rocket-scripts/-/wp-rocket-scripts-1.0.2-alpha.tgz", + "integrity": "sha512-LnP09lxaTDkXef1Wi6+1syqmFsGGk6V982uvliILBJwA8OeBY4zWHAOh/NFIiBcKOkiYYoA+u30Q2xuAF3nvsw==", + "dev": true }, "wrap-ansi": { "version": "7.0.0", diff --git a/package.json b/package.json index 074cbc60d6..d1eb595ced 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "watchify": "^4.0.0", "webpack": "^5.76.0", "webpack-cli": "^4.9.1", - "wp-rocket-scripts": "^1.0.1", + "wp-rocket-scripts": "^1.0.2-alpha", "yargs": "^17.3.0" } } diff --git a/src/js/gulp/gulpconfig.js b/src/js/gulp/gulpconfig.js index c5c26937e8..a26a242e16 100644 --- a/src/js/gulp/gulpconfig.js +++ b/src/js/gulp/gulpconfig.js @@ -34,7 +34,7 @@ module.exports = { }, { - task: 'build:js:lcp', + task: 'build:js:beacon', method: 'buildLcpBeacon', }, diff --git a/src/js/gulp/tasks/js.js b/src/js/gulp/tasks/js.js index 45344a4b84..0d43613efe 100644 --- a/src/js/gulp/tasks/js.js +++ b/src/js/gulp/tasks/js.js @@ -55,7 +55,7 @@ class gulpJs { } buildLcpBeacon() { - return gulp.src(['./node_modules/wp-rocket-scripts/dist/lcp-beacon*']) + return gulp.src(['./node_modules/wp-rocket-scripts/dist/wpr-beacon*']) .pipe(gulp.dest('./assets/js')); } @@ -64,15 +64,14 @@ class gulpJs { () => this.buildAppUnmin(), () => this.buildAppMin(), () => this.buildLazyloadCssMin(), - () => this.buildLcpBeaconUnMin(), - () => this.buildLcpBeaconMin() + () => this.buildLcpBeacon() ); } watch() { gulp.watch('./src/js/global/*.js', gulp.series( 'build:js:app:unmin', 'build:js:app:min' )); gulp.watch( './src/js/custom/lazyload-css.js', gulp.series( 'build:js:lazyloadcss:min' ) ); - gulp.watch( './assets/js/lcp-beacon.js', gulp.series( 'build:js:lcp:min' ) ); + gulp.watch( './assets/js/wpr-beacon.js', gulp.series( 'build:js:lcp:min' ) ); } } diff --git a/tests/Fixtures/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php b/tests/Fixtures/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php index 61a65ae4b2..3a3caf2c75 100644 --- a/tests/Fixtures/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php +++ b/tests/Fixtures/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php @@ -7,8 +7,8 @@ 'url' => 'http://example.org', 'is_mobile' => false, 'post' => [ - 'rocket_lcp_nonce' => wp_create_nonce( 'rocket_lcp' ), - 'action' => 'rocket_check_lcp', + 'rocket_beacon_nonce' => wp_create_nonce( 'rocket_beacon' ), + 'action' => 'rocket_check_beacon', 'url' => 'http://example.org', 'is_mobile' => false, ], @@ -24,8 +24,8 @@ 'url' => 'http://example.org', 'is_mobile' => false, 'post' => [ - 'rocket_lcp_nonce' => wp_create_nonce( 'rocket_lcp' ), - 'action' => 'rocket_check_lcp', + 'rocket_beacon_nonce' => wp_create_nonce( 'rocket_beacon' ), + 'action' => 'rocket_check_beacon', 'url' => 'http://example.org', 'is_mobile' => false, ], @@ -55,8 +55,8 @@ 'url' => 'http://example.org', 'is_mobile' => false, 'post' => [ - 'rocket_lcp_nonce' => wp_create_nonce( 'rocket_lcp' ), - 'action' => 'rocket_check_lcp', + 'rocket_beacon_nonce' => wp_create_nonce( 'rocket_beacon' ), + 'action' => 'rocket_check_beacon', 'url' => 'http://example.org', 'is_mobile' => false, ], diff --git a/tests/Fixtures/inc/Engine/Common/PerformanceHints/Frontend/Subscriber/HTML/output_w_beacon.html b/tests/Fixtures/inc/Engine/Common/PerformanceHints/Frontend/Subscriber/HTML/output_w_beacon.html index f7c5a8fc66..ddbf862a86 100644 --- a/tests/Fixtures/inc/Engine/Common/PerformanceHints/Frontend/Subscriber/HTML/output_w_beacon.html +++ b/tests/Fixtures/inc/Engine/Common/PerformanceHints/Frontend/Subscriber/HTML/output_w_beacon.html @@ -3,5 +3,5 @@ Test - + diff --git a/tests/Fixtures/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php b/tests/Fixtures/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php index b3d0eaf2dc..b23debf7e8 100644 --- a/tests/Fixtures/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php +++ b/tests/Fixtures/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php @@ -31,7 +31,7 @@ 'filter' => false, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( [] ), + 'lcp_images' => json_encode( [] ), ], 'expected' => [ 'images_valid_sources' => [], @@ -52,7 +52,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'type' => 'img', @@ -112,7 +112,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -190,7 +190,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => true, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -270,7 +270,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -351,7 +351,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -454,7 +454,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -563,7 +563,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( $long_array ), 'filetype' => [ @@ -610,7 +610,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => '', + 'lcp_images' => '', ], 'expected' => [ 'images_valid_sources' => [], @@ -640,7 +640,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -685,7 +685,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => '', + 'lcp_images' => '', 'status' => 'script_error', ], 'expected' => [ @@ -716,7 +716,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => '', + 'lcp_images' => '', 'status' => 'timeout', ], 'expected' => [ @@ -748,7 +748,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -800,7 +800,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -852,7 +852,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -904,7 +904,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -956,7 +956,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', @@ -1008,7 +1008,7 @@ 'filter' => true, 'url' => 'http://example.org', 'is_mobile' => false, - 'images' => json_encode( + 'lcp_images' => json_encode( [ (object) [ 'label' => 'lcp', diff --git a/tests/Fixtures/inc/ThirdParty/Themes/Divi/Integration/disableImageDimensionsHeightPercentage.php b/tests/Fixtures/inc/ThirdParty/Themes/Divi/Integration/disableImageDimensionsHeightPercentage.php index df47d5c52c..ea7ca34b84 100644 --- a/tests/Fixtures/inc/ThirdParty/Themes/Divi/Integration/disableImageDimensionsHeightPercentage.php +++ b/tests/Fixtures/inc/ThirdParty/Themes/Divi/Integration/disableImageDimensionsHeightPercentage.php @@ -11,7 +11,7 @@ ORIGINALHTML; -$nonce = wp_create_nonce( 'rocket_lcp' ); +$nonce = wp_create_nonce( 'rocket_beacon' ); $expected_html = << diff --git a/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/addData.php b/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/addData.php index c2927dd5c1..c14020831c 100644 --- a/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/addData.php +++ b/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/addData.php @@ -17,7 +17,7 @@ public function set_up() { self::installAtfTable(); - $this->action = 'rocket_lcp'; + $this->action = 'rocket_beacon'; } /** @@ -37,8 +37,8 @@ public function tear_down() { * @dataProvider configTestData */ public function testShouldReturnExpected( $config, $expected ) { - $_POST['rocket_lcp_nonce'] = wp_create_nonce( 'rocket_lcp' ); - $_POST['action'] = 'rocket_lcp'; + $_POST['rocket_beacon_nonce'] = wp_create_nonce( 'rocket_beacon' ); + $_POST['action'] = 'rocket_beacon'; $_POST['url'] = $config['url']; $_POST['is_mobile'] = $config['is_mobile']; $_POST['images'] = $config['images']; diff --git a/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php b/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php index 5244c7cac4..e66b937040 100644 --- a/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php +++ b/tests/Integration/inc/Engine/Common/PerformanceHints/AJAX/Subscriber/checkData.php @@ -17,7 +17,7 @@ public function set_up() { self::installAtfTable(); - $this->action = 'rocket_check_lcp'; + $this->action = 'rocket_check_beacon'; } /** diff --git a/tests/Unit/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php b/tests/Unit/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php index a850451ce2..b539e6a8e9 100644 --- a/tests/Unit/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php +++ b/tests/Unit/inc/Engine/Media/AboveTheFold/AJAX/Controller/addData.php @@ -11,11 +11,11 @@ use Brain\Monkey\Filters; /** - * Test class covering WP_Rocket\Engine\Media\AboveTheFold\AJAX\Controller::add_lcp_data + * Test class covering WP_Rocket\Engine\Media\AboveTheFold\AJAX\Controller::add_data * * @group AboveTheFold */ -class Test_AddLcpData extends TestCase { +class Test_AddBeaconData extends TestCase { private $query; private $controller; private $context; @@ -50,13 +50,13 @@ public function testShouldReturnExpected( $config, $expected ) { $_POST = [ 'url' => addslashes( $config['url'] ), 'is_mobile' => addslashes( $config['is_mobile'] ), - 'images' => addslashes( $config['images'] ), + 'lcp_images' => addslashes( $config['lcp_images'] ), 'status' => addslashes( $config['status'] ?? 'success' ), ]; Functions\expect( 'check_ajax_referer' ) ->once() - ->with( 'rocket_lcp', 'rocket_lcp_nonce' ) + ->with( 'rocket_beacon', 'rocket_beacon_nonce' ) ->andReturn( true ); $this->context->shouldReceive( 'is_allowed' )