@applitools/dom-capture 11.0.1 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@
4
4
  ## Unreleased
5
5
 
6
6
 
7
+ ## 11.1.1 - 2022/7/17
8
+
9
+ add special attribute for pseudo elements
10
+
11
+ ## 11.1.0 - 2021/11/30
12
+
13
+ fix scriptVersion in tests and fixture
14
+ bump version to minor for previous css attributes addition
15
+ bump version to minor for previous css attributes addition
16
+ ## 11.0.2 - 2021/11/18
17
+
18
+ add css attributes for layout algorithm
19
+ add css attributes for layout algorithm
7
20
  ## 11.0.1 - 2021/1/30
8
21
 
9
22
  - chore: add tests in docker for DC
package/README.md CHANGED
@@ -161,4 +161,43 @@ Notice how every css resource in the prefix has a corresponding token of the str
161
161
 
162
162
  In order to complete the process of capturing the DOM, the SDK (or other code using this script) should fetch all the css resources, run `JSON.stringify` on the result of each css (this is important for escaping), then replace the token with the escaped css string.
163
163
  In addition, for each cross-origin iframe the `captureDom` script should be run again in the context of the frame, and the same process should
164
- be done recursively. When finalizing the result of a frame, it should then be injected to its parent's result in the corresponding token.
164
+ be done recursively. When finalizing the result of a frame, it should then be injected to its parent's result in the corresponding token.
165
+
166
+ ## `captureDomPoll`
167
+
168
+ This function calls `captureDom` and returns immediately. Then `pollResult` should be called (or any of the `...Poll` script variations, for backwards compatibility) to get the polling result.
169
+
170
+ ### Arguments
171
+
172
+ This function accepts the same arguments as `captureDom`, with one additional parameter:
173
+
174
+ - `chunkByteLength` - this will cause additional polling after the snapshot is ready, and will transfer the result in chunks, with the chunk size specified. Default: undefined.
175
+
176
+ For example, to pass a maximum chunk size of 256MB:
177
+
178
+ ```
179
+ captureDomPoll({chunkByteLength: 1024 * 1024 * 256})
180
+ ```
181
+
182
+ ### Return value
183
+
184
+ The polling result is a stringified JSON object, which is of the following shape:
185
+
186
+ ```js
187
+ {
188
+ status: string,
189
+ error: string,
190
+ value: object
191
+ }
192
+ ```
193
+
194
+ Status could be one of:
195
+
196
+ - "SUCCESS" - there's a `value` field with the return value
197
+ - "ERROR" - there's an `error` field with the result
198
+ - "WIP" - internal status, handled by `pollResult` to continue polling until "SUCCESS" or "ERROR" are received.
199
+ - "SUCCESS_CHUNKED" - internal status, handled by `pollResult` to continue polling until the entire value is received (used with `chunkByteLength`).
200
+
201
+ ## `pollResult`
202
+
203
+ returns the poll result - an object with the same shape as `processPagePoll`.
@@ -1,7 +1,7 @@
1
- /* @applitools/dom-capture@11.0.1 */
1
+ /* @applitools/dom-capture@11.1.1 */
2
2
 
