@flemist/simple-utils 2.1.4 → 2.1.5
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/build/node/index.cjs +8 -8
- package/build/node/index.mjs +762 -601
- package/build/node/test/helpers/common.d.ts +2 -0
- package/build/node/test/helpers/createTestE2e.d.ts +30 -0
- package/build/node/test/helpers/index.d.ts +3 -0
- package/build/node/test/helpers/waitPageStable.d.ts +35 -0
- package/build/node/test/index.d.ts +1 -0
- package/package.json +1 -1
package/build/node/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../urlGet-CerQ1cKh.js"),v=require("@flemist/async-utils"),
|
|
2
|
-
`),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../urlGet-CerQ1cKh.js"),v=require("@flemist/async-utils"),N=require("@flemist/time-limits"),Ne=require("node:os"),ae=require("path"),U=require("@flemist/priority-queue"),_e=require("fs"),$e=require("picomatch"),V=require("child_process"),Y=require("@flemist/abort-controller-fast"),We=require("@flemist/test-variants");function me(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const a=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,a.get?a:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const I=me(ae),L=me(_e),te=new N.Pool(Ne.cpus().length);function W(e){return e.replace(/\\/g,"/")}let H=null;function ve(e){H==null&&(H=new Map);const t=W(e);let o=H.get(t);return o==null&&(o=new v.Locker,H.set(t,o)),o}function Be(e){const{filePath:t,func:o}=e;return ve(t).lock(()=>N.poolRunWait({pool:te,count:1,func:o}))}function de(e){return e.match(/^[/\\]?[^/\\]+/)[0]}function ye(e,t){return de(e)+"|"+t.ino}function pe(e){return e.endsWith(":")&&(e+="/"),I.resolve(e)}function fe(e,t){e.totalSize+=t.totalSize,e.maxFileDateModified=Math.max(e.maxFileDateModified,t.maxFileDateModified),e.countFiles+=t.countFiles,e.countDirs+=t.countDirs,e.countLinks+=t.countLinks}const we=function(t){return t.code==="ENOENT"};function ge(e){const t=e.paths;if(!t||t.length===0)return Promise.resolve({totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0});const o=e.level??0,a=e.walkedIds??new Set,n=e.abortSignal,s=e.pool??te,c=e.handleError,i=e.priority??U.priorityCreate(0),m=e.walkLinks??!1,u=e.log,E=e.handlePath,d=e.matchPath;async function h(f){if(!(c&&await c(f))&&!we(f))throw f}function x(f){return!(!u||u.minTotalContentSize!=null&&f<u.minTotalContentSize||u.maxNestedLevel!=null&&o>u.maxNestedLevel)}return v.useAbortController(async f=>{const y=v.combineAbortSignals(n,f),p={totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0};function C(w,P){if(x(P.totalSize)){const k=`${P.totalSize.toLocaleString("en-US").replace(/,/g," ").padStart(19)}: ${w}`;u?.handleLog?u.handleLog(k):console.log(k)}}async function l(w,P,O,k){return E?await N.poolRunWait({pool:s,func:async()=>{try{return await E({level:o,path:w,stat:P,itemStat:O,totalStat:p,abortSignal:y})}catch(T){return await h(T),!1}},count:1,priority:k,abortSignal:y}):!0}async function g(w,P,O,k){k||(k=w);const T=await N.poolRunWait({pool:s,func:()=>L.promises.lstat(w).catch(h),count:1,priority:U.priorityCreate(P,U.priorityCreate(1,i)),abortSignal:y});if(!T||!O&&T.isFile())return null;const A=ye(w,T);if(a.has(A))return null;a.add(A);let b={totalSize:T.size,maxFileDateModified:T.isDirectory()?0:T.mtimeMs,countFiles:0,countDirs:0,countLinks:0};const j=U.priorityCreate(P,U.priorityCreate(T.isDirectory()?2:3,i));if(T.isSymbolicLink()){if(m){const M=await N.poolRunWait({pool:s,func:()=>L.promises.readlink(w).catch(h).then(D=>D??null),count:1,priority:j,abortSignal:y});if(M){const D=I.isAbsolute(M)?M:I.resolve(I.dirname(k),M),F=await g(D,P,O,k);F&&(b=F)}}return(O||b.countFiles+b.countDirs+b.countLinks>=1)&&(b.countLinks+=1,await l(k,T,b,j)&&(fe(p,b),C(k,b))),b}else if(T.isDirectory()){const M=await N.poolRunWait({pool:s,func:()=>L.promises.readdir(w).catch(h),count:1,priority:i,abortSignal:y});if(M){for(let D=0,F=M.length;D<F;D++)M[D]=I.join(k,M[D]);b=await ge({...e,paths:M,abortSignal:y,priority:j,level:o+1,walkedIds:a})}}return(O||b.countFiles+b.countDirs+b.countLinks>=1)&&(T.isDirectory()?b.countDirs+=1:T.isFile()&&(b.countFiles+=1),await l(k,T,b,j)&&(fe(p,b),C(k,b))),b}const S=[];for(let w=0,P=t.length;w<P;w++){const O=pe(t[w]),k=d?d(O):!0;k!==!1&&S.push(g(O,w,k))}return await Promise.all(S),p})}function ze(e){return ge(e)}function Ue({globs:e,rootDir:t,noCase:o}){const a=[];return e.forEach(n=>{n=W(n).trim();const s=n.startsWith("^");s&&(n=n.substring(1).trim());const c=n.startsWith("!");if(c&&(n=n.substring(1).trim()),n.startsWith("!")||n.startsWith("^"))throw new Error(`Invalid glob pattern: "${n}". The syntax '${n.substring(0,2)}' is not supported. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class), ! (negate pattern), ^ (exclude if included). Examples of valid patterns: "*.js", "src/**/*.ts", "!node_modules", "^dist". Avoid starting with '!' after '^' or multiple special prefixes.`);n.startsWith("/")&&(n="."+n);const i=W(t?I.resolve(t,n):n);if(!i)return;let m;try{m=$e(i,{nocase:o??!1,dot:!0,strictBrackets:!0})}catch(u){throw new Error(`Invalid glob pattern: "${n}". ${u instanceof Error?u.message:"Unknown error"}. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class with balanced brackets), ! (negate pattern), ^ (exclude if included). Examples: "*.js", "src/**/*.ts", "!node_modules", "[abc]def.txt". Ensure all brackets [ ] are properly closed and balanced.`)}a.push({exclude:s,negative:c,debugInfo:i,match:m})}),function(s){s=W(s);let c=null,i=!1;for(let m=0,u=a.length;m<u;m++){const E=a[m];E.match(s)&&(E.exclude?i=!E.negative:(c=!E.negative,i=!1))}return i?!1:c}}function be(e){const t=e.startsWith("!");return t&&(e=e.substring(1)),e.startsWith("/")?e=e.substring(1):!e.startsWith("**")&&!e.startsWith("../")&&(e=`**/${e}`),t&&(e="!"+e),e}function Ee(e,t){if(!t||t===".")return e;const o=e.startsWith("^");o&&(e=e.substring(1));const a=e.startsWith("!");return a&&(e=e.substring(1)),e.startsWith("/")?(t.endsWith("/")&&(t=t.substring(0,t.length-1)),e=t+e):(t.endsWith("/")||(t+="/"),e.startsWith("./")?e=t+e.substring(2):e.startsWith("../")?e=t+e:(t.startsWith("..")&&(t=""),e.startsWith("**")?e=t+e:e=t+"**/"+e)),e=W(I.normalize(e)),a&&(e="!"+e),o&&(e="^"+e),e}function he(e){return"^"+e}async function Se(e){const o=(await L.promises.readFile(e,"utf-8")).split(`
|
|
2
|
+
`),a=[];return o.forEach(n=>{n=n.trim(),!(!n||n.startsWith("#"))&&a.push(n)}),a}async function Je(e){const t=e.rootDir??".",o=[];if(!e.globs?.length)return o;const a=[];return e.globs.forEach(n=>{n.value&&(n.valueType==="file-contains-patterns"?a.push(n):n.valueType==="pattern"&&o.push(n.exclude?he(n.value):n.value))}),a.length&&await Promise.all(a.map(async n=>{await N.poolRunWait({pool:te,count:1,func:async()=>{const s=I.resolve(t,n.value),c=await Se(s),i=I.relative(t,I.dirname(s));c.forEach(m=>{m=be(m),m=Ee(m,i),o.push(n.exclude?he(m):m)})}})})),o}function Oe(e,t={}){return new Promise((o,a)=>{const n=V.spawn(e,{shell:!0,...t}),s=[];n.stdout.on("data",c=>{s.push(c)}),n.on("error",c=>{a(c)}),n.on("exit",c=>{const i=Buffer.concat(s).toString("utf8");if(c!==0){a(new Error(`[exec][exit] code: ${c}`));return}o(i)})})}async function Ge(){let e;switch(process.platform){case"darwin":e=V.spawn("afplay",["/System/Library/Sounds/Ping.aiff"],{stdio:"ignore"});break;case"linux":e=V.spawn("beep",[],{stdio:"ignore",shell:!0});break;case"win32":e=V.spawn("powershell",["-c","[console]::beep(1000,300)"],{stdio:"ignore"});break;default:throw new Error(`[nodeBeep] Beep not supported on platform: ${process.platform}`)}await new Promise((t,o)=>{e.on("error",o),e.on("close",a=>{a!==0?o(new Error(`[nodeBeep] Beep process exited with code ${a}`)):t()})})}async function xe({page:e,urlFilters:t,timeouts:o}){return o||(o={}),o.downloadInternal||(o.downloadInternal=10*1e3),o.downloadExternal||(o.downloadExternal=60*1e3),o.total||(o.total=300*1e3),await r.withTimeout(()=>e.evaluate(({urlFilters:n,timeouts:s})=>{function c(u){return function(d){let h=!1;for(let x=0,f=u.length;x<f;x++){const y=u[x];y.pattern.test(d)&&(h=y.value)}return h}}const i=n&&c(n);let m=performance.getEntries&&performance.getEntries();return m||(m=[]),m.push({name:location.href}),Promise.all(m.map(u=>{if(u.entryType!=null&&u.entryType!=="resource"||i&&!i(u.name))return null;if(u.responseStatus!=null)return u.responseStatus>=400?Promise.resolve({url:u.name,error:u.responseStatus}):null;if(navigator.userAgent.indexOf("Chrome")===-1)return null;const E=typeof AbortController<"u"?new AbortController:null,d=new URL(u.name).origin===location.origin,h=d?s.downloadInternal:s.downloadExternal;let x;const f=new Promise((l,g)=>{x=g}),y=h&&setTimeout(()=>{E?.abort(),x(new Error("[test][getPageHttpErrors] fetch timeout"))},h);let p=fetch(u.name,{mode:d?"same-origin":"no-cors",signal:E?.signal,cache:d?"force-cache":void 0,method:"HEAD"}).then(l=>l.ok?null:{url:u.name,error:l.status+" "+l.statusText}).catch(l=>({url:u.name,error:l.message}));E||(p=Promise.race([p,f]));function C(){y&&clearTimeout(y)}return p.then(l=>(C(),l),l=>{throw C(),l})})).then(u=>{const E=u.filter(d=>d).map(d=>({url:new URL(d.url),error:d.error}));return E.length>0?E:null})},{urlFilters:t,timeouts:o}),{timeout:o.total})}async function ke({page:e,urlFilters:t,errorFilter:o}){let a=await xe({page:e,urlFilters:t});if(a&&(o&&(a=a.filter(o)),a.length>0))throw new Error(`[test][checkPageHttpErrors] Page has http errors: ${JSON.stringify(a,null,2)}`)}async function Te({page:e,filter:t,onError:o}){const a="callback_191b355ea6f64499a6607ad571da5d4d",n=e.context().browser()?.browserType().name(),s=r.getStackTrace();function c(i){try{if(t&&!t({url:new URL(e.url()),error:i}))return}catch(m){i=String(m)}try{console.error(`[test][subscribeJsErrors] BROWSER JS ERROR (${n}): ${i}`);const m=new Error(i);m.stack=s,o(m)}catch(m){console.error("[test][subscribeJsErrors] error",m)}}await e.exposeFunction(a,c),await e.addInitScript(i=>{function m(d){if(Array.isArray(d))return d.map(m).join(`\r
|
|
3
3
|
\r
|
|
4
|
-
`);if(
|
|
5
|
-
`;e.pageFilePath&&(
|
|
6
|
-
`),i.stack=
|
|
7
|
-
`;throw n&&(i+=` at _ (${
|
|
8
|
-
`),c.stack=i+(c.stack||c.message),c.message=i+c.message,c}}function
|
|
9
|
-
You should wait js executions before test`);k instanceof Element&&y(k,O,x,S,M)}}function y(u,O,x,S,M){const p=M&&M[O.length];if(M&&!p||w&&w.has(u))return;let b=u.tagName&&u.tagName.toLowerCase();if(b==="head"&&(x=!1),i)for(let I=0,$=i.length;I<$;I++)b=b.replace(i[I].search,i[I].replace);if(p&&p.tag!==b)return;const k=[];for(let I=0,$=u.attributes.length;I<$;I++){const N=u.attributes.item(I);let _=N.name,q=N.value;if(_=_.toLowerCase(),_!=="class"&&!(s&&s[_])){if(n)for(let z=0,Ie=n.length;z<Ie;z++)n[z].name.test(_)&&(q=q.replace(n[z].search,n[z].replace));(!p||p.attrs&&p.attrs[_]===q)&&k.push([_,q])}}const C=[],m=[];for(let I=0,$=u.classList.length;I<$;I++){const N=u.classList.item(I);(!f||!f.test(N))&&C.push(N),(!E||!E.test(N))&&m.push(N)}const A=x?d(u,e.defaultStyle,p&&p.style):null,j=u.childElementCount?[]:null;u.id&&(!l||!l.test(u.id))&&u.id;const R=u.id&&(!h||!h.test(u.id))?u.id:"",F=(b||"")+(R?"#"+R:"")+(m.length>0?"."+m.join("."):""),ce=F?S?S+" > "+F:F:S,Ae={tag:b,selector:ce,classes:C,attrs:k.length>0?t(k):null,style:A,childs:j};O.push(Ae),j&&g(u,j,x,ce,p&&p.childs)}const T=[];return y(document.documentElement,T,!0,"",e.shouldEqualResult&&[e.shouldEqualResult]),T[0]}async function oe(e){const t=await e.context().newCDPSession(e);return await t.send("DOM.enable"),await t.send("CSS.enable"),t}async function se(e){await e.send("CSS.disable"),await e.send("DOM.disable"),await e.detach()}async function qe(e,t){const o=await oe(e);try{return await t(o)}finally{await se(o)}}async function je(e,t){const{nodes:o}=await e.send("DOM.getFlattenedDocument",{depth:-1,pierce:!0}),s=o.filter(n=>n.nodeType===1).map(n=>n.nodeId);for(const n of s)await e.send("CSS.forcePseudoState",{nodeId:n,forcedPseudoClasses:t})}function Q(e,t){if(!e||!t)return t||null;let o=null;for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&t[s]!==e[s]&&(o||(o={}),o[s]=t[s]);for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&!Object.prototype.hasOwnProperty.call(t,s)&&(o||(o={}),o[s]="");return o}function He(e,t){if(!e||!t)return t||null;const o=Q(e._,t._),s=Q(e.before,t.before),n=Q(e.after,t.after);return!o&&!s&&!n?null:{_:o||{},before:s||{},after:n||{}}}function Ke(e,t){if(!e||!t)return t||null;if(e.length!==t.length)return t;for(let o=0,s=e.length;o<s;o++)if(e[o]!==t[o])return t;return null}function ae(e,t){const o=Ke(e.classes,t.classes),s=Q(e.attrs,t.attrs),n=He(e.style,t.style);let a=null;if(e.childs&&t.childs){const c=Math.min(e.childs.length,t.childs.length);for(let i=0;i<c;i++){const f=ae(e.childs[i],t.childs[i]);if(f){if(!a){a=[];for(let l=0;l<c;l++)a.push({})}a[i]=f}}}return!o&&!s&&!n&&!a?null:{tag:t.tag,selector:t.selector,classes:o,attrs:s,style:n,childs:a}}const G=(e,t,o,s)=>{const n=s(e,t,o,s);if(n==null)return n;if(Array.isArray(n))return n.map((a,c,i)=>G(a,c,i,s));if(typeof n=="object"){const a={};for(const c in n)Object.prototype.hasOwnProperty.call(n,c)&&(a[c]=G(n[c],c,n,s));return a}return n};function Ce(e,t){if(e.attrs&&t.excludeAttrs){for(let o=0,s=t.excludeAttrs.length;o<s;o++)delete e.attrs[t.excludeAttrs[o]];Object.keys(e.attrs).length===0&&(e.attrs=null)}if(e.classes&&t.excludeClasses&&(e.classes=e.classes.filter(o=>!t.excludeClasses.test(o))),e.style&&t.excludeStyles)for(const o of["_","before","after"]){const s=e.style[o];if(s)for(let n=0,a=t.excludeStyles.length;n<a;n++)delete s[t.excludeStyles[n]]}if(e.childs)for(let o=0,s=e.childs.length;o<s;o++)Ce(e.childs[o],t)}function Ve(e,t){for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;const s=e[o];for(const n in s){if(!Object.prototype.hasOwnProperty.call(s,n))continue;const a=s[n];for(const c in a)Object.prototype.hasOwnProperty.call(a,c)&&Ce(a[c],t)}}}function Xe({actualResultFile:e,expectedResultFile:t,diffResultFile:o,filters:s,transform:n,pseudoStates:a}){let c,i,f,l={};return{async init(E){c=await Pe(t),n&&(c=G(c,null,null,n)),c&&s&&Ve(c,s),await E.goto("about:blank"),i=await E.evaluate(re,{filters:s}),f=i.style},async handlePage({page:E,testId:h,url:w,stateId:P,_filters:d}){let g=l[h];g||(g={},l[h]=g);let y=g[w.href];y||(y={},g[w.href]=y),await E.addStyleTag({content:"*, *::before, *::after { animation-name: none!important; transition-duration: 0s !important; }"});const T=a??[{states:[]}];let u=null,O;try{for(let x=0;x<T.length;x++){const S=T[x],M=S.states.length>0?P+":"+S.states.join(":"):P;let p=null;if(S.states.length>0){u||(u=await oe(E));const m=performance.now();await je(u,S.states),p=performance.now()-m}S.delay&&await v.delay(S.delay);const b=performance.now(),k=await E.evaluate(re,{filters:d||s,defaultStyle:f,shouldEqualResult:y[M]}),C=performance.now()-b;if(console.log(`SNAPSHOT ${M}:`+(p!=null?` forcePseudoClasses ${p.toFixed(0)}ms,`:"")+` getAllElements ${C.toFixed(0)}ms`),!O)O=k,y[M]=k;else{const m=ae(O,k);m&&(y[M]=m)}}}finally{u&&await se(u)}},async end({checkExistUrlsOnly:E}){if(l=r.getNormalizedObject(l),n&&(l=G(l,null,null,n)),c){let h,w;if(!E)h=c,w=l;else{h={},w={};for(const d in c)if(Object.prototype.hasOwnProperty.call(c,d)&&Object.prototype.hasOwnProperty.call(l,d)){h[d]={},w[d]={};for(const g in c[d])Object.prototype.hasOwnProperty.call(c[d],g)&&Object.prototype.hasOwnProperty.call(l[d],g)&&(h[d][g]=c[d][g],w[d][g]=l[d][g])}}const P=J(h,w,(d,g,y)=>y.selector&&(delete y.selector,Object.keys(y).length===0)?null:y.childs&&y.childs.length===1?y.childs[0]:(g&&g.selector?y[Z]?y[Z]=g.selector:y={selector:g.selector,...y}:d&&d.selector&&(y[Y]?y[Y]=d.selector:y={selector:d.selector,...y}),y));if(o&&await X(o,P||{}),P)throw await X(e,l),console.error("Pages elements changes: "+JSON.stringify(P,null,4).substring(0,5e3)),new Error("Pages elements changes detected");await L.promises.stat(e).catch(()=>null)&&await L.promises.unlink(e)}else await X(t,l);return l}}}exports.CheckError=r.CheckError;exports.ConsoleMessageLevel=r.ConsoleMessageLevel;exports.Lazy=r.Lazy;exports.LazyWithId=r.LazyWithId;exports.LogLevel=r.LogLevel;exports.MAX_REPORT_ITEMS_DEFAULT=r.MAX_REPORT_ITEMS_DEFAULT;exports.MatchInternalError=r.MatchInternalError;exports.Matcher=r.Matcher;exports.MatcherAny=r.MatcherAny;exports.MatcherArray=r.MatcherArray;exports.MatcherArrayItem=r.MatcherArrayItem;exports.MatcherConvert=r.MatcherConvert;exports.MatcherCustom=r.MatcherCustom;exports.MatcherFew=r.MatcherFew;exports.MatcherIn=r.MatcherIn;exports.MatcherInstanceOf=r.MatcherInstanceOf;exports.MatcherIs=r.MatcherIs;exports.MatcherNever=r.MatcherNever;exports.MatcherNot=r.MatcherNot;exports.MatcherNumber=r.MatcherNumber;exports.MatcherObject=r.MatcherObject;exports.MatcherObjectEntry=r.MatcherObjectEntry;exports.MatcherRef=r.MatcherRef;exports.MatcherString=r.MatcherString;exports.Random=r.Random;exports.Subject=r.Subject;exports.SubjectWithId=r.SubjectWithId;exports.UNIQUE_PSEUDO_RANDOM_MAX_COUNT=r.UNIQUE_PSEUDO_RANDOM_MAX_COUNT;exports.alertConsole=r.alertConsole;exports.alertReplace=r.alertReplace;exports.argsToString=r.argsToString;exports.check=r.check;exports.checkFunc=r.checkFunc;exports.consoleIntercept=r.consoleIntercept;exports.consoleMessageToString=r.consoleMessageToString;exports.consoleReplace=r.consoleReplace;exports.convertTimeZone=r.convertTimeZone;exports.createMatchResult=r.createMatchResult;exports.createMatchResultBoolean=r.createMatchResultBoolean;exports.createMatchResultError=r.createMatchResultError;exports.createTaskDelayRetry=r.createTaskDelayRetry;exports.createUniquePseudoRandom=r.createUniquePseudoRandom;exports.dateNowUnique=r.dateNowUnique;exports.deepCloneJsonLike=r.deepCloneJsonLike;exports.deepEqualJsonLike=r.deepEqualJsonLike;exports.deepEqualJsonLikeMap=r.deepEqualJsonLikeMap;exports.equalArray=r.equalArray;exports.escapeHtml=r.escapeHtml;exports.escapeRegExp=r.escapeRegExp;exports.expectedToString=r.expectedToString;exports.filterMatchResult=r.filterMatchResult;exports.filterMatchResultNested=r.filterMatchResultNested;exports.fixStackTrace=r.fixStackTrace;exports.formatAny=r.formatAny;exports.formatDate=r.formatDate;exports.formatDateFileName=r.formatDateFileName;exports.getConsoleMessages=r.getConsoleMessages;exports.getDateInet=r.getDateInet;exports.getNormalizedObject=r.getNormalizedObject;exports.getObjectId=r.getObjectId;exports.getRandomFunc=r.getRandomFunc;exports.getRandomSeed=r.getRandomSeed;exports.getStackTrace=r.getStackTrace;exports.isMatcher=r.isMatcher;exports.isObservable=r.isObservable;exports.match=r.match;exports.matchAnd=r.matchAnd;exports.matchAndPipe=r.matchAndPipe;exports.matchAny=r.matchAny;exports.matchArray=r.matchArray;exports.matchArrayBuffer=r.matchArrayBuffer;exports.matchArrayIncludes=r.matchArrayIncludes;exports.matchArrayItem=r.matchArrayItem;exports.matchArrayLength=r.matchArrayLength;exports.matchArrayWith=r.matchArrayWith;exports.matchBoolean=r.matchBoolean;exports.matchConstructor=r.matchConstructor;exports.matchConvert=r.matchConvert;exports.matchCustom=r.matchCustom;exports.matchDeep=r.matchDeep;exports.matchEnum=r.matchEnum;exports.matchFloat=r.matchFloat;exports.matchIn=r.matchIn;exports.matchInstanceOf=r.matchInstanceOf;exports.matchInt=r.matchInt;exports.matchIntDate=r.matchIntDate;exports.matchIs=r.matchIs;exports.matchIsNonStrict=r.matchIsNonStrict;exports.matchNever=r.matchNever;exports.matchNot=r.matchNot;exports.matchNotNullish=r.matchNotNullish;exports.matchNullish=r.matchNullish;exports.matchNumber=r.matchNumber;exports.matchObject=r.matchObject;exports.matchObjectEntries=r.matchObjectEntries;exports.matchObjectEntry=r.matchObjectEntry;exports.matchObjectKey=r.matchObjectKey;exports.matchObjectKeyValue=r.matchObjectKeyValue;exports.matchObjectKeys=r.matchObjectKeys;exports.matchObjectKeysNotNull=r.matchObjectKeysNotNull;exports.matchObjectPartial=r.matchObjectPartial;exports.matchObjectValue=r.matchObjectValue;exports.matchObjectValues=r.matchObjectValues;exports.matchObjectWith=r.matchObjectWith;exports.matchOptional=r.matchOptional;exports.matchOr=r.matchOr;exports.matchOrPipe=r.matchOrPipe;exports.matchRange=r.matchRange;exports.matchRangeDate=r.matchRangeDate;exports.matchRef=r.matchRef;exports.matchResultNestedToString=r.matchResultNestedToString;exports.matchResultToString=r.matchResultToString;exports.matchString=r.matchString;exports.matchStringLength=r.matchStringLength;exports.matchTypeOf=r.matchTypeOf;exports.matchUuid=r.matchUuid;exports.matchValueState=r.matchValueState;exports.max=r.max;exports.min=r.min;exports.minMax=r.minMax;exports.numberMod=r.numberMod;exports.randomBoolean=r.randomBoolean;exports.randomEnum=r.randomEnum;exports.randomFloat=r.randomFloat;exports.randomIndexWeighted=r.randomIndexWeighted;exports.randomInt=r.randomInt;exports.randomItem=r.randomItem;exports.randomItems=r.randomItems;exports.setFuncName=r.setFuncName;exports.sha256=r.sha256;exports.sha256Buffer=r.sha256Buffer;exports.timeoutAbortController=r.timeoutAbortController;exports.toHex=r.toHex;exports.truncateString=r.truncateString;exports.urlGetBoolean=r.urlGetBoolean;exports.urlGetFloat=r.urlGetFloat;exports.urlGetInt=r.urlGetInt;exports.urlGetParams=r.urlGetParams;exports.urlGetString=r.urlGetString;exports.urlParamToBoolean=r.urlParamToBoolean;exports.urlParamToFloat=r.urlParamToFloat;exports.urlParamToInt=r.urlParamToInt;exports.validateMatchResult=r.validateMatchResult;exports.waitObservable=r.waitObservable;exports.withConsoleReplace=r.withConsoleReplace;exports.withRetry=r.withRetry;exports.withTimeout=r.withTimeout;exports.DIFF_NEW=Z;exports.DIFF_OLD=Y;exports.checkPageHttpErrors=Ee;exports.createCDPSession=oe;exports.createMatchPath=We;exports.createPagesElementsChangesTest=Xe;exports.delayOnErrorCall=ke;exports.delayOnErrorSet=$e;exports.delayOnErrorWait=ze;exports.destroyCDPSession=se;exports.exec=be;exports.fileLock=Ne;exports.forcePseudoClasses=je;exports.getAllElements=re;exports.getDrive=fe;exports.getElementsStyleDiff=ae;exports.getFileId=he;exports.getObjectsDiff=J;exports.getPageHttpErrors=Se;exports.globGitIgnoreToPicomatch=pe;exports.globToRelative=we;exports.initPage=Me;exports.loadGlobs=Be;exports.loadGlobsFromFile=ge;exports.loadJson=Pe;exports.nodeBeep=ve;exports.objectTransform=G;exports.pathNormalize=B;exports.pathResolve=de;exports.poolFs=ee;exports.saveJson=X;exports.setPlaywrightPriorityLow=xe;exports.subscribeJsErrors=Oe;exports.testPage=Ue;exports.useBrowser=Je;exports.useBrowserContext=Ge;exports.usingCDPSession=qe;exports.walkPathHandleErrorDefault=me;exports.walkPaths=_e;
|
|
4
|
+
`);if(d instanceof Error)return d.stack||d.toString();if(typeof d=="object"&&d!=null){const h=new Set;return JSON.stringify(d,(x,f)=>{if(typeof f=="object"&&f!=null){if(h.has(f))return"[Circular]";h.add(f)}return f},2)}return String(d)}function u(d){window[i](d)}const E={warn:console.warn.bind(console),error:console.error.bind(console)};console.warn=function(...h){return u("console.warn: "+m(h)),E.warn.apply(this,h)},console.error=function(...h){return u("console.error: "+m(h)),E.error.apply(this,h)},window.addEventListener("error",function(d){u("window error: "+(d.message||JSON.stringify(d)))},!0),window.addEventListener("unhandledrejection",function(d){u("window unhandledrejection: "+m(d.reason))},!0)},a)}async function se(){try{process.platform==="win32"&&await Oe(`wmic process where "commandline like '%ms-playwright%' and not commandline like '%wmic.exe%' and priority != 4" CALL setpriority "idle"`)}catch(e){const t=e?.message?.trim();if(/exit code: 2147749890/.test(t))return;console.warn("[test][setPlaywrightPriorityLow] error: "+t)}}let K=null,ne=null;function qe(e){ne=e}function Pe(){if(K)return;const e=ne||(process.env.DELAY_ON_ERROR?parseInt(process.env.DELAY_ON_ERROR,10):0);if(ne)return console.log(`[test][delayOnError] Delay on error: ${e} ms`),K=v.delay(e),K}function He(){return K}async function Ce(e){const{page:t}=e,o=t.context().browser()?.browserType().name(),a=new Y.AbortControllerFast,n=v.combineAbortSignals(a.signal,e.abortSignal),s=i=>{let m=`Error in (${o}) ${t.url()}
|
|
5
|
+
`;e.pageFilePath&&(m+=` at _ (${ae.resolve(e.pageFilePath)}:0:0)
|
|
6
|
+
`),i.stack=m+(i.stack||i.message),i.message=m+i.message,console.error("[test][initPage] error",i),a.abort(i)};return await Te({page:t,filter:e.filters?.js?.filter,onError:s}),{abortSignal:n,checkErrors:async()=>{await ke({page:t,urlFilters:e.filters?.http?.urlFilters,errorFilter:e.filters?.http?.errorFilter}),n.throwIfAborted()}}}async function Me({page:e,abortSignal:t,filters:o,func:a,pageFilePath:n}){const s=e.context().browser()?.browserType().name();try{const{abortSignal:c,checkErrors:i}=await Ce({page:e,abortSignal:t,filters:o,pageFilePath:n});await a({page:e,abortSignal:c,checkErrors:i}),await i()}catch(c){let i=`Error in (${s}) ${e.url()}
|
|
7
|
+
`;throw n&&(i+=` at _ (${ae.resolve(n)}:0:0)
|
|
8
|
+
`),c.stack=i+(c.stack||c.message),c.message=i+c.message,c}}function Ve({browserType:e,options:t}){return async function(a){const n=await e.launch(t??void 0);try{return await a(n)}finally{await n.close()}}}function Ae({browser:e,options:t}){return async function(a){const n=await e.newContext(t??void 0);await se();try{const s=await a(n);return await n.close(),s}catch(s){const c=Pe?.();throw c?(console.error("[test][useBrowserContext] error",s),c.finally(()=>n.close())):await n.close(),s}}}async function Ke(e,t){const o=await e.$$(t);for(const a of o)await a.click()}const re=new Y.AbortControllerFast;let Xe=0;function je(e){return async function({browser:o,contextOptions:a,name:n,url:s,pool:c,priority:i,filters:m,...u},E){const d=v.combineAbortSignals(re.signal,E);try{await N.poolRunWait({pool:c,count:1,priority:i,abortSignal:d,func:async(h,x)=>{x.throwIfAborted(),await Ae({browser:o,options:a})(async f=>{x.throwIfAborted();const y=await f.newPage();await se();const p=o.browserType().name(),C=x.subscribe(()=>{y.isClosed()||(y.close({runBeforeUnload:!1}),f.close({}))});try{console.log(`START ${n} (${p}): ${s}`),await Me({page:y,abortSignal:x,filters:m,func:async({page:l,checkErrors:g,abortSignal:S})=>{await e({page:l,url:s,checkErrors:g,abortSignal:S,args:u})}}),console.log(`END [${Xe++}] ${n} (${p}): ${s}`)}catch(l){if(x.aborted||l instanceof Y.AbortError){console.log(`ABORTED ${n} (${p}): ${s}`);return}throw console.log(`ERROR ${n} (${p}): ${s}`),re.signal.aborted||(console.log("unsubscribe on first error"),C()),re.abort(),l}})}})}catch(h){if(h instanceof Y.AbortError)return;throw h}}}function Qe(e){const t=je(e);return We.createTestVariants(async o=>await t(o))}function Ye(e,t){const o=t.stableTime,a=t.timeout,n=t.mutation?{childList:!!t.mutation.childList,attributes:!!t.mutation.attributes,characterData:!!t.mutation.characterData,subtree:!!t.mutation.subtree,selector:t.mutation.selector??null}:null,s=t.resource?{resource:!!t.resource.resource,navigation:!!t.resource.navigation,paint:!!t.resource.paint,longTask:!!t.resource.longTask}:null;return e.evaluate(({stableTime:c,timeout:i,mutation:m,resource:u})=>{return new Promise((h,x)=>{let f=Date.now(),y=null,p=null;const C=[];function l(){f=Date.now()}function g(){y!=null&&(clearTimeout(y),y=null),p!=null&&(clearTimeout(p),p=null);for(let w=0,P=C.length;w<P;w++)C[w]()}function S(){const w=c-(Date.now()-f);w<=0?(g(),h()):y=setTimeout(S,w)}if(m){const w=E(m,l);C.push(w)}if(u){const w=d(u,l);C.push(w)}y=setTimeout(S,c),p=setTimeout(()=>{g(),x(new Error(`[waitPageStable] timed out after ${i}ms waiting for page to stabilize`))},i)});function E(h,x){const f=h.selector?document.querySelector(h.selector):document.documentElement;if(!f)throw new Error(`[waitPageStable] element not found: ${h.selector}`);const y=new MutationObserver(x);return y.observe(f,{childList:h.childList,attributes:h.attributes,characterData:h.characterData,subtree:h.subtree}),()=>{y.disconnect()}}function d(h,x){const f=[];h.resource&&f.push("resource"),h.navigation&&f.push("navigation"),h.paint&&f.push("paint"),h.longTask&&f.push("longtask");const y=new PerformanceObserver(x);return y.observe({entryTypes:f}),()=>{y.disconnect()}}},{stableTime:o,timeout:a,mutation:n,resource:s})}async function X(e,t){const o=I.dirname(e);await L.promises.stat(o).catch(()=>null)||await L.promises.mkdir(o,{recursive:!0}),await L.promises.writeFile(e,JSON.stringify(t,null,4),{encoding:"utf-8"})}async function Re(e){if(!await L.promises.stat(e).catch(()=>null))return null;const t=await L.promises.readFile(e,{encoding:"utf-8"});return JSON.parse(t)}const Z="-",ee="+";function J(e,t,o){if(e===t)return null;if(Array.isArray(e)){if(Array.isArray(t)){let n=null;for(let s=0,c=Math.max(t.length,t.length);s<c;s++){const i=J(e[s],t[s],o);i!=null&&(n||(n=[]),n.push(i))}return n!=null&&o&&(n=o(e,t,n)),n}}else if(e instanceof Object&&t instanceof Object){let n=null;for(const s in e)if(Object.prototype.hasOwnProperty.call(e,s)){const c=J(e[s],t[s],o);c!=null&&(n||(n={}),n[s]=c)}for(const s in t)if(Object.prototype.hasOwnProperty.call(t,s)&&!Object.prototype.hasOwnProperty.call(e,s)){const c=J(e[s],t[s],o);c!=null&&(n||(n={}),n[s]=c)}return n!=null&&o&&(n=o(e,t,n)),n}let a={[Z]:e,[ee]:t};return o&&(a=o(e,t,a)),a}function oe(e){function t(l){return l.sort((g,S)=>g[0]>S[0]?1:-1).reduce((g,S)=>(g[S[0]]=S[1],g),{})}function o(l){return l.reduce((g,S)=>(g[S]=!0,g),{})}const a=e.filters&&e.filters.excludeAttrs&&o(e.filters.excludeAttrs),n=e.filters&&e.filters.fixAttrs,s=e.filters&&e.filters.fixStyles,c=e.filters&&e.filters.excludeStyles&&o(e.filters.excludeStyles),i=e.filters&&e.filters.fixTags,m=e.filters&&e.filters.excludeClasses,u=e.filters&&e.filters.excludeIds,E=e.filters&&e.filters.excludeSelectorClasses,d=e.filters&&e.filters.excludeSelectorIds;let h;if(e.filters&&e.filters.excludeSelectors&&e.filters.excludeSelectors.length>0){const l=Array.from(document.querySelectorAll(e.filters.excludeSelectors.join(",")));l.length>0&&(h=new Set(l))}function x(l,g,S,w){const P=getComputedStyle(l,g),O=[];for(let k=0,T=P.length;k<T;k++){const A=P[k];if(c&&c[A])continue;let b=P[A];if(b&&s)for(let j=0,M=s.length;j<M;j++)s[j].name.test(A)&&(b=b.replace(s[j].search,s[j].replace));(!S||S[A]!==b)&&(!w||w[A]===b)&&O.push([A,b])}return t(O)}function f(l,g,S){return{_:x(l,void 0,g&&g._,S&&S._),before:x(l,"before",g&&g.before,S&&S.before),after:x(l,"after",g&&g.after,S&&S.after)}}function y(l,g,S,w,P){for(let O=0,k=l.childNodes.length;O<k;O++){const T=l.childNodes[O];if(!T)throw new Error(`child is null; index=${O}; ${w}, ${l.className}\r
|
|
9
|
+
You should wait js executions before test`);T instanceof Element&&p(T,g,S,w,P)}}function p(l,g,S,w,P){const O=P&&P[g.length];if(P&&!O||h&&h.has(l))return;let k=l.tagName&&l.tagName.toLowerCase();if(k==="head"&&(S=!1),i)for(let R=0,B=i.length;R<B;R++)k=k.replace(i[R].search,i[R].replace);if(O&&O.tag!==k)return;const T=[];for(let R=0,B=l.attributes.length;R<B;R++){const _=l.attributes.item(R);let $=_.name,q=_.value;if($=$.toLowerCase(),$!=="class"&&!(a&&a[$])){if(n)for(let z=0,Fe=n.length;z<Fe;z++)n[z].name.test($)&&(q=q.replace(n[z].search,n[z].replace));(!O||O.attrs&&O.attrs[$]===q)&&T.push([$,q])}}const A=[],b=[];for(let R=0,B=l.classList.length;R<B;R++){const _=l.classList.item(R);(!m||!m.test(_))&&A.push(_),(!E||!E.test(_))&&b.push(_)}const j=S?f(l,e.defaultStyle,O&&O.style):null,M=l.childElementCount?[]:null;l.id&&(!u||!u.test(l.id))&&l.id;const D=l.id&&(!d||!d.test(l.id))?l.id:"",F=(k||"")+(D?"#"+D:"")+(b.length>0?"."+b.join("."):""),ue=F?w?w+" > "+F:F:w,Le={tag:k,selector:ue,classes:A,attrs:T.length>0?t(T):null,style:j,childs:M};g.push(Le),M&&y(l,M,S,ue,O&&O.childs)}const C=[];return p(document.documentElement,C,!0,"",e.shouldEqualResult&&[e.shouldEqualResult]),C[0]}async function ce(e){const t=await e.context().newCDPSession(e);return await t.send("DOM.enable"),await t.send("CSS.enable"),t}async function ie(e){await e.send("CSS.disable"),await e.send("DOM.disable"),await e.detach()}async function Ze(e,t){const o=await ce(e);try{return await t(o)}finally{await ie(o)}}async function De(e,t){const{nodes:o}=await e.send("DOM.getFlattenedDocument",{depth:-1,pierce:!0}),a=o.filter(n=>n.nodeType===1).map(n=>n.nodeId);for(const n of a)await e.send("CSS.forcePseudoState",{nodeId:n,forcedPseudoClasses:t})}function Q(e,t){if(!e||!t)return t||null;let o=null;for(const a in t)Object.prototype.hasOwnProperty.call(t,a)&&t[a]!==e[a]&&(o||(o={}),o[a]=t[a]);for(const a in e)Object.prototype.hasOwnProperty.call(e,a)&&!Object.prototype.hasOwnProperty.call(t,a)&&(o||(o={}),o[a]="");return o}function et(e,t){if(!e||!t)return t||null;const o=Q(e._,t._),a=Q(e.before,t.before),n=Q(e.after,t.after);return!o&&!a&&!n?null:{_:o||{},before:a||{},after:n||{}}}function tt(e,t){if(!e||!t)return t||null;if(e.length!==t.length)return t;for(let o=0,a=e.length;o<a;o++)if(e[o]!==t[o])return t;return null}function le(e,t){const o=tt(e.classes,t.classes),a=Q(e.attrs,t.attrs),n=et(e.style,t.style);let s=null;if(e.childs&&t.childs){const c=Math.min(e.childs.length,t.childs.length);for(let i=0;i<c;i++){const m=le(e.childs[i],t.childs[i]);if(m){if(!s){s=[];for(let u=0;u<c;u++)s.push({})}s[i]=m}}}return!o&&!a&&!n&&!s?null:{tag:t.tag,selector:t.selector,classes:o,attrs:a,style:n,childs:s}}const G=(e,t,o,a)=>{const n=a(e,t,o,a);if(n==null)return n;if(Array.isArray(n))return n.map((s,c,i)=>G(s,c,i,a));if(typeof n=="object"){const s={};for(const c in n)Object.prototype.hasOwnProperty.call(n,c)&&(s[c]=G(n[c],c,n,a));return s}return n};function Ie(e,t){if(e.attrs&&t.excludeAttrs){for(let o=0,a=t.excludeAttrs.length;o<a;o++)delete e.attrs[t.excludeAttrs[o]];Object.keys(e.attrs).length===0&&(e.attrs=null)}if(e.classes&&t.excludeClasses&&(e.classes=e.classes.filter(o=>!t.excludeClasses.test(o))),e.style&&t.excludeStyles)for(const o of["_","before","after"]){const a=e.style[o];if(a)for(let n=0,s=t.excludeStyles.length;n<s;n++)delete a[t.excludeStyles[n]]}if(e.childs)for(let o=0,a=e.childs.length;o<a;o++)Ie(e.childs[o],t)}function rt(e,t){for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;const a=e[o];for(const n in a){if(!Object.prototype.hasOwnProperty.call(a,n))continue;const s=a[n];for(const c in s)Object.prototype.hasOwnProperty.call(s,c)&&Ie(s[c],t)}}}function nt({actualResultFile:e,expectedResultFile:t,diffResultFile:o,filters:a,transform:n,pseudoStates:s}){let c,i,m,u={};return{async init(E){c=await Re(t),n&&(c=G(c,null,null,n)),c&&a&&rt(c,a),await E.goto("about:blank"),i=await E.evaluate(oe,{filters:a}),m=i.style},async handlePage({page:E,testId:d,url:h,stateId:x,_filters:f}){let y=u[d];y||(y={},u[d]=y);let p=y[h.href];p||(p={},y[h.href]=p),await E.addStyleTag({content:"*, *::before, *::after { animation-name: none!important; transition-duration: 0s !important; }"});const C=s??[{states:[]}];let l=null,g;try{for(let S=0;S<C.length;S++){const w=C[S],P=w.states.length>0?x+":"+w.states.join(":"):x;let O=null;if(w.states.length>0){l||(l=await ce(E));const b=performance.now();await De(l,w.states),O=performance.now()-b}w.delay&&await v.delay(w.delay);const k=performance.now(),T=await E.evaluate(oe,{filters:f||a,defaultStyle:m,shouldEqualResult:p[P]}),A=performance.now()-k;if(console.log(`SNAPSHOT ${P}:`+(O!=null?` forcePseudoClasses ${O.toFixed(0)}ms,`:"")+` getAllElements ${A.toFixed(0)}ms`),!g)g=T,p[P]=T;else{const b=le(g,T);b&&(p[P]=b)}}}finally{l&&await ie(l)}},async end({checkExistUrlsOnly:E}){if(u=r.getNormalizedObject(u),n&&(u=G(u,null,null,n)),c){let d,h;if(!E)d=c,h=u;else{d={},h={};for(const f in c)if(Object.prototype.hasOwnProperty.call(c,f)&&Object.prototype.hasOwnProperty.call(u,f)){d[f]={},h[f]={};for(const y in c[f])Object.prototype.hasOwnProperty.call(c[f],y)&&Object.prototype.hasOwnProperty.call(u[f],y)&&(d[f][y]=c[f][y],h[f][y]=u[f][y])}}const x=J(d,h,(f,y,p)=>p.selector&&(delete p.selector,Object.keys(p).length===0)?null:p.childs&&p.childs.length===1?p.childs[0]:(y&&y.selector?p[ee]?p[ee]=y.selector:p={selector:y.selector,...p}:f&&f.selector&&(p[Z]?p[Z]=f.selector:p={selector:f.selector,...p}),p));if(o&&await X(o,x||{}),x)throw await X(e,u),console.error("Pages elements changes: "+JSON.stringify(x,null,4).substring(0,5e3)),new Error("Pages elements changes detected");await L.promises.stat(e).catch(()=>null)&&await L.promises.unlink(e)}else await X(t,u);return u}}}exports.CheckError=r.CheckError;exports.ConsoleMessageLevel=r.ConsoleMessageLevel;exports.Lazy=r.Lazy;exports.LazyWithId=r.LazyWithId;exports.LogLevel=r.LogLevel;exports.MAX_REPORT_ITEMS_DEFAULT=r.MAX_REPORT_ITEMS_DEFAULT;exports.MatchInternalError=r.MatchInternalError;exports.Matcher=r.Matcher;exports.MatcherAny=r.MatcherAny;exports.MatcherArray=r.MatcherArray;exports.MatcherArrayItem=r.MatcherArrayItem;exports.MatcherConvert=r.MatcherConvert;exports.MatcherCustom=r.MatcherCustom;exports.MatcherFew=r.MatcherFew;exports.MatcherIn=r.MatcherIn;exports.MatcherInstanceOf=r.MatcherInstanceOf;exports.MatcherIs=r.MatcherIs;exports.MatcherNever=r.MatcherNever;exports.MatcherNot=r.MatcherNot;exports.MatcherNumber=r.MatcherNumber;exports.MatcherObject=r.MatcherObject;exports.MatcherObjectEntry=r.MatcherObjectEntry;exports.MatcherRef=r.MatcherRef;exports.MatcherString=r.MatcherString;exports.Random=r.Random;exports.Subject=r.Subject;exports.SubjectWithId=r.SubjectWithId;exports.UNIQUE_PSEUDO_RANDOM_MAX_COUNT=r.UNIQUE_PSEUDO_RANDOM_MAX_COUNT;exports.alertConsole=r.alertConsole;exports.alertReplace=r.alertReplace;exports.argsToString=r.argsToString;exports.check=r.check;exports.checkFunc=r.checkFunc;exports.consoleIntercept=r.consoleIntercept;exports.consoleMessageToString=r.consoleMessageToString;exports.consoleReplace=r.consoleReplace;exports.convertTimeZone=r.convertTimeZone;exports.createMatchResult=r.createMatchResult;exports.createMatchResultBoolean=r.createMatchResultBoolean;exports.createMatchResultError=r.createMatchResultError;exports.createTaskDelayRetry=r.createTaskDelayRetry;exports.createUniquePseudoRandom=r.createUniquePseudoRandom;exports.dateNowUnique=r.dateNowUnique;exports.deepCloneJsonLike=r.deepCloneJsonLike;exports.deepEqualJsonLike=r.deepEqualJsonLike;exports.deepEqualJsonLikeMap=r.deepEqualJsonLikeMap;exports.equalArray=r.equalArray;exports.escapeHtml=r.escapeHtml;exports.escapeRegExp=r.escapeRegExp;exports.expectedToString=r.expectedToString;exports.filterMatchResult=r.filterMatchResult;exports.filterMatchResultNested=r.filterMatchResultNested;exports.fixStackTrace=r.fixStackTrace;exports.formatAny=r.formatAny;exports.formatDate=r.formatDate;exports.formatDateFileName=r.formatDateFileName;exports.getConsoleMessages=r.getConsoleMessages;exports.getDateInet=r.getDateInet;exports.getNormalizedObject=r.getNormalizedObject;exports.getObjectId=r.getObjectId;exports.getRandomFunc=r.getRandomFunc;exports.getRandomSeed=r.getRandomSeed;exports.getStackTrace=r.getStackTrace;exports.isMatcher=r.isMatcher;exports.isObservable=r.isObservable;exports.match=r.match;exports.matchAnd=r.matchAnd;exports.matchAndPipe=r.matchAndPipe;exports.matchAny=r.matchAny;exports.matchArray=r.matchArray;exports.matchArrayBuffer=r.matchArrayBuffer;exports.matchArrayIncludes=r.matchArrayIncludes;exports.matchArrayItem=r.matchArrayItem;exports.matchArrayLength=r.matchArrayLength;exports.matchArrayWith=r.matchArrayWith;exports.matchBoolean=r.matchBoolean;exports.matchConstructor=r.matchConstructor;exports.matchConvert=r.matchConvert;exports.matchCustom=r.matchCustom;exports.matchDeep=r.matchDeep;exports.matchEnum=r.matchEnum;exports.matchFloat=r.matchFloat;exports.matchIn=r.matchIn;exports.matchInstanceOf=r.matchInstanceOf;exports.matchInt=r.matchInt;exports.matchIntDate=r.matchIntDate;exports.matchIs=r.matchIs;exports.matchIsNonStrict=r.matchIsNonStrict;exports.matchNever=r.matchNever;exports.matchNot=r.matchNot;exports.matchNotNullish=r.matchNotNullish;exports.matchNullish=r.matchNullish;exports.matchNumber=r.matchNumber;exports.matchObject=r.matchObject;exports.matchObjectEntries=r.matchObjectEntries;exports.matchObjectEntry=r.matchObjectEntry;exports.matchObjectKey=r.matchObjectKey;exports.matchObjectKeyValue=r.matchObjectKeyValue;exports.matchObjectKeys=r.matchObjectKeys;exports.matchObjectKeysNotNull=r.matchObjectKeysNotNull;exports.matchObjectPartial=r.matchObjectPartial;exports.matchObjectValue=r.matchObjectValue;exports.matchObjectValues=r.matchObjectValues;exports.matchObjectWith=r.matchObjectWith;exports.matchOptional=r.matchOptional;exports.matchOr=r.matchOr;exports.matchOrPipe=r.matchOrPipe;exports.matchRange=r.matchRange;exports.matchRangeDate=r.matchRangeDate;exports.matchRef=r.matchRef;exports.matchResultNestedToString=r.matchResultNestedToString;exports.matchResultToString=r.matchResultToString;exports.matchString=r.matchString;exports.matchStringLength=r.matchStringLength;exports.matchTypeOf=r.matchTypeOf;exports.matchUuid=r.matchUuid;exports.matchValueState=r.matchValueState;exports.max=r.max;exports.min=r.min;exports.minMax=r.minMax;exports.numberMod=r.numberMod;exports.randomBoolean=r.randomBoolean;exports.randomEnum=r.randomEnum;exports.randomFloat=r.randomFloat;exports.randomIndexWeighted=r.randomIndexWeighted;exports.randomInt=r.randomInt;exports.randomItem=r.randomItem;exports.randomItems=r.randomItems;exports.setFuncName=r.setFuncName;exports.sha256=r.sha256;exports.sha256Buffer=r.sha256Buffer;exports.timeoutAbortController=r.timeoutAbortController;exports.toHex=r.toHex;exports.truncateString=r.truncateString;exports.urlGetBoolean=r.urlGetBoolean;exports.urlGetFloat=r.urlGetFloat;exports.urlGetInt=r.urlGetInt;exports.urlGetParams=r.urlGetParams;exports.urlGetString=r.urlGetString;exports.urlParamToBoolean=r.urlParamToBoolean;exports.urlParamToFloat=r.urlParamToFloat;exports.urlParamToInt=r.urlParamToInt;exports.validateMatchResult=r.validateMatchResult;exports.waitObservable=r.waitObservable;exports.withConsoleReplace=r.withConsoleReplace;exports.withRetry=r.withRetry;exports.withTimeout=r.withTimeout;exports.DIFF_NEW=ee;exports.DIFF_OLD=Z;exports.checkPageHttpErrors=ke;exports.clickAll=Ke;exports.createCDPSession=ce;exports.createMatchPath=Ue;exports.createPagesElementsChangesTest=nt;exports.createTestE2e=je;exports.createTestE2eVariants=Qe;exports.delayOnErrorCall=Pe;exports.delayOnErrorSet=qe;exports.delayOnErrorWait=He;exports.destroyCDPSession=ie;exports.exec=Oe;exports.fileLock=Be;exports.forcePseudoClasses=De;exports.getAllElements=oe;exports.getDrive=de;exports.getElementsStyleDiff=le;exports.getFileId=ye;exports.getObjectsDiff=J;exports.getPageHttpErrors=xe;exports.globGitIgnoreToPicomatch=be;exports.globToRelative=Ee;exports.initPage=Ce;exports.loadGlobs=Je;exports.loadGlobsFromFile=Se;exports.loadJson=Re;exports.nodeBeep=Ge;exports.objectTransform=G;exports.pathNormalize=W;exports.pathResolve=pe;exports.poolFs=te;exports.saveJson=X;exports.setPlaywrightPriorityLow=se;exports.subscribeJsErrors=Te;exports.testPage=Me;exports.useBrowser=Ve;exports.useBrowserContext=Ae;exports.usingCDPSession=Ze;exports.waitPageStable=Ye;exports.walkPathHandleErrorDefault=we;exports.walkPaths=ze;
|