3
3
  function __captureDom() {
4
- var captureDom=function(){"use strict";function e(e,t=0){const n=e.charCodeAt(t);if(n>=55296&&n<56320){return 1024*(n-55296)+(e.charCodeAt(t+1)-56320)+65536}return 56320<=n&&n<=57343?-1:n}var t=function(t,n){const o=[];let r=0;for(let s=0;s<t.length;++s){const a=e(t,s);let c=0;a>0&&(c=a<128?1:a<2048?2:a<65536?3:a<2097152?4:a<67108864?5:6),r+c>n?(o.push(s),r=c):r+=c}return o};const n="WIP",o="SUCCESS",r="SUCCESS_CHUNKED",s="ERROR";var a=function(e,a,c={}){const i=function(e,{chunkByteLength:a=0}={}){if(e){if(e.value){if(a){if(!e.chunks){const n=JSON.stringify(e.value);e.chunks=t(n,a),e.chunks.length>0&&(e.from=0,e.value=n)}if(e.from>=0)return{status:r,value:e.value.substring(e.from,e.from=e.chunks.shift()),done:!e.from}}return{status:o,value:e.value}}return e.error?{status:s,error:e.error}:{status:n}}return{status:s,error:"unexpected poll request received - cannot find state of current operation"}}((e=e||{})[a],c);return(i.status===o||i.status===s||i.status===r&&i.done)&&(e[a]=null),i};var c={chunkify:t,pollify:function(e,t,n){return o=>function(){return t[n]||(t[n]={},e.apply(null,arguments).then(e=>t[n].value=e).catch(e=>t[n].error=e.message)),a(t,n,o)}},poll:a,absolutizeUrl:function(e,t){return new URL(e,t).href},isInlineFrame:function(e){return e.contentDocument&&e.contentDocument.location&&!/^https?:$/.test(e.contentDocument.location.protocol)},isAccessibleFrame:function(e){try{const t=e.contentDocument;return Boolean(t&&t.defaultView&&t.defaultView.frameElement)}catch(e){return!1}}};const i=/url\((?!['"]?:)['"]?([^'")]*)['"]?\)/;var u=function(e){const t=e?e.match(i):void 0;return t?t[1]:t};var l=async function({bgImages:e,timeout:t=5e3,Image:n=window.Image}){return(await Promise.all(Array.from(e).map(e=>{return Promise.race([new Promise(t=>{const o=new n;o.onload=()=>t({url:e,width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>t(),o.src=e}),(o=t,new Promise(e=>{setTimeout(e,o)}))]);var o}))).reduce((e,t)=>(t&&(e[t.url]={width:t.width,height:t.height}),e),{})};function f(e){return Array.prototype.filter.call(e.parentNode.childNodes,t=>t.tagName===e.tagName).indexOf(e)+1}var d=function e(t){if(!t.ownerDocument)return"";let n="",o=t,r=t.ownerDocument,s=r.defaultView.frameElement;for(;o!==r;)n=`${o.tagName}[${f(o)}]/${n}`,o=o.parentNode;return s&&(n=`${e(s)},${n}`),n.replace(/\/$/,"")};var m=function({parseCss:e,CSSImportRule:t,absolutizeUrl:n,getCssFromCache:o,unfetchedToken:r}){return function s(a,c){let i,u="";try{const l=e(a);for(const e of Array.from(l.cssRules))if(e instanceof t){const t=n(e.href,c),a=o(t);if(void 0!==a){const{bundledCss:e,unfetchedResources:n}=s(a,t);n&&(i=new Set(n)),u=`${u}${e}`}else i=new Set([t]),u=`\n${r}${t}${r}`}}catch(e){console.log("error during getBundledCssFromCssText, styleBaseUrl="+c,e)}var l,f;return u=`${u}${l=a,f=c,`\n/** ${f} **/\n${l}`}`,{bundledCss:u,unfetchedResources:i}}};var h=function(e){var t=document.implementation.createHTMLDocument(""),n=t.createElement("style");return n.textContent=e,t.body.appendChild(n),n.sheet};var p=function(e,{fetchTimeLimit:t}={}){return async function(n){const o=new AbortController,r=[e(n,{cache:"force-cache",signal:o.signal}).then(e=>{if(e.ok)return e.text();console.log("/failed to fetch (status "+e.status+") css from: "+n+"/")}).catch(e=>{console.log("/failed to fetch (error "+e.toString()+") css from: "+n+"/")})];return Number.isNaN(Number(t))||r.push(new Promise(e=>setTimeout(e,t)).then(()=>o.abort())),Promise.race(r)}},g=function(e){const t=Array.from(e.attributes).find(e=>"href"===e.name.toLowerCase());return t&&t.value},y=function(e){if(e.nodeName&&"LINK"===e.nodeName.toUpperCase()&&e.attributes){const t=new Map(Array.from(e.attributes,e=>[e.name.toLowerCase(),e.value.toLowerCase()]));return"stylesheet"===t.get("rel")||"style"===t.get("as")&&["preload","prefetch"].includes(t.get("rel"))}return!1};var C=function(e){return e&&e.startsWith("data:")};var w=function({getCssFromCache:e,absolutizeUrl:t}){return function(n,o){let r,s,a;if(function(e){return e.nodeName&&"STYLE"===e.nodeName.toUpperCase()}(n))r=Array.from(n.childNodes).map(e=>e.nodeValue).join(""),s=o;else if(y(n)){const c=g(n);C(c)?(s=o,r=c.match(/,(.+)/)[1]):(s=t(c,o),r=e(s)),a=void 0===r}return{cssText:r,styleBaseUrl:s,isUnfetched:a}}};var E=function({extractCssFromNode:e,getBundledCssFromCssText:t,unfetchedToken:n}){return function(o,r){const{styleBaseUrl:s,cssText:a,isUnfetched:c}=e(o,r);let i,u="";if(a){const{bundledCss:e,unfetchedResources:n}=t(a,s);u+=e,i=new Set(n)}else c&&(u+=`${n}${s}${n}`,i=new Set([s]));return{bundledCss:u,unfetchedResources:i}}},T={EYES_NAMESPACE:"__EYES__APPLITOOLS__",DOM_CAPTURE_KEY:"domCaptureResult",NODE_TYPES:{ELEMENT:1,TEXT:3,DOCUMENT_FRAGMENT:11},DEFAULT_STYLE_PROPS:["background-repeat","background-origin","background-position","background-color","background-image","background-size","border-width","border-color","border-style","color","display","font-size","font-weight","line-height","margin","opacity","overflow","padding","visibility"],DEFAULT_RECT_PROPS:["width","height","top","left"],DEFAULT_IGNORED_TAG_NAMES:["HEAD","SCRIPT"]};const{absolutizeUrl:N,isInlineFrame:S}=c,{NODE_TYPES:b}=T;var v=function(e){return async function(t=document){const n={},o=Date.now(),r=[];return function t(n,o,r,s){function a(t){switch(s.push(async function(t,n,o){let r,s;y(t)&&(s=N(g(t),n),r=await e(s),void 0!==r&&(o[s]=r));r&&await async function t(n,o,r){try{const s=h(n),a=[];for(const n of Array.from(s.cssRules))n instanceof CSSImportRule&&a.push((async()=>{const s=N(n.href,o),a=await e(s);r[s]=a,void 0!==a&&await t(a,s,r)})());await Promise.all(a)}catch(e){console.log("error during fetchBundledCss, resourceUrl="+o,e)}}(r,s,o)}(t,o,r)),t.nodeType){case b.ELEMENT:return"IFRAME"===t.tagName.toUpperCase()?i(t):c(t)}}async function c(e){Array.prototype.map.call(e.childNodes,a)}async function i(e){if(c(e),e.contentDocument)try{const n=S(e)?e.baseURI:e.contentDocument.location.href;t(e.contentDocument,n,r,s)}catch(e){console.log(e)}}a(n.documentElement)}(t,t.location.href,n,r),await Promise.all(r),console.log("[prefetchAllCss]",Date.now()-o),function(e){return n[e]}}};const{absolutizeUrl:A,isInlineFrame:R}=c,{NODE_TYPES:D,DEFAULT_STYLE_PROPS:$,DEFAULT_RECT_PROPS:P,DEFAULT_IGNORED_TAG_NAMES:U}=T;return async function({doc:e=document,styleProps:t=$,rectProps:n=P,ignoredTagNames:o=U,addStats:r=!1,fetchTimeLimit:s=3e4}={}){arguments[1]&&(e=arguments[1]),arguments[2]&&(r=arguments[2]),arguments[3]&&(s=arguments[3]);const a={total:{},prefetchCss:{},doCaptureDoc:{},waitForImages:{}};function c(e){e.startTime=Date.now()}function i(e){e.endTime=Date.now(),e.elapsedTime=e.endTime-e.startTime}const f=[];c(a.total);const g=new Set,y=[],C="@@@@@",T="#####",N="-----";c(a.prefetchCss);const S=v(p(fetch,{fetchTimeLimit:s})),b=await S(e);i(a.prefetchCss);const _=m({parseCss:h,CSSImportRule:CSSImportRule,getCssFromCache:b,absolutizeUrl:A,unfetchedToken:T}),F=w({getCssFromCache:b,absolutizeUrl:A}),k=E({extractCssFromNode:F,getBundledCssFromCssText:_,unfetchedToken:T});c(a.doCaptureDoc);const I=Y(e);i(a.doCaptureDoc),c(a.waitForImages),await Promise.all(f),i(a.waitForImages),I.version="1.3.0",I.scriptVersion="11.0.1";const L=y.length?y.join("\n")+"\n":"",O=g.size?Array.from(g).join("\n")+"\n":"",x=JSON.stringify({separator:N,cssStartToken:T,cssEndToken:T,iframeStartToken:'"'+C,iframeEndToken:C+'"'});function M(){return r?`\n${N}\n${JSON.stringify(a)}`:""}i(a.total);const B=`${x}\n${O}${N}\n${L}${N}\n${JSON.stringify(I)}${M()}`;return console.log("[captureFrame]",JSON.stringify(a)),B;function V(e){return Object.keys(e).length?e:void 0}function z(e){return{tagName:"#text",text:e.textContent}}function Y(e,r=e.location&&e.location.href){const s=new Set;let a="";const c=i(e.documentElement||e);return c.css=a,f.push(l({bgImages:s}).then(e=>c.images=e)),c;function i(e){const{bundledCss:t,unfetchedResources:n}=k(e,r);if(a+=t,n)for(const e of n)g.add(e);switch(e.nodeType){case D.TEXT:return z(e);case D.ELEMENT:return"IFRAME"===e.tagName.toUpperCase()?function(e){const t=m(e);let n;try{n=e.contentDocument}catch(e){return o(),t}try{n?t.childNodes=[Y(n,R(e)?e.baseURI:n.location.href)]:o()}catch(e){console.log("error in iframeToJSON",e)}return t;function o(){const n=d(e);y.push(n),t.childNodes=[`${C}${n}${C}`]}}(e):m(e);case D.DOCUMENT_FRAGMENT:return{childNodes:Array.prototype.map.call(e.childNodes,i).filter(Boolean)};default:return null}}function m(e){const a=Array.prototype.map.call(e.childNodes,i).filter(Boolean),c=e.shadowRoot&&Y(e.shadowRoot,r),l=e.tagName.toUpperCase();if(o.indexOf(l)>-1)return null;const f=window.getComputedStyle(e),d=e.getBoundingClientRect(),m={};for(const e of t)m[e]=f.getPropertyValue(e);m["border-width"]||(m["border-width"]=`${f.getPropertyValue("border-top-width")} ${f.getPropertyValue("border-right-width")} ${f.getPropertyValue("border-bottom-width")} ${f.getPropertyValue("border-left-width")}`);const h={};for(const e of n)h[e]=d[e];const p=Array.from(e.attributes).map(e=>({key:e.name,value:e.value})).reduce((e,t)=>(e[t.key]=t.value,e),{}),g=u(f.getPropertyValue("background-image"));g&&s.add(g);const y={tagName:l,style:V(m),rect:V(h),attributes:V(p),childNodes:a};return c&&(y.shadowRoot=c),y}}}}();
4
+ var captureDom=function(){"use strict";function e(e,t=0){const n=e.charCodeAt(t);if(n>=55296&&n<56320){return 1024*(n-55296)+(e.charCodeAt(t+1)-56320)+65536}return 56320<=n&&n<=57343?-1:n}var t=function(t,n){const o=[];let r=0;for(let s=0;s<t.length;++s){const a=e(t,s);let c=0;a>0&&(c=a<128?1:a<2048?2:a<65536?3:a<2097152?4:a<67108864?5:6),r+c>n?(o.push(s),r=c):r+=c}return o};const n="WIP",o="SUCCESS",r="SUCCESS_CHUNKED",s="ERROR";var a=function(e,a,c={}){const i=function(e,{chunkByteLength:a=0}={}){if(e){if(e.value){if(a){if(!e.chunks){const n=JSON.stringify(e.value);e.chunks=t(n,a),e.chunks.length>0&&(e.from=0,e.value=n)}if(e.from>=0)return{status:r,value:e.value.substring(e.from,e.from=e.chunks.shift()),done:!e.from}}return{status:o,value:e.value}}return e.error?{status:s,error:e.error}:{status:n}}return{status:s,error:"unexpected poll request received - cannot find state of current operation"}}((e=e||{})[a],c);return(i.status===o||i.status===s||i.status===r&&i.done)&&(e[a]=null),i};var c={chunkify:t,pollify:function(e,t,n){return o=>function(){return t[n]||(t[n]={},e.apply(null,arguments).then(e=>t[n].value=e).catch(e=>t[n].error=e.message)),a(t,n,o)}},poll:a,absolutizeUrl:function(e,t){return new URL(e,t).href},isInlineFrame:function(e){return e.contentDocument&&e.contentDocument.location&&!/^https?:$/.test(e.contentDocument.location.protocol)},isAccessibleFrame:function(e){try{const t=e.contentDocument;return Boolean(t&&t.defaultView&&t.defaultView.frameElement)}catch(e){return!1}}};const i=/url\((?!['"]?:)['"]?([^'")]*)['"]?\)/;var u=function(e){const t=e?e.match(i):void 0;return t?t[1]:t};var l=async function({bgImages:e,timeout:t=5e3,Image:n=window.Image}){return(await Promise.all(Array.from(e).map(e=>{return Promise.race([new Promise(t=>{const o=new n;o.onload=()=>t({url:e,width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>t(),o.src=e}),(o=t,new Promise(e=>{setTimeout(e,o)}))]);var o}))).reduce((e,t)=>(t&&(e[t.url]={width:t.width,height:t.height}),e),{})};function f(e){return Array.prototype.filter.call(e.parentNode.childNodes,t=>t.tagName===e.tagName).indexOf(e)+1}var d=function e(t){if(!t.ownerDocument)return"";let n="",o=t,r=t.ownerDocument,s=r.defaultView.frameElement;for(;o!==r;)n=`${o.tagName}[${f(o)}]/${n}`,o=o.parentNode;return s&&(n=`${e(s)},${n}`),n.replace(/\/$/,"")};var m=function({parseCss:e,CSSImportRule:t,absolutizeUrl:n,getCssFromCache:o,unfetchedToken:r}){return function s(a,c){let i,u="";try{const l=e(a);for(const e of Array.from(l.cssRules))if(e instanceof t){const t=n(e.href,c),a=o(t);if(void 0!==a){const{bundledCss:e,unfetchedResources:n}=s(a,t);n&&(i=new Set(n)),u=`${u}${e}`}else i=new Set([t]),u=`\n${r}${t}${r}`}}catch(e){console.log("error during getBundledCssFromCssText, styleBaseUrl="+c,e)}var l,f;return u=`${u}${l=a,f=c,`\n/** ${f} **/\n${l}`}`,{bundledCss:u,unfetchedResources:i}}};var h=function(e){var t=document.implementation.createHTMLDocument(""),n=t.createElement("style");return n.textContent=e,t.body.appendChild(n),n.sheet};var p=function(e){const t=["before","after"];try{let n=[];return t.forEach(t=>{const o=window.getComputedStyle(e,":"+t);o&&"none"!==o.getPropertyValue("content")&&n.push(t)}),n.join("_and_")}catch(e){return!1}};var g=function(e,{fetchTimeLimit:t}={}){return async function(n){const o=new AbortController,r=[e(n,{cache:"force-cache",signal:o.signal}).then(e=>{if(e.ok)return e.text();console.log("/failed to fetch (status "+e.status+") css from: "+n+"/")}).catch(e=>{console.log("/failed to fetch (error "+e.toString()+") css from: "+n+"/")})];return Number.isNaN(Number(t))||r.push(new Promise(e=>setTimeout(e,t)).then(()=>o.abort())),Promise.race(r)}},y=function(e){const t=Array.from(e.attributes).find(e=>"href"===e.name.toLowerCase());return t&&t.value},C=function(e){if(e.nodeName&&"LINK"===e.nodeName.toUpperCase()&&e.attributes){const t=new Map(Array.from(e.attributes,e=>[e.name.toLowerCase(),e.value.toLowerCase()]));return"stylesheet"===t.get("rel")||"style"===t.get("as")&&["preload","prefetch"].includes(t.get("rel"))}return!1};var w=function(e){return e&&e.startsWith("data:")};var E=function({getCssFromCache:e,absolutizeUrl:t}){return function(n,o){let r,s,a;if(function(e){return e.nodeName&&"STYLE"===e.nodeName.toUpperCase()}(n))r=Array.from(n.childNodes).map(e=>e.nodeValue).join(""),s=o;else if(C(n)){const c=y(n);w(c)?(s=o,r=c.match(/,(.+)/)[1]):(s=t(c,o),r=e(s)),a=void 0===r}return{cssText:r,styleBaseUrl:s,isUnfetched:a}}};var T=function({extractCssFromNode:e,getBundledCssFromCssText:t,unfetchedToken:n}){return function(o,r){const{styleBaseUrl:s,cssText:a,isUnfetched:c}=e(o,r);let i,u="";if(a){const{bundledCss:e,unfetchedResources:n}=t(a,s);u+=e,i=new Set(n)}else c&&(u+=`${n}${s}${n}`,i=new Set([s]));return{bundledCss:u,unfetchedResources:i}}},N={EYES_NAMESPACE:"__EYES__APPLITOOLS__",DOM_CAPTURE_KEY:"domCaptureResult",NODE_TYPES:{ELEMENT:1,TEXT:3,DOCUMENT_FRAGMENT:11},DEFAULT_STYLE_PROPS:["background-repeat","background-origin","background-position","background-color","background-image","background-size","border-width","border-color","border-style","color","display","font-size","font-weight","line-height","margin","opacity","overflow","padding","visibility","text-align","position","border-radius","z-index"],DEFAULT_RECT_PROPS:["width","height","top","left"],DEFAULT_IGNORED_TAG_NAMES:["HEAD","SCRIPT"]};const{absolutizeUrl:b,isInlineFrame:S}=c,{NODE_TYPES:v}=N;var A=function(e){return async function(t=document){const n={},o=Date.now(),r=[];return function t(n,o,r,s){function a(t){switch(s.push(async function(t,n,o){let r,s;C(t)&&(s=b(y(t),n),r=await e(s),void 0!==r&&(o[s]=r));r&&await async function t(n,o,r){try{const s=h(n),a=[];for(const n of Array.from(s.cssRules))n instanceof CSSImportRule&&a.push((async()=>{const s=b(n.href,o),a=await e(s);r[s]=a,void 0!==a&&await t(a,s,r)})());await Promise.all(a)}catch(e){console.log("error during fetchBundledCss, resourceUrl="+o,e)}}(r,s,o)}(t,o,r)),t.nodeType){case v.ELEMENT:return"IFRAME"===t.tagName.toUpperCase()?i(t):c(t)}}async function c(e){Array.prototype.map.call(e.childNodes,a)}async function i(e){if(c(e),e.contentDocument)try{const n=S(e)?e.baseURI:e.contentDocument.location.href;t(e.contentDocument,n,r,s)}catch(e){console.log(e)}}a(n.documentElement)}(t,t.location.href,n,r),await Promise.all(r),console.log("[prefetchAllCss]",Date.now()-o),function(e){return n[e]}}};const{absolutizeUrl:R,isInlineFrame:D}=c,{NODE_TYPES:P,DEFAULT_STYLE_PROPS:$,DEFAULT_RECT_PROPS:U,DEFAULT_IGNORED_TAG_NAMES:_}=N;return async function({doc:e=document,styleProps:t=$,rectProps:n=U,ignoredTagNames:o=_,addStats:r=!1,fetchTimeLimit:s=3e4}={}){arguments[1]&&(e=arguments[1]),arguments[2]&&(r=arguments[2]),arguments[3]&&(s=arguments[3]);const a={total:{},prefetchCss:{},doCaptureDoc:{},waitForImages:{}};function c(e){e.startTime=Date.now()}function i(e){e.endTime=Date.now(),e.elapsedTime=e.endTime-e.startTime}const f=[];c(a.total);const y=new Set,C=[],w="@@@@@",N="#####",b="-----";c(a.prefetchCss);const S=A(g(fetch,{fetchTimeLimit:s})),v=await S(e);i(a.prefetchCss);const F=m({parseCss:h,CSSImportRule:CSSImportRule,getCssFromCache:v,absolutizeUrl:R,unfetchedToken:N}),k=E({getCssFromCache:v,absolutizeUrl:R}),I=T({extractCssFromNode:k,getBundledCssFromCssText:F,unfetchedToken:N});c(a.doCaptureDoc);const L=G(e);i(a.doCaptureDoc),c(a.waitForImages),await Promise.all(f),i(a.waitForImages),L.version="1.3.0",L.scriptVersion="11.1.1";const O=C.length?C.join("\n")+"\n":"",x=y.size?Array.from(y).join("\n")+"\n":"",M=JSON.stringify({separator:b,cssStartToken:N,cssEndToken:N,iframeStartToken:'"'+w,iframeEndToken:w+'"'});function B(){return r?`\n${b}\n${JSON.stringify(a)}`:""}i(a.total);const V=`${M}\n${x}${b}\n${O}${b}\n${JSON.stringify(L)}${B()}`;return console.log("[captureFrame]",JSON.stringify(a)),V;function z(e){return Object.keys(e).length?e:void 0}function Y(e){return{tagName:"#text",text:e.textContent}}function G(e,r=e.location&&e.location.href){const s=new Set;let a="";const c=i(e.documentElement||e);return c.css=a,f.push(l({bgImages:s}).then(e=>c.images=e)),c;function i(e){const{bundledCss:t,unfetchedResources:n}=I(e,r);if(a+=t,n)for(const e of n)y.add(e);switch(e.nodeType){case P.TEXT:return Y(e);case P.ELEMENT:return"IFRAME"===e.tagName.toUpperCase()?function(e){const t=m(e);let n;try{n=e.contentDocument}catch(e){return o(),t}try{n?t.childNodes=[G(n,D(e)?e.baseURI:n.location.href)]:o()}catch(e){console.log("error in iframeToJSON",e)}return t;function o(){const n=d(e);C.push(n),t.childNodes=[`${w}${n}${w}`]}}(e):m(e);case P.DOCUMENT_FRAGMENT:return{childNodes:Array.prototype.map.call(e.childNodes,i).filter(Boolean)};default:return null}}function m(e){const a=Array.prototype.map.call(e.childNodes,i).filter(Boolean),c=e.shadowRoot&&G(e.shadowRoot,r),l=e.tagName.toUpperCase();if(o.indexOf(l)>-1)return null;const f=window.getComputedStyle(e),d=e.getBoundingClientRect(),m={};for(const e of t)m[e]=f.getPropertyValue(e);m["border-width"]||(m["border-width"]=`${f.getPropertyValue("border-top-width")} ${f.getPropertyValue("border-right-width")} ${f.getPropertyValue("border-bottom-width")} ${f.getPropertyValue("border-left-width")}`);const h={};for(const e of n)h[e]=d[e];const g=Array.from(e.attributes).map(e=>({key:e.name,value:e.value})).reduce((e,t)=>(e[t.key]=t.value,e),{}),y=u(f.getPropertyValue("background-image"));y&&s.add(y);const C=p(e);C&&(g["data-applitools-has-pseudo"]=C);const w={tagName:l,style:z(m),rect:z(h),attributes:z(g),childNodes:a};return c&&(w.shadowRoot=c),w}}}}();
5
5
 
6
6
  return captureDom.apply(this, arguments);
7
7
  }
@@ -1,7 +1,7 @@
1
- /* @applitools/dom-capture@11.0.1 */
1
+ /* @applitools/dom-capture@11.1.1 */
2
2
 
3
3
  function __captureDomAndPoll() {
4
- var captureDomAndPoll=function(){"use strict";function e(e,t=0){const n=e.charCodeAt(t);if(n>=55296&&n<56320){return 1024*(n-55296)+(e.charCodeAt(t+1)-56320)+65536}return 56320<=n&&n<=57343?-1:n}var t=function(t,n){const o=[];let r=0;for(let s=0;s<t.length;++s){const a=e(t,s);let c=0;a>0&&(c=a<128?1:a<2048?2:a<65536?3:a<2097152?4:a<67108864?5:6),r+c>n?(o.push(s),r=c):r+=c}return o};const n="WIP",o="SUCCESS",r="SUCCESS_CHUNKED",s="ERROR";var a=function(e,a,c={}){const i=function(e,{chunkByteLength:a=0}={}){if(e){if(e.value){if(a){if(!e.chunks){const n=JSON.stringify(e.value);e.chunks=t(n,a),e.chunks.length>0&&(e.from=0,e.value=n)}if(e.from>=0)return{status:r,value:e.value.substring(e.from,e.from=e.chunks.shift()),done:!e.from}}return{status:o,value:e.value}}return e.error?{status:s,error:e.error}:{status:n}}return{status:s,error:"unexpected poll request received - cannot find state of current operation"}}((e=e||{})[a],c);return(i.status===o||i.status===s||i.status===r&&i.done)&&(e[a]=null),i};var c={chunkify:t,pollify:function(e,t,n){return o=>function(){return t[n]||(t[n]={},e.apply(null,arguments).then(e=>t[n].value=e).catch(e=>t[n].error=e.message)),a(t,n,o)}},poll:a,absolutizeUrl:function(e,t){return new URL(e,t).href},isInlineFrame:function(e){return e.contentDocument&&e.contentDocument.location&&!/^https?:$/.test(e.contentDocument.location.protocol)},isAccessibleFrame:function(e){try{const t=e.contentDocument;return Boolean(t&&t.defaultView&&t.defaultView.frameElement)}catch(e){return!1}}},i={EYES_NAMESPACE:"__EYES__APPLITOOLS__",DOM_CAPTURE_KEY:"domCaptureResult",NODE_TYPES:{ELEMENT:1,TEXT:3,DOCUMENT_FRAGMENT:11},DEFAULT_STYLE_PROPS:["background-repeat","background-origin","background-position","background-color","background-image","background-size","border-width","border-color","border-style","color","display","font-size","font-weight","line-height","margin","opacity","overflow","padding","visibility"],DEFAULT_RECT_PROPS:["width","height","top","left"],DEFAULT_IGNORED_TAG_NAMES:["HEAD","SCRIPT"]};const u=/url\((?!['"]?:)['"]?([^'")]*)['"]?\)/;var l=function(e){const t=e?e.match(u):void 0;return t?t[1]:t};var f=async function({bgImages:e,timeout:t=5e3,Image:n=window.Image}){return(await Promise.all(Array.from(e).map(e=>{return Promise.race([new Promise(t=>{const o=new n;o.onload=()=>t({url:e,width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>t(),o.src=e}),(o=t,new Promise(e=>{setTimeout(e,o)}))]);var o}))).reduce((e,t)=>(t&&(e[t.url]={width:t.width,height:t.height}),e),{})};function d(e){return Array.prototype.filter.call(e.parentNode.childNodes,t=>t.tagName===e.tagName).indexOf(e)+1}var m=function e(t){if(!t.ownerDocument)return"";let n="",o=t,r=t.ownerDocument,s=r.defaultView.frameElement;for(;o!==r;)n=`${o.tagName}[${d(o)}]/${n}`,o=o.parentNode;return s&&(n=`${e(s)},${n}`),n.replace(/\/$/,"")};var h=function({parseCss:e,CSSImportRule:t,absolutizeUrl:n,getCssFromCache:o,unfetchedToken:r}){return function s(a,c){let i,u="";try{const l=e(a);for(const e of Array.from(l.cssRules))if(e instanceof t){const t=n(e.href,c),a=o(t);if(void 0!==a){const{bundledCss:e,unfetchedResources:n}=s(a,t);n&&(i=new Set(n)),u=`${u}${e}`}else i=new Set([t]),u=`\n${r}${t}${r}`}}catch(e){console.log("error during getBundledCssFromCssText, styleBaseUrl="+c,e)}var l,f;return u=`${u}${l=a,f=c,`\n/** ${f} **/\n${l}`}`,{bundledCss:u,unfetchedResources:i}}};var p=function(e){var t=document.implementation.createHTMLDocument(""),n=t.createElement("style");return n.textContent=e,t.body.appendChild(n),n.sheet};var g=function(e,{fetchTimeLimit:t}={}){return async function(n){const o=new AbortController,r=[e(n,{cache:"force-cache",signal:o.signal}).then(e=>{if(e.ok)return e.text();console.log("/failed to fetch (status "+e.status+") css from: "+n+"/")}).catch(e=>{console.log("/failed to fetch (error "+e.toString()+") css from: "+n+"/")})];return Number.isNaN(Number(t))||r.push(new Promise(e=>setTimeout(e,t)).then(()=>o.abort())),Promise.race(r)}},y=function(e){const t=Array.from(e.attributes).find(e=>"href"===e.name.toLowerCase());return t&&t.value},C=function(e){if(e.nodeName&&"LINK"===e.nodeName.toUpperCase()&&e.attributes){const t=new Map(Array.from(e.attributes,e=>[e.name.toLowerCase(),e.value.toLowerCase()]));return"stylesheet"===t.get("rel")||"style"===t.get("as")&&["preload","prefetch"].includes(t.get("rel"))}return!1};var w=function(e){return e&&e.startsWith("data:")};var E=function({getCssFromCache:e,absolutizeUrl:t}){return function(n,o){let r,s,a;if(function(e){return e.nodeName&&"STYLE"===e.nodeName.toUpperCase()}(n))r=Array.from(n.childNodes).map(e=>e.nodeValue).join(""),s=o;else if(C(n)){const c=y(n);w(c)?(s=o,r=c.match(/,(.+)/)[1]):(s=t(c,o),r=e(s)),a=void 0===r}return{cssText:r,styleBaseUrl:s,isUnfetched:a}}};var T=function({extractCssFromNode:e,getBundledCssFromCssText:t,unfetchedToken:n}){return function(o,r){const{styleBaseUrl:s,cssText:a,isUnfetched:c}=e(o,r);let i,u="";if(a){const{bundledCss:e,unfetchedResources:n}=t(a,s);u+=e,i=new Set(n)}else c&&(u+=`${n}${s}${n}`,i=new Set([s]));return{bundledCss:u,unfetchedResources:i}}};const{absolutizeUrl:N,isInlineFrame:S}=c,{NODE_TYPES:b}=i;var v=function(e){return async function(t=document){const n={},o=Date.now(),r=[];return function t(n,o,r,s){function a(t){switch(s.push(async function(t,n,o){let r,s;C(t)&&(s=N(y(t),n),r=await e(s),void 0!==r&&(o[s]=r));r&&await async function t(n,o,r){try{const s=p(n),a=[];for(const n of Array.from(s.cssRules))n instanceof CSSImportRule&&a.push((async()=>{const s=N(n.href,o),a=await e(s);r[s]=a,void 0!==a&&await t(a,s,r)})());await Promise.all(a)}catch(e){console.log("error during fetchBundledCss, resourceUrl="+o,e)}}(r,s,o)}(t,o,r)),t.nodeType){case b.ELEMENT:return"IFRAME"===t.tagName.toUpperCase()?i(t):c(t)}}async function c(e){Array.prototype.map.call(e.childNodes,a)}async function i(e){if(c(e),e.contentDocument)try{const n=S(e)?e.baseURI:e.contentDocument.location.href;t(e.contentDocument,n,r,s)}catch(e){console.log(e)}}a(n.documentElement)}(t,t.location.href,n,r),await Promise.all(r),console.log("[prefetchAllCss]",Date.now()-o),function(e){return n[e]}}};const{absolutizeUrl:A,isInlineFrame:P}=c,{NODE_TYPES:R,DEFAULT_STYLE_PROPS:D,DEFAULT_RECT_PROPS:$,DEFAULT_IGNORED_TAG_NAMES:U}=i;var _=async function({doc:e=document,styleProps:t=D,rectProps:n=$,ignoredTagNames:o=U,addStats:r=!1,fetchTimeLimit:s=3e4}={}){arguments[1]&&(e=arguments[1]),arguments[2]&&(r=arguments[2]),arguments[3]&&(s=arguments[3]);const a={total:{},prefetchCss:{},doCaptureDoc:{},waitForImages:{}};function c(e){e.startTime=Date.now()}function i(e){e.endTime=Date.now(),e.elapsedTime=e.endTime-e.startTime}const u=[];c(a.total);const d=new Set,y=[],C="@@@@@",w="#####",N="-----";c(a.prefetchCss);const S=v(g(fetch,{fetchTimeLimit:s})),b=await S(e);i(a.prefetchCss);const _=h({parseCss:p,CSSImportRule:CSSImportRule,getCssFromCache:b,absolutizeUrl:A,unfetchedToken:w}),F=E({getCssFromCache:b,absolutizeUrl:A}),O=T({extractCssFromNode:F,getBundledCssFromCssText:_,unfetchedToken:w});c(a.doCaptureDoc);const k=z(e);i(a.doCaptureDoc),c(a.waitForImages),await Promise.all(u),i(a.waitForImages),k.version="1.3.0",k.scriptVersion="11.0.1";const I=y.length?y.join("\n")+"\n":"",L=d.size?Array.from(d).join("\n")+"\n":"",M=JSON.stringify({separator:N,cssStartToken:w,cssEndToken:w,iframeStartToken:'"'+C,iframeEndToken:C+'"'});function x(){return r?`\n${N}\n${JSON.stringify(a)}`:""}i(a.total);const B=`${M}\n${L}${N}\n${I}${N}\n${JSON.stringify(k)}${x()}`;return console.log("[captureFrame]",JSON.stringify(a)),B;function V(e){return Object.keys(e).length?e:void 0}function Y(e){return{tagName:"#text",text:e.textContent}}function z(e,r=e.location&&e.location.href){const s=new Set;let a="";const c=i(e.documentElement||e);return c.css=a,u.push(f({bgImages:s}).then(e=>c.images=e)),c;function i(e){const{bundledCss:t,unfetchedResources:n}=O(e,r);if(a+=t,n)for(const e of n)d.add(e);switch(e.nodeType){case R.TEXT:return Y(e);case R.ELEMENT:return"IFRAME"===e.tagName.toUpperCase()?function(e){const t=h(e);let n;try{n=e.contentDocument}catch(e){return o(),t}try{n?t.childNodes=[z(n,P(e)?e.baseURI:n.location.href)]:o()}catch(e){console.log("error in iframeToJSON",e)}return t;function o(){const n=m(e);y.push(n),t.childNodes=[`${C}${n}${C}`]}}(e):h(e);case R.DOCUMENT_FRAGMENT:return{childNodes:Array.prototype.map.call(e.childNodes,i).filter(Boolean)};default:return null}}function h(e){const a=Array.prototype.map.call(e.childNodes,i).filter(Boolean),c=e.shadowRoot&&z(e.shadowRoot,r),u=e.tagName.toUpperCase();if(o.indexOf(u)>-1)return null;const f=window.getComputedStyle(e),d=e.getBoundingClientRect(),m={};for(const e of t)m[e]=f.getPropertyValue(e);m["border-width"]||(m["border-width"]=`${f.getPropertyValue("border-top-width")} ${f.getPropertyValue("border-right-width")} ${f.getPropertyValue("border-bottom-width")} ${f.getPropertyValue("border-left-width")}`);const h={};for(const e of n)h[e]=d[e];const p=Array.from(e.attributes).map(e=>({key:e.name,value:e.value})).reduce((e,t)=>(e[t.key]=t.value,e),{}),g=l(f.getPropertyValue("background-image"));g&&s.add(g);const y={tagName:u,style:V(m),rect:V(h),attributes:V(p),childNodes:a};return c&&(y.shadowRoot=c),y}}};const{pollify:F}=c,{EYES_NAMESPACE:O,DOM_CAPTURE_KEY:k}=i;window[O]=window[O]||{};const I=F(_,window[O],k);return function(e){return JSON.stringify(I(e)(e))}}();
4
+ var captureDomAndPoll=function(){"use strict";function e(e,t=0){const n=e.charCodeAt(t);if(n>=55296&&n<56320){return 1024*(n-55296)+(e.charCodeAt(t+1)-56320)+65536}return 56320<=n&&n<=57343?-1:n}var t=function(t,n){const o=[];let r=0;for(let s=0;s<t.length;++s){const a=e(t,s);let c=0;a>0&&(c=a<128?1:a<2048?2:a<65536?3:a<2097152?4:a<67108864?5:6),r+c>n?(o.push(s),r=c):r+=c}return o};const n="WIP",o="SUCCESS",r="SUCCESS_CHUNKED",s="ERROR";var a=function(e,a,c={}){const i=function(e,{chunkByteLength:a=0}={}){if(e){if(e.value){if(a){if(!e.chunks){const n=JSON.stringify(e.value);e.chunks=t(n,a),e.chunks.length>0&&(e.from=0,e.value=n)}if(e.from>=0)return{status:r,value:e.value.substring(e.from,e.from=e.chunks.shift()),done:!e.from}}return{status:o,value:e.value}}return e.error?{status:s,error:e.error}:{status:n}}return{status:s,error:"unexpected poll request received - cannot find state of current operation"}}((e=e||{})[a],c);return(i.status===o||i.status===s||i.status===r&&i.done)&&(e[a]=null),i};var c={chunkify:t,pollify:function(e,t,n){return o=>function(){return t[n]||(t[n]={},e.apply(null,arguments).then(e=>t[n].value=e).catch(e=>t[n].error=e.message)),a(t,n,o)}},poll:a,absolutizeUrl:function(e,t){return new URL(e,t).href},isInlineFrame:function(e){return e.contentDocument&&e.contentDocument.location&&!/^https?:$/.test(e.contentDocument.location.protocol)},isAccessibleFrame:function(e){try{const t=e.contentDocument;return Boolean(t&&t.defaultView&&t.defaultView.frameElement)}catch(e){return!1}}},i={EYES_NAMESPACE:"__EYES__APPLITOOLS__",DOM_CAPTURE_KEY:"domCaptureResult",NODE_TYPES:{ELEMENT:1,TEXT:3,DOCUMENT_FRAGMENT:11},DEFAULT_STYLE_PROPS:["background-repeat","background-origin","background-position","background-color","background-image","background-size","border-width","border-color","border-style","color","display","font-size","font-weight","line-height","margin","opacity","overflow","padding","visibility","text-align","position","border-radius","z-index"],DEFAULT_RECT_PROPS:["width","height","top","left"],DEFAULT_IGNORED_TAG_NAMES:["HEAD","SCRIPT"]};const u=/url\((?!['"]?:)['"]?([^'")]*)['"]?\)/;var l=function(e){const t=e?e.match(u):void 0;return t?t[1]:t};var f=async function({bgImages:e,timeout:t=5e3,Image:n=window.Image}){return(await Promise.all(Array.from(e).map(e=>{return Promise.race([new Promise(t=>{const o=new n;o.onload=()=>t({url:e,width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>t(),o.src=e}),(o=t,new Promise(e=>{setTimeout(e,o)}))]);var o}))).reduce((e,t)=>(t&&(e[t.url]={width:t.width,height:t.height}),e),{})};function d(e){return Array.prototype.filter.call(e.parentNode.childNodes,t=>t.tagName===e.tagName).indexOf(e)+1}var m=function e(t){if(!t.ownerDocument)return"";let n="",o=t,r=t.ownerDocument,s=r.defaultView.frameElement;for(;o!==r;)n=`${o.tagName}[${d(o)}]/${n}`,o=o.parentNode;return s&&(n=`${e(s)},${n}`),n.replace(/\/$/,"")};var h=function({parseCss:e,CSSImportRule:t,absolutizeUrl:n,getCssFromCache:o,unfetchedToken:r}){return function s(a,c){let i,u="";try{const l=e(a);for(const e of Array.from(l.cssRules))if(e instanceof t){const t=n(e.href,c),a=o(t);if(void 0!==a){const{bundledCss:e,unfetchedResources:n}=s(a,t);n&&(i=new Set(n)),u=`${u}${e}`}else i=new Set([t]),u=`\n${r}${t}${r}`}}catch(e){console.log("error during getBundledCssFromCssText, styleBaseUrl="+c,e)}var l,f;return u=`${u}${l=a,f=c,`\n/** ${f} **/\n${l}`}`,{bundledCss:u,unfetchedResources:i}}};var p=function(e){var t=document.implementation.createHTMLDocument(""),n=t.createElement("style");return n.textContent=e,t.body.appendChild(n),n.sheet};var g=function(e){const t=["before","after"];try{let n=[];return t.forEach(t=>{const o=window.getComputedStyle(e,":"+t);o&&"none"!==o.getPropertyValue("content")&&n.push(t)}),n.join("_and_")}catch(e){return!1}};var y=function(e,{fetchTimeLimit:t}={}){return async function(n){const o=new AbortController,r=[e(n,{cache:"force-cache",signal:o.signal}).then(e=>{if(e.ok)return e.text();console.log("/failed to fetch (status "+e.status+") css from: "+n+"/")}).catch(e=>{console.log("/failed to fetch (error "+e.toString()+") css from: "+n+"/")})];return Number.isNaN(Number(t))||r.push(new Promise(e=>setTimeout(e,t)).then(()=>o.abort())),Promise.race(r)}},w=function(e){const t=Array.from(e.attributes).find(e=>"href"===e.name.toLowerCase());return t&&t.value},C=function(e){if(e.nodeName&&"LINK"===e.nodeName.toUpperCase()&&e.attributes){const t=new Map(Array.from(e.attributes,e=>[e.name.toLowerCase(),e.value.toLowerCase()]));return"stylesheet"===t.get("rel")||"style"===t.get("as")&&["preload","prefetch"].includes(t.get("rel"))}return!1};var E=function(e){return e&&e.startsWith("data:")};var T=function({getCssFromCache:e,absolutizeUrl:t}){return function(n,o){let r,s,a;if(function(e){return e.nodeName&&"STYLE"===e.nodeName.toUpperCase()}(n))r=Array.from(n.childNodes).map(e=>e.nodeValue).join(""),s=o;else if(C(n)){const c=w(n);E(c)?(s=o,r=c.match(/,(.+)/)[1]):(s=t(c,o),r=e(s)),a=void 0===r}return{cssText:r,styleBaseUrl:s,isUnfetched:a}}};var N=function({extractCssFromNode:e,getBundledCssFromCssText:t,unfetchedToken:n}){return function(o,r){const{styleBaseUrl:s,cssText:a,isUnfetched:c}=e(o,r);let i,u="";if(a){const{bundledCss:e,unfetchedResources:n}=t(a,s);u+=e,i=new Set(n)}else c&&(u+=`${n}${s}${n}`,i=new Set([s]));return{bundledCss:u,unfetchedResources:i}}};const{absolutizeUrl:S,isInlineFrame:b}=c,{NODE_TYPES:v}=i;var A=function(e){return async function(t=document){const n={},o=Date.now(),r=[];return function t(n,o,r,s){function a(t){switch(s.push(async function(t,n,o){let r,s;C(t)&&(s=S(w(t),n),r=await e(s),void 0!==r&&(o[s]=r));r&&await async function t(n,o,r){try{const s=p(n),a=[];for(const n of Array.from(s.cssRules))n instanceof CSSImportRule&&a.push((async()=>{const s=S(n.href,o),a=await e(s);r[s]=a,void 0!==a&&await t(a,s,r)})());await Promise.all(a)}catch(e){console.log("error during fetchBundledCss, resourceUrl="+o,e)}}(r,s,o)}(t,o,r)),t.nodeType){case v.ELEMENT:return"IFRAME"===t.tagName.toUpperCase()?i(t):c(t)}}async function c(e){Array.prototype.map.call(e.childNodes,a)}async function i(e){if(c(e),e.contentDocument)try{const n=b(e)?e.baseURI:e.contentDocument.location.href;t(e.contentDocument,n,r,s)}catch(e){console.log(e)}}a(n.documentElement)}(t,t.location.href,n,r),await Promise.all(r),console.log("[prefetchAllCss]",Date.now()-o),function(e){return n[e]}}};const{absolutizeUrl:P,isInlineFrame:R}=c,{NODE_TYPES:D,DEFAULT_STYLE_PROPS:$,DEFAULT_RECT_PROPS:U,DEFAULT_IGNORED_TAG_NAMES:_}=i;var F=async function({doc:e=document,styleProps:t=$,rectProps:n=U,ignoredTagNames:o=_,addStats:r=!1,fetchTimeLimit:s=3e4}={}){arguments[1]&&(e=arguments[1]),arguments[2]&&(r=arguments[2]),arguments[3]&&(s=arguments[3]);const a={total:{},prefetchCss:{},doCaptureDoc:{},waitForImages:{}};function c(e){e.startTime=Date.now()}function i(e){e.endTime=Date.now(),e.elapsedTime=e.endTime-e.startTime}const u=[];c(a.total);const d=new Set,w=[],C="@@@@@",E="#####",S="-----";c(a.prefetchCss);const b=A(y(fetch,{fetchTimeLimit:s})),v=await b(e);i(a.prefetchCss);const F=h({parseCss:p,CSSImportRule:CSSImportRule,getCssFromCache:v,absolutizeUrl:P,unfetchedToken:E}),O=T({getCssFromCache:v,absolutizeUrl:P}),k=N({extractCssFromNode:O,getBundledCssFromCssText:F,unfetchedToken:E});c(a.doCaptureDoc);const I=J(e);i(a.doCaptureDoc),c(a.waitForImages),await Promise.all(u),i(a.waitForImages),I.version="1.3.0",I.scriptVersion="11.1.1";const L=w.length?w.join("\n")+"\n":"",x=d.size?Array.from(d).join("\n")+"\n":"",M=JSON.stringify({separator:S,cssStartToken:E,cssEndToken:E,iframeStartToken:'"'+C,iframeEndToken:C+'"'});function B(){return r?`\n${S}\n${JSON.stringify(a)}`:""}i(a.total);const V=`${M}\n${x}${S}\n${L}${S}\n${JSON.stringify(I)}${B()}`;return console.log("[captureFrame]",JSON.stringify(a)),V;function z(e){return Object.keys(e).length?e:void 0}function Y(e){return{tagName:"#text",text:e.textContent}}function J(e,r=e.location&&e.location.href){const s=new Set;let a="";const c=i(e.documentElement||e);return c.css=a,u.push(f({bgImages:s}).then(e=>c.images=e)),c;function i(e){const{bundledCss:t,unfetchedResources:n}=k(e,r);if(a+=t,n)for(const e of n)d.add(e);switch(e.nodeType){case D.TEXT:return Y(e);case D.ELEMENT:return"IFRAME"===e.tagName.toUpperCase()?function(e){const t=h(e);let n;try{n=e.contentDocument}catch(e){return o(),t}try{n?t.childNodes=[J(n,R(e)?e.baseURI:n.location.href)]:o()}catch(e){console.log("error in iframeToJSON",e)}return t;function o(){const n=m(e);w.push(n),t.childNodes=[`${C}${n}${C}`]}}(e):h(e);case D.DOCUMENT_FRAGMENT:return{childNodes:Array.prototype.map.call(e.childNodes,i).filter(Boolean)};default:return null}}function h(e){const a=Array.prototype.map.call(e.childNodes,i).filter(Boolean),c=e.shadowRoot&&J(e.shadowRoot,r),u=e.tagName.toUpperCase();if(o.indexOf(u)>-1)return null;const f=window.getComputedStyle(e),d=e.getBoundingClientRect(),m={};for(const e of t)m[e]=f.getPropertyValue(e);m["border-width"]||(m["border-width"]=`${f.getPropertyValue("border-top-width")} ${f.getPropertyValue("border-right-width")} ${f.getPropertyValue("border-bottom-width")} ${f.getPropertyValue("border-left-width")}`);const h={};for(const e of n)h[e]=d[e];const p=Array.from(e.attributes).map(e=>({key:e.name,value:e.value})).reduce((e,t)=>(e[t.key]=t.value,e),{}),y=l(f.getPropertyValue("background-image"));y&&s.add(y);const w=g(e);w&&(p["data-applitools-has-pseudo"]=w);const C={tagName:u,style:z(m),rect:z(h),attributes:z(p),childNodes:a};return c&&(C.shadowRoot=c),C}}};const{pollify:O}=c,{EYES_NAMESPACE:k,DOM_CAPTURE_KEY:I}=i;window[k]=window[k]||{};const L=O(F,window[k],I);return function(e){return JSON.stringify(L(e)(e))}}();
5
5
 
6
6
  return captureDomAndPoll.apply(this, arguments);
7
7
  }